我不确定是这是我的基础设施还是tesseract-ocr本身。
每当我在单进程环境中使用image_to_stirng时,tesseract-ocr都可以正常工作。但是,当我用金枪鱼催生多个 worker 并且他们所有人都开始进行ocr读取时,tesseract-ocr的读取效果很差(不是从性能角度而是从准确性角度)。即使完成加载-tesseract也永远不会具有相同的精度。我需要重新启动所有工作人员,才能使tesseract再次正常工作。
这太奇怪了。也许有人听说过这个问题?
最佳答案
(请注意,以下信息基于对pytesseract.py代码的审查,我尚未尝试设置要检查的多进程测试)
有几个与tesseract-ocr
接口(interface)的Python库。您可能正在使用pytesseract
(通过image_to_string
函数进行猜测)。
该库将tesseract-ocr二进制文件作为子过程调用,并使用临时文件与其接口(interface)。它使用的过时的tempfile.mktemp()
不能保证唯一的文件名-而且,它甚至不按原样使用返回的文件名,因此第二次调用tempfile.mktemp()
可以轻松地返回相同的文件名。
考虑为tesseract使用不同的python接口(interface)库:例如,来自Google(https://code.google.com/archive/p/python-tesseract/)的pip install tesseract-ocr
或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
关于python - Tesseract 3.x多处理奇怪的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52046331/