字符识别练习(验证码、车牌号、身份证号等)

来源:互联网 发布:黑暗之魂3低配置优化 编辑:程序博客网 时间:2024/04/27 05:36

Last update: 29 JUN, 2012

© 野比 2012

欢迎大家和我讨论相关问题。联系方式:1429013154


注意:目前只是做了简单的字符拆分。其余研究已中断。


源代码下载:点击打开链接


光学图像识别(OCR)是非常有用的技术。在验证码识别、车牌号识别、文字识别方面,基于字符的识别技术算是比较容易上手的了(相比图文识别)。

闲来看到有朋友研究验证码识别,一时手痒,野比自己动手来做做验证码识别。当然,肯定只是简单的验证码。

名为验证码,实际上并不限于,还可以识别车牌号、身份证号、门牌号等各种乱七八糟的内容。

识别的流程很明确:

1、预处理图像

2、做y轴的投影

3、分析直方图分区

4、根据分区拆分图像为多个字符(很关键,拆得越好,后续识别率越高)

5、丢弃空白或无效字符

6、自动旋转字符(如果有倾斜),识别字符

如果样本中个图像有粘连,则可能造成分区不准确。这种情况下,需要进行旋转,但是怎样自动旋转,是个难题。

目前已可拆分出字符,下一步准备研究如何识别。(如果单个字符比较规范,可以利用现成的OCR控件)

这里有一些例子。

普通的验证码(毫无难度)


带干扰的验证码


较高强度干扰(目前使用的分区算法不能解决,需要更好的算法,比如动态阈值)


CSDN的验证码(毫无压力)


身份证号码


车牌号



补充个QQ验证码,用单一阈值方法,识别很困难,需要结合字符宽度进行判断

这是单一阈值分区的结果(没有限制宽度),可以看到效果很差。



继续研究如何优化分区算法,如何识别单个文字(可以考虑多重识别+样本训练)。

© 野比 2012