OCR识别验证码

如何让小智AI成为你的第二大脑——“免费”送小智AI智能音箱征文活动 10w+人浏览 427人参与

AI助手已提取文章相关产品:

1. 背景

在自动化测试、数据爬取或批量操作中,验证码常常是绕不过去的一道坎。传统OCR(光学字符识别)工具在面对带有干扰线、扭曲变形或背景噪点的验证码时,往往力不从心。而 ddddocr 则是一个专注于验证码识别的Python库,以其简单易用和高准确率赢得了不少开发者的青睐。本文将介绍如何快速上手 ddddocr 来识别常见的字符型验证码。

2. 什么是ddddocr?

ddddocr 是一个基于深度学习的开源OCR库,由国内开发者开发维护。它最大的特点是针对各种常见的验证码类型(如数字、字母组合)进行了专项优化。相较于通用OCR,它在识别带有干扰的验证码图片时表现更为出色,且使用起来非常简便。

3. 实现步骤

  • 安装   
pip install ddddocr
    • 识别代码
    import ddddocr
    
    def recognize_with_ddddocr(image_path):
        with open(image_path, 'rb') as f:
            img_bytes = f.read()
        ocr = ddddocr.DdddOcr()
        res = ocr.classification(img_bytes)
        return res
    
    if __name__ == '__main__':
        print(recognize_with_ddddocr('D:\\alirpa\\xxxx\\print-screen\\0.png')) 
    • 示例

    • 识别结果

    4. 优势与特点

    • 简单易用: API设计简洁,学习成本低。
    • 准确率高: 对于常见的、难度中等的验证码识别效果好。
    • 轻量快速: 模型相对较小,识别速度快。
    • 持续更新: 社区活跃,模型不断优化。

    5. 问题处理

    (1) 安装ddddocr,运行报错

    Traceback (most recent call last):
      File "D:\study_code\python\study\pythonProject\main\ocr.py", line 1, in <module>
        import ddddocr
      File "D:\Programs\Python\Python311\Lib\site-packages\ddddocr\__init__.py", line 10, in <module>
        import onnxruntime
      File "D:\Programs\Python\Python311\Lib\site-packages\onnxruntime\__init__.py", line 74, in <module>
        raise import_capi_exception
      File "D:\Programs\Python\Python311\Lib\site-packages\onnxruntime\__init__.py", line 24, in <module>
        from onnxruntime.capi._pybind_state import (
      File "D:\Programs\Python\Python311\Lib\site-packages\onnxruntime\capi\_pybind_state.py", line 32, in <module>
        from .onnxruntime_pybind11_state import *  # noqa
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ImportError: DLL load failed while importing onnxruntime_pybind11_state: 动态链接库(DLL)初始化例程失败。

    原因:缺 VC 运行库

    解决办法

    • 安装/修复 VC 运行库

    官方下载地址(VS 2015-2022 合并包):
    https://aka.ms/vs/17/release/vc_redist.x64.exe

    • 下载后双击 → 修复/安装 → 重启命令行再试

    python -c "import onnxruntime"

    (2) 返回结果带有广告

    欢迎使用ddddocr,本项目专注带动行业内卷,个人博客:wenanzhe.com
    训练数据支持来源于:http://146.56.204.113:19199/preview
    爬虫框架feapder可快速一键接入,快速开启爬虫之旅:https://github.com/Boris-code/feapder
    谷歌reCaptcha验证码 / hCaptcha验证码 / funCaptcha验证码商业级识别接口:https://yescaptcha.com/i/NSwk7i
    2722

    原因:ddddocr.classification() 在 1.4.x 版本里把「欢迎语」直接写进了返回值,导致第一次调用总会把那段文本带出来。

    解决办法:

    把 OCR 实例做成全局单例,只初始化一次

    import ddddocr
    
    # 全局只实例化一次
    OCR = ddddocr.DdddOcr(show_ad=False)      # show_ad=False 1.4.6+ 支持,老版本可省略
    
    def recognize_with_ddddocr(image_path):
        with open(image_path, 'rb') as f:
            return OCR.classification(f.read())
    
    if __name__ == '__main__':
        print(recognize_with_ddddocr(r'D:\alirpa\xxxx\print-screen\0.png'))
        print(recognize_with_ddddocr(r'D:\alirpa\xxxx\print-screen\2.png'))
        print(recognize_with_ddddocr(r'D:\alirpa\xxxx\print-screen\3.png'))
        print(recognize_with_ddddocr(r'D:\alirpa\xxxx\print-screen\5.png'))

    您可能感兴趣的与本文相关内容

    使用OCR技术识别验证码是自动化测试和爬虫开发中的常见需求,尽管OCR在处理复杂验证码时存在一定的局限性。以下是OCR识别验证码的方法和常用工具: ### 方法一:使用开源OCR引擎 Tesseract Tesseract 是 Google 提供的一款开源 OCR 引擎,支持多种语言,对于简单的验证码具有一定的识别能力。在 AutoIT 自动化测试中,可以通过调用 Tesseract 的命令行接口来实现验证码识别。需要注意的是,Tesseract 对于复杂验证码(如带有干扰线、背景噪声、多语言混合等)的识别效果较差,通常需要对图像进行预处理以提高识别率。图像预处理可以包括灰度化、二值化、去噪等步骤[^1]。 ### 方法二:使用 Python 第三方库 pytesseract Python 提供了对 Tesseract 的封装库 `pytesseract`,可以方便地在 Python 脚本中调用 OCR 功能。然而,`pytesseract` 的识别准确率受限于 Tesseract 引擎本身,因此在面对复杂验证码时效果不佳。为了提升识别效果,可以结合 OpenCV 或 PIL 等图像处理库对验证码图像进行预处理,如裁剪、增强对比度、去除背景干扰等[^2]。 ### 方法三:调用第三方付费 OCR API 市场上存在一些提供高精度 OCR 识别服务的第三方平台,如百度 AI、腾讯云 OCR、Google Vision API 等。这些服务通常基于深度学习模型训练而成,能够较好地应对复杂验证码识别挑战。调用这些 API 一般需要网络请求,并且部分服务为付费性质,但在识别率和稳定性方面具有优势[^2]。 ### 方法四:图像预处理与手写 OCR 在某些情况下,可以尝试自行实现 OCR 功能,尤其是在验证码图像较为简单的情况下。例如,通过遍历图像像素点,将图像二值化处理,从而提取出字符轮廓。以下是一个简单的图像二值化处理代码示例(基于 C#)[^3]: ```csharp Color c = sourcebm.GetPixel(x, y); if (c.R >= critical_value) sourcebm.SetPixel(x, y, Color.FromArgb(255, 255, 255)); ``` ### 方法五:基于 Java 的 OCR 实现 Java 也可以通过调用 Tesseract 或其他 OCR 引擎来实现验证码识别。例如,使用 `Tess4J` 库可以方便地在 Java 项目中集成 OCR 功能。此外,还可以结合图像处理库(如 JavaCV 或 ImageJ)进行图像预处理,以提高识别准确率[^4]。 ### 总结 OCR 识别验证码的技术在不断发展,但面对复杂验证码时仍然具有挑战性。建议根据实际需求选择合适的工具和方法,并结合图像预处理技术以提高识别成功率。 ---
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值