PP云高级测试工程师详析图片验证码识别-Python PIL 模块
Posted 苏宁视频云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PP云高级测试工程师详析图片验证码识别-Python PIL 模块相关的知识,希望对你有一定的参考价值。
利用Python PIL 模块识别验证码
WEB 自动化过程中,我们会遇到使用图片验证码登录或者校验的场景。一般我们的做法有下面几种:
1.让开发注释掉验证码。---- 这种在生产环境不可行
2.留后门,添加一个万能验证码。----- 验证码泄露后有风险
3.人工登录,保存cookie, 使用cookie 信息登录。 ---- 对于一些有效期时间短的登录场景也不适用
4.找开发了解生成规则,到缓存或者数据库中取数据。 ---- 这个也比较麻烦有的线上会使用跳板机等等限制
5.图片验证码识别 ------
这种方法只适用于比较简单一点的验证码
a.有少量干扰线
b.验证码变形不太严重
c.位置变动不大
d.图片中为字母或者数字
下面就来介绍一下这种验证码的识别
做之前首先要分析一下验证码的特征,看看有没有可行性,我们要分析以下几点:
这里借助工具 FastStone.rar 解压即用,绿色版。点击取色工具放到图片上就可以看到图片的RGB值
背景色
验证码颜色
干扰线颜色
验证码相近颜色
验证码分布区间
把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)
验证码识别的设计思路
1.先获取足够验证码图片样本,写个shell 脚本去下载100 个。
2. 下载完成后人工识别,根据验证码命名图片名字。
3. 二值化图片保存成字典
4. 下面需要识别的验证码,用二值化后的值和字典中对应区域做对比,保存差异最小的值。
根据验证码的四个分布区间,取异或。然后分别保存四个区间的异或值。
如果当前字典异或值小于保存的count 中的值,就把字典文件名对应部分存入到code 中。
这样最终遍历完所有字典,得到的 code 中就保存了差异最小的验证码。
字典维护
100 个字典基本上成功率也在 90% 以上,这个识别率已经很高了,但是想要进一步提升识别率就要增加字典的数量。
思路就是,在做自动化的时候,如果碰到了失败的验证码登录不了,就把这个验证码图片保留下来。然后人工识别加入到字典里面,这样后续验证码的识别率会越来越高。根据经验如果字典达到 1000 左右,基本上就不会有失败了。
苏宁旗下子品牌PP云已累计服务客户超过2000个;PP云凭借PPTV 十年媒体技术和服务经验,融合流媒体技术、P2P、CDN 分发、海量存储、安全策略等构建的专注视频领域的一站式SaaS 服务平台。PP云集视频云直播、云点播、云上传、云转码、云存储、云统计等功能于一体,多平台全方位支持客户各种视频场景的业务需求。
点击下方“阅读原文”查看更多
↓↓↓
以上是关于PP云高级测试工程师详析图片验证码识别-Python PIL 模块的主要内容,如果未能解决你的问题,请参考以下文章