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实现简单QQ单用户机器人的方法
Jul 03 Python
Python def函数的定义、使用及参数传递实现代码
Aug 10 Python
在Python3中初学者应会的一些基本的提升效率的小技巧
Mar 31 Python
Python之reload流程实例代码解析
Jan 29 Python
Python生成任意范围任意精度的随机数方法
Apr 09 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
如何使用python传入不确定个数参数
Feb 18 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 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无敌近乎加密方式!
2010/07/17 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
用Python创建声明性迷你语言的教程
2015/04/13 Python
python更新列表的方法
2015/07/28 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
python保存数据到本地文件的方法
2018/06/23 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
DTD的含义以及作用
2014/01/26 面试题
群众路线教育实践活动方案
2014/02/02 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
学习雷锋活动总结
2014/04/29 职场文书
伦敦奥运会口号
2014/06/13 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js