从PaddleOCRv4到RK3588:基于FastDeploy的端侧OCR部署全流程解析

从PaddleOCRv4到RK3588:基于FastDeploy的端侧OCR部署全流程解析 1. 环境准备从零搭建Ubuntu20.04开发环境在RK3588上部署PaddleOCRv4之前我们需要先在Ubuntu20.04系统中搭建完整的模型转换环境。这个环节看似基础但往往决定了后续所有步骤能否顺利进行。我去年在给某智能门锁项目部署OCR时就因为在环境配置上偷懒导致后续花了三天时间排查各种诡异错误。1.1 系统级依赖安装首先执行以下命令安装基础依赖包sudo apt-get update sudo apt-get install -y libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc g这些依赖包含了模型转换过程中需要的编译器、图形库和协议缓冲支持。特别提醒不要随意更换Ubuntu版本我之前在18.04上尝试时遇到了glibc版本冲突问题最终只能重装系统。1.2 Python环境配置推荐使用Miniconda创建隔离的Python环境wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh source ~/.bashrc创建专用环境时要注意Python版本兼容性conda create -n rknn2 python3.8 # 实测3.8最稳定 conda activate rknn2 pip install numpy1.16.6 pyyaml # 必须指定numpy版本这里有个坑RKNN Toolkit对numpy版本极其敏感最新版会导致模型转换失败。我在多个项目中都遇到过因numpy版本不对产生的隐式转换失败错误。1.3 关键工具链安装模型转换需要两个核心工具pip install paddle2onnx1.0.5 # Paddle模型转ONNX pip install rknn_toolkit21.6.0 # ONNX转RKNN模型安装RKNN Toolkit时建议直接从GitHub获取最新whl文件git clone https://github.com/rockchip-linux/rknn-toolkit2.git cd rknn-toolkit2/rknn-toolkit2/package pip install rknn_toolkit2-1.6.0*.whl重要提示如果遇到网络问题可以尝试更换pip源为国内镜像但绝对不要修改系统网络配置。2. 模型获取与转换实战2.1 下载PaddleOCRv4预训练模型执行以下命令获取最新v4模型mkdir ~/PaddleOCR cd ~/PaddleOCR wget https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tar wget https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tar wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar tar -xvf ch_PP-OCRv4_det_infer.tar tar -xvf ch_PP-OCRv4_rec_infer.tar tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar这三个模型分别对应文字检测、识别和方向分类功能。建议新建一个models目录专门存放避免后续文件混乱。2.2 Paddle模型转ONNX格式使用paddle2onnx工具进行转换paddle2onnx --model_dir ch_PP-OCRv4_det_infer \ --model_filename inference.pdmodel \ --params_filename inference.pdiparams \ --save_file ch_PP-OCRv4_det_infer.onnx \ --opset_version 12转换后需要固定输入shapepython -m paddle2onnx.optimize \ --input_model ch_PP-OCRv4_det_infer.onnx \ --output_model ch_PP-OCRv4_det_infer.onnx \ --input_shape_dict {x:[1,3,960,960]}常见问题如果遇到OP not supported错误可能是opset版本过低建议尝试12或13版本。我在转换文本检测模型时就遇到过Slice算子不支持的情况。2.3 ONNX模型转RKNN格式首先需要准备配置文件以检测模型为例# ppocrv4_det.yaml model_path: ./ch_PP-OCRv4_det_infer.onnx outputs_nodes: do_quantization: False dataset: output_folder: ./output转换命令如下python rknpu2_tools/export.py \ --config_path ppocrv4_det.yaml \ --target_platform rk3588关键细节量化(quantization)选项首次部署建议关闭RK3588平台需要指定target_platform转换过程会显示详细日志注意检查是否有WARNING3. RK3588开发板环境配置3.1 交叉编译环境准备在RK3588板端需要安装基础开发工具sudo apt update sudo apt install -y git cmake make g建议使用散热良好的电源适配器编译过程中芯片温度可能达到60℃以上。我在工业现场就遇到过因散热不足导致的编译失败。3.2 FastDeploy库编译拉取最新代码git clone https://gitee.com/paddlepaddle/FastDeploy.git cd FastDeploy git checkout develop配置编译选项mkdir build cd build cmake .. -DENABLE_ORT_BACKENDOFF \ -DENABLE_RKNPU2_BACKENDON \ -DENABLE_VISIONON \ -DRKNN2_TARGET_SOCRK3588 \ -DCMAKE_INSTALL_PREFIX${PWD}/install make -j4 # 根据板子性能调整线程数 make install经验之谈-j参数不要设置太大4线程最稳定。我曾用-j8导致系统卡死不得不重启板子。4. 模型部署与性能优化4.1 部署文件结构准备将转换好的RKNN模型和测试资源整理如下deploy/ ├── models/ │ ├── det_rk3588.rknn │ ├── rec_rk3588.rknn │ └── cls_rk3588.rknn ├── images/ │ └── test.jpg └── ppocr_keys_v1.txt4.2 推理程序编译修改CMakeLists.txt关键配置include(/home/rockchip/FastDeploy/build/install/FastDeploy.cmake) target_link_libraries(infer_demo ${FASTDEPLOY_LIBS})编译命令mkdir build cd build cmake .. -DFASTDEPLOY_INSTALL_DIR/path/to/install make4.3 实际运行与调优基础推理命令./infer_demo \ ./models/det_rk3588.rknn \ ./models/cls_rk3588.rknn \ ./models/rec_rk3588.rknn \ ./ppocr_keys_v1.txt \ ./images/test.jpg \ 1 # 使用RKNPU加速性能优化技巧输入分辨率调整检测模型输入从960x960降至640x640速度提升40%开启量化模型大小可缩减至原来的1/4多线程处理使用OpenMP并行处理图像ROI区域实测在RK3588上优化后的pipeline处理1280x720图像仅需120ms完全满足实时性要求。记得第一次看到中文文本从摄像头画面中准确识别出来时那种成就感至今难忘。