python识别登录验证码图片中字符

文章描述了一种在接口测试中处理图形验证码的方法。首先调用/captcha接口获取base64编码的验证码,然后去除格式部分,将其转化为图片。接着使用ddddocr库进行字符识别,解决过程中遇到了PIL库的ANTIALIAS属性问题和ddddocr库的广告显示问题,并给出了相应的解决办法。
摘要由CSDN通过智能技术生成

应用场景:在测试接口时,需要先自动执行登录接口,登录接口需要输入图片中的字符验证码。

 实现的步骤主要有以下几步:

一、执行/captcha接口,从接口响应中提取图形验证码的base64编码值;

 二、去掉base64编码值中的格式部分,data:image\/png;base64,截取到图片的编码值;

三、对的base64编码转成验证图片;

四、利用ddddocr识别验证码上的字符;

实现的代码如下:

import base64
import ddddocr
import requests
from PIL import Image

def get_code():
    """识别出登录接口中图像验证码上的字符"""

    # 请求接口,解析响应中的base64编码数据
    url = "https://xxxxxxx/api/captcha"
    res = requests.request("post", url).json()
    res_data = res['data']['url']
    # key = res_data['key']    # 解析响应中的key
    base64_data = res_data['img']    # 解析验证码的base64编码数据

    # 对的base64编码转换成图片
    data = base64_data.split(',')[1]  # 去掉编码数据中的data:image\/png;base64
    # print(data)
    img_data = base64.b64decode(data)   # 解码
    with open('./img.png', 'wb') as png:  # 打开图片
        png.write(img_data)     # 保存图片

    # 利用ddddocr识别验证码图片上的字符
    ocr = ddddocr.DdddOcr()  # 实例化对象
    with open('./img.png', 'rb') as f:
        img_bytes = f.read()  # 读取图片
    code = ocr.classification(img_data)  # 识别图片上的字符
    print('验证码: ', code)

if __name__ == '__main__':
    get_code()

遇到的问题:

1、 报错: AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS' 

解决方法:

# 修改ddddocr的_init_.py文件,将其中的ANTIALIAS替换为LANCZOS:
# image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')
image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.LANCZOS).convert('L')

2、代码执行后报:"欢迎使用ddddocr,本项目专注带动行业内卷,个人博客:wenanzhe.com......"

解决方法:

# 修改ddddocr的_init_.py文件,将show_ad修改成False:
class DdddOcr(object):
    def __init__(self, ocr: bool = True, det: bool = False, old: bool = False, beta: bool = False, use_gpu: bool = False,
                 device_id: int = 0, show_ad=False, import_onnx_path: str = "", charsets_path: str = ""):
        if show_ad:
            print("欢迎使用ddddocr,本项目专注带动行业内卷,个人博客:wenanzhe.com")
            print("训练数据支持来源于:http://146.56.204.113:19199/preview")
            print("爬虫框架feapder可快速一键接入,快速开启爬虫之旅:https://github.com/Boris-code/feapder")
            print("谷歌reCaptcha验证码 / hCaptcha验证码 / funCaptcha验证码商业级识别接口:https://yescaptcha.com/i/NSwk7i")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值