谈谈Python进行验证码识别的一些想法


Posted in Python onJanuary 25, 2016

用python加“验证码”为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章。我大体看了一下,主要方法有几类:一类是通过对图片进行处理,然后利用字库特征匹配的方法,一类是图片处理后建立字符对应字典,还有一类是直接利用ocr模块进行识别。不管是用什么方法,都需要首先对图片进行处理,于是试着对下面的验证码进行分析。

一、图片处理

谈谈Python进行验证码识别的一些想法

这个验证码中主要的影响因素是中间的曲线,首先考虑去掉图片中的曲线。考虑了两种算法:
第一种是首先取到曲线头的位置,即x=0时,黑点的位置。然后向后移动x的取值,观察每个x下黑点的位置,判断前后两个相邻黑点之间的距离,如果距离在一定范围内,可以基本判断该点是曲线上的点,最后将曲线上的点全部绘成白色。试了一下这种方法,结果得到的图片效果很一般,曲线不能完全去除,而且容量将字符的线条去除。
第二种考虑用单位面积内点的密度来进行计算。于是首先计算单位面积内点的个数,将单位面积内点个数少于某一指定数的面积去除,剩余的部分基本上就是验证码字符的部分。本例中,为了便于操作,取了5*5做为单位范围,并调整单位面积内点的标准密度为11。处理后的效果:

谈谈Python进行验证码识别的一些想法

二、字符验证

这里我使用的方法是利用pytesser进行ocr识别,但由于这类验证码字符的不规则性,使得验证结果的准确性并不是很高。具体哪位大牛,有什么好的办法,希望能给指点一下。

三、准备工作与代码实例

1、PIL、pytesser、tesseract

(1)安装PIL:下载地址:http://www.pythonware.com/products/pil/
(2)pytesser:下载地址:http://code.google.com/p/pytesser/,下载解压后直接放在代码相同的文件夹下,即可使用。
(3)Tesseract OCR engine下载:http://code.google.com/p/tesseract-ocr/,下载后解压,找到tessdata文件夹,用其替换掉pytesser解压后的tessdata文件夹即可。

2、具体代码

#encoding=utf-8
###利用点的密度计算
import Image,ImageEnhance,ImageFilter,ImageDraw
import sys
from pytesser import *
#计算范围内点的个数
def numpoint(im):
w,h = im.size
data = list( im.getdata() )
mumpoint=0
for x in range(w):
for y in range(h):
if data[ y*w + x ] !=255:#255是白色
mumpoint+=1
return mumpoint
#计算5*5范围内点的密度
def pointmidu(im):
w,h = im.size
p=[]
for y in range(0,h,5):
for x in range(0,w,5):
box = (x,y, x+5,y+5)
im1=im.crop(box)
a=numpoint(im1)
if a<11:##如果5*5范围内小于11个点,那么将该部分全部换为白色。
for i in range(x,x+5):
for j in range(y,y+5):
im.putpixel((i,j), 255)
im.save(r'img.jpg')
def ocrend():##识别
image_name = "img.jpg"
im = Image.open(image_name)
im = im.filter(ImageFilter.MedianFilter())
enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(2)
im = im.convert('1')
im.save("1.tif")
print image_file_to_string('1.tif') 
if __name__=='__main__':
image_name = "1.png"
im = Image.open(image_name)
im = im.filter(ImageFilter.DETAIL)
im = im.filter(ImageFilter.MedianFilter())
enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(2)
im = im.convert('1')
##a=remove_point(im)
pointmidu(im)
ocrend()

本人的这个方法,最终识别率确实不高,写出来,哪位高手有好的思路或者做法,望不惜赐教!

Python 相关文章推荐
python中的错误处理
Apr 10 Python
tensorflow实现加载mnist数据集
Sep 08 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
关于python中的xpath解析定位
Mar 06 Python
python requests包的request()函数中的参数-params和data的区别介绍
May 05 Python
python利用faker库批量生成测试数据
Oct 15 Python
Python headers请求头如何实现快速添加
Nov 03 Python
python time.strptime格式化实例详解
Feb 03 Python
基于Python Shell获取hostname和fqdn释疑
Jan 25 #Python
21行Python代码实现拼写检查器
Jan 25 #Python
Python字符串、元组、列表、字典互相转换的方法
Jan 23 #Python
Python随手笔记第一篇(2)之初识列表和元组
Jan 23 #Python
Python爬虫模拟登录带验证码网站
Jan 22 #Python
Fiddler如何抓取手机APP数据包
Jan 22 #Python
Python爬虫抓取手机APP的传输数据
Jan 22 #Python
You might like
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
进一步了解Python中的XML 工具
2015/04/13 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
浅谈python3中input输入的使用
2019/08/02 Python
Django发送邮件功能实例详解
2019/09/02 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
学生会竞选自荐信
2013/10/12 职场文书
高校毕业生自我鉴定
2013/10/27 职场文书
商务会议邀请函
2014/01/09 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
投标授权委托书范文
2014/08/02 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书