用Python机器学习搞定验证码
来源:互联网 发布:某某软件 编辑:程序博客网 时间:2024/05/16 09:11
写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:
图像类
滑动类
点击类
语音类
今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线、变形、重叠、不同字体颜色等方法来增加识别难度。
相应的,验证码识别大体可以分为下面几个步骤:
灰度处理
增加对比度(可选)
二值化
降噪
倾斜校正分割字符
建立训练库
识别
由于是实验性质的,文中用到的验证码均为程序生成而不是批量下载真实的网站验证码,这样做的好处就是可以有大量的知道明确结果的数据集。
当需要真实环境下需要获取数据时,可以使用结合各个大码平台来建立数据集进行训练。
生成验证码这里我使用Claptcha这个库,当然Captcha这个库也是个不错的选择。
为了生成最简单的纯数字、无干扰的验证码,首先需要将claptcha.py的285行_drawLine做一些修改,我直接让这个函数返回None,然后开始生成验证码:
这里需要注意ubuntu的字体路径,也可以在网上下载其他字体使用。生成验证码如下:
可以看出,验证码有形变。对于这类最简单的验证码,可以直接使用谷歌开源的tesserocr来识别。
首先安装:
然后开始识别:
可以看出,对于这种简单的验证码,基本什么都不做识别率就已经很高了。有兴趣的小伙伴可以用更多的数据来测试,这里我就不展开了。
接下来,在验证码背景添加噪点来看看:
生成验证码如下:
识别:
效果还可以。接下来生成一个字母数字组合的:
生成验证码如下:
第3个为小写字母o,第4个为大写字母O,第5个为数字0,第6个为小写字母z,第7个为大写字母Z,最后一个是数字2。人眼已经跪了有木有!但现在一般验证码对大小写是不做严格区分的,看自动识别什么样吧:
人眼都跪的计算机当然也废了。但是,对于一些干扰小、形变不严重的,使用tesserocr还是十分简单方便的。然后将修改的claptcha.py的285行_drawLine还原,看添加干扰线的情况。
加了条干扰线就完全识别不出来了,那么有没有什么办法去除干扰线呢?
虽然图片看上去是黑白的,但还需要进行灰度处理,否则使用load()函数得到的是某个像素点的RGB元组而不是单一值了。处理如下:
处理后的图片如下:
可以看出处理后图片锐化了很多,接下来尝试去除干扰线,常见的4邻域、8邻域算法。所谓的X邻域算法,可以参考手机九宫格输入法,按键5为要判断的像素点,4邻域就是判断上下左右,8邻域就是判断周围8个像素点。如果这4或8个点中255的个数大于某个阈值则判断这个点为噪音,阈值可以根据实际情况修改。
处理后的图片如下:
好像……根本没卵用啊?!确实是这样的,因为示例中的图片干扰线的宽度和数字是一样的。对于干扰线和数据像素不同的,比如Captcha生成的验证码:
从左到右依次是原图、二值化、去除干扰线的情况,总体降噪的效果还是比较明显的。另外降噪可以多次执行,比如我对上面的降噪后结果再进行依次降噪,可以得到下面的效果:
再进行识别得到了结果:
另外,从图片来看,实际数据颜色明显和噪点干扰线不同,根据这一点可以直接把噪点全部去除,这里就不展开说了。
第一篇文章,先记录如何将图片进行灰度处理、二值化、降噪,并结合tesserocr来识别简单的验证码,剩下的部分在下一篇文章中和大家一起分享。
作者:roy
来源:
http://www.hi-roy.com/2017/09/19/Python%E9%AA%8C%E8%AF%81%E7%A0%81%E8%AF%86%E5%88%AB/
————广告时间————
《马哥Linux云计算及架构师》课程,由知名Linux布道师马哥创立,经历了8年的发展,联合阿里巴巴、唯品会、大众点评、腾讯、陆金所等大型互联网一线公司的马哥课程团队的工程师进行深度定制开发,课程采用 Centos7.2系统教学,加入了大量实战案例,授课案例均来自于一线的技术案例,培养过20%的学员月薪超过3万。
开课时间:11月06号
扫描二维码领取学习资料
感谢您抽出 · 来阅读此文
更多Linux好文请点击【阅读原文】哦
↓↓↓
- 用Python机器学习搞定验证码
- Python机器学习之验证码识别
- 机器学习-CrossValidation交叉验证Python实现
- 机器学习-CrossValidation交叉验证Python实现
- 机器学习-CrossValidation交叉验证Python实现
- 机器学习 python 交叉验证实例
- 用9kw网站搞定验证码
- python机器学习-交叉验证(cross-vaildation)
- Python机器学习库sklearn网格搜索与交叉验证
- 机器学习之验证码识别
- 用python训练机器学习
- 机器学习--交叉验证
- 【机器学习基础】验证
- 机器学习--交叉验证
- 【机器学习基础】验证
- 机器学习-交叉验证
- 轻松搞定验证码刷新
- 【机器学习实验】用Python进行机器学习实验
- 初识Servlet
- 各大浏览器内核的理解
- CSS3D效果之相册制作
- 跟大神一起十五分钟制作一个属于自己得Linux操作系统!
- Rich feature hierarchies for accurate object detection and semantic segmentation
- 用Python机器学习搞定验证码
- 五大算法
- 2017.10.7 括号序列 思考记录
- 数据库中序列、视图、游标、包、动态SQL的使用
- 学习爬虫有道翻译中遇到的
- 对MVC的理解
- 资料汇集
- 初级运维工程师学Linux云计算4个月年薪15.6万翻倍
- GalaxyOJ-878 (ST表)