几周前做一个小工具,需要从一堆截图和合同扫描件里批量提取短文本。试了一圈 OCR 方案,Tesseract 纯 CPU 识别汉字吃力,云厂商 OCR 接口虽然有额度但上传文件涉及权限流程麻烦,最后盯上了 ddddocr 这个库。它是本地离线运行的深度学习 OCR,主要针对图形验证码和短字符识别做了优化,调 Python 接口几行代码就能跑起来,不需要 GPU,普通机器也能扛住。
身边不少朋友一听到 ddddocr,第一反应是“爬虫验证码破解”,其实这个理解太窄了。它能做的远比“绕验证码”多:自动化测试脚本里识别测试环境的图形码、本地归档图片的关键信息抽取、对老旧系统里无法复制的验证图做辅助输入,都是正经使用场景。当然这里我得先把话说明白:本文分享的是 ddddocr 的常规 API 用法和部署经验,如果你的用途是未经授权地访问或绕过第三方服务的安全机制,那不在这次讨论范围内。所有示例我建议都先框定在授权测试和本地个人数据处理里。
这篇文章我会从环境搭建讲起,理一遍几个常用功能的调用逻辑,再给出一个可以直接抄的批量识别脚本,最后把我实际用的时候踩过的几种坑列出来。所以如果你是刚学 Python、正被各种图片识别需求搞得头大,可以放心看下去。
1. 为什么选 ddddocr:它不是通用 OCR,是“短文本识别利器”
1.1 这个库到底做了什么
ddddocr 本质上是一个运行在本地、模型格式为 ONNX 的深度学习字符识别工具。开发者训练它的时候,样本大多来自互联网上常见的图形验证码、随机字符图、滑块缺口图,所以它对短文本、扭曲字符、带干扰线的数字和字母识别效果非常突出。
和通用 OCR 相比,ddddocr 最大的特点在于“短”。你扔给它一张十来个字符的图片,它能给出比较可靠的结果;但你要是扔一整页 A4 扫描件让它识别,这不是它的强项,因为它并不是把整页布局做版面分析的引擎,而是更擅长单行/单区域内少量字符的提取。
我用一个不算特别严谨但很好懂的方式来描述它的内部流程:图片输入后,先把图像处理成固定尺寸和颜色通道的输入张量,再交给一个训练好的卷积模型做特征编码,最后把特征序列映射成若干字符。整个过程走的是轻量级推理,所以 CPU 单张识别一般也就几十到几百毫秒,这是它能“跑得动”的关键前提。
1.2 对比 Tesseract、PaddleOCR 和云厂商 API
选型的时候很多人纠结:免费 OCR 有 Tesseract,国产开源有 PaddleOCR,商用有百度/阿里腾讯云,为什么最后我会选 ddddocr。我直接放一个基于我自己测试经验的对比表,供大家参考:
| 方案 | 推理位置 | 中文整页识别能力 | 图形验证码/短字符识别 | 部署成本 | 适合场景 |
|---|---|---|---|---|---|
| Tesseract | 本地 | 中下(需要语言包和训练) | 弱(对干扰很敏感) | 低 | 扫描文档英文识别 |
| PaddleOCR | 本地 | 强(版面分析、多语言齐全) | 一般 | 中(依赖较多) | 文档、票据、整页材料 |
| 云厂商 OCR API | 云端 | 强 | 中(通常有风控) | 按次付费 | 有网络条件、数据合规的产品 |
| ddddocr | 本地 | 弱 | 很好 | 低(pip 安装即可) | 短文本、测试辅助、轻量自动化 |
Tesseract 在遇到背景色复杂或字符粘连的图片时,经常给我输出一串无意义字符,调参耗时太长;PaddleOCR 功能确实全面,但部署起来依赖太重,为一个小功能引入这么多东西不划算;云厂商 API 不便宜,还要担心数据安全。ddddocr 在很多场景里是“最短路径”,安装包不大,离线也能用,识别短字符串场景的准确率很能打。
1.3 先说清楚用法边界
和所有 OCR 工具一样,ddddocr 本身是中性的,它能被用来做自动化辅助,也可能被滥用。我个人的一个原则是:工具只用在你有权限或被授权处理的数据上。
举例来说,你给自己负责开发的内部测试系统写一个登录辅助脚本,自动读取图形验证码完成测试登录,这是正常的提效工具;但如果你把这个能力用来批量访问第三方网站、绕过对方的人机验证,这就完全变了性质。所以后面所有代码示例,我都建议你替换成自己的测试图片或开放的样例图片。先把能力学会,再把它用在该用的地方,这才是 Python 实践该有的样子。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:安装方式和首次初始化的隐藏坑
2.1 Python 版本与虚拟环境选择
ddddocr 对 Python 版本不算苛刻,常见的 3.8 到 3.11 都能正常用。我看到很多教程直接推荐全局环境 pip install,但我的建议是先建一个独立虚拟环境,避免这个包升级时把别的库带的 numpy、onnxruntime 等依赖搞乱。
Windows 或 Linux 下创建虚拟环境的命令如下:
bash复制python -m venv ocr_env
Windows 里激活环境:
bash复制ocr_env\Scripts\activate
Linux / macOS 里激活环境:
bash复制source ocr_env/bin/activate
如果你电脑上 Python 命令没生效,多半是安装 Python 时漏勾选了“Add Python to PATH”。这时候要么重新安装并勾选,要么在命令里使用完整路径 C:\Python311\python.exe -m venv ocr_env。这个问题搜“python 安装教程”能解决,但我在实际给同事配环境时发现,漏配 PATH 是很多新手卡住的第一个点。
2.2 pip 安装 ddddocr
激活虚拟环境后执行:
bash复制pip install ddddocr
如果你在国内网络环境下安装速度较慢,可以加国内镜像源:
bash复制pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple
我建议在安装时顺便升级一下 pip,因为 ddddocr 依赖的 onnxruntime 在部分 Python 版本上需要较新的 pip 才能解析出正确版本:
bash复制python -m pip install --upgrade pip
安装完成后,可以快速验证一下能不能正常导入:
bash复制python -c "import ddddocr; print(ddddocr.__version__)"
如果输出没有报错,环境基本就没问题了。整个过程比很多深度学习库简单太多,不需要你下载 CUDA,也不需要配置训练环境。
2.3 初始化 DdddOcr 时的模型加载细节
安装完库之后,第一次创建 DdddOcr 对象可能要比预期慢几秒,因为要加载 ONNX 模型。ddddocr 的部分版本在使
