Skip to main content

文本检测与识别-PaddleOCR

本示例基于 hbm_runtime 推理引擎运行 PaddleOCR 模型进行文本检测与识别,支持中文场景的 OCR 识别与可视化,本示例代码位于/app/pydev_demo/08_OCR_sample/01_paddleOCR/目录下,本示例代码位于/app/pydev_demo/02_detection_sample/02_ultralytics_yolo11/ 目录下。

模型说明

  • 简介:

    本示例实现了基于 PaddleOCR v3 的中文文字检测与识别(两阶段 OCR)任务。整体流程包括检测文字区域(检测模型)与逐区域识别文字内容(识别模型)。

  • HBM 模型名称:

  • 检测模型(Detection):cn_PP-OCRv3_det_infer-deploy_640x640_nv12.hbm

  • 识别模型(Recognition):cn_PP-OCRv3_rec_infer-deploy_48x320_rgb.hbm

  • 输入格式:

    • 检测模型:BGR 图像 → resize 到 640×640,转换为 NV12 格式(Y、UV 分离)

    • 识别模型:旋转裁剪后的 BGR 文本块图像 → resize 到 48×320,归一化、转为 RGB 格式

  • 输出:

    • 检测模型:分割概率图(1×1×H×W),后处理得到文本框坐标

    • 识别模型:字符 token 的 logits,CTC 解码后得到识别文本字符串

  • 模型下载地址(程序自动下载):

    # 检测模型
    https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_s100/paddle_ocr/cn_PP-OCRv3_det_infer-deploy_640x640_nv12.hbm
    # 识别模型
    https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_s100/paddle_ocr/cn_PP-OCRv3_rec_infer-deploy_48x320_rgb.hbm

功能说明

  • 模型加载

    使用 hbm_runtime 分别加载文字检测与识别模型,并解析输入输出名称和形状信息,支持设置推理优先级与 BPU 核绑定。

  • 输入预处理

    • 检测模型:将原图 resize 到 640×640,并转换为 NV12 格式(用于 BPU 推理)。

    • 识别模型:将每个旋转裁剪后的文本块 resize 到 48×320,转为 RGB 格式并归一化,最终转为 NCHW 结构。

  • 推理执行

    调用 .run() 方法进行前向推理,输出包括概率图(检测)与 logits(识别)。

  • 结果后处理

    • 检测模型:

      • 对概率图二值化(使用设定阈值)

      • 查找文本区域轮廓并扩张

      • 提取旋转框并裁剪图像区域

    • 识别模型:

      • 使用 CTCLabelDecode 对 logits 解码,映射为文字字符串

    最终将识别结果以红色文字标注在空白图中,与原图拼接可视化。

环境依赖

  • 确保安装了pydev中的环境依赖
    pip install -r ../../requirements.txt
  • 安装OCR处理所需的包
    pip install pyclipper==1.3.0.post6 Pillow==9.0.1 paddlepaddle

目录结构

.
├── FangSong.ttf # 中文显示用字体
├── paddle_ocr.py # 主程序,完成文本检测与识别
├── postprocess/ # 后处理逻辑(排序、合并、解码等)
└── README.md # 使用说明

参数说明

参数名默认值说明
--det-model-path/opt/hobot/model/s100/basic/cn_PP-OCRv3_det_infer-deploy_640x640_nv12.hbm文本检测模型路径
--rec-model-path/opt/hobot/model/s100/basic/cn_PP-OCRv3_rec_infer-deploy_48x320_rgb.hbm文本识别模型路径
--priority0模型推理优先级,数值越大优先级越高
--bpu-cores[0]指定运行推理的 BPU 核心索引
--test-img/app/res/assets/gt_2322.jpg输入图像路径
--label-file/app/res/labels/ppocr_keys_v1.txt文本识别所需标签文件路径
--img-save-pathresult.jpg推理结果图像的保存路径
--threshold0.5文本区域二值化的阈值
--ratio-prime2.7文本框膨胀系数,用于检测框的形态调整

快速运行

  • 运行模型

    • 使用默认参数
      python paddle_ocr.py
    • 指定参数运行
      python paddle_ocr.py \
      --det-model-path /opt/hobot/model/s100/basic/cn_PP-OCRv3_det_infer-deploy_640x640_nv12.hbm \
      --rec-model-path /opt/hobot/model/s100/basic/cn_PP-OCRv3_rec_infer-deploy_48x320_rgb.hbm \
      --test-img /app/res/assets/gt_2322.jpg \
      --label-file /app/res/labels/ppocr_keys_v1.txt \
      --img-save-path result.jpg \
      --priority 0 \
      --bpu-cores 0 \
      --threshold 0.5 \
      --ratio-prime 2.7
  • 查看结果

    运行成功后,会将结果绘制在原图上,并保存到 --img-save-path 指定路径

    [Saved] Result saved to: result.jpg

注意事项

  • 若指定模型路径不存在,程序将尝试自动下载模型。