Tesseract OCR 在 Cloud Run 实例中给出了一个奇怪的输出,而本地输出是正确的

问题描述 投票:0回答:1

我们有一个在谷歌云平台上运行的管道:

  1. 从文本文档图像中提取作物
  2. 处理这些作物以确保它们始终是白底黑字
  3. 将 crops 传递给 pytesseract 以提取文本。

大多数时候,一切正常,提取的文本是正确的,除了一些作物。

一个例子是格式中的多行裁剪,经常输出错误,例如:

35LURC194-     -> output as SSLUBe404-
6                           6      

(这是一个稍微修改过的问题实例,但你明白了要点)

现在,事情变得奇怪了。

作为我们调试过程的一部分,我们在本地运行相同的代码,并且对于 OCR 文本在生产(云)上出现错误的每个实例,它在本地机器上都能准确运行

本地环境和云环境的区别是:

本地
操作系统 Arch Linux Debian Slim Buster Docker 镜像
Python版本 3.10.10 3.8.6
内存 8GB 3GB
环境 本地人 Docker 容器(云运行)

到目前为止我们尝试过的事情:

  • 确保重要包(pytesseract、torch、torchvision、Tesseract)的版本在本地和生产上相同
  • 为 Cloud Run 实例添加了更多 RAM 和 CPU
  • 将容器Dockerfile中的Python版本升级到3.10.10
  • 确保传递给 Tesseract 的裁剪图像在两种情况下都是相同的(相同的纵横比,看起来相同)
  • 三重检查本地运行的代码与在云端运行的代码相同
  • 在两种情况下使用不同的 OEM 设置和正确的 PSM(多行)运行 Tesseract

我们对可能导致这种情况的原因已经用尽了所有想法,这真的令人费解。在两种情况下,直到 tesseract 处理步骤之前的所有内容都是相同的,因此问题必须与 Tesseract 本身或环境有关,但是,除了操作系统本身之外,一切都是相同的。

很想听听关于我们还可以尝试什么的任何想法,或者其他人是否有类似的经历。

docker ocr tesseract google-cloud-run python-tesseract
1个回答
0
投票

所以最后确实是版本问题,跟语言数据文件的版本有关

这个答案为我解决了这个问题,我基本上用

wget
下载了语言数据文件,将它们复制到Dockerfile中到
/usr/share/tesseract-ocr/4.00/tessdata
(目录可以根据您的操作系统而有所不同)并且它就像一个魅力。

仍然奇怪的是,通常安装提供这种语言文件的软件包应该足够了(例如 Debian 上的

apt install tesseract-ocr-eng
)但在我的情况下,这些提供的版本没有给我正确的输出。

注意:帮助我找到解决方案的一个重要步骤实际上是在本地运行容器(通常它在 GCP 上的 Cloud Run 中运行),这允许更快的调试和实验。

© www.soinside.com 2019 - 2024. All rights reserved.