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的Django框架中加载模版的方法
Jul 16 Python
Python开发之快速搭建自动回复微信公众号功能
Apr 22 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
python多任务及返回值的处理方法
Jan 22 Python
python贪吃蛇游戏代码
Apr 18 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
django中间键重定向实例方法
Nov 10 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
python中最小二乘法详细讲解
Feb 19 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
Javascript & DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python与shell的3种交互方式介绍
2015/04/11 Python
Python 调用Java实例详解
2017/06/02 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
python实现简单遗传算法
2020/09/18 Python
技术岗位竞聘演讲稿
2014/05/16 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
培训督导岗位职责
2015/04/10 职场文书
不同意离婚上诉状
2015/05/23 职场文书
亮剑观后感
2015/06/05 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang