Python Tesseract 3.x多处理怪异行为

Python Tesseract 3.x多处理怪异行为,python,tesseract,gunicorn,python-tesseract,Python,Tesseract,Gunicorn,Python Tesseract,我不确定是我的基础设施做了这些奇怪的事情还是tesseract ocr本身 每当我在单进程环境中使用图像时,tesseract ocr都可以正常工作。但是,当我用gunicorn培养了多个工人,他们都开始做一些ocr读取工作时,tesseract ocr开始读取非常差(不是从性能台钳,而是从精度台钳)。即使在加载完成后,tesseract也不会有相同的精度。我需要重新启动所有工人,以使tesseract再次正常工作 这太奇怪了。可能有人已经过期或听说过这个问题?(注意,下面的信息是基于对pyte

我不确定是我的基础设施做了这些奇怪的事情还是tesseract ocr本身

每当我在单进程环境中使用图像时,tesseract ocr都可以正常工作。但是,当我用gunicorn培养了多个工人,他们都开始做一些ocr读取工作时,tesseract ocr开始读取非常差(不是从性能台钳,而是从精度台钳)。即使在加载完成后,tesseract也不会有相同的精度。我需要重新启动所有工人,以使tesseract再次正常工作

这太奇怪了。可能有人已经过期或听说过这个问题?

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

有几个Python库与
tesseract ocr
接口。您可能正在使用
pytesseract
(通过
image\u to\u string
函数进行猜测)

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

考虑为tesseract使用不同的python接口库:例如,
pip安装tesseract ocr
或来自Google()的
python tesseract

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

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

Tesserocr2.3.1怎么样?我不熟悉Tesserocr2.3.1,但它似乎直接使用C接口连接到库,因此它应该更高效、更安全,不会出现临时文件问题。是
Tesserocr2
您正在使用的,还是您正在考虑的替代方案?(顺便说一句:最好更新这个问题,以指定显示该问题的确切python库,以帮助正在搜索解决方案的其他人)。