Python 实现验证码识别:使用 Ddddocr 库
前言
在自动化任务中,验证码识别是一项具有挑战性的任务。Ddddocr
是一个开源的 OCR 库,能帮助开发者处理各种验证码和图片中的文字识别。它基于 pytorch
和 onnxruntime
,兼容性良好,能够处理中文、英文、数字以及特殊字符。
官方项目地址:ddddocr GitHub
安装方法
从 pypi 安装
可以通过 pip
安装 ddddocr
库:
pip install ddddocr
从源码安装
如果 pip
安装存在问题,可以从源码安装:
git clone https://github.com/sml2h3/ddddocr.git
cd ddddocr
python setup.py install
注意: 不要在ddddocr
项目的根目录直接执行 import ddddocr
,也不要将项目目录命名为 ddddocr
,以避免模块冲突。
文件目录结构
项目基于 dddd_trainer
进行训练,使用 pytorch
作为训练框架,推理过程则依赖于 onnxruntime
。
ddddocr
├── ddddocr/
│ ├── __init__.py
│ ├── common.onnx # 新的OCR模型
│ ├── common_det.onnx # 目标检测模型
│ ├── common_old.onnx # 旧的OCR模型
├── README.md
├── setup.py
使用文档
基础 OCR 识别
ddddocr
主要用于识别图片中的文字,如验证码等。下面是一个简单的识别示例:
import ddddocr
# 初始化 OCR 对象
ocr = ddddocr.DdddOcr()
# 读取图片并进行OCR识别
image = open("example.jpg", "rb").read()
result = ocr.classification(image)
print(result)
使用第二套模型
如果需要切换到第二套OCR模型:
ocr = ddddocr.DdddOcr(beta=True)
image = open("example.jpg", "rb").read()
result = ocr.classification(image)
print(result)
支持透明图片的识别
对于黑色透明的 png
图片,可以使用 png_fix
参数:
result = ocr.classification(image, png_fix=True)
提示: 避免在每次OCR识别时都重新初始化 ddddocr
,因为初始化后的第一次识别速度较慢。建议只初始化一次。
目标检测功能
除了OCR识别外,ddddocr
还能检测图像中的目标区域(返回目标的边界框 bbox
),特别适合用来检测图像中的主体物体。示例:
import ddddocr
import cv2
# 初始化对象,启用目标检测
det = ddddocr.DdddOcr(det=True)
# 读取图片并进行目标检测
image = open("21.png", 'rb').read()
bboxes = det.detection(image)
print(bboxes) # 输出目标区域的坐标
# 使用 OpenCV 绘制检测结果
im = cv2.imread("21.png")
for bbox in bboxes:
x1, y1, x2, y2 = bbox
im = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2)
# 保存结果图像
if im is not None and im.size != 0:
cv2.imwrite("result.jpg", im)
else:
print("Error: 处理后的图像是空的,无法保存。")
其他能力
ddddocr
还具备一些高级功能,比如:
滑块检测
ddddocr
提供了滑块检测功能,使用 opencv
实现,适用于处理滑块验证码的场景。
OCR 结果概率输出
ddddocr
支持返回识别结果的概率分布。通过 probability=True
参数,可以返回每个字符的识别概率:
result = ocr.classification(image, probability=True)
自定义 OCR 训练模型
开发者可以导入自定义训练的 OCR 模型,增强识别效果。
实际测试
可以从一些常见的验证码服务平台(如网易、腾讯的验证码服务)获取图片进行测试。ddddocr
在处理这类验证码时表现良好,能够成功识别大多数场景中的验证码内容。
总结
ddddocr
是一个功能强大且易于使用的 Python OCR 库,特别擅长处理验证码和单行文本的识别任务。它支持透明图片的处理、目标检测以及自定义模型导入。通过简单的初始化和调用,就能快速完成图片文字的识别和目标检测任务。
对于需要处理验证码或OCR识别的项目,ddddocr
无疑是一个理想的选择。