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+Django在windows下的开发环境配置图解
Nov 11 Python
Python常用正则表达式符号浅析
Aug 13 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
Python实现简单石头剪刀布游戏
Jan 20 Python
Python3最长回文子串算法示例
Mar 04 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
Python 中 -m 的典型用法、原理解析与发展演变
Nov 11 Python
python3 字符串知识点学习笔记
Feb 08 Python
django实现模型字段动态choice的操作
Apr 01 Python
python 使用cycle构造无限循环迭代器
Dec 02 Python
python 制作一个gui界面的翻译工具
May 14 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作的文本留言本的例子(三)
2006/10/09 PHP
PHP实现MySQL更新记录的代码
2008/06/07 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
什么是View State?
2013/01/27 面试题
2014年卫生院工作总结
2014/12/03 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
单身证明范本
2015/06/15 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
python Django框架快速入门教程(后台管理)
2021/07/21 Python
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers