一、简介
开源文档:https://github.com/sml2h3/ddddocr
目前支持最大python版本:3.12
二、使用
1、安装
Python 环境(推荐 3.7-3.10,过高版本可能兼容问题)
# 从pypi安装pip install ddddocr# 安装API服务支持pip install ddddocr[api]# 可选:安装依赖(若自动安装失败,手动补充)pip install opencv-python pillow numpy
2、使用基础ocr识别能力
主要用于识别单行文字,即文字部分占据图片的主体部分,例如常见的英数验证码等,本项目可以对中文、英文(随机大小写or通过设置结果范围圈定大小写)、数字以及部分特殊字符。
例如以下验证码图片:


(1)普通数字 / 字母/汉字混合验证码识别(最常用)
import ddddocrimport os# 初始化OCR对象(默认加载验证码识别模型)ocr = ddddocr.DdddOcr()# 读取验证码图片(code.png为你的验证码图片文件名)with open("code.png", "rb") as f: img_bytes = f.read()# 核心识别方法:classification 接收图片二进制数据,返回识别出的字符串;try: result = ocr.classification(img_bytes) print(f"识别结果:{result}")except Exception as e: print(f"识别失败:{e}")
(2)带干扰线识别
若汉字验证码有复杂背景(如干扰线、噪点),可先对图片做简单预处理(如灰度化),提升识别率:
import cv2import numpy as np# 图片预处理:灰度化 + 降噪img = cv2.imdecode(np.frombuffer(img_bytes, np.uint8), cv2.IMREAD_GRAYSCALE)# 重新编码为二进制_, img_bytes = cv2.imencode('.png', img)img_bytes = img_bytes.tobytes()
(3)滑块、点选识别功能
需要配合自动化工具处理,此处暂略。
3、HTTP API服务
(1)启动API服务
# 基础启动python -m ddddocr api# 指定端口和主机python -m ddddocr api --host 0.0.0.0 --port 8000# 开发模式(自动重载)python -m ddddocr api --reload# 查看所有选项python -m ddddocr api --help
(2)API端点说明
| | |
|---|
/initialize | | |
/switch-model | | |
/toggle-feature | | |
/ocr | | |
/detect | | |
/slide-match | | |
/slide-comparison | | |
/status | | |
/docs | | |
(3)使用示例
1.初始化服务
curl -X POST "http://localhost:8000/initialize" \ -H "Content-Type: application/json" \ -d '{"ocr": true, "det": false}'
2.OCR识别(支持颜色过滤)
curl -X POST "http://localhost:8000/ocr" \ -H "Content-Type: application/json" \ -d '{ "image": "base64_encoded_image_data", "color_filter_colors": ["red", "blue"], "png_fix": false, "probability": false }'
3.目标检测
curl -X POST "http://localhost:8000/detect" \ -H "Content-Type: application/json" \ -d '{"image": "base64_encoded_image_data"}'
4.查看服务状态
curl "http://localhost:8000/status"
(4)Python客户端示例
import requestsimport base64# 读取图片并转换为base64with open("captcha.jpg", "rb") as f: image_data = base64.b64encode(f.read()).decode()# 初始化服务response = requests.post("http://localhost:8000/initialize", json={"ocr": True, "det": False})print(response.json())# OCR识别response = requests.post("http://localhost:8000/ocr", json={ "image": image_data, "color_filter_colors": ["red", "blue"] })result = response.json()print(result["data"]["text"])