「继续玩」字符识别练习 分拆字符(验证码、车牌号、身份证号等)

Conmajia 2012-06-10 05:11:55
加精
© 野比 2012

注意:这不是完成品。

参考这篇论文,写得很好,我这个基本属于复刻版。

http://www.digitaltrends.com/web/stanford-researchers-crack-captcha-codes/

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

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

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

识别的流程很明确:

1、预处理图像

2、做y轴的投影

3、分析直方图分区

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

5、丢弃空白或无效字符

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

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

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

这里有一些例子。

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


带干扰的验证码



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



CSDN的验证码(毫无压力)



身份证号码



车牌号



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

脑容量不够啊!求指导!
...全文
5231 97 打赏 收藏 转发到动态 举报
写回复
用AI写文章
97 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijingmei1988 2013-12-02
  • 打赏
  • 举报
回复
楼主 能分享一下字符特征识别的算法吗
lijingmei1988 2013-12-02
  • 打赏
  • 举报
回复
可以附上源代码吗 谢谢啦
zjuzcc 2013-04-22
  • 打赏
  • 举报
回复
楼主,你好,我想请问下你分割那一步是用了什么方法
gilser 2013-02-20
  • 打赏
  • 举报
回复
程序下载了,但是“阈值”部分处理不是很理解。能简单说明下“阈值”的概念吗?
「已注销」 2012-08-28
  • 打赏
  • 举报
回复
我需得图中的字。始终不行
  • 打赏
  • 举报
回复
学习来了,保存备用。
  • 打赏
  • 举报
回复
越来越佩服野比了!不知道这是不是图论方面的知识?
ououpp 2012-06-18
  • 打赏
  • 举报
回复
看完楼主的帖子,我的心情竟是久久不能平静。正如老子所云:大音希声,大象无形。我现在终于明白我缺乏的是什么了,正是楼主那种对真理的执着追求和楼主那种对理想的艰苦实践所产生的厚重感。面对楼主的帖子,我震惊得几乎不能动弹了,楼主那种裂纸欲出的大手笔,竟使我忍不住一次次地翻开楼主的帖子,每看一次,赞赏之情就激长数分,我总在想,是否有神灵活在它灵秀的外表下,以至能使人三月不知肉味,使人有余音绕梁、三日不绝的感受。楼主,你写得实在是太好了。我惟一能做的,就只有把这个帖子顶上去这件事了。
koko0123 2012-06-18
  • 打赏
  • 举报
回复
我以前写的那个针对颜色单一的还勉强,
变化的颜色,字体的粗细不一致,位置 变幻,还有杂色等 完全处理不了,
各种灰度,滤波效果都不好~~
不知道这个在么处理~~~
一蜉蝣 2012-06-18
  • 打赏
  • 举报
回复
都是牛人啊啊 看不懂 将来可怎么找工作啊
xiying12571 2012-06-18
  • 打赏
  • 举报
回复
向你学习!!!!
xiying12571 2012-06-18
  • 打赏
  • 举报
回复
虽然不懂 但感觉很厉害
jdc71264 2012-06-18
  • 打赏
  • 举报
回复
[Quote=引用 100 楼 的回复:]
我需得图中的字。始终不行
[/Quote]
大话2=。=
早恋 2012-06-17
  • 打赏
  • 举报
回复
我操真的不服不行,今天开了个眼界
Conmajia 2012-06-15
  • 打赏
  • 举报
回复
[Quote=引用 95 楼 的回复:]
一、图像先进行灰度处理(也可以不进行)
二、图像二值化
三、中值滤波
四、直方图
五、根据直方图零界点开始对图像分割
六、求出每个字符特征值
七、根据特征库进行字符识别
是不是这样LZ。
只是没做二、三、四步效率不高啊。学到了
[/Quote]
差不多。我在想能不能用较低/高的阈值先把最大近似色块(文字集中区域)拆分出来,再用Otsu或其他方法滤波,然后根据边缘形态切割。没试过,暂时不会。
rstrego 2012-06-15
  • 打赏
  • 举报
回复
一、图像先进行灰度处理(也可以不进行)
二、图像二值化
三、中值滤波
四、直方图
五、根据直方图零界点开始对图像分割
六、求出每个字符特征值
七、根据特征库进行字符识别
是不是这样LZ。
只是没做二、三、四步效率不高啊。学到了
落曦 2012-06-15
  • 打赏
  • 举报
回复
求拜师。。行不行野比
vaioimac 2012-06-15
  • 打赏
  • 举报
回复
感谢楼主@@@
wojiushi3344 2012-06-15
  • 打赏
  • 举报
回复
好像很高深看不懂????
Conmajia 2012-06-15
  • 打赏
  • 举报
回复
[Quote=引用 98 楼 的回复:]
引用 97 楼 的回复:
一、图像先进行灰度处理(也可以不进行)
--------------------
必须进行灰度处理,否则没法二值化

不用吧。二值化可以通过RGB计算

楼主他预处理时就直接二值化了
[/Quote]

其实。。我灰度了的。我的预处理用了7个滤波器。。
加载更多回复(77)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧