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根据出生年份简单计算生肖的方法
Mar 27 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
Python实现的RSS阅读器实例
Jul 25 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
Python爬虫 bilibili视频弹幕提取过程详解
Jul 31 Python
Python中使用socks5设置全局代理的方法示例
Apr 15 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
Python如何在单元测试中给对象打补丁
Aug 03 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
Python开发五子棋小游戏
Apr 28 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
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
js脚本实现数据去重
2014/11/27 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
python中列表的含义及用法
2020/05/26 Python
浅析Python 序列化与反序列化
2020/08/05 Python
Pygame框架实现飞机大战
2020/08/07 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
某公司面试题
2012/03/05 面试题
大学生表扬信范文
2014/01/09 职场文书
竞选班委演讲稿
2014/04/28 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
群众路线剖析材料
2014/09/30 职场文书
二年级作文之动物作文
2019/11/13 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP