想识别豆瓣的验证码, 做了一点尝试, 求指导

2015-04-10 14:40:52 +08:00
 awanabe
先讲讲我的想法:
1. 豆瓣验证码都是英文单词类型, 就想用OCR识别. Python上的库有: pytesseract
2. 图片背景太花, 单词颜色都是黑色. 就用图像图 Pillow 讲图片非纯黑 变成白色. 当然给了一点缓冲余地, 用RGBA的颜色, 每个色标正负5之内都算符合.
3. 然后获取只有黑色点阵图像, 会发现噪点很多. 写了一个递归遍历算法 类似于 Flood fill 算法 , 将可以连接在一起的黑色点算出最大面积, 面积小于一个阈值的全部置为白色.
4. 然后通过OCR识别.

代码在 https://github.com/awanabe/douban_captcha_identify

原图:

去掉背景杂色之后:

转换成点阵:

去除噪点:



问题:
1. 发现pytesseract 对于扭曲的字母识别度很低
2. 去背景色, 去噪点太粗暴, 容易把字母弄破. 每次图片识别都要通过调整好几次阈值, 然后用识别出来的单词去对比英文单词库. 有些肯定就无解了.

请问那些地方可以改进来提高准确率
5933 次点击
所在节点    Python
16 条回复
int64ago
2015-04-10 14:55:33 +08:00
前提:分割为当个字母
1、通过长宽比过滤一些
2、通过黑白像素点比值过滤一些
3、?
TangMonk
2015-04-10 14:58:00 +08:00
豆瓣的好像都是单词。。看下这个点能不能入手
hao123yinlong
2015-04-10 15:00:22 +08:00
楼主,降噪、二值化后,针对处理后的图片进行字库训练,识别率可达百分之九十九点九九九。。训练很伤眼睛,自己训练的话请先买几箱眼药水备用
awanabe
2015-04-10 15:02:10 +08:00
@hao123yinlong 就是不会搞图形化的那一套..才想走走别的途径..通过OCR识别..
awanabe
2015-04-10 15:02:52 +08:00
@TangMonk 搜索的时候..看到有人说..豆瓣的验证码可以穷举..不过这个是多大一个的工程...
awanabe
2015-04-10 15:04:16 +08:00
@int64ago 分割成单词字母可能识别率会高一点...这个确实可以验证下
dingyaguang117
2015-04-10 15:06:03 +08:00
LZ 我觉得我们可以加个友情链接 https://github.com/dingyaguang117/ImageRecognizeOf58
gowithwind
2015-04-10 15:13:54 +08:00
这个验证码的边缘比较强,可以先进行边缘检测吧.确定字符的位置.应该对分离字符有帮助.

对于扭曲的情况可以适当进行矫正.计算字符的重心.根据偏向做相反的调整.

建议还是使用高级点的机器学习技术.
hao123yinlong
2015-04-10 15:23:42 +08:00
@awanabe OCR识别是需要根据字库(训练库)来进行识别的。豆瓣特定的字体,如果没有相应的训练库,你把图片质量做得再高,也一样识别率低
liboyue
2015-04-10 15:34:00 +08:00
要是用点深度学习的东西正确率应该会很高

参考LeNet-5,90年代商用的手写数字识别算法
superhack
2015-04-10 15:35:43 +08:00
『去掉背景杂色之后』直接切分(按垂直投影),切分之后的求出来个最小矩形闭包,之后的结果就可以作为训练集了,每个字符积累几百个,直接 KNN 算法,你的预处理效果看起来能做到单字符 85% 的正确率,五六个字符几乎能做到 3、4 次成功登录一次。
awanabe
2015-04-10 15:37:57 +08:00
@dingyaguang117 哟西...思路差不多
int64ago
2015-04-10 15:38:25 +08:00
@superhack 对,分割的时候用投影是比较好的方式
awanabe
2015-04-10 15:38:33 +08:00
@hao123yinlong 扭曲的字体确要训练
h4x3rotab
2015-04-12 15:00:29 +08:00
对于单词的话还可以利用字典提高识别率,尤其是这种严格出现在字典里的词,只要拿字典里的每个词套进来,然后计算整体的准确率,取最高就好了
pythoner
2015-05-13 14:08:57 +08:00
春节的时候我用楼主的思路做过,识别率不是特别好。
正好有两篇博客简单记录了以下,欢迎交流: http://t-y.me/p/233

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182818

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX