RDK X5 部署 PaddleOCR 文字识别实战教程
文章目录
RDK X5 部署 PaddleOCR 文字识别实战教程
背景介绍
在嵌入式 AI 场景中,文字识别(OCR)是一项广泛需求的技术——车牌识别、工业读码、文档数字化、辅助视觉等都离不开它。PaddleOCR 是百度飞桨(PaddlePaddle)推出的开源 OCR 工具套件,凭借丰富的预训练模型和多语言支持,已成为国内开发者进行 OCR 任务的优先选择。
本文将带你在 RDK X5 开发板上完整部署 PaddleOCR,利用 RDK X5 集成的 BPU(贝叶斯智能处理单元)实现高效的端侧文字检测与识别推理。
💡 核心结论:PaddleOCR 在 RDK X5 上的文字检测模型可达到 158.12 FPS,识别模型达到 245.68 FPS,完全满足实时 OCR 场景需求。全程无需连接云端,数据不出设备。
适用环境
| 项目 | 版本/型号 |
|---|---|
| 开发板 | RDK X5(旭日 X5) |
| 系统版本 | RDK OS ≥ 3.5.0 |
| 操作系统 | Ubuntu 22.04 aarch64 |
| 推理后端 | BPU(贝叶斯智能处理单元) |
| 示例来源 | D-Robotics Model Zoo,rdk_x5 分支 |
⚠️ 注意: 本文部署步骤基于 RDK OS 3.5.0 环境。如果你的 RDK OS 版本较早,建议先升级系统。如需 RDK X3 版本的部署说明,请参考 Model Zoo 仓库 rdk_x3 分支。
内容目标
完成本文后,你将能够:
- 在 RDK X5 上下载 PaddleOCR 的 BPU 量化模型(
.bin格式) - 使用命令行一键运行 PaddleOCR 文字检测与识别
- 理解检测模型(PP-OCRv3_det)与识别模型(PP-OCRv3_rec)的分工
- 自定义测试图片并获取 OCR 结果
- 解读 PaddleOCR 在 RDK X5 上的性能数据
操作步骤
步骤 1:获取 Model Zoo 源码
PaddleOCR 示例位于 D-Robotics Model Zoo 仓库中,首先克隆或进入仓库:
# 如果未克隆过仓库
git clone https://github.com/D-Robotics/rdk_model_zoo.git
cd rdk_model_zoo
# 切换到 rdk_x5 分支(RDK X5 专属)
git checkout rdk_x5
cd samples/vision/PaddleOCR
预期结果:当前目录包含 model/、runtime/python/、test_data/ 等子目录。
步骤 2:下载 BPU 量化模型
PaddleOCR 在 RDK X5 上的推理依赖两个 .bin 格式的 BPU 量化模型:
- 检测模型:
en_PP-OCRv3_det_640x640_nv12.bin(文字区域检测,NV12 输入格式) - 识别模型:
en_PP-OCRv3_rec_48x320_rgb.bin(文字内容识别,RGB 特征图输入)
cd model
bash download_model.sh
download_model.sh 会从 D-Robotics 官方归档下载两个 .bin 文件,对应以下链接:
- 检测模型:https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_x5/en_PP-OCRv3_det_640x640_nv12.bin
- 识别模型:https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_x5/en_PP-OCRv3_rec_48x320_rgb.bin
预期结果:model/ 目录下出现两个 .bin 文件,每个约 5-15 MB。
✅ 建议: 网络不稳定时,也可手动从浏览器下载上述链接,将文件放入
model/目录。
步骤 3:运行 OCR 推理
模型下载完成后,进入 Python 运行目录,使用预设脚本一键运行:
cd runtime/python
# 使用预设脚本运行
bash run.sh
run.sh 的工作流程:
- 检查检测模型和识别模型是否存在
- 若缺失则自动调用
download_model.sh - 运行
python3 main.py执行推理
如果你需要调整参数(如更换测试图片、修改检测阈值),直接运行 main.py:
python3 main.py \
--det-model-path ../../model/en_PP-OCRv3_det_640x640_nv12.bin \
--rec-model-path ../../model/en_PP-OCRv3_rec_48x320_rgb.bin \
--image-path ../../test_data/paddleocr_test.jpg \
--img-save-path ../../test_data/result.jpg
参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
--det-model-path |
检测模型路径 | ../../model/en_PP-OCRv3_det_640x640_nv12.bin |
--rec-model-path |
识别模型路径 | ../../model/en_PP-OCRv3_rec_48x320_rgb.bin |
--image-path |
输入图片路径 | ../../test_data/paddleocr_test.jpg |
--det-threshold |
检测二值化阈值 | 0.5 |
--img-save-path |
结果保存路径 | ../../test_data/result.jpg |
--priority |
模型优先级 (0-255) | 0 |
--bpu-cores |
BPU 核心编号 | [0] |
预期结果:终端打印出检测到的文字区域内容和对应文本,同时在 test_data/ 下生成结果图片。
代码详解
以下是 main.py 中 PaddleOCR 推理主流程的核心代码片段,帮助你理解背后的执行逻辑:
# 1. 构建配置并初始化模型
config = PaddleOCRConfig(
det_model_path=args.det_model_path,
rec_model_path=args.rec_model_path,
det_threshold=args.det_threshold,
)
model = PaddleOCR(config)
# 2. 设置 BPU 调度参数
model.set_scheduling_params(priority=args.priority, bpu_cores=args.bpu_cores)
# 3. 加载图片 → 推理
image = file_io.load_image(args.test_img)
boxes, texts = model.predict(image)
# 4. 打印识别结果
for i, (box, text) in enumerate(zip(boxes, texts), start=1):
logger.info(f" [{i}] {text}")
# 5. 绘制检测框 + 文字结果,保存为图片
vis_image = draw_boxes_and_texts(image, boxes, texts)
save_image(args.img_save_path, vis_image)
整个流程清晰分层:配置 → 加载 → 推理 → 可视化,开发者可以轻松替换自己的图片和数据。
🔍 深入理解:PaddleOCR 采用双模型 pipeline 设计——先用
det模型检测图片中文字区域的位置(生成检测框),再用rec模型对每个检测框内的内容进行文字识别,最终返回(坐标, 文本)的配对结果。
更换测试图片
如果你想使用自定义图片测试,将图片放入 test_data/ 目录,然后修改 image_path 参数:
python3 main.py \
--det-model-path ../../model/en_PP-OCRv3_det_640x640_nv12.bin \
--rec-model-path ../../model/en_PP-OCRv3_rec_48x320_rgb.bin \
--image-path ../../test_data/your_image.jpg \
--img-save-path ../../test_data/your_result.jpg
⚠️ 注意: 推荐使用 .jpg 或 .png 格式的图片,确保文字区域在图片中清晰可见以获得最佳识别效果。
性能数据解读
PaddleOCR 在 RDK X5 上的性能测试数据如下:
RDK X5 — PP-OCRv3(数据集 ICDAR2019-ArT)
| 模型(公版) | 尺寸(像素) | 参数量 | BPU吞吐量 |
|---|---|---|---|
| PP-OCRv3_det | 640×640 | 3.8 M | 158.12 FPS |
| PP-OCRv3_rec | 48×320 | 9.6 M | 245.68 FPS |
测试条件:RDK X5,BPU 默认配置。
解读:
- 检测模型 158.12 FPS:在 640×640 输入分辨率下,每秒能处理约 158 帧的文字区域检测,远超实时要求的 30 FPS。
- 识别模型 245.68 FPS:对每个检测框的单行文本识别速度极快,可支持多区域同时识别。
- 整体 pipeline 延迟:检测 + 识别双模型串行执行,在典型场景(图片含 3-5 个文字区域)下,端到端延迟通常小于 50ms,完全满足工业 OCR 场景的实时性要求。
选型建议:
- 实时视频流 OCR:PP-OCRv3 在 RDK X5 上的吞吐量足以处理 1080p@30fps 的视频文字识别
- 批量文档处理:高吞吐量适合批量文档的自动化 OCR 流程
- 边缘推理:端侧推理无需联网,数据不出设备,适合隐私敏感场景
⚠️ 对比参考:PP-OCRv3_det 在 RDK X3 上的吞吐量为 41.96 FPS,RDK X5 相比 X3 实现了约 3.8x 的检测性能提升。如果你正在做 X3 到 X5 的迁移,可以预期显著的性能增益。
常见问题
Q: 运行 bash run.sh 时报 “model file not found”?
A: 这是模型文件缺失导致的。手动进入 model/ 目录执行 bash download_model.sh 下载 .bin 文件,网络较慢时可手动从链接下载后放入。
Q: 推理结果中的文字识别不准确?
A: 可能的原因包括:
- 图片中文字太小或模糊(PaddleOCR 对清晰印刷体效果最佳)
- 测试图片与训练数据分布差异较大
- 可尝试降低
--det-threshold(默认 0.5)来容忍更多检测候选区域
Q: 如何在代码中批量处理多张图片?
A: 参考 main.py 中的 model.predict() 接口,在循环中加载多张图片并调用 inference 即可。注意 RDK X5 的 BPU 是串行推理架构,批量处理时不会有吞吐量增益。
参考资料
| 标题 | 链接 |
|---|---|
| PaddleOCR 官方项目 | https://github.com/PaddlePaddle/PaddleOCR |
| D-Robotics Model Zoo | https://github.com/D-Robotics/rdk_model_zoo |
| RDK X5 快速上手 | https://developer.d-robotics.cc/rdk_doc/Quick_start |
| 更多 Model Zoo 示例 | https://github.com/D-Robotics/rdk_model_zoo/tree/rdk_x5/samples/vision |
📝 来源声明:本文内容来源于 D-Robotics Model Zoo 仓库,原始文档路径:
rdk_model_zoo/samples/vision/PaddleOCR/README_cn.md @ rdk_x5 分支。经整理、补充环境版本信息、性能限定说明和代码解读后用于国内技术社区分发。原内容使用 Apache 2.0 License。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)