首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

记录如何在RK3588板子上跑通paddle的OCR模型

  • 25-02-18 05:20
  • 2462
  • 12865
blog.csdn.net

        官网文档地址

          rknn_zoo                        RKNPU2_SDK                        RKNN Model Zoo

(经测试已经跑通)

一、PC电脑是Ubuntu22.04系统中完成环境搭建(板子是20.04)

  • 安装模型转换环境
  1. ​conda create -n rknn2 python==3.10
  2. conda activate rknn2
  • 安装Ubuntu依赖包
sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc g++

安装RKNNtoolkit2

RKNNtoolkit2的作用是将onnx模型转为rknn模型

pip install numpy==1.19.4 --only-binary=:all: -i https://pypi.tuna.tsinghua.edu.cn/simple

git clone https://github.com/rockchip-linux/rknn-toolkit2

安装 python3.9版本对应的 RKNN-Toolkit2(看清楚python版本在安装)

cd rknn-toolkit2/rknn-toolkit2/packages/
pip install -r requirements_cp39-1.6.0.txt -i https://pypi.mirrors.ustc.edu.cn/simple 

pip install rknn_toolkit2-1.6.0+81f21f4d-cp39-cp39-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

python3.10版本

pip install rknn_toolkit2-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

报错:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
tensorboard 2.10.1 requires protobuf<3.20,>=3.9.2, but you have protobuf 3.20.3 which is incompatible.
tensorflow 2.10.0 requires protobuf<3.20,>=3.9.2, but you have protobuf 3.20.3 which is incompatible.
 

解决方法:

​pip install tensorboard==2.15.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install tensorflow==2.15.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

PC 端安装 Paddle2ONNX

安装paddle2onnx

这一步为下面模型转换做打算:
paddle2onnx的作用:
paddle模型------>onnx模型
RKNNtoolkit2的作用:
onnx模型------>rknn模型

安装paddle2onnx的过程极为简单,在终端输入:

pip install paddle2onnx -i https://pypi.tuna.tsinghua.edu.cn/simple

至此,ubuntu上面的环境已经搭建完毕。

2、在板子上完成环境搭建

FastDeploy库的编译(在rk3588板子上进行)
rk3588性能强劲,可以直接在板子上借助图形界面编译FastDeploy库

使用git clone https://github.com/PaddlePaddle/FastDeploy.git指令拉取代码

官网fastdeploy官网

  1. sudo apt-get update
  2. sudo apt-get install cmake

拉去代码在本地后执行如下操作:拉去代码在本地后执行如下操作:

  1. ​cd FastDeploy
  2.  
  3. # 如果您使用的是develop分支输入以下命令 git checkout develop
  4.  
  5. mkdir build && cd build

  1. cmake ..  -DENABLE_ORT_BACKEND=OFF \
  2.           -DENABLE_RKNPU2_BACKEND=ON \
  3.           -DENABLE_VISION=ON \
  4.           -DRKNN2_TARGET_SOC=RK3588 \
  5.           -DCMAKE_INSTALL_PREFIX=${PWD}/fastdeploy-0.0.0

# build if soc is RK3588

make -j8


 

make install

### 配置环境变量

为了方便大家配置环境变量,FastDeploy提供了一键配置环境变量的脚本,在运行程序前,你需要执行以下命令

```bash
# 临时配置
source /home/orangepi/work_11.7/FastDeploy/build/fastdeploy-0.0.0/fastdeploy_init.sh

# 永久配置

source /home/orangepi/work_11.7/FastDeploy/build/fastdeploy-0.0.0/fastdeploy_init.sh

sudo cp /home/orangepi/work_11.7/FastDeploy/build/fastdeploy-0.0.0/fastdeploy_libs.conf /etc/ld.so.conf.d/

sudo ldconfig


执行完毕后FastDeploy库就编译完成了。请留意现在的地址,后面编译ocr程序时会用上

  • OCR程序的编译
    官方教程

按照官方教程安装三个模型:
此处装模型操作均在Ubuntu系统上,注意不是在板子上!!!

  1. #新建一个文件夹
  2. mkdir ppocr
  3. cd ppocr
  4. # 下载PP-OCRv4文字检测模型
  5. wget https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tar
  6. tar -xvf ch_PP-OCRv4_det_infer.tar
  7. # 下载文字方向分类器模型
  8. wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
  9. tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar
  10. # 下载PP-OCRv4文字识别模型
  11. wget https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tar
  12. tar -xvf ch_PP-OCRv4_rec_infer.tar
  13. ​

上面操作结束后会得到三个装有paddle模型的文件夹,随即进入paddle----onnx模型步骤

新的转onnx命令:

  1. paddle2onnx --model_dir ch_PP-OCRv4_det_infer \
  2. --model_filename inference.pdmodel \
  3. --params_filename inference.pdiparams \
  4. --save_file det4.onnx
  5. paddle2onnx --model_dir ch_ppocr_mobile_v2.0_cls_infer \
  6. --model_filename inference.pdmodel \
  7. --params_filename inference.pdiparams \
  8. --save_file cls2.onnx
  9. paddle2onnx --model_dir ch_PP-OCRv4_rec_infer \
  10. --model_filename inference.pdmodel \
  11. --params_filename inference.pdiparams \
  12. --save_file rec4.onnx

然后固定onnx模型的形状:
这里需要注意的是,根据ubuntu系统上python版本的不同,python指令可能会替换为python3

  1. python3 -m paddle2onnx.optimize --input_model cls2.onnx \
  2. --output_model cls2_shape.onnx \
  3. --input_shape_dict "{'x':[1,3,48,192]}"
  4. python3 -m paddle2onnx.optimize --input_model rec4.onnx \
  5. --output_model rec4_shape.onnx \
  6. --input_shape_dict "{'x':[1,3,48,320]}"
  7. python3 -m paddle2onnx.optimize --input_model det4.onnx \
  8. --output_model det4_shape.onnx \
  9. --input_shape_dict "{'x':[1,3,960,960]}"

或

  1. # 固定模型的输入shape
  2. python -m paddle2onnx.optimize --input_model ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
  3. --output_model ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
  4. --input_shape_dict "{'x':[1,3,960,960]}"
  5. python -m paddle2onnx.optimize --input_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
  6. --output_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
  7. --input_shape_dict "{'x':[1,3,48,192]}"
  8. python -m paddle2onnx.optimize --input_model ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
  9. --output_model ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
  10. --input_shape_dict "{'x':[1,3,48,320]}"

python3指令:

  1. python3 -m paddle2onnx.optimize --input_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
  2. --output_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
  3. --input_shape_dict "{'x':[1,3,48,192]}"
  4. python3 -m paddle2onnx.optimize --input_model ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
  5. --output_model ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
  6. --input_shape_dict "{'x':[1,3,48,320]}"
  7. python3 -m paddle2onnx.optimize --input_model ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
  8. --output_model ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
  9. --input_shape_dict "{'x':[1,3,960,960]}"

至此执行完毕后,paddle模型转到onnx模型完毕,接下来是onnx模型转到rknn模型。

将转换完成的onnx放到个rknpu2_tools文件夹下

随后输入以下三条指令:

  1. python3 export.py --config_path ppocrv3_det.yaml --target_platform rk3588
  2. python3 export.py --config_path ppocrv3_rec.yaml --target_platform rk3588
  3. python3 export.py --config_path ppocrv3_cls.yaml --target_platform rk3588

如下图完成转换:

如果遇到问题,试用单个命令找问题:

python3 rknpu2_tools/export.py --config_path rknpu2_tools/config/ppocrv3_det.yaml --target_platform rk3588

python3 rknpu2_tools/export.py --config_path rknpu2_tools/config/ppocrv3_rec.yaml --target_platform rk3588


 

python3 rknpu2_tools/export.py --config_path rknpu2_tools/config/ppocrv3_cls.yaml --target_platform rk3588

当三条指令结束运行时,终端内容:

这时候在每个模型的解压文件夹下就得到了rknn模型

将这些文件拷贝到板子上:
首先进入板子上刚刚编译完毕的FastDeploy文件夹下的
/FastDeploy/examples/vision/ocr/PP-OCR/rockchip/cpp
创建一个新的文件夹build
回到cpp文件夹下,打开CMakeLists.txt,对include部分进行修改。

  1. PROJECT(infer_demo C CXX)
  2. CMAKE_MINIMUM_REQUIRED (VERSION 3.10)
  3. # 指定下载解压后的fastdeploy库路径
  4. option(FASTDEPLOY_INSTALL_DIR "/home/orangepi/xiazai/FastDeploy/build/fastdeploy-0.0.0.")
  5. include(/home/orangepi/xiazai/FastDeploy/build/fastdeploy-0.0.0/FastDeploy.cmake)
  6. # 添加FastDeploy依赖头文件
  7. include_directories(${FASTDEPLOY_INCS})
  8. add_executable(infer_demo ${PROJECT_SOURCE_DIR}/infer.cc)
  9. # 添加FastDeploy库依赖
  10. target_link_libraries(infer_demo ${FASTDEPLOY_LIBS})

cd到刚刚创建的FastDeploy/examples/vision/ocr/PP-OCR/rockchip/cpp/build文件夹下,进行如下操作:

  1. # 使用编译完成的FastDeploy库编译infer_demo
  2. cmake .. -DFASTDEPLOY_INSTALL_DIR=${PWD}/fastdeploy-rockchip
  3. make -j

如果报错:

cmake -DFASTDEPLOY_INSTALL_DIR=${PWD}/fastdeploy-rockchip .
make -j

过程:

可以看到/home/orangepi/xiazai/FastDeploy/examples/vision/ocr/PP-OCR/rockchip/cpp/build/下多了一个infer_demo

我跑通的rknn库的版本2.2.0

这时候就把之前在Ubuntu上转的rknn模型拷贝到板子上,然后下载图片和字典文件

  1. # 下载图片和字典文件
  2. wget https://gitee.com/paddlepaddle/PaddleOCR/raw/release/2.6/doc/imgs/12.jpg
  3. wget https://gitee.com/paddlepaddle/PaddleOCR/raw/release/2.6/ppocr/utils/ppocr_keys_v1.txt

这时候就可以运行程序了:

./infer_demo det4_shape_rk3588_unquantized.rknn  cls2_shape_rk3588_unquantized.rknn rec4_shape_rk3588_unquantized.rknn ppocr_keys_v1.txt 12.jpg

报错:

./infer_demo: error while loading shared libraries: libopencv_video.so.3.4: cannot open shared object file: No such file or directory

解决方法:

# NPU推理
             

  1. ./infer_demo ./ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer_rk3588_unquantized.rknn \
  2. ./ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v20_cls_infer_rk3588_unquantized.rknn \
  3. ./ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer_rk3588_unquantized.rknn \
  4. ./ppocr_keys_v1.txt \
  5. ./12.jpg \
  6. 1

或

 ./infer_demo ./ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer_rk3588_unquantized.rknn                            ./ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v20_cls_infer_rk3588_unquantized.rknn                              ./ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer_rk3588_unquantized.rknn                               ./ppocr_keys_v1.txt                               ./41.jpg                               1


   

# CPU推理
python3 infer.py \
                --det_model ./ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
                --cls_model ./ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
                --rec_model ./ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
                --rec_label_file ./ppocr_keys_v1.txt \
                --image 12.jpg \
                --device cpu

参考:记录如何在RK3588板子上跑通paddle的OCR模型。重点是对齐rknntoolkit版本和板子上的librknnrt.so库_paddleocr rk3588-CSDN博客

注:本文转载自blog.csdn.net的山山而川_R的文章"https://blog.csdn.net/m0_60657960/article/details/143209851"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top