python 验证码识别示例(五) 简单验证码识别 » 立即查看

今天介绍一个简单验证的识别。

主要是标准的格式,没有扭曲和变现。就用 pytesseract 去识别一下。

验证码地址:http://wscx.gjxfj.gov.cn/zfp/webroot/xfsxcx.html

需要识别的验证码是:

因为这个验证码有干扰点,所以直接识别的效果非常不好。

首先对验证码进行二值化和降噪。

效果如下:

识别结果:

识别率只有百分之四十,针对这么低的识别率,可以去切割分类,目前这个验证码很容易去切割。提高验证码的识别率问题。

二值化代码:

# coding:utf-8
import sys, os
from PIL import Image, ImageDraw

# 二值数组
t2val = {}

def twoValue(image, G):
    for y in xrange(0, image.size[1]):
        for x in xrange(0, image.size[0]):
            g = image.getpixel((x, y))
            if g > G:
                t2val[(x, y)] = 1
            else:
                t2val[(x, y)] = 0

# 根据一个点A的RGB值,与周围的8个点的RBG值比较,设定一个值N(0 <N <8),当A的RGB值与周围8个点的RGB相等数小于N时,此点为噪点
# G: Integer 图像二值化阀值
# N: Integer 降噪率 0 <N <8
# Z: Integer 降噪次数
# 输出
#  0:降噪成功
#  1:降噪失败
def clearNoise(image, N, Z):
    for i in xrange(0, Z):
        t2val[(0, 0)] = 1
        t2val[(image.size[0] - 1, image.size[1] - 1)] = 1

        for x in xrange(1, image.size[0] - 1):
            for y in xrange(1, image.size[1] - 1):
                nearDots = 0
                L = t2val[(x, y)]
                if L == t2val[(x - 1, y - 1)]:
                    nearDots += 1
                if L == t2val[(x - 1, y)]:
                    nearDots += 1
                if L == t2val[(x - 1, y + 1)]:
                    nearDots += 1
                if L == t2val[(x, y - 1)]:
                    nearDots += 1
                if L == t2val[(x, y + 1)]:
                    nearDots += 1
                if L == t2val[(x + 1, y - 1)]:
                    nearDots += 1
                if L == t2val[(x + 1, y)]:
                    nearDots += 1
                if L == t2val[(x + 1, y + 1)]:
                    nearDots += 1

                if nearDots < N:
                    t2val[(x, y)] = 1

def saveImage(filename, size):
    image = Image.new("1", size)
    draw = ImageDraw.Draw(image)

    for x in xrange(0, size[0]):
        for y in xrange(0, size[1]):
            draw.point((x, y), t2val[(x, y)])

    image.save(filename)
for i in range(1,11):
    path =  "5/" + str(i) + ".jpg"
    image = Image.open(path).convert("L")
    twoValue(image, 222)
    clearNoise(image, 3, 6)
    path1 = "5/" + str(i) + ".png"
    saveImage(path1, image.size)

识别代码:

#coding:utf-8
from common.contest import *
from PIL import Image
import pytesseract

def recognize_captcha(img_path):
    im = Image.open(img_path)
    tessdata_dir_config = ‘--tessdata-dir "C:\\Program Files (x86)\\Tesseract-OCR\\tessdata"‘
    num = pytesseract.image_to_string(im,config=tessdata_dir_config)
    return num

if __name__ == ‘__main__‘:
    for i in range(1, 11):
        img_path = "5/" + str(i) + ".png"
        res = recognize_captcha(img_path)
        strs = res.split("\n")
        print strs[0].replace(" ",‘‘)

原文地址:https://www.cnblogs.com/xuchunlin/p/11333578.html

时间: 2024-11-07 16:59:14

python 验证码识别示例(五) 简单验证码识别 » 立即查看的相关文章

python模块——random模块(简单验证码实现)

实现一个简单的验证码生成器 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # Usage: 验证码生成 import random def verification_code(digit): verify_code = "" for count in range(0, digit): int_num = random.randint(0, 9) lower_case = chr(ra

验证码的认识和简单验证码的攻防

验证码(CAPTCHA)一词,几乎是上网的人都接触过.通俗地将,验证码就是一种把坐在电脑前的人类与机器区分开来的测试,也算是一种最常见反图灵测试.一般来说,验证码由计算机生成,服务器端的计算机知道答案,但在网线这端,应该只有用户(即真正的人)知道答案,而计算机不知道. 从上面的定义里,易得: 验证码应该是不易被计算机识别或破解出来的,如果用简单的算法,也能得到极高的破解率(大于或接近于75%),则这个验证码不算一个合格的验证码. 要攻破验证码,最好的方法应该是机器学习,因为这个方法能让计算机模拟

验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数字+小写.数字+大写.数字+大小写等情况. 四位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数字+小写.数字+大写.数字+大小写等情况. 简单验证码识别:验证码类型 : 数字+字母, 纯英文, 纯数字,计算题 英数_验证码识别:纯数字,纯英文,数字+英文 中英数_验证码识别:英文.数

python 验证码识别示例(二) 复杂验证码识别

 在这篇博文中手把手教你如何去分割验证,然后进行识别. 一:下载验证码 验证码分析,图片上有折线,验证码有数字,有英文字母大小写,分类的时候需要更多的样本,验证码的字母是彩色的,图片上有雪花等噪点,因此识别改验证码难度较大 二:二值化和降噪: 三: 切割: 四:分类: 五:   测试识别率             六:总结: 综合识别率在70%左右,对于这个识别率我觉得还是挺高的,因为这个验证码的识别难度还是很大 代码: 1.  下载图片: #-*-coding:utf-8-*- import

简单验证码的识别

验证码图片均取自于国内某知名信息安全网站,通过图像处理.模板对比识别等步骤,实现了该类简单验证码图片的识别功能.同时对程序实现了可视化界面,并集成了(验证码)图片下载.(灰度值)门限手动调节等扩展功能.代码存在github,传送门请戳我. 一.程序内容及原理 本程序以Python实现,主要借助了PIL(Python Image Library,实现读取图片.读取灰度值等图像处理相关功能)及tkinter(实现界面设计相关功能)两个库.图像处理及识别的主程序的总体流程如下:导入(读取)验证码图片,

knn识别简单验证码

参考 https://www.biaodianfu.com/knn-captcha-recognition.html 内容大致一样,只是根据自己的想法加入了一些改动 KNN(k近邻算法) 算法原理请看:https://www.biaodianfu.com/knn.html 我来说一下sklearn中knn的属性和方法 sklearn.neighbors.KNeighborsClassifier(n_neighbors = 5,weights ='uniform',algorithm ='auto

基于决策树的简单验证码识别

原理 核心思想:相似的输入必会产生相似的输出. 原理:首先从训练样本矩阵中选择第一个特征进行划分,使每个子表中该特征的值全部相同(比如第一个特征是男女,则可以划分出两个子表,男表和女表),然后再在每个子表中选择下一个特征按照同样的规则继续划分更小的子表(比如第二个特征是年龄,我可以划分成三个子表(当然根据情况的不同而不同),小于18,大于18小于60,大于60,则在男女表中分别又有三个子表,每个子表下的特征值都相同),不断重复直到所有的特征全部使用完为止,此时便得到叶级子表,其中所有样本的特征值

C#简单验证码码识别

写在最前 最近做一个小玩意需要识别验证码,之前从来没接触过验证码识别这块,这可难到了我.所以,只有三番五次的麻烦度娘帮我找找验证码识别这块的资料.所幸,许多前辈分享的博文帮到了我.最终,完美的把问题解决. 我要识别的验证码属于非常简单的一种,如下图: 1.图片灰度化(把彩色的验证码图片转换成灰色图片) for(int i = 0; i < bmp.Width; i++) { for(int j = 0; j < bmp.Height; j++) { Color color = bmp.GetP

简单验证码识别 tessnet2

今天突然间对识别验证码感兴趣,于是网上搜了一下 最简单的是引用tessnet2.dll,然后通过它来识别,代码如下 1 private void button1_Click(object sender, EventArgs e) 2 { 3 string strUrl = @"http://www.gz.gov.cn/sofpro/gecs/common/image.jsp?dt=Thu%20Nov%2024%202011%2017:20:21%20GMT+0800%20(China%20Sta