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异步回调机制实现和使用方法
Nov 26 Python
python进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
在Python的Django框架中实现Hacker News的一些功能
Apr 17 Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 Python
python中map的基本用法示例
Sep 10 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
详解Python3 基本数据类型
Apr 19 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
Python多进程编程multiprocessing代码实例
Mar 12 Python
python简单的三元一次方程求解实例
Apr 02 Python
Python OpenCV 图像平移的实现示例
Jun 04 Python
python图像处理 PIL Image操作实例
Apr 09 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
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
金讯Java笔试题目
2013/06/18 面试题
委托公证书样本
2015/01/23 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
如何书写邀请函?
2019/06/24 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript