繁体   English   中英

python验证码解码器库

[英]python captcha decoder library

我需要python的验证码解码器来读取简单的图像验证码,如下图所示:

验证码

简单验证码

验证码

您是否知道可以帮助我阅读此验证码的图书馆?

如果您不了解用于读取验证码的库,是否可以帮助我使用PIL读取此内容(以及其他类似内容)?

我希望此验证码不会在任何地方使用。

以下是一种将其解码的伪方法。 基本上,您需要的是这些验证码中显示的从0到9的模式。 从您的示例中,我只有0 3 4 5 7 8的模式。由于所有内容都已固定在它们上,因此您知道在何处分割每个字符。 您还知道每个字符都是一定数量的固定大小和固定字体。 如果它还包含字母或更多字符,但是具有固定的大小和字体,则可以轻松地修改以下代码。

代码的作用是:a)加载模式(我认为它们被命名为n0.png,n1.png,...); b)将验证码分成NUMS个; c)对每个模式与每个分割数之间的平方差求和; d)决定分割数是总和最小的数。 它按顺序返回验证码中存在的每个数字的列表。 要获取初始模式,您可以取消注释保存拆分编号的行,在该段之后放置一个return ,并调整文件名。

import sys
from PIL import Image, ImageOps

PAT_SIZE = (8, 10)
NUMS = 3
FIRST_NUM_OFFSET = 5
NUM_OFFSET = (1, 3)


NUMBERS = []
for i in xrange(10):
    try:
        NUMBERS.append(Image.open('n%d.png' % i).load())
    except IOError:
        print "I do not know the pattern for the number %d." % i
        NUMBERS.append(None)


def magic(fname):
    captcha = ImageOps.grayscale(Image.open(fname))
    im = captcha.load()

    # Split numbers
    num = []
    for n in xrange(NUMS):
        x1, y1 = (FIRST_NUM_OFFSET + n * (NUM_OFFSET[0] + PAT_SIZE[0]),
                NUM_OFFSET[1])
        num.append(captcha.crop((x1, y1, x1 + PAT_SIZE[0], y1 + PAT_SIZE[1])))

    # If you want to save the split numbers:
    #for i, n in enumerate(num):
    #    n.save('%d.png' % i)

    def sqdiff(a, b):
        if None in (a, b): # XXX This is here just to handle missing pattern.
            return float('inf')

        d = 0
        for x in xrange(PAT_SIZE[0]):
            for y in xrange(PAT_SIZE[1]):
                d += (a[x, y] - b[x, y]) ** 2
        return d

    # Calculate a dummy sum of squared differences between the patterns
    # and each number. We assume the smallest diff is the number in the
    # "captcha".
    result = []
    for n in num:
        n_sqdiff = [(sqdiff(p, n.load()), i) for i, p in enumerate(NUMBERS)]
        result.append(min(n_sqdiff)[1])
    return result

print magic(sys.argv[1])

出于学术原因,这是一个很棒的项目,我前一段时间对此很感兴趣。 您有几种选择:

  1. 您可以在以下站点的帮助下编写自己的文件: http : //www.wausita.com/captcha/

  2. 您使用OpenCV进行匹配。

如果认为有专门的神经网络图像匹配库,但我似乎找不到。

基本上就像其他人所说的那样,您想要去除噪声,分成单个字符,并使用选定的技术将其与模型字符进行比较。

我希望您真诚地使用它,并且不会伤害任何人。

我不会为您编写脚本,也不会将您转发到外部插件。 但是,如果您自己编写此代码,则可能会有所帮助:

  • 如果您尝试解码特定的验证码模式,则应收集所有字符(我从您附带的示例中看到,这只是数字,因此不应做很多工作)。
  • 将所有字符放在一个文件中,并使用PIL进行分析
  • 将每个字符,其位置和含义保存在数组中。
  • 获取验证码图片-必要时清除背景杂讯。
  • 将验证码图像拆分为char大小,然后通过您自己制作的chars字典将其交叉。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM