先讲讲我的想法:
1. 豆瓣验证码都是英文单词类型, 就想用OCR识别. Python上的库有: pytesseract
2. 图片背景太花, 单词颜色都是黑色. 就用图像图 Pillow 讲图片非纯黑 变成白色. 当然给了一点缓冲余地, 用RGBA的颜色, 每个色标正负5之内都算符合.
3. 然后获取只有黑色点阵图像, 会发现噪点很多. 写了一个递归遍历算法 类似于 Flood fill 算法 , 将可以连接在一起的黑色点算出最大面积, 面积小于一个阈值的全部置为白色.
4. 然后通过OCR识别.
代码在
https://github.com/awanabe/douban_captcha_identify原图:
去掉背景杂色之后:
转换成点阵:
去除噪点:
问题:
1. 发现pytesseract 对于扭曲的字母识别度很低
2. 去背景色, 去噪点太粗暴, 容易把字母弄破. 每次图片识别都要通过调整好几次阈值, 然后用识别出来的单词去对比英文单词库. 有些肯定就无解了.
请问那些地方可以改进来提高准确率
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/182818
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.