第二章:PaddleOCR 入门¶
PaddleOCR 简介¶
PaddleOCR 是百度开源的 OCR 工具箱,基于 PaddlePaddle 深度学习框架。它提供了丰富的 OCR 功能,包括:
- 文本检测:定位图像中的文字区域
- 文本识别:识别文字内容
- 方向分类:自动识别文本方向
- 表格识别:提取表格结构
安装 PaddleOCR¶
安装 PaddlePaddle¶
安装 PaddleOCR¶
验证安装¶
快速开始¶
基本用法¶
from paddleocr import PaddleOCR
from PIL import Image
# 初始化 OCR(启用方向分类,支持中文)
ocr = PaddleOCR(use_angle_cls=True, lang='ch', show_log=False)
# 识别单张图片
result = ocr.ocr('invoice.jpg', cls=True)
# 打印结果
for line in result[0]:
print(f"文本: {line[1][0]}, 置信度: {line[1][1]:.2f}")
批量处理¶
import os
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
# 批量识别目录中的所有图片
image_dir = './images'
for image_file in os.listdir(image_dir):
if image_file.lower().endswith(('.png', '.jpg', '.jpeg')):
image_path = os.path.join(image_dir, image_file)
result = ocr.ocr(image_path, cls=True)
print(f"文件: {image_file}")
for line in result[0]:
print(f" - {line[1][0]}")
识别表格¶
from paddleocr import PaddleOCR, draw_ocr
# 初始化(支持表格识别)
ocr = PaddleOCR(use_angle_cls=True, lang='ch', table=True)
# 识别表格
result = ocr.ocr('table.jpg', cls=True, table=True)
# 表格结果在 result[1] 中
if result[1]:
print("检测到表格:")
for table in result[1]:
print(table)
核心 API¶
PaddleOCR 类¶
PaddleOCR(
use_angle_cls=True, # 是否启用方向分类
lang='ch', # 语言: ch, en, korean, japan
det=True, # 是否启用文本检测
rec=True, # 是否启用文本识别
cls=True, # 是否启用方向分类
show_log=True, # 是否显示日志
table=False, # 是否启用表格识别
ocr_version='PP-OCRv4', # OCR 版本
use_gpu=False # 是否使用 GPU
)
返回结果格式¶
# result 结构
[
# 页面结果列表
[
# 行结果列表
[
# 每行的边界框坐标
[[x1, y1], [x2, y1], [x2, y2], [x1, y2]],
# (识别文本, 置信度)
("文本内容", 0.95)
],
...
],
# 表格结果(如果启用)
[...]
]
高级用法¶
自定义模型¶
from paddleocr import PaddleOCR
# 使用自定义检测模型
ocr = PaddleOCR(
use_angle_cls=True,
lang='ch',
det_model_dir='./custom_det_model',
rec_model_dir='./custom_rec_model',
rec_char_dict_path='./custom_dict.txt'
)
调整检测参数¶
# 调整文本检测的阈值
result = ocr.ocr(
'image.jpg',
det_db_thresh=0.3, # 检测阈值,越低越敏感
det_db_box_thresh=0.5, # 边界框阈值
det_db_unclip_ratio=1.5 # 文本框扩展比例
)
可视化结果¶
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
import cv2
# 识别
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
result = ocr.ocr('image.jpg', cls=True)
# 绘制结果
image = cv2.imread('image.jpg')
image = draw_ocr(image, result[0], font_path='./fonts/simfang.ttf')
# 保存
cv2.imwrite('result.jpg', image)
性能优化¶
使用 GPU¶
批量识别¶
# 批量识别多张图片
images = ['img1.jpg', 'img2.jpg', 'img3.jpg']
results = [ocr.ocr(img, cls=True) for img in images]
启用 FP16 加速¶
常见问题¶
1. 模型下载失败¶
2. 内存占用过高¶
# 使用轻量级模型
ocr = PaddleOCR(
use_angle_cls=True,
lang='ch',
det_model_dir='./ch_PP-OCRv3_det_infer',
rec_model_dir='./ch_PP-OCRv3_rec_infer'
)
3. 识别效果不佳¶
- 调整图像预处理(去噪、增强对比度)
- 使用专业领域的字典
- 考虑使用后处理校正
完整示例¶
#!/usr/bin/env python3
"""PaddleOCR 完整示例"""
from paddleocr import PaddleOCR
import os
def main():
# 初始化 OCR
ocr = PaddleOCR(
use_angle_cls=True,
lang='ch',
show_log=False,
det_db_thresh=0.3,
det_db_box_thresh=0.5
)
# 识别图片
image_path = 'document.jpg'
if not os.path.exists(image_path):
print(f"图片不存在: {image_path}")
return
result = ocr.ocr(image_path, cls=True)
# 输出结果
print("识别结果:")
print("-" * 50)
for line in result[0]:
text = line[1][0]
confidence = line[1][1]
print(f"{text:30s} | 置信度: {confidence:.2f}")
if __name__ == '__main__':
main()
下一步¶
下一章我们将学习 Tesseract OCR 的使用。