加载中…
个人资料
马步水
马步水
  • 博客等级:
  • 博客积分:0
  • 博客访问:5,268
  • 关注人气:168
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【原创】Python 学习笔记(七)验证码识别1 整体算法

(2014-10-08 06:48:11)
标签:

python

验证码识别

图像处理

算法

图像切割

杂谈

分类: Python

     最近通过对Python的使用发现Python的确是们强大的语言,所以用python实现了下验证码的识别。

     由于本人技术水平一般,所以只研究了比较普通的验证码,这种验证码由4位数字组成,每位数字可能会左右倾斜,而且在图片上的高度会有变化,背景上会有杂色和噪点。我认为是识别难度中等偏低的一种验证码,但是还是比网上公开的验证码识别算法针对的要复杂不少。

     对于验证码识别,首先要安装python的图像处理库PIL,不过PIL由于安装经常有问题,而且更新慢,尤其是对64位系统支持不足,所以建议安装替代的模块Pillow。

 

     安装了Pillow后,就是基本的算法设计了,大致分为以下几个步骤:

    (一)图像预处理,这里有对图像的格式转换,灰度化,对比度改变,锐化,转为黑白图像,去除噪点等一系列操作。

    (二)图像切割,通过寻找空白行和空白列,将图像切割为4块,并将处理后的图片保存,再将图片上的黑白像素情况保存为txt文档,以便进行后续的比对和识别。

    (三)处理素材,形成素材库。通过步骤一和二,将提前下载的验证码图片库的图像处理,存为txt文档,以作为后续的识别比对的基础。为了保证后续的识别处理速度,建议将处理后的txt文档中的数据统一处理为一个比对数组,这样比对时直接从内存进行比对,不用不断打开txt文档,速度较快。

    (四)实时下载验证码图片,按照步骤一和二处理后,与步骤三形成的素材库进行比对,得出验证码图片对应的结果。这里由于验证码的图片难以获取当时的真实信息,所以我采用了截屏获取验证码的方法。而且由于验证码网站的验证码点击刷新机制的原因:点击验证码后刷新的图片对应的数字始终都一样,只是图片样式有所变化,点击刷新多次后,可以截屏裁剪出多个对应相同数字的图片,得出多个识别的结果后,分别统计验证码的4位数字中每位数字出现次数最多的是哪个数字,从而作为最终的识别数字,可以大大提高图片识别的成功率。通过一段时间的运行,大概的识别率在90%左右,足够高,而且完成一次正确的识别的整体运行时间大概在15秒以内,速度还算可以。

 

 

 

 

   

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有