谈谈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编写朴素贝叶斯用于文本分类
Dec 21 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
Python logging模块用法示例
Aug 28 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
Django Celery异步任务队列的实现
Jul 24 Python
Django Rest framework三种分页方式详解
Jul 26 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
python实现贪吃蛇游戏源码
Mar 21 Python
利用Python如何实时检测自身内存占用
May 09 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 Python
python pyhs2 的安装操作
Apr 07 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
PHP 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
一些常用的php函数
2006/12/06 PHP
PHP内核探索之变量
2015/12/22 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
完善的jquery处理机制
2016/02/21 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
Python中super的用法实例
2015/05/28 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
关于打架的检讨书
2014/01/17 职场文书
打造完美自荐信
2014/01/24 职场文书
知识竞赛主持词
2014/03/26 职场文书
毕业论文评语大全
2014/04/29 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL