0.背景和目的
因为需要将字符串识别作为常用工具之一,所以最近花精力好好折腾了一下。
当然,有些人只想用现有的工具。那么建议参考:
https://tesseract-ocr.github.io/tessdoc/User-Projects-%E2%80%93-3rdParty.html
如需要自己做,首先对于opencv的常用功能要了解,最好根据一本书或者课程过一遍习题。
我是从opencv4.0.1+VS2015开始的。较为不解很多人停留在opencv3的原因。
我比较喜欢用新版本,原因很简单,新版本有更多功能,并且更稳定。
以下过程根据记忆所写,会有遗漏错误,如发现,请告知。
强烈建议先通读一遍,再自己尝试。
1.学习理解
大家可以从很多地方去学习字符串识别的原理。
可参考的很多,比如:EasyPR
大家可以从源码调试的过程中加深理解,也能不断尝试新的想法。
2.尝试
根据理解自己用VS2015编写了两个程序,也是常见步骤。
mnist:一个从mnist读取、识别和测试,并保存训练后的xml文件。
mnistReader:一个从摄像头获取图片并实时显示对话框上;用定时器获取帧,然后通检测出来字符图像,再一一识别。
结果发现了在用mnist的原库进行测试时,可以达到错误率1.4%。
但是自己的手写识别效果非常差,错误率60%以上。
后来不用灰度级而用单色来训练和识别才能有所提高,当然还有一些其他改进。
经过很多尝试后才达到了错误率20%。
3.了解opencv+text+tesseract
在不断尝试中,也包括了库版本升级和算法调整。
过程中发现opencv的contrib库中有个text目录,里面打包好了字符串识别的两个部分。
而其中的识别部分实际是通过tesseract来完成的。
所以我按照opencv的要求,先下载安装了执行版本的tesseract。