python验证码解码器库

     2023-02-23     181

关键词:

【中文标题】python验证码解码器库【英文标题】:python captcha decoder library 【发布时间】:2022-01-23 06:35:45 【问题描述】:

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

您知道可以帮助我阅读此验证码的库吗?

如果您不知道用于阅读验证码的库,您能帮我用 PIL 阅读这个(以及其他类似的)吗?

【问题讨论】:

我认为你不应该这样做 【参考方案1】:

我希望这个验证码不要在任何地方使用。

以下是一种解码方法。基本上,您需要的是这些验证码中存在的从 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])

【讨论】:

我得到:traceback(最后一次调用):文件“./decrypt_captcha.py”,第 70 行,在 print magic(sys.argv[1]) 文件“./decrypt_captcha .py”,第 66 行,在魔法中 n_sqdiff = [(sqdiff(p, n.load()), i) for i, p in enumerate(NUMBERS)] 文件“./decrypt_captcha.py”,第 58 行,在 sqdiff d += (a[x, y] - b[x, y]) ** 2 TypeError: unsupported operand type(s) for -: 'tuple' and 'int' 这似乎是一个非常非常基本的 OCR,只有一种字体。为什么不直接使用 Tesseract?它要复杂得多。我还发现有时对某些特征进行聚类很有用,但同样,Tesseract 做到了这一切,而且更有用。【参考方案2】:

我希望您善意使用它,并且不会伤害(/垃圾邮件)任何人。

我不会为您编写脚本,也不会将您转发给外部插件。但是如果你是自己写的,这可能会有所帮助:

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

【讨论】:

【参考方案3】:

出于学术原因,这是一个不错的项目,我不久前对此很感兴趣。您有几个选择:

    您可以在此站点的帮助下自己编写:[已清理的死链接]

    您使用 OpenCV 进行匹配。

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

基本上正如其他人所说,您想要去除噪音,分成单个字符并使用所选技术将其与模型字符进行比较。

【讨论】:

另一个简单的指南:ptigas.com/blog/2011/02/18/simple-captcha-solver-in-python

python识别图片验证码/滑块验证码准确率极高的ddddocr库(代码片段)

...块验证码,等一些常见的验证码场景。识别验证码的python库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库ddddocr(带带弟弟ocr)库.环境准备python版本要求小于等于python3.9版本pip安装pipinstallddddocr下... 查看详情

[原]python使用pytesseract库识别验证码(mac系统)

1.安装pythonbrewinstallpython2.安装PIL及图片格式支持下载http://www.pythonware.com/products/pil/index.htm解压tar-xzfImaging-1.1.7.tar.gz安装PILcdImaging-1.1.7sudopythonsetup.pyinstall安装图片格式支持brewinstalllibpngbrewinstal 查看详情

Firebase JWT 库无法验证 Python JWT 令牌

】FirebaseJWT库无法验证PythonJWT令牌【英文标题】:FirebaseJWTlibrarycan\'tverifyPythonJWTtoken【发布时间】:2017-07-3117:03:33【问题描述】:所以我有一个python客户端和一个PHP后端。python客户端使用pyjwt,php服务器使用FirebaseJWT。在php中编码... 查看详情

tensorflow验证码识别

...。验证码首先我们来看下验证码是怎样的,这里我们使用Python的captcha库来生成即可,这个库默认是没有安装的,所以这里我们需要先安装这个库,另外我们还需要安装pillow库,使用pip3即可:  查看详情

完美验证码识别系统,验证码插件使用帮助文档

 该验证码插件为《完美验证码识别系统V3.2.1》的python封装,提供给UiBot实现需验证码识别的场景的解决方案。载入识别库LoadDat(datPath,password)函数说明:       从文件中载入识别库文件,成功返回True... 查看详情

基于tensorflow的简单验证码识别(代码片段)

...证码的识别。生成验证码  首先生成验证码,这里使用Python的captcha库来生成即可,这个库默认是没有安装的,所以需要先安装这个库,另外还需要安装pillow库,使用pip3即可:pip3installcaptchapillow  安装好之后,就可以用 查看详情

用python机器学习搞定验证码

马哥Linux运维写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:图像类滑动类点击类语音类今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线... 查看详情

用python机器学习搞定验证码

马哥Linux运维写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:图像类滑动类点击类语音类今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线... 查看详情

用python机器学习搞定验证码

马哥Linux运维写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:图像类滑动类点击类语音类今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线... 查看详情

用python机器学习搞定验证码

Roy马哥Linux运维4月9日写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:图像类滑动类点击类语音类今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点... 查看详情

解码 Google 2 因素身份验证 QR 码格式

】解码Google2因素身份验证QR码格式【英文标题】:DecodingGoogle2FactorAuthenticationQRCodeFormat【发布时间】:2014-02-2123:23:49【问题描述】:根据wiki,google2因素身份验证密钥应该是16个字符的base32字符串。解码google发给我的二维码,发现... 查看详情

使用pythonpil库实现简单验证码的去噪处理(代码片段)

...这里仅以比较简单的验证码为例,介绍一下如何通过Python的PIL库对图片去噪处理。首先看一下未经处理的验证码图片:对图片处理主要使 查看详情

6行python实现验证码识别,太稳了!(代码片段)

...需要进行验证码识别,故需要ocr识别,推荐一个Python免费的验证码识别-ddddocr(谐音带带弟弟OCR)安装pipinstallddddocr-ihttps://pypi.tuna.tsinghua.edu.cn/simple参数说明验证随便找了一个验证码图片,使用这个库来实战 查看详情

爬虫之简单验证码处理(代码片段)

  机器视觉的一个分支:文字识别,介绍如何用一些Python库来识别和使用在线图片中的文字。将图像翻译成文字一般被称为光学文字识别(OpticalCharacterRecognition,OCR)。可以实现OCR的底层库并不多,目前很多库都是使用共同的几个... 查看详情

python生成随机五位数——模仿手机验证码(代码片段)

使用Python生成随机的五位手机验证码。#-*-coding:utf-8-*-#生成五位随机数,模仿手机验证码#导入random库,可以生成随机数importrandomdefran():L=[]M=[]#通过遍历5次,生成五个元素,并插入列表Lforiinrange(5):L.append(random.randint(0,9))iflen(L)>=5... 查看详情

python使用tesseract-ocr完成验证码识别

一、python验证码识别库安装Ubuntu版本:1.tesseract-ocr安装 sudoapt-getinstalltesseract-ocr2.pytesseract安装 sudopipinstallpytesseract3.Pillow安装 sudopipinstallpillow其他linux版本(如centos): 1.tess 查看详情

python使用tesseract-ocr完成验证码识别

一、python验证码识别库安装Ubuntu版本:1.tesseract-ocr安装 sudoapt-getinstalltesseract-ocr2.pytesseract安装 sudopipinstallpytesseract3.Pillow安装 sudopipinstallpillow其他linux版本(如centos): 1.tess 查看详情

使用tensorflow来实现一个简单的验证码识别过程

...型来实现这个验证码的识别。1.验证码准备这里我们使用python的captcha库来生成即可,这个库默认是没有安装的,所以这里我们需要先安装这个库,另外我们还需要安装pillow库安装好之后,我们就可以用如下代码来生成一个简单的... 查看详情