跳到主要内容

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.6M82.69%79.20%171ms8.5ms
PP-OCRv4 服务器143M85.20%82.69%506ms20ms
PP-OCRv3 超轻量12.4M80.1%76.9%195ms10ms

🔧 高级配置

自定义模型路径

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

📚 资源链接

💡 最佳实践

  1. 图像预处理:调整图像大小、去噪、二值化可提升识别效果
  2. 模型选择:根据场景选择合适的模型(速度优先 vs 精度优先)
  3. 参数调优:根据实际场景调整检测和识别阈值
  4. 后处理优化:对识别结果进行业务规则校验和修正
  5. 批量处理:使用多进程/多线程提升处理效率

⚠️ 注意事项

  • 首次运行会自动下载模型,需要网络连接
  • GPU版本需要安装对应的CUDA和cuDNN
  • 移动端部署需要使用Paddle Lite进行模型转换
  • 不同语言的识别需要加载对应的语言模型

🔄 更新日志

  • 2024.02: 发布 PP-OCRv4,精度和速度进一步提升
  • 2023.08: 支持表格识别和版面分析
  • 2022.11: 发布 PP-OCRv3,模型更轻量
  • 2021.12: 发布多语言模型,支持80+语言