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脚本实现查找webshell的方法
Jul 31 Python
Python实现读取文件最后n行的方法
Feb 23 Python
python制作小说爬虫实录
Aug 14 Python
Python 高级专用类方法的实例详解
Sep 11 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
Python Web框架之Django框架文件上传功能详解
Aug 16 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
python两个list[]相加的实现方法
Sep 23 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 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
JAVA/JSP学习系列之七
2006/10/09 PHP
Session的工作方式
2006/10/09 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
python实现海螺图片的方法示例
2019/05/12 Python
django orm模块中的 is_delete用法
2020/05/20 Python
python 代码运行时间获取方式详解
2020/09/18 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
创建服务型党组织实施方案
2014/02/25 职场文书
搞笑征婚广告词
2014/03/17 职场文书
五一劳动节活动记录
2014/03/23 职场文书
大学教师个人总结
2015/02/10 职场文书
会计做账心得体会
2016/01/22 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
python实现三次密码验证的示例
2021/04/29 Python
教你怎么用python实现字符串转日期
2021/05/24 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python
Python编写冷笑话生成器
2022/04/20 Python