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

一、图片处理

这个验证码中主要的影响因素是中间的曲线,首先考虑去掉图片中的曲线。考虑了两种算法:

第一种是首先取到曲线头的位置,即x=0时,黑点的位置。然后向后移动x的取值,观察每个x下黑点的位置,判断前后两个相邻黑点之间的距离,如果距离在一定范围内,可以基本判断该点是曲线上的点,最后将曲线上的点全部绘成白色。试了一下这种方法,结果得到的图片效果很一般,曲线不能完全去除,而且容量将字符的线条去除。

第二种考虑用单位面积内点的密度来进行计算。于是首先计算单位面积内点的个数,将单位面积内点个数少于某一指定数的面积去除,剩余的部分基本上就是验证码字符的部分。本例中,为了便于操作,取了5*5做为单位范围,并调整单位面积内点的标准密度为11。处理后的效果:

二、字符验证

这里我使用的方法是利用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进行验证码识别的一些想法相关推荐

  1. python手写代码面试_常见Python面试题 — 手写代码系列

    原标题:常见Python面试题 - 手写代码系列 作者: Peace & Love 来自:https://blog.csdn.net/u013205877/article/details/77 ...

  2. python植物大战僵尸代码例_用Python实现植物大战僵尸游戏,很酷

    以前很火的植物大战僵尸游戏, 本想在网上找个python版本游戏学习下,无奈没有发现比较完整的,那就自己来写一个把.图片资源是从github上下载的,因为图片资源有限,只能实现几种植物和僵尸. 功能实 ...

  3. python直接执行代码漏洞_修复Python任意命令执行漏洞

    Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...

  4. 简述python程序的运行原理_谈谈 Python 程序的运行原理

    执行 python demo.py 后,将会启动 Python 的解释器,然后将 demo.py 编译成一个字节码对象 PyCodeObject. 在 Python 的世界中,一切都是对象,函数也是对 ...

  5. python手写代码面试_常见Python面试题—手写代码系列

    原标题:常见Python面试题-手写代码系列 1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reverse tempList = [1,2,3,4] tempList.reverse( ...

  6. python元类是什么_谈谈Python中元类Metaclass(一):什么是元类

    简单的讲,元类创建了Python中所有的对象. 我们说Python是一种动态语言,而动态语言和静态语言最大的不同,就是函数和类不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个HelloW ...

  7. python画圣诞树代码解读_使用Python画了一棵圣诞树的实例代码

    分享给大家一篇文章,教你怎样用Python画了一棵圣诞树,快来学习. 如何用Python画一个圣诞树呢? 最简单: height = 5 ​ stars = 1 for i in range(heig ...

  8. python电子相册制作代码大全_用Python和Conky做个电子相册,美化你的Linux桌面

    现在手机的拍照功能日趋强大,每个人电脑上想必都至少有几十个G的照片吧.全打印出来实在是太费钱了.而闲置的旧电脑完全可以利用起来播放这些照片.下面就介绍利用Conky和Python实现随机播放相片的功能 ...

  9. python绘图颜色代码大全_【python】Matplotlib作图常用marker类型、线型和颜色

    python作图中常常会考虑用什么颜色.marker.线型,这个资料查了又查,所以自己总结在这个地方,以便常用. 一.常用marker表示 1.普通marker 这类普通marker直接marker ...

最新文章

  1. springboot + redis + 注解 + 拦截器 实现接口幂等性校验
  2. Docker:镜像操作和容器操作
  3. 71《SQL学习指南(第二版)》mysql 的数据类型和范围
  4. 我在学python-你们以为我在学C++?其实我在学 Python
  5. 保25ms争10ms——Zenlayer如何保持出海业务的超低延时
  6. mysql 优化器不准_mysql 优化器有哪些可选开关
  7. linux重新启动某一个项目,Linux运维知识之supervisor更改某项目配置后 需要重新启动才有效...
  8. like roofs shell white_高二英语新教材Unit 3同步练习
  9. tm影像辐射定标_Landsat-TM-辐射定标和大气校正步骤
  10. Scala基础:类和构造器
  11. Hud检测之图像点数计算
  12. 264编码 yocto_66AK2H06
  13. 红外热成像仪原理与用途——TFN TD97 双目手持热像仪红外夜视仪
  14. echarts map (echarts地图)使用总结
  15. jQuery实现日期选择器
  16. Linux新手的选择:Deepin(深度操作系统)
  17. intouch制作历史趋势公用弹窗
  18. 化工原理物性参数_湖北省化工原理试卷
  19. 计算机网络第3章(数据链路层)
  20. 九、Springboot 报错汇总

热门文章

  1. 配置linux系统ip,Linux系统IP地址配置
  2. python保存所有变量值_如何在当前python会话中保存所有变量?
  3. 1046 划拳 PAT乙级(C++)
  4. 光纤收发器出现死机故障怎么解决
  5. 飞畅科技-交换机的三种交换方式详解
  6. 【渝粤题库】陕西师范大学200271 微分几何 作业(专升本)
  7. 【渝粤题库】国家开放大学2021春2402外国文学题目
  8. 【渝粤题库】国家开放大学2021春2518旅游法规答案
  9. 计算机基础知识表格加密管理,【事业单位考试】计算机网络知识:数据加密技术之密钥管理...
  10. linux 编译src.rpm,CentOS6.5下编译src.rpm包的内核