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实现的检测网站挂马程序
Nov 30 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python中列表元素转为数字的方法分析
Jun 14 Python
Python中查看文件名和文件路径
Mar 31 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 Python
PyQt5响应回车事件的方法
Jun 25 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
python实现最大优先队列
Aug 29 Python
python3 sqlite3限制条件查询的操作
Apr 07 Python
Python 正则模块详情
Nov 02 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 str_pad 函数使用详解
2009/01/13 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
Jquery ui css framework
2010/06/28 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
浅谈webpack对样式的处理
2018/01/05 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
python命令行工具Click快速掌握
2019/07/04 Python
Python中拆分字符串的操作方法
2019/07/23 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
送货司机岗位职责
2013/12/11 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
读书活动总结范文
2014/04/26 职场文书
模特大赛策划方案
2014/05/28 职场文书
社会实践活动总结范文
2014/07/03 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
目标责任书格式范文
2015/05/11 职场文书
男生贾里读书笔记
2015/06/30 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript