m0_54673574 2024-04-29 14:40 采纳率: 66.7%
浏览 14

python使用Ddorc解析图片验证码出现问题

通过python使用Ddorc进行图片验证码解析时,出现了报错,但是验证码正确解析了出来,如图

img

红色异常部分经解析,为Expected shape from model of {1,19} does not match actual shape of {1,24} for output
部分python代码为

import ddddocr

cap_imgdata=cap_reponse.content
cap_image=Image.open(io.BytesIO(cap_imgdata))
buf = io.BytesIO()
cap_image.save(buf, format="PNG")
img_bytes = buf.getvalue()
orc = ddddocr.DdddOcr()
results = orc.classification(img_bytes)
print(results)
  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-29 14:40
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,看起来您在使用DDDOrc进行图像识别时遇到了一个形状不匹配的错误。这个错误是因为模型期望的输入形状与实际接收到的形状不同。

    您的代码显示了对一张图片进行处理并使用DDDOrc进行识别的过程。然而,错误提示表明模型期望的输出形状是(1, 19),但实际得到的是(1, 24)。这可能意味着模型可能只训练用于处理特定大小的文本,而当前的验证码图片包含额外的字符。

    解决这个问题的方法之一是尝试调整图片尺寸或对图片进行裁剪,使其内容更符合模型的预期。您可以先尝试将验证码图片拉伸或压缩到合适的宽度(例如,如果每个字符占据固定宽度,可以尝试减少宽度)。下面是一个简单的示例,展示了如何在PIL库的帮助下调整图片宽度:

    from PIL import Image
    
    # 假设您已经定义了一个函数来获取验证码图片的合适宽度
    def get_expected_width():
        # 根据模型需求计算宽度,这里仅作演示,实际情况需要调整
        return 19 * 10  # 假设每个字符宽10像素,总共19个字符
    
    def resize_image_to_fit(image, expected_width):
        height = int(image.height * (expected_width / image.width))
        resized_image = image.resize((expected_width, height), resample=Image.BICUBIC)
        return resized_image
    
    cap_image = Image.open(io.BytesIO(cap_imgdata))
    resized_cap_image = resize_image_to_fit(cap_image, get_expected_width())
    buf = io.BytesIO()
    resized_cap_image.save(buf, format="PNG")
    img_bytes = buf.getvalue()
    
    orc = ddddocr.DdddOcr()
    results = orc.classification(img_bytes)
    print(results)
    

    这段代码首先定义了一个get_expected_width()函数来计算期望的宽度,然后定义了一个resize_image_to_fit()函数来按比例缩放图像。接下来,我们对原始图片进行缩放,并再次尝试进行OCR识别。

    请确保根据您的具体情况进行调整,特别是get_expected_width()函数,以便为您的模型提供正确的宽度。如果问题仍然存在,您可能需要检查模型是否支持可变长度的输入,或者考虑使用其他能处理任意长度验证码的OCR库。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月29日