вызов локального python файла в flask сервисе - PullRequest
2 голосов
/ 13 июля 2020

У меня есть два кода python, первый - это flask python код (main.py), который собирает изображение от пользователя и сохраняет его в моем локальном каталоге, а второй - tesseract-ocr (ocrDetection.py) python код, в котором изображение начинает обнаруживать текст в нем.

Теперь я хотел интегрировать эти два кода, импортировав код ocr в flask [import ocrDetection в main.py]

import os
#import magic
import urllib.request
from app import app
from flask import Flask, flash, request, redirect, render_template
from werkzeug.utils import secure_filename


ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg'])

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
    
@app.route('/')
def upload_form():
    return render_template('upload.html')

@app.route('/', methods=['POST'])
def upload_file():
    if request.method == 'POST':
        # check if the post request has the files part
        if 'files[]' not in request.files:
            flash('No file part')
            return redirect(request.url)
        files = request.files.getlist('files[]')
        for file in files:
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
                                
        flash('File(s) successfully uploaded')
        return redirect('/')

@app.route('/')
def usemain():
        if request.method == 'POST':
                import ocrDetection
                ocrDetection.mask()
                
if __name__ == "__main__":
    app.run(host='192.168.106.51')
    

это не работает должным образом, если я даю свою программу OCR после __name__=="__main__" вот так

if __name__ == "__main__":
    app.run(host='192.168.106.51')
    import ocrDetection

она работает только тогда, когда я выхожу с сервера (ctrl + c), но Я хочу запустить программу распознавания текста одновременно, нажав кнопку submit

1 Ответ

2 голосов
/ 13 июля 2020

Это не сработает, потому что у вас есть два одинаковых маршрута ('/'), которые создают конфликт. Я предлагаю вам создать новый маршрут для OCR, например '/ ocr_detection', или создать ocr_detection () как модуль в отдельном файле.

Чтобы вызвать модуль OCR, вы, возможно, можете использовать его как конечную точку API, если хотите для вызова из клиента, такого как браузер, или в качестве модуля, чтобы просто вызвать его из вашего бэкэнда (из представлений).

Если вы вызываете его из модуля upload_file (), тогда это будет последовательный вызов и ваш браузер должен дождаться завершения распознавания текста. Но чтобы избежать этого, вы можете запустить сценарий periodi c, который отслеживает UPLOAD_DIR на предмет новых файлов и распознает их. Таким образом, ваш пользовательский опыт просмотра также будет намного лучше.

....

@app.route('/', methods=['POST'])
def upload_file():
    if request.method == 'POST':
        # check if the post request has the files part
        if 'files[]' not in request.files:
            flash('No file part')
            return redirect(request.url)
        files = request.files.getlist('files[]')
        for file in files:
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
                ocr_detection(filename)
                                
        flash('File(s) successfully uploaded')
        return redirect('/')


def ocr_detection(file):
        import ocrDetection
        ocrDetection.mask()
                
if __name__ == "__main__":
    app.run(host='192.168.106.51')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...