python - Tesseract 3.x 多处理怪异行为

标签 python tesseract gunicorn python-tesseract

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

每当我在单进程环境中使用 image_to_stirng - tesseract-ocr 工作正常。但是当我用 gunicorn 生成多个 worker 并且他们所有人都开始使用 ocr 阅读进行一些工作时 - tesseract-ocr 开始阅读非常差(不是来自性能虎钳,而是来自准确性虎钳)。即使在加载完成后 - tesseract 也永远不会具有相同的准确性。我需要重新启动所有工作人员,以使 tesseract 再次正常工作。

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

最佳答案

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

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

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

考虑为 tesseract 使用不同的 python 接口(interface)库:例如,来自 Google 的 pip install tesseract-ocrpython-tesseract (https://code.google.com/archive/p/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/

相关文章:

django - 无法启动 gunicorn.service : Unit gunicorn. 找不到服务

python-3.x - Django静态文件404使用nginx

python - 如何将文件的输出通过管道传递给 Python 中的变量?

python - 如何在数据框中查找任意位置包含单个字符的句子

android - 获取 Tess-Two 上的单词列表

c++ - Tesseract 与 XCode 一起工作

python - Gunicorn导入错误: No module named app

python - 使用 scikit-learn 进行支持向量机训练

javascript - node.js 如何处理身份验证/用户系统?

c# - 如何使用 Tesseract 提高结果识别?