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 相关文章推荐
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
Python之用户输入的实例
Jun 22 Python
Python 获取div标签中的文字实例
Dec 20 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
Python自动化测试笔试面试题精选
Mar 12 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
pytorch中的model.eval()和BN层的使用
May 22 Python
python疲劳驾驶困倦低头检测功能的实现
Apr 04 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之第三天
2006/10/09 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
怎么清空javascript数组
2013/05/11 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
vue实现记事本功能
2019/06/26 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python和php哪个容易学
2020/06/19 Python
python中return不返回值的问题解析
2020/07/22 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
管理部副部长岗位职责范文
2014/03/09 职场文书
年终总结会议主持词
2014/03/17 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
小学英语听课心得体会
2016/01/14 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
mysql如何查询连续记录
2022/05/11 MySQL