繁体   English   中英

与mod_wsgi一起使用时pytesseract错误

[英]pytesseract error when used with mod_wsgi

我正在尝试设置OCR Web服务,以便可以从多个位置发送图像进行处理。

我从来没有对cgi做任何事情,所以我已经说过该尝试mod_wsgi了。 我花了2天时间来安装所有库以及opencv和pytesseract。 如果我以“正常方式”进行操作(启动新的python窗口解释器),我的OCR正常运行。 使某些库与mod_wsgi一起使用时,即使它们正常工作,我也遇到很多麻烦。

我被困在pytessearct。 如果我用以下命令运行它:

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中遇到了类似的“奇怪”问题。 问题和答案可以在这里找到: 偶尔ctypes错误从mod_wsgi django应用程序导入numpy

任何建议将不胜感激。

为了解决这个问题,我在/usr/local/lib/python2.7/site-packages/pytesseract/pytesseract.py中将tesseract_cmd = 'tesseract'行更改为tesseract_cmd = '/usr/local/bin/tesseract'.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM