Python实践---ddddocr库应用详解

2025博客之星年度评选已开启 10w+人浏览 3.5k人参与

自动化和爬虫场景下,验证码是绕不开的关键环节,ddddocr作为一款轻量级、高精度的开源OCR工具,凭借其无需复杂配置、识别速度快、对验证码友好等特性,成为Python开发者的首选。本文将介绍ddddocr库的用法。

一、ddddocr简介

ddddocr是由国内开发者开发的OCR识别库,专注于解决各类简单验证码(数字、字母、汉字混合等)的识别问题。与Tesseract等重量级OCR工具相比,它的优势在于:

  • 零配置:无需训练模型,安装即可使用
  • 轻量级:体积小,依赖少(核心依赖仅opencv-python)
  • 速度快:单张图片识别耗时通常在0.1秒内
  • 验证码友好:对扭曲、干扰线、简单背景的验证码识别率高

二、ddddocr安装

$ pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple

三、应用场景

1、ddddocr识别图片验证码(英文字母+数字)

import ddddocr
import requests
import base64
import io

# 模拟请求头
headers = {
    "User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
}
# 图片验证码获取地址
code_image_url = "https://xxxxx/imgcode"

def getImageUrl():
    try:
         # 请求获取验证码图片
         response = requests.get(url = code_image_url, headers = headers, timeout = 5, verify=False)
         if response.status_code == 200:
            data = response.json()
            image_url = data.get("data")
            print(f"获取验证码图片二进制数据集成功...")
            _, encoded_image = image_url.split(',', 1)
            # 将图片二进制数据进行解码
            decoded_image = base64.b64decode(encoded_image)
            # 识别验证码内容
            ocr = ddddocr.DdddOcr()
            res = ocr.classification(decoded_image)
            print(f"验证码识别成功:{res}")
            return res
    except requests.exceptions.RequestException as e:
         print("请求发生异常:", e)
# 执行函数         
getImageUrl()

ddddocr常见问题

1、module ‘PIL.Image‘ has no attribute ‘ANTIALIAS

问题说明

pillow的10.0.0版本中,ANTIALIAS被删除了,改为10.0版本许可的参数即可。

解决方法

方案一(推荐):修改ddddocr的_init_.py文件,进行替换

## 原代码
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')

方案二:降级Pillow的版本至9.5.0

$ pip uninstall -y Pillow
$ pip install Pillow==9.5.0

2、No connection adapters were found for ‘data:image/png;base64,…’

问题说明

该错误常发生于使用像requests库访问Data URI scheme时。Data URI scheme(如data:image/png;base64,...)并不是一个有效的URL,只是一个嵌入在文档或网页中的二进制数据。
由于Data URI scheme不是一个指向网络上某个位置的URL,所以不能使用requests库去下载请求它。。

解决方法

Data URI中提取出Base64编码的数据,然后将其解码为二进制数据,并最终写入文件。以下是代码示例:

import base64
import io
from PIL import Image

# Data URI字符串
data_uri = 'data:image/png;base64,xxxxxxxxxxx'

# 分割Data URI以获取Base64编码的部分
_, encoded_image = data_uri.split(',', 1)

# 解码Base64字符串为二进制数据
decoded_image = base64.b64decode(encoded_image)

# 使用PIL库将二进制数据转换为图像对象
image = Image.open(io.BytesIO(decoded_image))

# 将图像保存到本地文件
image.save('output.png')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不会画画的画师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值