docker Tesseract OCR在Cloud Run示例中给出奇怪的输出,而本地输出是正确的

3hvapo4f  于 2023-04-11  发布在  Docker
关注(0)|答案(1)|浏览(106)

我们在Google Cloud Platform中运行了一个管道:
1.从文本文档图像中提取裁剪
1.处理这些裁剪以确保它们始终是白色黑字
1.将crop传递给pytesseract以提取文本。
大多数时候,一切都运行良好,提取的文本是正确的,除了一些作物。
一个示例是格式中的多行裁剪,其经常被错误地输出,例如:

35LURC194-     -> output as SSLUBe404-
6                           6

(this是一个稍微修改过的问题的例子,但你得到的要点)

现在事情变得很奇怪

作为调试过程的一部分,我们在本地运行了相同的代码,并且,对于生产(云)上OCR文本出错的每个示例,它在本地机器上都能准确工作
本地环境和云环境的区别在于:
| | 当地|云|
| --------------|--------------|--------------|
| 操作系统|Arch Linux|Debian Slim Buster Docker镜像|
| Python版本|3.10.10|3.8.6|
| 随机存取存储器|8 GB|3 GB|
| 环境|本土|Docker容器(Cloud Run)|
到目前为止我们尝试过的事情:

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

我们已经不知道是什么原因导致了这个问题,这真的很令人困惑。在两种情况下,直到Tesseract处理步骤之前的所有事情都是一样的,所以这个问题必须与Tesseract本身或环境有关,但是,除了操作系统本身之外,一切都是一样的。
很想听听我们还能尝试什么,或者其他人是否有类似的经历。

58wvjzkj

58wvjzkj1#

所以最后这确实是一个版本问题,与语言数据文件的版本有关。
This answer为我解决了这个问题,我基本上用wget下载了语言数据文件,将它们复制到Dockerfile中的/usr/share/tesseract-ocr/4.00/tessdata(目录可能因操作系统而异),它工作起来很有魅力。
奇怪的是,通常安装提供这种语言文件的软件包应该足够了(例如Debian上的apt install tesseract-ocr-eng),但在我的情况下,这些提供的版本没有给我正确的输出。
注意:帮助我找到解决方案的一个重要步骤是实际上在本地运行容器(通常它在GCP上的Cloud Run中运行),这允许更快的调试和实验。

相关问题