简介:本文详细介绍如何调用PaddleOCR实现中文文字识别,涵盖环境搭建、基础调用、性能优化及进阶应用,助力开发者快速掌握OCR技术。
PaddleOCR是飞桨(PaddlePaddle)深度学习框架下的开源OCR工具库,专为解决中文场景下的文字识别问题设计。其核心优势体现在三方面:
# 创建虚拟环境(推荐)
conda create -n paddleocr python=3.8
conda activate paddleocr
# 安装PaddlePaddle(GPU版示例)
pip install paddlepaddle-gpu==2.4.2.post117 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
# 安装PaddleOCR
pip install paddleocr
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # 初始化中文模型
img_path = "test.jpg"
result = ocr.ocr(img_path, cls=True)
print(result)
import cv2
img = cv2.imread("doc.jpg", 0)
_, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
参数 | 说明 | 推荐值 |
---|---|---|
lang |
语言类型 | “ch”(中文) |
rec_model_dir |
识别模型路径 | 默认PP-OCRv3 |
use_gpu |
是否使用GPU | True(如有) |
det_db_thresh |
文本检测阈值 | 0.3-0.5 |
from paddleocr import PaddleOCR, draw_ocr
import cv2
# 初始化
ocr = PaddleOCR(
use_angle_cls=True,
lang="ch",
det_db_thresh=0.4,
use_gpu=True
)
# 读取图像
img_path = "invoice.jpg"
image = cv2.imread(img_path)
# 执行识别
result = ocr.ocr(img_path, cls=True)
# 可视化结果
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path="simfang.ttf")
cv2.imwrite("result.jpg", im_show)
import os
from paddleocr import PaddleOCR
ocr = PaddleOCR(lang="ch")
image_dir = "images/"
results = {}
for img_name in os.listdir(image_dir):
if img_name.lower().endswith(('.png', '.jpg', '.jpeg')):
img_path = os.path.join(image_dir, img_name)
result = ocr.ocr(img_path)
results[img_name] = result
CUDA_VISIBLE_DEVICES
环境变量指定多卡
# 导出ONNX模型
python tools/export_model.py \
-c configs/rec/rec_chinese_common_train_v2.0.yml \
-o Global.pretrained_model=./output/rec_chinese_common_v2.0/best_accuracy \
Global.save_inference_dir=./inference/rec_chinese_common_v2.0
use_angle_cls=True
自动检测旋转角度
from paddleocr import TableSystem
table_engine = TableSystem(lang="ch")
img_path = "table.jpg"
result = table_engine(img_path)
import cv2
from paddleocr import PaddleOCR
ocr = PaddleOCR(lang="ch")
cap = cv2.VideoCapture(0) # 摄像头
while True:
ret, frame = cap.read()
if not ret:
break
# 每隔5帧处理一次
if frame_count % 5 == 0:
result = ocr.ocr(frame, cls=True)
# 在此添加结果可视化代码
cv2.imshow("OCR Demo", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 创建自定义词典文件
with open("custom_dict.txt", "w", encoding="utf-8") as f:
f.write("百度\n飞桨\nPaddleOCR\n")
# 加载词典
ocr = PaddleOCR(
lang="ch",
rec_char_dict_path="custom_dict.txt",
use_space_char=True
)
中文乱码问题:
font_path
参数指定字体文件路径GPU内存不足:
batch_size
参数(默认1)paddle.set_flags('FLAGS_fraction_of_gpu_memory_to_use', 0.3)
限制显存使用小字识别率低:
det_db_thresh
参数(建议0.3-0.5)部署方式 | 适用场景 | 性能指标 |
---|---|---|
本地Python | 开发测试 | 10FPS(CPU) |
Docker容器 | 服务器部署 | 25FPS(GPU) |
C++ SDK | 嵌入式设备 | 8FPS(ARM) |
服务化部署 | 微服务架构 | 50QPS(4核8G) |
通过系统掌握上述技术要点,开发者可高效实现从简单文档识别到复杂场景应用的中文OCR解决方案。建议从PP-OCR-Mobile模型开始实践,逐步根据业务需求调整模型精度与速度的平衡点。