PP云高级测试工程师详析图片验证码识别-Python PIL 模块

Posted 苏宁视频云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PP云高级测试工程师详析图片验证码识别-Python PIL 模块相关的知识,希望对你有一定的参考价值。



利用Python PIL 模块识别验证码

 

WEB 自动化过程中,我们会遇到使用图片验证码登录或者校验的场景。一般我们的做法有下面几种:


1.让开发注释掉验证码。---- 这种在生产环境不可行


2.留后门,添加一个万能验证码----- 验证码泄露后有风险


3.人工登录,保存cookie, 使用cookie 信息登录。 ---- 对于一些有效期时间短的登录场景也不适用


4.找开发了解生成规则,到缓存或者数据库中取数据。 ---- 这个也比较麻烦有的线上会使用跳板机等等限制


5.图片验证码识别   ------  

这种方法只适用于比较简单一点的验证码

a.有少量干扰线

b.验证码变形不太严重

c.位置变动不大

d.图片中为字母或者数字

 

下面就来介绍一下这种验证码的识别


PP云高级测试工程师详析图片验证码识别-Python PIL 模块


做之前首先要分析一下验证码的特征,看看有没有可行性,我们要分析以下几点:


这里借助工具 FastStone.rar  解压即用,绿色版。点击取色工具放到图片上就可以看到图片的RGB值


PP云高级测试工程师详析图片验证码识别-Python PIL 模块



PP云高级测试工程师详析图片验证码识别-Python PIL 模块

背景色


PP云高级测试工程师详析图片验证码识别-Python PIL 模块

验证码颜色


PP云高级测试工程师详析图片验证码识别-Python PIL 模块

干扰线颜色


PP云高级测试工程师详析图片验证码识别-Python PIL 模块

验证码相近颜色


PP云高级测试工程师详析图片验证码识别-Python PIL 模块

验证码分布区间


把x=41 和 x=61 的点全部设置成黑色,然后图片另外保存图片。


通过这些观察我们可以得出结论


1.背景色和干扰线 RGB 值均大于 180 。

2.验证码和相近颜色 RG 值小于 150. B 值大于 170。

3.验证码分布区间[0-21],[21-41],[41,61],[61,81]

 

这样我们就可以根据RGB 值来进行二值化,这样就得到了我们的字典。


1.RG < 150 & B>170 的点全部设置成黑色(0,0,0,255)

2.其他的点全部设置成白色(255,255,255,255)


PP云高级测试工程师详析图片验证码识别-Python PIL 模块


验证码识别的设计思路

 

1.先获取足够验证码图片样本,写个shell 脚本去下载100 个。

PP云高级测试工程师详析图片验证码识别-Python PIL 模块

2. 下载完成后人工识别,根据验证码命名图片名字。

PP云高级测试工程师详析图片验证码识别-Python PIL 模块

3. 二值化图片保存成字典

PP云高级测试工程师详析图片验证码识别-Python PIL 模块

4. 下面需要识别的验证码,用二值化后的值和字典中对应区域做对比,保存差异最小的值。

根据验证码的四个分布区间,取异或。然后分别保存四个区间的异或值。

如果当前字典异或值小于保存的count 中的值,就把字典文件名对应部分存入到code 中。

这样最终遍历完所有字典,得到的 code 中就保存了差异最小的验证码。



字典维护


100 个字典基本上成功率也在 90% 以上,这个识别率已经很高了,但是想要进一步提升识别率就要增加字典的数量。

 

思路就是,在做自动化的时候,如果碰到了失败的验证码登录不了,就把这个验证码图片保留下来。然后人工识别加入到字典里面,这样后续验证码的识别率会越来越高。根据经验如果字典达到 1000 左右,基本上就不会有失败了。


苏宁旗下子品牌PP云已累计服务客户超过2000个;PP云凭借PPTV 十年媒体技术和服务经验,融合流媒体技术、P2P、CDN 分发、海量存储、安全策略等构建的专注视频领域的一站式SaaS 服务平台。PP云集视频云直播、云点播、云上传、云转码、云存储、云统计等功能于一体,多平台全方位支持客户各种视频场景的业务需求。



点击下方“阅读原文”查看更多

↓↓↓ 

以上是关于PP云高级测试工程师详析图片验证码识别-Python PIL 模块的主要内容,如果未能解决你的问题,请参考以下文章

蓝奏云数值验证码识别,python调用虹鱼图灵识别插件,超高正确率

写给爬虫工程师的验证码识别教程

干掉验证码!使用Python图像识别移动滑块验证码

Python 实现识别弱图片验证码

鲸数云爬虫门槛之验证码识别

按键精灵脚本中如何自动识别并输入验证码