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获取央视节目单的实现代码
Jul 25 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
Jul 11 Python
python Django里CSRF 对应策略详解
Aug 05 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
python是否适合网页编程详解
Oct 04 Python
如何基于python对接钉钉并获取access_token
Apr 21 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
Python如何使用ElementTree解析xml
Oct 12 Python
python解包概念及实例
Feb 17 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 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
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
Javascript中神奇的this
2016/01/20 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
python实现高斯投影正反算方式
2020/01/17 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
eBay奥地利站:eBay.at
2019/07/24 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
《雨点儿》教学反思
2014/04/14 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
计划生育责任书
2015/05/09 职场文书
道歉情书大全
2015/05/12 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python
Python序列化模块JSON与Pickle
2022/06/05 Python
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS