OCR学习及tesseract的一些测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,未深入了解,链接如下:
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,这里给出一个:
是以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%,字符为黑体印刷体。
目前测试中增加字体宽度,对识别率,无明显影响。
为进一步提高识别率,对错误识别的字符再次进行训练学习
以上是关于OCR学习及tesseract的一些测试的主要内容,如果未能解决你的问题,请参考以下文章
Tess-Two(Android 中的 Tesseract OCR)显示非常不准确的结果
使用 Tesseract 的 Android OCR 应用程序