谈谈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 相关文章推荐
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
python监控进程脚本
Apr 12 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
Python基于traceback模块获取异常信息
Jul 23 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
使用pandas模块实现数据的标准化操作
May 14 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
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php定界符
2014/06/19 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
14个有用的Jquery技巧分享
2015/01/08 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
Python中使用Inotify监控文件实例
2015/02/14 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
python使用Matplotlib画饼图
2018/09/25 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
python获取Pandas列名的几种方法
2019/08/07 Python
Python实现图片识别加翻译功能
2019/12/26 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
应届毕业生个人求职信范文
2014/01/29 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
手术室护士个人总结
2015/02/13 职场文书
海洋天堂观后感
2015/06/05 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js