使用Tesseract进行蛋标记识别的图像预处理

8
目标是创建一个可以识别蛋印记的应用程序,例如0-DE-134461。我尝试了TesseractGoogle Vision API OCR引擎对以下图像进行识别。两种OCR引擎的结果都很糟糕。 German Egg Spanish Egg 0-DE-46042
Tesseract → ""
Google Vision API → " 2 "

3-ES08234-25591

Tesseract → ""
Google Vision API → " Es1234-2SS ) R SHAH That is part "

裁剪

我使用Photoshop手动裁剪了这些图片。

德国鸡蛋-裁剪 西班牙鸡蛋-裁剪

0-DE-46042

Tesseract → ""
Google Vision API → ""

3-ES08234-25591

Tesseract → "3ΓÇöE503ΓÇÿ234-gg"
Google Vision API → " -ESOT23-2559 ) "

阈值化

我使用Photoshop手动选择了两个鸡蛋上的文本并去除了背景。

德国鸡蛋-阈值化 西班牙鸡蛋-阈值化

0-DE-46042

Tesseract → "OΓÇöDEΓÇö46042"
Google Vision API → " O-DE-46042 "

3-ES08234-25591

Tesseract → ""
Google Vision API → " 3-ESO8234-9 "

如何消除圆形变形?

我认为最后的预处理步骤应该是消除圆形变形,但我不知道如何在Photoshop中手动完成,更不用说自动化了。


我的问题

  • 我是否朝着正确的方向前进?
  • 我的预处理步骤是否正确?
  • 如何在OpenCV中自动化这些步骤?

额外信息

我用来获取tesseract OCR结果的命令:

λ tesseract {egg_picture}.jpg --psm 7 stdout

四维超立方体版本:

λ tesseract --version
tesseract 4.0.0-alpha.20170804
 leptonica-1.74.4
  libgif 4.1.6(?) : libjpeg 8d (libjpeg-turbo 1.5.0) : libpng 1.6.20 : libtiff 4.0.6 : zlib 1.2.8 : libwebp 0.4.3 : libopenjp2 2.1.

平台:Windows 10


编辑1

我在一些鸡蛋标记图像上应用了OpenCV的自适应阈值处理。目前为止,这是结果:

IMG A (edit 1) IMG C (edit 1) IMG B (edit 1) IMG H (edit 1) IMG D (edit 1) IMG E (edit 1) IMG G (edit 1) IMG I (edit 1)

然而,还有很多噪音。我正在努力调整参数,使其在不同图像中都能良好地工作。



是的,我认为你需要纠正循环变形。对于颜色阈值处理,我建议尝试使用HSV颜色空间,但不确定红色(字体)和橙色(鸡蛋)是否足够远...... - Micka
为了纠正圆形包裹,您可以应用单应性。您只需要将位于曲线上的点映射到与左上角点平行的线上(对于上表面,类似地,您也可以这样做)。现在从二进制图像中检测位于曲面上的点不应该是一个困难的任务。 - Optimus 1072
1
https://developers.googleblog.com/2017/09/how-machine-learning-with-tensorflow.html - rmtheis
1个回答

2
我有一个建议。
我尝试对BGR颜色空间中的所有三个通道应用本地直方图均衡化,然后合并它们。
结果:

enter image description here

enter image description here

随着图像中的细节更加突出,您可以考虑对这些图像进行预处理。
我也尝试了分别对三个通道全局均衡化的方法。尽管图像比原始图像更清晰,但缺乏细节深度。

感谢提供RGB通道直方图均衡化技巧。Eggcode确实更加突出。但是,我一直无法成功地将文本二值化。有什么想法吗? - Tomasito665
我还没有尝试过任何东西。尝试使用不同的内核大小执行高斯差分或自适应阈值处理。 - Jeru Luke
我尝试了自适应阈值处理,但是有很多二进制噪声。我已经在问题上添加了图像结果。 - Tomasito665

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接