0

複数の場所から処理する画像を送信できるように、OCR Web サービスをセットアップしようとしています。

私は cgi で何もしたことがないので、mod_wsgi を試す時が来たと言いました。すべてのライブラリとopencvとpytesseractをインストールするのに、2日ほどかかりました。「通常の方法」(新しいpythonウィンドウインタープリターを開始)で実行すると、OCRは正常に機能します。一部のライブラリが正常に動作しているにもかかわらず、mod_wsgi で動作させるのに多くの問題がありました。

私はpytessearchで立ち往生しました。私がそれを実行すると:

tesseract -l myl image.jpe out

すべての作品ファイル。

私がこのようにしても:

import pytessearct
from PIL import Image

pytesseract.image_to_string(Image.open('/var/www/path/image.jpe'), lang='myl')

これも同様に機能します。

mod_wsgi を使用してこれを行うと、httpd ログファイルに次のエラーが記録されます。

mod_wsgi (pid=1836): Exception occurred processing WSGI script '/var/www/path/app.wsgi'.
[Mon May 18 06:28:31 2015] [error] [client IP] Traceback (most recent call last):
[Mon May 18 06:28:31 2015] [error] [client IP]   File "/var/www/path/app.wsgi", line 28, in wsgi_app
[Mon May 18 06:28:31 2015] [error] [client IP]     output = check_text('a.jpe')
[Mon May 18 06:28:31 2015] [error] [client IP]   File "/var/www/path/app.wsgi", line 20, in check_text
[Mon May 18 06:28:31 2015] [error] [client IP]     return pytesseract.image_to_string(Image.open('/var/www/path/a.jpe'), lang='myl')
[Mon May 18 06:28:31 2015] [error] [client IP]   File "/usr/local/lib/python2.7/site-packages/pytesseract/pytesseract.py", line 161, in image_to_string
[Mon May 18 06:28:31 2015] [error] [client IP]     boxes=boxes,
[Mon May 18 06:28:31 2015] [error] [client IP]   File "/usr/local/lib/python2.7/site-packages/pytesseract/pytesseract.py", line 94, in run_tesseract
[Mon May 18 06:28:31 2015] [error] [client IP]     stderr=subprocess.PIPE)
[Mon May 18 06:28:31 2015] [error] [client IP]   File "/usr/local/lib/python2.7/subprocess.py", line 710, in __init__
[Mon May 18 06:28:31 2015] [error] [client IP]     errread, errwrite)
[Mon May 18 06:28:31 2015] [error] [client IP]   File "/usr/local/lib/python2.7/subprocess.py", line 1335, in _execute_child
[Mon May 18 06:28:31 2015] [error] [client IP]     raise child_exception
[Mon May 18 06:28:31 2015] [error] [client IP] OSError: [Errno 2] No such file or directory

ここに私のapp.wsgiファイルがあります:

#!/usr/local/bin python2.7
#-*- coding: utf-8 -*-

import os
import sys
from subprocess import check_output



sys.path.append('/var/www/path')

import pytesseract
from PIL import Image

def check_text(image_path):
#   return check_output(['pytesseract', '-l', 'myl', '/var/www/path/a.jpe'])
        return pytesseract.image_to_string(Image.open('/var/www/path/a.jpe'), lang='myl')


def wsgi_app(environ, start_response):
        output = sys.version.encode('utf-8')
        status = '200 OK'
        headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
        output = check_text('a.jpe')
        start_response(status, headers)
        return os.getcwd()
        return output

# mod_wsgi need the *application* variable to serve our small app
application = wsgi_app

ソースでわかるように、サブプロセスからの check_output を使用して、新しい pytesseract プロセスを自分で開始しようとしましたが、同じエラーが発生します。

ソースから tesseract と mod_wsgi をビルドしました。しかし、これもまた mod_wsgi と何か関係があると確信しています。なぜなら、私が Python で通常どおり実行すると機能するからです。

更新: mod_wsgi と opencv で同様の「奇妙な」問題が発生しました。質問と回答はここにあります: mod_wsgi django アプリから numpy をインポートするときの ctypes エラー

任意の提案をいただければ幸いです。

4

1 に答える 1

1

それを解決するために/usr/local/lib/python2.7/site-packages/pytesseract/pytesseract.py、行tesseract_cmd = 'tesseract'を次のように変更しましたtesseract_cmd = '/usr/local/bin/tesseract'.

于 2015-05-18T17:50:56.950 に答える