Python实现基于PIL和tesseract的验证码识别功能示例


Posted in Python onJuly 11, 2018

本文实例讲述了Python实现基于PIL和tesseract的验证码识别功能。分享给大家供大家参考,具体如下:

之前搞这个搞了一段时间,后面遇到了点小麻烦,导致识别率太低了,最多也就百分之20的样子。心灰意冷,弃了一段时间。上次在论坛看到一篇大牛的关于PIL对图片各种处理各种算法的博突然又想起了这个,又随便搞了下,大大提高了识别率啊。先给代码:

原图:

Python实现基于PIL和tesseract的验证码识别功能示例

im = Image.open("C:\Users\Administrator\Desktop\python\\3.png")
#调色
enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(2)
#把图片调成只有黑白两个颜色,处理后每个像素色用8位表示
im = im.convert('1')
im.show() #测试查看

经过上面处理后:

Python实现基于PIL和tesseract的验证码识别功能示例

现在到了关键的一步,这图上好多好多小黑点,要一个一个全部去除我估计我代码写到吐血都写不出来。但是要去除一部分还是可以的。

xsize, ysize = im.size #长、宽
#对照片里的所有像素点:如果像素色不是白色并且右边的一个像素点像素色是白色(RGB(255,255,255))或者像素色不是白色并且下方的一个像素点是白色的,统一变成白色
for i in range(ysize-1):
  for j in range(xsize-1):
    if (im.getpixel((j, i)) !=255&im.getpixel((j+1,i))==255):
      im.putpixel((j,i),255);
    if(im.getpixel((j,i)) != 255&im.getpixel((j,i+1))==255):
      im.putpixel((j, i), 255);
im.show(); #再看看效果

处理完之后:

Python实现基于PIL和tesseract的验证码识别功能示例

之前那些黑色的小点点已经去的差不多了,但是这样也是有代价的啊- - 把图片里面的字的一些像素色也去掉了一些,现在拿这张图片去用tesseract识别的话其实对于tesseract来说跟之前那张没有去小黑点的图片识别难度差不了多少,然后后面又想了个办法补救了一下:

#把上面我们变成白色的小黑点给他补一点回来- -
for i in range(ysize - 1):
  for j in range(xsize - 1):
    if (im.getpixel((j, i))!=255&im.getpixel((j+1,i)) !=255):
      im.putpixel((j, i), 0);
    if (im.getpixel((j, i))!=255&im.getpixel((j,i+1)) !=255):
      im.putpixel((j, i), 0);
im.show(); #再看看效果

处理完之后:

Python实现基于PIL和tesseract的验证码识别功能示例

比上面的图清晰了蛮多。这个时候再去对照下刚开始的那种图的话,对识别程序来说清楚了不止是一点点啊。

不过尽管如此,识别率还是不怎么样,我估计也就百分之50左右的识别率,还是太低了,可能是因为我去掉了一些关键的像素点的色,因为我也不知道tesseract具体的对比库是怎么样的,所以估计我又要弃了。有想过再继续对图片切割旋转,甚至还想过找人工智能的朋友给我拿去训练训练,不过那样还是偏离我本意了,而且我也不是很喜欢搞学术的东西。不管怎么样我这个感觉还是有点用的,说不定拿去做一下切割识别率大大提高也是有可能的。

最后如果有大牛偶然看到我这篇博的话还望不吝赐教。

更多关于Python相关内容可查看本站专题:《Python数学运算技巧总结》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python基础教程之udp端口扫描
Feb 10 Python
python实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
Python编程中的异常处理教程
Aug 21 Python
python实现用户管理系统
Jan 10 Python
Python中Numpy ndarray的使用详解
May 24 Python
python os.fork() 循环输出方法
Aug 08 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
wxpython布局的实现方法
Nov 01 Python
python中count函数简单的实例讲解
Feb 06 Python
基于Python的OCR实现示例
Apr 03 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
python如何读取.mtx文件
Apr 22 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 #Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 #Python
Python2实现的图片文本识别功能详解
Jul 11 #Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 #Python
基于数据归一化以及Python实现方式
Jul 11 #Python
numpy.std() 计算矩阵标准差的方法
Jul 11 #Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 #Python
You might like
使用PHP的日期与时间函数技巧
2008/04/24 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
php生成图片验证码
2015/06/09 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
Django之Mode的外键自关联和引用未定义的Model方法
2018/12/15 Python
使用Python pip怎么升级pip
2020/08/11 Python
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
教师实习的自我鉴定
2013/10/26 职场文书
可贵的沉默教学反思
2014/02/06 职场文书
入党自我鉴定
2014/03/25 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python