base64转图片后进行ocr识别

实现:

1、base64字符串转图片
2、图片验证码进行识别

# Base64ToImage.py 

import requests
import base64


def bas64_to_image():
    login_url_base64= "或者验证码的url"     # 验证码获取url
    respose=requests.get(url=login_url_base64).json()   # 返回验证码base64字符串

    a = captchaImage.replace('data:image/png;base64,', '')    # base64字符串验证
    missing_padding = 4 - len(a) % 4
    if missing_padding:
        a += '=' * missing_padding
    print(a, file=open('base64.txt', 'w'))
    with open('base64.txt', 'r') as f_obj:
        b = base64.b64decode(f_obj.read())
        file = open('1.png', 'wb')     # 转换图片写入,如果是data:image/png,则转换成png格式
        file.write(b)
    return captchaCode

bas64_to_image()


# ocr.py

import ddddocr                       # 导入 ddddocr

# 返回验证码
import Base64ToImage

def  OcrImg():
    ocr = ddddocr.DdddOcr(show_ad=False)              # 实例化
    with open('1.png', 'rb') as f:     # 打开图片
        img_bytes = f.read()             # 读取图片
    res = ocr.classification(img_bytes)  # 识别

    return res
print(OcrImg())

可能遇到的问题(以上代码已经解决如下问题)

问题1:

binascii.Error: Invalid base64-encoded string: number of data characters (7121) cannot be 1 more than a multiple of 4

原因:

这个错误提示说明你的Base64字符串长度不是4的倍数,因此无法正确解码。这是因为Base64编码是将3个字节的二进制数据转换为4个字符,如果原始数据长度不是3的倍数,编码器会进行一些填充操作,以便使编码后的字符串长度是4的倍数。

在Python中,使用标准库中的base64模块进行解码时,如果遇到这种情况,会自动将字符串末尾的填充字符去除。但如果去除填充字符后字符串长度仍不是4的倍数,就会出现类似的错误提示。

为了解决这个问题,可以在解码之前手动将Base64字符串的末尾补上适当的填充字符,使字符串长度是4的倍数。填充字符通常为等号=,用于表示数据的结尾。例如,如果字符串长度除以4余1,就需要在末尾添加3个等号;如果余2,就需要添加2个等号;如果余3,就不需要添加任何等号。

问题2:

binascii.Error: Incorrect padding 

原因:

有可能是python base64库编码规则不太统一导致的;解决办法就是对base64解码的string补齐等号就可以了; 
python中base64串的长度需为4的整数倍,故对长度不为4整数倍的base64串需要用"='补足

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白舟的博客

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值