R、tesseract 和预处理图像中的 OCR 表

Posted

技术标签:

【中文标题】R、tesseract 和预处理图像中的 OCR 表【英文标题】:OCR tables in R, tesseract and pre-pocessing images 【发布时间】:2017-07-17 01:38:37 【问题描述】:

我正在尝试使用 R 中的 tesseract 从旧书中提取表格。这是一个示例:Image

图像质量很差,一开始识别率也很差。然而,我设法通过 gimp 来增加它:重新缩放、灰度、颜色的自动阈值、高斯模糊和/或锐化过滤器。 我还试了一下 Fred 的 imageMagick 脚本 - textcleaner - 并使用 imageMagick 成功去除了黑线。 这就是我在 R 中所做的:

library(tesseract)
library(magick)

img <- image_read('img.png')
img_data <- ocr(img, engine = tesseract('eng', options = list(tessedit_char_whitelist = '0123456789.-',
                                                            tessedit_pageseg_mode = 'auto',
                                                            textord_tabfind_find_tables = '1',
                                                            textord_tablefind_recognize_tables = '1')))
cat(img_data)

鉴于我只想处理数字,我设置了 tessedit_char_whitelist,虽然我得到了更好的结果,但它们仍然不可靠。 在这种情况下你会怎么做?在我尝试训练 tesseract 之前,还有什么其他想法可以提高准确性吗?我从来没有做过 - 更不用说只有数字了。关于如何做的任何想法/经验?我已经检查过了:https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00 但我还是有点困惑。

【问题讨论】:

【参考方案1】:

我参与了一个项目,该项目使用 Tesseract 从视频帧中读取数据字段并从中创建索引电子表格。我发现效果很好的是从每个图像中裁剪每个文本字段(使用 ffmpeg),处理(使用 ImageMagick,使用您提到的类似技术),OCR,然后我有 Python(可以在 R 中完成类似的事情)创建一个OCR 结果的电子表格。这种方法的好处是 Tesseract 只需要处理小的单行文本图像,就我而言,这似乎可以改善结果(使用 -psm 7 选项)。缺点是它的处理非常密集。也许为页面的每一行创建一个图像会有所帮助。

我确实发现为新字体/语言训练 Tesseract 极大地帮助了我的结果。这可能既乏味又耗时,但它显着改善了我的结果,有时从 0% 正确到 100% 正确。 This site 帮助我理解了这个过程。我只是按照他们的步骤,果然奏效了。根据我创建训练图像的经验,裁剪单个字符很有帮助,每个字符至少有十几个来创建一个好的训练样本。并尝试为每个字符设置相似数量的样本;似乎如果您对一个角色进行更多的处理,Tesseract 会更频繁地(错误地)给出该角色。

【讨论】:

以上是关于R、tesseract 和预处理图像中的 OCR 表的主要内容,如果未能解决你的问题,请参考以下文章

python(pillow /tesseract-ocr/pytesseract)安装介绍

Tesseract-OCR编译及ViewerDebugging使用

Tesseract-OCR编译及ViewerDebugging使用

如何使用tesseract ocr仅在图像中提取蓝色文本

对图像执行 OCR 时,Tesseract 返回乱码

使用 OpenCV 为 Tesseract OCR 预处理七段图像