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使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
Python模拟登陆实现代码
Jun 14 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
Python循环实现n的全排列功能
Sep 16 Python
Django分组聚合查询实例分享
Apr 29 Python
Python模块常用四种安装方式
Oct 20 Python
用python 绘制茎叶图和复合饼图
Feb 26 Python
python基础之爬虫入门
May 10 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
js简单的弹出框有关闭按钮
2014/05/05 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
Python中的面向对象编程详解(下)
2015/04/13 Python
Python列表list排列组合操作示例
2018/12/18 Python
python实现弹窗祝福效果
2019/04/07 Python
python实现远程控制电脑
2019/05/23 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
法学专业本科生自荐信范文
2013/12/17 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
如何使用flask将模型部署为服务
2021/05/13 Python