谈谈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 12 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
pandas 中对特征进行硬编码和onehot编码的实现
Dec 20 Python
python实现程序重启和系统重启方式
Apr 16 Python
Keras Convolution1D与Convolution2D区别说明
May 22 Python
结束运行python的方法
Jun 16 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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 文件锁与进程锁的使用示例
2017/08/07 PHP
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
python3中eval函数用法使用简介
2019/08/02 Python
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
软件测试有哪些?什么是配置项?
2012/02/12 面试题
最新教师自我评价分享
2013/11/12 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
工业设计专业自荐书
2014/06/05 职场文书
求职意向书范本
2015/05/11 职场文书
百年孤独读书笔记
2015/06/29 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers