Tesseract 3.x多处理奇怪的行为

时间:2018-08-27 20:10:18

标签: python tesseract gunicorn python-tesseract

我不确定是这是我的基础设施还是tesseract-ocr本身。

每当我在单进程环境中使用image_to_stirng时-tesseract-ocr都能正常工作。但是,当我用金枪鱼催生多个工人并且他们所有人都开始进行ocr读取时,tesseract-ocr的读取效果很差(不是从性能角度而是从准确性角度)。即使加载完成后,tesseract也不会有相同的精度。我需要重新启动所有工作人员,才能使tesseract再次正常工作。

这太奇怪了。也许有人听说过这个问题?

1 个答案:

答案 0 :(得分:2)

(注意,以下信息基于对pytesseract.py代码的审查,我没有尝试设置要检查的多进程测试)

有几个与tesseract-ocr接口的Python库。您可能正在使用pytesseract(通过image_to_string函数进行猜测)。

该库将tesseract-ocr二进制文件作为子进程调用,并使用临时文件与其连接。它使用过时的 tempfile.mktemp()不能保证唯一的文件名-而且,它甚至不按原样使用返回的文件名,因此可以再次调用tempfile.mktemp()轻松返回相同的文件名。

考虑对tesseract使用不同的python接口库:例如Google(https://code.google.com/archive/p/python-tesseract/)的pip install tesseract-ocrpython-tesseract

(如果我怀疑问题实际上是临时文件,则可以通过为每个生成的工作进程设置不同的临时目录来解决此问题:

td = tempfile.mkdtemp()
tempfile.tempdir = td
try:
    # your-code-calling pytesseract.image_to_string() or similar
finally:
    os.rmdir(td)
    tempfile.tempdir = None