PaddleOCR
PaddleOCR 是百度飞桨(PaddlePaddle)团队开源的OCR工具库,提供了丰富的文本检测和识别能力,支持80多种语言识别。
🌟 核心特性
- ✅ 超轻量级:模型大小仅8.6M,适合移动端和边缘设备部署
- ✅ 多语言支持:支持80+语言的文本识别,包括中英文、日韩文等
- ✅ 丰富的模型库:提供检测、识别、方向分类等多个预训练模型
- ✅ 端到端方案:从文本检测到识别的完整pipeline
- ✅ 易于使用:提供Python、C++、Android、iOS等多端SDK
- ✅ 高性能:优化的推理引擎,支持CPU和GPU加速
📦 安装与使用
快速安装
# 安装 PaddlePaddle
pip install paddlepaddle
# 安装 PaddleOCR
pip install paddleocr
基础使用
from paddleocr import PaddleOCR, draw_ocr
# 初始化OCR模型
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
# 执行OCR识别
result = ocr.ocr('test.jpg', cls=True)
# 解析结果
for idx in range(len(result)):
res = result[idx]
for line in res:
print(line)
# 输出格式: [[[x1,y1],[x2,y2],[x3,y3],[x4,y4]], ('识别文字', 置信度)]
指定识别语言
# 英文识别
ocr = PaddleOCR(lang='en')
# 日文识别
ocr = PaddleOCR(lang='japan')
# 韩文识别
ocr = PaddleOCR(lang='korean')
🏗️ 技术架构
PaddleOCR 采用了经典的 检测+识别 两阶段架构:
graph LR
A[输入图像] --> B[文本检测]
B --> C[方向分类]
C --> D[文本识别]
D --> E[输出结果]
B -->|DB/SAST/EAST| B1[检测模型]
C -->|方向分类器| C1[角度校正]
D -->|CRNN/SVTR| D1[识别模型]
核心模块
1. 文本检测模块
支持多种检测算法:
- DB (Differentiable Binarization):默认算法,速度快精度高
- SAST:适合长文本检测
- EAST:经典检测算法
- PSENet:适合密集文本场景
2. 方向分类模块
- 自动识别文本方向(0°, 90°, 180°, 270°)
- 支持文本行角度矫正
- 提升识别准确率
3. 文本识别模块
支持多种识别算法:
- CRNN:经典识别网络
- SVTR:最新高精度模型
- RARE:支持不规则文本
- SRN:支持多方向文本
🎯 应用场景
1. 证件识别
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
# 身份证识别
result = ocr.ocr('id_card.jpg', cls=True)
# 提取关键信息
for line in result[0]:
text = line[1][0]
confidence = line[1][1]
print(f"识别文本: {text}, 置信度: {confidence:.2f}")
2. 表格识别
from paddleocr import PPStructure
# 初始化表格识别模型
table_engine = PPStructure(show_log=True, image_orientation=True)
# 识别表格
result = table_engine('table.jpg')
# 输出表格HTML
for line in result:
if line['type'] == 'table':
print(line['res']['html'])
3. 版面分析
from paddleocr import PPStructure
# 初始化版面分析
layout_engine = PPStructure(
table=False,
ocr=True,
show_log=True
)
# 分析文档版面
result = layout_engine('document.jpg')
# 输出版面结构
for region in result:
print(f"类型: {region['type']}, 位置: {region['bbox']}")
📊 模型性能对比
| 模型 | 大小 | 检测精度 | 识别精度 | CPU速度 | GPU速度 |
|---|---|---|---|---|---|
| PP-OCRv4 超轻量 | 8.6M | 82.69% | 79.20% | 171ms | 8.5ms |
| PP-OCRv4 服务器 | 143M | 85.20% | 82.69% | 506ms | 20ms |
| PP-OCRv3 超轻量 | 12.4M | 80.1% | 76.9% | 195ms | 10ms |
🔧 高级配置
自定义模型路径
ocr = PaddleOCR(
det_model_dir='./inference/det',
rec_model_dir='./inference/rec',
cls_model_dir='./inference/cls',
use_angle_cls=True,
lang='ch'
)
性能优化
# 启用GPU加速
ocr = PaddleOCR(use_gpu=True, gpu_mem=8000)
# 调整推理参数
ocr = PaddleOCR(
det_db_thresh=0.3, # 检测阈值
det_db_box_thresh=0.6, # 边框阈值
use_angle_cls=True, # 使用方向分类
use_space_char=True # 识别空格
)
批量处理
import os
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
# 批量处理图片
image_dir = './images/'
for img_name in os.listdir(image_dir):
img_path = os.path.join(image_dir, img_name)
result = ocr.ocr(img_path, cls=True)
# 保存结果
with open(f'result_{img_name}.txt', 'w', encoding='utf-8') as f:
for line in result[0]:
f.write(f"{line[1][0]}\n")
🌐 多端部署
Python部署
pip install paddleocr
C++部署
# 下载预测库
wget https://paddle-inference-lib.bj.bcebos.com/x.x.x/cxx_c/xxx.tgz
# 编译
mkdir build && cd build
cmake .. -DPADDLE_LIB=/path/to/paddle_inference
make
移动端部署
支持 Android 和 iOS 平台:
- Android: 基于Paddle Lite
- iOS: 基于Paddle Lite + Metal加速
Web部署
# 使用 Paddle.js
npm install @paddle-js-models/ocr
📚 资源链接
- 官方文档: https://github.com/PaddlePaddle/PaddleOCR
- 在线体验: https://www.paddlepaddle.org.cn/hub/scene/ocr
- 模型库: https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md
- 教程文档: https://paddlepaddle.github.io/PaddleOCR/
💡 最佳实践
- 图像预处理:调整图像大小、去噪、二值化可提升识别效果
- 模型选择:根据场景选择合适的模型(速度优先 vs 精度优先)
- 参数调优:根据实际场景调整检测和识别阈值
- 后处理优化:对识别结果进行业务规则校验和修正
- 批量处理:使用多进程/多线程提升处理效率
⚠️ 注意事项
- 首次运行会自动下载模型,需要网络连接
- GPU版本需要安装对应的CUDA和cuDNN
- 移动端部署需要使用Paddle Lite进行模型转换
- 不同语言的识别需要加载对应的语言模型
🔄 更新日志
- 2024.02: 发布 PP-OCRv4,精度和速度进一步提升
- 2023.08: 支持表格识别和版面分析
- 2022.11: 发布 PP-OCRv3,模型更轻量
- 2021.12: 发布多语言模型,支持80+语言