谈谈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采用django框架实现支付宝即时到帐接口
May 17 Python
Python多线程实现同步的四种方式
May 02 Python
Python实现的概率分布运算操作示例
Aug 14 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
浅析python打包工具distutils、setuptools
Apr 20 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
详解django.contirb.auth-认证
Jul 16 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
如何通过python实现人脸识别验证
Jan 17 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
python3读取文件指定行的三种方法
May 24 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
php实现的通用图片处理类
2015/03/24 PHP
PHP实现的json类实例
2015/07/28 PHP
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
实习医生自我评价
2013/09/22 职场文书
优秀的毕业生的自我评价
2013/12/12 职场文书
演讲稿怎么写
2014/01/07 职场文书
党员领导干部承诺书
2014/05/28 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
大学生实训报告总结
2014/11/05 职场文书
导游词之南京栖霞山
2019/10/18 职场文书