关于利用python进行验证码识别的一些想法 - 小五义 - 博客园

关于利用python进行验证码识别的一些想法

转载请注明:@小五义http://www.cnblogs.com/xiaowuyi

用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.sizedata = list( im.getdata() )mumpoint=0for x in range(w):for y in range(h):if data[ y*w + x ] !=255:#255是白色mumpoint+=1return mumpoint#计算5*5范围内点的密度
def pointmidu(im):w,h = im.sizep=[]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进行验证码识别的一些想法相关推荐

  1. python验证码 识别代码不准_谈谈Python进行验证码识别的一些想法

    用python加"验证码"为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章.我大体看了一下,主要方法有几类:一类是通过对图片进行处理,然后利用字库特征匹配的方法,一类 ...

  2. python文字验证码识别_利用python进行验证码识别(预处理部分)

    # -*- coding: utf-8 -*- """Created on Thu Feb 1 15:52:05 2018@author: Administrator&q ...

  3. 基于python的验证码识别

    基于python的验证码识别 在利用python对一些网站进行批量操作的时候,验证码是个绕不过去的东西,虽然现在网上有很多图像识别的api,但是可能不适用于你的项目,我为了批量爬取班上同学的学分绩点写 ...

  4. 基于Python的验证码识别技术

    基于Python的验证码识别技术 作者:强哥 概述 前言 准备工作 识别原理 图像处理 切割图像 人工标注 训练数据 检测结果 搞笑一刻 福利一刻 推荐阅读 前言 很多网站登录都需要输入验证码,如果要 ...

  5. 宝可梦 图片识别python_初探利用Python进行图文识别(OCR)

    话说什么是OCR????? 简介 OCR技术是光学字符识别的缩写(Optical Character Recognition),是通过扫描等光学输入方式将各种票据.报刊.书籍.文稿及其它印刷品的文字转 ...

  6. python 实现验证码识别

    python 实现验证码识别 环境安装 1.1 python安装(此处不详细介绍,自行百度) 1.2 安装Tesseract-OCR 第一步:依赖安装 第二步:下载安装Leptonica 第三步: 下 ...

  7. 毕业设计 - 题目:基于python的验证码识别 - 机器视觉 验证码识别

    文章目录 0 前言 1 项目简介 2 验证码识别步骤 2.1 灰度处理&二值化 2.2 去除边框 2.3 图像降噪 2.4 字符切割 2.5 识别 3 基于tensorflow的验证码识别 3 ...

  8. python图形验证码识别_Python验证码识别:利用pytesser识别简单图形验证码

    一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行 ...

  9. 5行Python实现验证码识别,太稳了

    很久之前,分享过一次Python代码实现验证码识别的办法. 当时采用的是pillow+pytesseract,优点是免费,较为易用.但其识别精度一般,若想要更高要求的验证码识别,初学者就只能去选择使用 ...

最新文章

  1. SmartOS之以太网精简协议栈TinyIP
  2. mybatis无mapper.xml用法
  3. campaign read in WebUI - Fiori is correct!
  4. 一小时过c语言,一小时学会C语言.docx
  5. ConcurrentHashMap核心原理,这次彻底给整明白了
  6. 在写新邮件时,在地址栏中敲入前几个字母,对于已熟悉的收件人,outlook会弹出列表...
  7. 通过QQ邮箱中转站分享文件
  8. (附源码)springboot 学生选课系统 毕业设计 612555
  9. 中国移动5G智慧港口典型业务场景分析
  10. 坚果云企业版服务器端,坚果云企业版常见问题解答
  11. 堆(heap)系列_0x0A:3种方法一次性解决堆溢出问题
  12. C语言每日一练——第1天:字母大小写转换
  13. excel 画散点图 怎么设置图片的分辨率_Slynyrd像素画教程:像素画基础教程
  14. 黄哥python培训骗局
  15. “不差钱”的蔚来,为何着急回港上市?
  16. 帮助开发者和网站设计师更方便配色的在线配色工具 - PLTTS
  17. spark错误ERROR LiveListenerBus: SparkListenerBus has already stopped!
  18. LabVIEW热敏电阻温度计程序
  19. iOS和Android跨平台移动应用开发解决方案
  20. 电脑故障维修判断指导大全(2)

热门文章

  1. js 判断对象是否为空
  2. Orchard:处理1对多的关系
  3. rocketmq(三 java操作rocket API, rocketmq 幂等性)
  4. AttributeError:module 'numbers' has no attribute 'Integral'.
  5. 每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒。10元最多可喝多少瓶啤酒?
  6. 北京赛区总结,以及。。。
  7. Android一键多渠道分发打包实战和解析
  8. C#引用C++ Dll 所有類型轉換的方式(转)
  9. CentOS-6.4-i386硬盘安装
  10. error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法