因爱智能

OCR学习及tesseract的一些测试

最近接触OCR,先收集一些资料,包括成熟软件、SDK、流行算法。


1. 一个对现有OCR软件及SDK的总结,比较全面,包括支持平台、编程语言、支持字体语言、输出格式、相关链接等

http://en.wikipedia.org/wiki/List_of_optical_character_recognition_software

以此为索引,比较、选择你想要的OCR SDK。


2. 另外一个OCR SDK 网站链接,商用,号称high performance,未深入了解,链接如下:

http://asprise.com/home/


3. 一个大学UCI 给出的handwriting数字的 training及testing数据:

http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits

其每个数字近550个样本,出自43个人,30个人的用于training,13个人的用testing。其网站上有详细介绍。

4. 一个哥们对开源的OCR 库的总结:

http://blog.csdn.net/yzm888/article/details/5352423


5. 网上有很多OCR的online service,这里给出一个:

http://www.free-ocr.com/

是以tesseract为OCR引擎。


----------------------------------------------------------------------------------------------------

OCR常用算法:

OCR重要的是识别率,专家说达到90%以上才有意义。

OCR重要的两点:特征提取与匹配能力。

特征提取与图像处理算法的好坏密切相关。


匹配算法:

1. 模板匹配

包括多模板匹配、关键点模板匹配

2. 人工神经网络训练


3. 结构化分析、特征统计



---------------------------------------------------------------------------------------------------

tesseract是google开源的OCR,很流行。

这里记录下其应用方法及原理。


单个字符tesseract 测试:

命令行: tesseract  input.jpg out  -psm  10

输入图像应该遵守一定的规则,这样才能提高识别率:


其结果是M,错的结果。

而对


其结果是H,正确。

两个图片的区别就在于宽度不同,一个大小是(29,55),另外一个是(55,55),原以为图片是需要归一化,或宽高相等。后查看tesseract FAQ,提到改善结果的要素:


please check  DPI of your image and size of text
try to set different segmentation mode (-psm option for command line) if you try to OCR small part of text (line, text)
try to add border (see  issue 398)
try to pre-process image (increase DPI, resize, blur/sharpen image) before OCR (see  issue 191)
try to remove noise dewarp (so there are straight text lines) image and binarize image
这里是第三点add border,使结果改善。

经批量测试,确是如此。


其他,设置识别白名单,如只识别数字,或大写字母,可以大大提高识别率

将tessedit_char_whitelist 0123456789 放在config/digits中,数字可被替换。

测试200多个单个字符(200张图片),识别率达到90%,字符为黑体印刷体。


目前测试中增加字体宽度,对识别率,无明显影响。


为进一步提高识别率,对错误识别的字符再次进行训练学习:

评论

热度(1)