python 中关于ocr识别计算式验证码

登录中经常会遇到验证码,验证码有很多种,常见的就是输入数字or数字字母组合,近期有朋友说他们是算式的不好写,验证码是如图

经过几次讨论搜刮,整理了一份如下代码用于识别验证码算式类的

朋友最终写法:

此段代码增加循环是为了获取不对时,重新获取新的验证码

整理代码如下:

import ddddocr

while True:

    # 此为识别验证码的代码,可以把此段封装成一个函数放入这个循环中进行重复调用识别
    ocr = ddddocr.DdddOcr(show_ad=False)

    with open('812187486dbb51b9a161f1adcf958ba.png', 'rb') as f:
        code = f.read()
    res = ocr.classification(code)
    print("图片验证码为:" + res)

    # 以下是识别后的内容进行判断是否符合要求,符合就继续执行下面的代码,不符合就进入循环重新获取验证码识别内容
    if len(res) < 3 or res and not res[0].isdigit() or res == '=':
        continue
    else:
        if 'x' and '=' in res:
            value_a = int(res.split('x')[0]) * int(res.split('x')[1].rstrip("="))
            print('计算结果:' + str(value_a))
        elif '-' and '=' in res:
            value_a = int(res.split('-')[0]) - int(res.split('-')[1].rstrip("="))
            print('计算结果:' + str(value_a))
        elif '+' and '=' in res:
            value_a = int(res.split('+')[0]) + int(res.split('+')[1].rstrip("="))
            print('计算结果:' + str(value_a))
        elif '*' and '=' in res:
            value_a = int(res.split('*')[0]) * int(res.split('*')[1].rstrip("="))
            print('计算结果:' + str(value_a))
        else:
            if "x" in res:
                value_a = int(res.split("x")[0]) * int(res.split("x")[1])
                print('计算结果:' + str(value_a))
            elif "-" in res:
                value_a = int(res.split("-")[0]) - int(res.split("-")[1])
                print('计算结果:' + str(value_a))
            elif "+" in res:
                value_a = int(res.split("+")[0]) + int(res.split("+")[1])
                print('计算结果:' + str(value_a))
            elif "*" in res:
                value_a = int(res.split("*")[0]) * int(res.split("*")[1])
                print('计算结果:' + str(value_a))
            else:
                continue

整体思路就是在ddddocr库识别中识别出来的不够精准时,排除识别的不准确的结果,然后在拿算式格式要求的正确的进行计算执行,提升登录接口验证码输入准确度。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值