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提取html文件中的特定数据的实现代码
Mar 24 Python
python列表与元组详解实例
Nov 01 Python
python执行shell获取硬件参数写入mysql的方法
Dec 29 Python
详解python中的 is 操作符
Dec 26 Python
Python中optparser库用法实例详解
Jan 26 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 Python
python如何删除文件、目录
Jun 23 Python
Python基于gevent实现文件字符串查找器
Aug 11 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代码优化及php相关问题总结
2006/10/09 PHP
PHP 一个页面执行时间类代码
2010/03/05 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
php时区转换转换函数
2014/01/07 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
python实现批量修改文件名代码
2017/09/10 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
django框架中间件原理与用法详解
2019/12/10 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
如何用Python徒手写线性回归
2021/01/25 Python
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
会计顶岗实习心得
2014/01/25 职场文书
批评与自我批评材料
2014/02/15 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
禁烟标语大全
2014/06/11 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
上课说话检讨书500字
2014/11/01 职场文书
地震慰问信
2015/02/14 职场文书
办公室管理规章制度
2015/08/04 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书