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的判断语句模拟三目运算
Apr 24 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
Python中的id()函数指的什么
Oct 17 Python
python列表生成式与列表生成器的使用
Feb 23 Python
Python数据可视化之画图
Jan 15 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
Python中logging日志的四个等级和使用
Nov 17 Python
Python实现对word文档添加密码去除密码的示例代码
Dec 29 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中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
动态添加js事件实现代码
2009/03/12 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
大学毕业的自我鉴定
2013/10/08 职场文书
大学生入党思想汇报
2014/01/01 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
出国留学担保书
2014/05/20 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
2015年招生工作总结
2015/05/04 职场文书
田径运动会通讯稿
2015/07/18 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS