Tesseract OCR库 – 学习字体

好吧,我正在使用这个OCR的编译.NET版本,可以在@ http://www.pixel-technology.com/freeware/tessnet2/找到

我有它工作,但是这个目的是翻译车牌,遗憾的是引擎真的不能准确翻译一些字母,例如这里是我扫描的图像来确定字符问题

在此处输入图像描述

结果:

12345B7B9U ABCDEFGHIJKLMNUPIJRSTUVHXYZ

因此,以下字符被错误地翻译:

1,O,Q,W

这似乎并不太糟糕,但是在我的车牌上,结果并不是那么好:

在此处输入图像描述 = H4 ODM

在此处输入图像描述 = LDH IFW

假试验

在此处输入图像描述 = NR4 y2k

你可能会说,我已经尝试过降噪,提高对比度,并删除不是绝对​​黑色的像素,没有真正的改进。

显然你可以“学习”引擎新的字体,但我想我需要重新编译.NET的库,似乎这是在我没有的Linux操作系统上执行的。

所以我不知道接下来会尝试什么,我已经编写了一个快速的控制台应用程序,纯粹是为了测试目的,如果有人想尝试它。 如果有人有任何想法/图形处理/图书馆的想法,我很感激听到他们。

我最近通过Tessnet2使用了Tesseract(如果我记得很清楚的话,Tessnet2是由RémyThomas制作的Tesseract 2.0的VS2008 C ++包装器)。 让我试着帮助你掌握关于这个工具的一点知识:

  • 首先,正如我上面所说,这个包装器仅适用于Tesseract 2.0,而Google Code上最新的Tesseract版本为3.00(代码不再托管在Source Forge上)。 有定期贡献者:我看到3.01左右的版本计划。 因此,您不会受益于最后的增强function,包括页面布局分析,这可能有助于您的车牌不是100%水平。

  • 我向Rémy询问了版本3的Tessnet2 .NET包装器,他现在还没有计划。 就像我一样,你必须自己做!

  • 因此,如果您想获得最新版本的源代码,可以从Subversion存储库( 专用网站页面上描述的所有内容)下载它们,如果您有Visual Studio 2008,您将能够编译它们,因为它们包含来源vs2008子文件夹中的VS2008解决方案。 该解决方案由VS2008 C ++项目组成,因此为了能够在C#中获得结果,您必须使用.NET P / Invoke和项目构建的tessDll 。 再次,如果你需要这个,我有你可能感兴趣的代码示例,但你可能想继续使用C ++并做自己的新WinForm项目,例如!

  • 当你完成编译时(不应该有重大问题,但告诉我,如果你遇到一些,我可能也遇到过它们:-)),你将输出几个二进制文件,这将允许你做一个具体培训! 同样,有一个专门针对Tesseract 3培训的页面 。 通过此培训,您可以:

    • 限制你的字符集,这将自动删除标点符号(例如’/ – \’而不是’A’)

    • 表示你已经检测到的含糊不清(你可以看到’D’而不是’O’,’B’而不是’8’等),当你使用训练时会考虑到这些含糊之处。

  • 我还看到,如果你将图像限制在字母所在的区域(即没有脸,周围没有风景),Tesseract结果会更好:在我的情况下,我只需要识别从网络摄像头拍摄的特定卡片区域照片,所以我用图像处理来约束区域。 当然,这很长,但我的图像来自许多不同的来源,所以我别无选择。 如果你能将图像限制在最低限度,那就太棒了!

我希望它有任何帮助,不要犹豫,给我你的评论和问题!

嗨我用tesseract做了很多ocr,我也有一些问题。 你问一下图像处理工具,我建议“unpaper” (也有windows端口,请参阅谷歌)这是一个很好的去偏,无旋转,删除边框和噪声等等程序。 非常适合在ocr’ing之前跑步。

如果你的图像上有一些(有些)可变的背景颜色,我会推荐使用“textcleaner”imagemagick脚本,我认为它可以检测并清除所有非锋利的东西。

如果你有复杂的文字,那么“ocropus”可能是有用的。 语法是(在linux上):“ocroscript rec-tess”

我的设置是1. textcleaner 2. unpaper 3. ocroups

通过这三个步骤,我几乎可以阅读任何内容。 即使是在不均匀照明下拍摄的相当模糊+嘈杂的图像,两列紧凑的文字也非常易读。 好吧,也许你的需求不是那么多文字,但步骤1)和2)可能对你有用。

我正在为ispy构建一个车牌识别引擎 – 当我将牌照分成单个字符并构建一个垂直显示的新图像时,我得到了更好的tesseract结果,周围有白色空间,如:

w ^

4

Ø

Ø

中号

我认为tesseract的一个大问题是它试图用水平字母和数字来表达单词,而在字母和数字混合的车牌的情况下,它将决定一个数字是一个字母,反之亦然。 输入垂直间隔的字符的图像使其将它们视为单个字符而不是文本。

很棒的阅读! http://robotics.usc.edu/publications/downloads/pub/635/

关于车牌的倾斜问题:

问题:当OCR输入来自手持式相机或其他成像设备,其视角不像扫描仪那样固定时,文本线可能会偏离其原始方向[13]。 根据我们的实验,将这种旋转的图像输入我们的OCR引擎会产生极差的结果。 建议的方法:在调用识别引擎之前需要进行偏斜检测过程。 如果检测到任何歪斜,则执行自动旋转过程以在进一步处理文本之前校正歪斜。 在确定用于偏斜检测的算法时,我们发现许多方法,例如[13]中提到的方法,都基于文档具有边缘的假设。 但是,这种假设并不总是适用于我们的应用程序。 此外,基于形态学操作和投影方法的传统方法非常慢并且在存在相机捕获图像时往往会失败。 在这项工作中,我们选择了一种基于Branchand-Bound文本行搜索算法(RAST算法)[25]的更强大的方法,用于偏斜检测和自动旋转。 该算法的基本思想是独立识别每条线,并使用最佳得分线的斜率作为整个文本段的倾斜角。 在检测到倾斜角度之后,相应地执行旋转。 根据我们的实验,我们发现这种算法非常强大,非常高效和快速。 然而,它没有检测到旋转大于30的意义上受到一个小的限制。我们还尝试了另一种方法,它可以检测到任何倾斜角度达到90.但是,这种方法是基于某种存在的在图像上的十字架。 由于缺乏可扩展性,我们决定坚持使用RAST算法。

默认情况下,Tesseract 3.0x会惩罚非单词且不是常用单词的组合。 FAQ描述了一种增加对这种无意义的厌恶的方法。 您可能会发现关闭罕见或不存在的单词的惩罚很有帮助,如下所述(反向): http : //code.google.com/p/tesseract-ocr/wiki/FAQ#How_to_increase_the_trust_in/strength_of_the_dictionary ?

ABCocr .NET使用Tesseract3,因此如果您需要.NET下的最新代码,这可能是合适的。

如果未来有人遇到这个问题,那么有一个名为jTessBoxEditor的工具可以让Tesseract教学变得轻而易举。 您所做的只是将其指向包含示例图像的文件夹,然后单击一个按钮,它会为您创建* .learneddata文件。