标签:
阅读目录
大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测方法对口令的刺探,在一定程度上增加了安全性
处理验证码需要PIL库、pytesser库的支持
1、安装PIL库
官网下载 ,下载后是exe应用程序,直接双击安装,它会自动安装到Python的lib\site-packages目录下
2、安装pytesser库
官网下载 | 博客园下载 ,下载并解压后直接放在Python的lib\site-packages目录下,同时新建一个pytheeer.pth,内容就写pytesser,意思就是指定pytesser文件夹
      
3、下载Tesseract OCR engine
官网下载 | 博客园下载 ,下载并解压,将tesseract目录下的tessdata覆盖pytesser目录下的tessdata
      

原理:彩色转灰度,灰度转二值,二值图像识别
#coding:utf-8
#-----------------------------------
#   程序:getverify.py
#   版本:v0.1
#   作者:vforbox
#   语言:python 2.7
#   操作:直接运行
#   功能:验证码识别处理
#------------------------------------
# 验证码识别,此程序只能识别数据验证码
import os
from pytesser import *  
#变更工程路径
os.chdir(‘D:\Python27\Lib\site-packages\pytesser‘)
#二值化(阈值为什么是140呢?试出来的)
threshold = 140    
table = []    
for i in range(256):    
    if i < threshold:    
        table.append(0)    
    else:    
        table.append(1)    
#由于都是数字    
#对于识别成字母的 采用该表进行修正    
rep={‘O‘:‘0‘,    
    ‘I‘:‘1‘,
    ‘L‘:‘1‘,
    ‘Z‘:‘2‘,    
    ‘S‘:‘8‘    
    };    
def getverify(name):          
    #打开图片
    im = Image.open(name)    
    #转化到灰度图(亮度)
    imgry = im.convert(‘L‘)  
    #保存上面转换的图像
    imgry.save(‘gray_‘+name)    
    #二值化,采用阈值分割法,threshold为分割点   
    out = imgry.point(table,‘1‘)
    #保存上面分割的二值化
    out.save(‘binary_‘+name)    
    #识别转化为文本
    text = image_to_string(out)    
    #识别是否正确
    text = text.strip()    
    text = text.upper();      
    for i in rep:    
        text = text.replace(i,rep[i])       
    print text    
    return text
#调用函数   
getverify(‘1.jpg‘)  #这里的图片保证在pytesser目录下

标签:
原文地址:http://www.cnblogs.com/vforbox/p/5105717.html