python脚本实现验证码识别


Posted in Python onJune 07, 2018

最近在折腾验证码识别。最终的脚本的识别率在92%左右,9000张验证码大概能识别出八千三四百张左右。好吧,其实是验证码太简单。下面就是要识别的验证码。

python脚本实现验证码识别python脚本实现验证码识别

我主要用的是Python中的PIL库。

首先进行二值化处理。由于图片中的噪点颜色比较浅,所以可以设定一个阈值直接过滤掉。这里我设置的阈值是150,像素大于150的赋值为1,小于的赋为0.

def set_table(a):
  table = []     
  for i in range(256):
    if i < a:
      table.append(0)
    else:
      table.append(1)
  return table

img = Image.open("D:/python/单个字体/A"+str(i)+".jpg")
pix = img.load()

#将图片进行灰度化处理
img1 = img.convert('L')

#阈值为150,参数为1,将图片进行二值化处理
img2 = img1.point(set_table(150),'1')

处理后的图片如下。

python脚本实现验证码识别

阈值不同产生的不同效果:

python脚本实现验证码识别

接下来对图片进行分割。遍历图片中所有像素点,计算每一列像素为0的点的个数(jd)。对于相邻两列,若其中一列jd=0,而另一列jd!=0,则可以认为这一列是验证码中字符边界,由此对验证码进行分割。这样分割能达到比较好的效果,分割后得到的字符图片几乎能与模板完全相同。

(Width,Height) = img2.size
pix2 = img2.load()
x0 = []
y0 = []

for x in range(1,Width):
  jd = 0
  # print x
  for y in range(1,Height):
    # print y
    if pix2[x,y] == 0:
      jd+=1
  y0.append(jd)
  if jd > 0:
    x0.append(x)

#分别对各个字符边界进行判断,这里只举出一个    
for a in range(1,Width):
  if (y0[a] != 0)&(y0[a+1] != 0):
    sta1 = a+1
    break

分割完成后,对于识别,目前有几种方法。可以遍历图片的每一个像素点,获取像素值,得到一个字符串,将该字符串与模板的字符串进行比较,计算汉明距离或者编辑距离(即两个字符串的差异度),可用Python-Levenshtein库来实现。

我采用的是比较特征向量来进行识别的。首先设定了4个竖直特征向量,分别计算第0、2、4、6列每一列像素值为0的点的个数,与模板进行比较,若小于阈值则认为该字符与模板相同。为了提高识别率,如果通过竖直特征向量未能识别成功,引入水平特征向量继续识别,原理与竖直特征向量相同。

另外,还可以通过局部特征进行识别。这对于加入了旋转干扰的验证码有很好效果。由于我写的脚本识别率已经达到了要求,所以并没有用到这个。

最后的结果是这样的:

python脚本实现验证码识别

最终在模板库只有25条的情况下,识别率在92%左右(总共测试了一万六千张验证码)。好吧,只能说验证码太简单。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
Python元组及文件核心对象类型详解
Feb 11 Python
python3 中文乱码与默认编码格式设定方法
Oct 31 Python
python获取url的返回信息方法
Dec 17 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
总结三种用 Python 作为小程序后端的方式
May 02 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 #Python
使用Python处理Excel表格的简单方法
Jun 07 #Python
python实现验证码识别功能
Jun 07 #Python
通过Pandas读取大文件的实例
Jun 07 #Python
Pandas:DataFrame对象的基础操作方法
Jun 07 #Python
Python中偏函数用法示例
Jun 07 #Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 #Python
You might like
PHP4实际应用经验篇(8)
2006/10/09 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
PHP Include文件实例讲解
2019/02/15 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
python3 实现口罩抽签的功能
2020/03/11 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
庐山导游词
2015/02/03 职场文书
客房服务员岗位职责
2015/02/09 职场文书
2019银行竞聘书
2019/06/21 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
试了下Golang实现try catch的方法
2021/07/01 Golang