python验证码识别的实例详解


Posted in Python onSeptember 09, 2016

其实关于验证码识别涉及很多方面的内容,入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足,对这感兴趣的朋友们下面跟着小编一起来学习学习吧。

依赖

sudo apt-get install python-imaging
sudo apt-get install tesseract-ocr
pip install pytesseract

利用google ocr来识别验证码

from PIL import Image
import pytesseract
image = Image.open('v1.jpg')
vcode = pytesseract.image_to_string(image)
print vcode

但是pytesseract本身识别率不高,而且一般网站的验证码都带有大量干扰元素。( ̄? ̄)"

所以我们首先要对验证码进行去噪。

对于单像素干扰线、干扰点我们可以通过扫描整个图像,考察每一个像素点所临近的八个像素点的颜色,如果不同的个数大于一定的值,那就说明该点是离散点,需要去除。

另外也可以尝试设定阈值来直接将验证码二值化。

下面是两张学校网站上的验证码

python验证码识别的实例详解

python验证码识别的实例详解

我们可以看到验证码存在单像素干扰点,所以我们需要设法去除。但是经过反复刷新验证码,发现这个验证码

     1. 只有加法运算

     2.至多两位数的加法

     3.文字部分一定是红色(255,0,0)

有了上述的信息,可以判断这个验证码的生成算法是有缺陷的

import Image 
from numpy import * 
import pytesseract 
im = Image.open('1.png') 
im = im.convert('RGB') 
#拉长图像,方便识别。
im = im.resize((200,80)) 
a = array(im) 
for i in xrange(len(a)): 
for j in xrange(len(a[i])): 
  if a[i][j][0] == 255: 
    a[i][j]=[0,0,0] 
  else: 
    a[i][j]=[255,255,255] 
im = Image.fromarray(a) 
im.show() 
vcode = pytesseract.image_to_string(im) 
print vcode

利用上述脚本我们可以将图像进行二值化,利用google ocr进行识别。再通过eval()来对表达式进行求值。

总结

python验证码识别的内容到这就基本介绍了,希望这篇文章对大家的学习或者工作能有所帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python开发常用的一些开源Package分享
Feb 14 Python
Python中的__SLOTS__属性使用示例
Feb 18 Python
Python使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
python 以16进制打印输出的方法
Jul 09 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
pywinauto自动化操作记事本
Aug 26 Python
python基于openpyxl生成excel文件
Dec 23 Python
Python 可视化神器Plotly详解
Dec 26 Python
深入理解python协程
Jun 15 Python
Python随机数random模块使用指南
Sep 09 #Python
利用ctypes提高Python的执行速度
Sep 09 #Python
python实现批量监控网站
Sep 09 #Python
利用python批量检查网站的可用性
Sep 09 #Python
Python如何判断数独是否合法
Sep 08 #Python
python框架django基础指南
Sep 08 #Python
python中星号变量的几种特殊用法
Sep 07 #Python
You might like
php构造函数实例讲解
2013/11/13 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
php实现登陆模块功能示例
2016/10/20 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
DEFER怎么用?
2006/07/01 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
Shell如何接收变量输入
2016/08/06 面试题
计算机学生的自我评价分享
2014/02/18 职场文书
项目合作意向书范本
2014/04/01 职场文书
2014年三万活动总结
2014/04/26 职场文书
禁毒宣传标语
2014/06/19 职场文书
运动会通讯稿600字
2015/07/20 职场文书
信息技术国培研修日志
2015/11/13 职场文书
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python