我们在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本身或环境有关,但是,除了操作系统本身之外,一切都是一样的。
很想听听我们还能尝试什么,或者其他人是否有类似的经历。
1条答案
按热度按时间58wvjzkj1#
所以最后这确实是一个版本问题,与语言数据文件的版本有关。
This answer为我解决了这个问题,我基本上用
wget
下载了语言数据文件,将它们复制到Dockerfile中的/usr/share/tesseract-ocr/4.00/tessdata
(目录可能因操作系统而异),它工作起来很有魅力。奇怪的是,通常安装提供这种语言文件的软件包应该足够了(例如Debian上的
apt install tesseract-ocr-eng
),但在我的情况下,这些提供的版本没有给我正确的输出。注意:帮助我找到解决方案的一个重要步骤是实际上在本地运行容器(通常它在GCP上的Cloud Run中运行),这允许更快的调试和实验。