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之模拟鼠标键盘动作具体实现
Dec 30 Python
处理Python中的URLError异常的方法
Apr 30 Python
Python封装原理与实现方法详解
Aug 28 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
python pygame实现球球大作战
Nov 25 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
tensorflow的计算图总结
Jan 12 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
Django import export实现数据库导入导出方式
Apr 03 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 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 return语句的另一个作用
2014/07/30 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
Python3实现从文件中读取指定行的方法
2015/05/22 Python
python通过文件头判断文件类型
2015/10/30 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
应届生船舶驾驶求职信
2013/10/19 职场文书
普师专业个人自荐信范文
2013/11/26 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
促销活动总结报告
2014/04/26 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
学术会议通知
2015/04/15 职场文书
致运动员的广播稿
2015/08/19 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers