PPOCR是由百度开发的一款开源深度学习OCR(光学字符识别)模型,专注于文本检测、识别与理解任务,具备多场景、多语言的字符识别能力。该模型基于大规模多样化的文本图像数据训练而成,能够有效应对复杂背景、模糊字迹、倾斜变形及特殊字体等挑战,在图像转文本任务中展现出优异的准确性和鲁棒性。其支持多种图像格式输入和轻量化部署特性,使其广泛应用于文档数字化、票据识别、车牌识别、工业质检、智能办公等多个领域。
PPOCR的开源生态为OCR技术的研究与应用提供了重大支撑,尤其在与移动端、嵌入式设备结合时,通过模型压缩与优化可实现高效的端侧文本识别,进一步拓展了其在智能终端、物联网设备、自动化系统等场景中的实用价值。随着端侧计算能力的持续提升,PPOCR有望在更多实时文本交互场景中发挥关键作用,推动OCR技术的普惠化与商业化落地。
一、环境搭建
1. Anaconda安装及使用
1.1Anaconda介绍
Anaconda是一个流行的开源软件包管理和环境管理系统,用于科学计算、数据分析和大数据处理,特别是在Python环境中。它包含了许多常用的科学计算和数据分析的软件包,并提供了一个方便的方式来管理这些软件包的安装、更新和环境配置。以下是Anaconda的一些主要特点和用途:
- 软件包管理
Anaconda提供了一个名为conda的包管理工具,可以轻松安装、更新和删除软件包。它支持数千个科学计算和数据分析相关的软件包,如NumPy、Pandas、Matplotlib等。
- 环境管理
Anaconda允许用户创建和管理多个独立的Python环境。每个环境可以有不同版本的Python和不同的软件包集合,这样可以避免版本冲突和环境污染。
- 跨平台
Anaconda可以在Windows、macOS和Linux上运行,使其成为开发人员和研究人员之间共享和复制数据分析项目的理想工具。
- 集成开发环境(IDE)
Anaconda还包含了Jupyter Notebook等强劲的交互式开发工具,使用户能够在浏览器中创建和分享文档,结合代码、公式、可视化和解释性文本。
- 大数据支持
Anaconda不仅适用于单机环境,还支持分布式计算平台,如Apache Spark,从而能够处理大规模数据和复杂的计算任务。
总之,Anaconda提供了一个全面的解决方案,使得科学计算和数据分析的开发和部署变得更加简单和高效。
1.2Anaconda安装
我们提供的虚拟机系统内已预装了Python 3.10及RKNN-Toolkit 2.1.0,专为模型转换与量化打造。若使用其他版本Python或相关工具的需求,推荐在虚拟机中另行安装Anaconda,以此避免环境冲突实现环境的完全隔离。
虚拟机系统使用的是“ELF 2开发板资料包”中提供的开发环境(路径:ELF 2开发板资料包8-开发环境)您可以选择从网络上下载Linux 版本的Miniconda,推荐访问清华大学的镜像库进行下载。
具体网址为:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
另外,您也可以在“ELF 2开发板资料包”的“06-常用工具6-2 环境搭建工具AI 安装脚本”路径下找到名为“
Miniconda3-4.7.12.1-Linux-x86_64.sh”的执行脚本。只需将该脚本上传至虚拟机中,并执行它即可完成Miniconda的安装。
第一对执行脚本赋予执行权限并执行脚本:
elf@ubuntu:~$ chmod +x Miniconda3-4.7.12.1-Linux-x86_64.sh
elf@ubuntu:~$ ./Miniconda3-4.7.12.1-Linux-x86_64.sh
按enter按键,之后输入yes,然后再设置安装路径,进行安装。

安装完之后如下图所示:

重新打开终端。命令行之前出现(base)代表安装成功。

1.3Anaconda基本使用
以下是关于conda操作指令的跨平台说明及在虚拟机上的示范:conda的操作指令是跨平台的,这意味着它们既可以在Linux系统上运行,也可以在Windows系统上执行。接下来将在虚拟机环境中进行示范。
- 查看虚拟环境列表:
conda env list

- 创建新的虚拟环境:
conda create --name <虚拟环境名称> python=<版本号>
例如:conda create –name myenv python=3.10
说明:此命令会创建一个名为<虚拟环境名称>的新虚拟环境,并安装指定版本的Python。如果不指定Python版本,则会安装Anaconda发行版中附带的Python版本。

- 激活虚拟环境:
conda activate <虚拟环境名称>
例如:conda activate myenv
说明:激活虚拟环境后,在该环境下安装的包将仅在该环境中可用,从而避免了不同项目之间的依赖冲突。

- 退出虚拟环境:
conda deactivate
说明:此命令用于退出当前激活的虚拟环境,返回到基础环境(base环境)。如再次执行命令,则会退出base环境。

- 给虚拟环境安装库:
pip install <包名>
conda install <包名>
例如:conda install numpy 或 pip install numpy
说明:一般推荐使用conda安装库,由于它会自动处理依赖关系。但在某些情况下,如果conda中没有可用的包版本,也可以使用pip进行安装。

- 删除虚拟环境:
conda env remove --name <虚拟环境名称>
例如:conda env remove –name myenv
说明:此命令会删除指定的虚拟环境及其下安装的所有包。

1.4. 创建用于部署的虚拟环境
- 创建新的虚拟环境:
elf@ubuntu:~$ conda create --name RKLLM-Toolkit-pyth3.10 python=3.10
conda create –name <虚拟环境名称> python=<版本号>
说明:此命令会创建一个名为<虚拟环境名称>的新虚拟环境,并安装指定版本的Python。如果不指定Python版本,则会安装Anaconda发行版中附带的Python版本。
- 激活虚拟环境:
elf@ubuntu:~$ conda activate RKLLM-Toolkit-pyth3.10
conda activate <虚拟环境名称>
说明:激活虚拟环境后,在该环境下安装的包将仅在该环境中可用,从而避免了不同项目之间的依赖冲突。

2.RKNN-Toolkit2介绍及安装
2.1RKNN-Toolkit2介绍
RKNN-Toolkit2是由瑞芯微电子开发的一套深度学习模型优化和推理工具。它支持多种深度学习框架(如Caffe、TensorFlow、PyTorch 等)的模型转换为RKNN格式,并提供了模型转换、量化、推理等功能。RKNN-Toolkit2主要面向在瑞芯微SoC上进行AI应用开发,但也可以用于PC平台进行模型的转换、量化、推理等操作。
2.2RKNN-Toolkit2安装
将以下两个文件拷贝到虚拟机中进行安装。
文件一:rknn_toolkit2-2.1.0+
708089d1-cp310-cp310-linux_x86_64.whl ��rknn_toolkit2-2.1.0+
708089d1-cp310-cp310-linux_x86_64.zip
文件二:
requirements_cp310-2.1.0.txt ��
requirements_cp310-2.1.0.txt
也可以在 ELF 2 开发板资料包3-例程源码3-4 AI例程源码
knn-toolkit2-2.1.0
knn-toolkit2packages路径下找到rknn_toolkit2-2.1.0+
708089d1-cp310-cp310-linux_x86_64.whl 和
requirements_cp310-2.1.0.txt
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/qwen2_vl$ pip install -r requirements_cp310-2.1.0.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/qwen2_vl$ pip install rknn_toolkit2-2.1.0+708089d1-cp310-cp310-linux_x86_64.whl -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package

注意:在安装中如果出现库版本冲突问题,再次执行安装命令会解决库版本冲突的报错问题。
3.RKNN-Toolkit-Lite2介绍及安装
3.1RKNN-Toolkit-Lite2介绍
RKNN-Toolkit-Lite2 是Rockchip为其轻量级神经网络处理单元提供的一款工具包。它专注于简化和加速深度学习模型在Rockchip硬件平台上的部署和推理过程。与RKNN-Toolkit2相比,RKNN-Toolkit-Lite2主要针对轻量级应用和较小的计算需求进行优化。
3.2开发板安装RKNN-Toolkit-Lite2
将以下文件拷贝到板卡中进行安装。
文件:
rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl
也可以在ELF 2开发板资料包3-例程源码3-4 AI例程源码
knn-toolkit2-2.1.0
knn-toolkit-lite2packages路径下找到
rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl 。
elf@elf2-desktop:~$ sudo apt-get update
elf@elf2-desktop:~$ sudo apt-get install python3-pip
elf@elf2-desktop:~$ pip install rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package

为了确认rknnlite库是否已成功安装,请启动Python交互式环境,并尝试导入该库。
elf@elf2-desktop:~$ python3
Python 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from rknnlite.api import RKNNLite
>>>

未出现报错代表安装成功。
4.交叉编译工具安装
推荐使用交叉编译工具
gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu;交叉编译工具往往向下兼容而无法向上兼容,因此不要使用 10.2 以下的版本。
链接:Downloads | 10.2-2020.11 – Arm Developer
您也可以在ELF 2开发板资料包3-例程源码3-4 AI例程源码路径下找到gcc-arm-10.2-2020.11-
x86_64-aarch64-none-linux-gnu.tar.xz。
5.虚拟机内存资源扩展
在交叉编译PPOCR时,编译器因内存不足被强制终止。可通过增加8GB交换空间解决。
创建新的交换文件:
# 创建8GB的交换文件(根据需求调整大小)
elf@ubuntu:~$ sudo dd if=/dev/zero of=/swapfile2 bs=1M count=8192
# 设置正确的权限
elf@ubuntu:~$ sudo chmod 600 /swapfile2
# 格式化为交换文件
elf@ubuntu:~$ sudo mkswap /swapfile2
# 启用新的交换文件
elf@ubuntu:~$ sudo swapon /swapfile2
验证是否生效:
elf@ubuntu:~$ free-h
total used free shared buff/cache available
Mem: 15Gi 719Mi 6.5Gi 7.0Mi 8.4Gi 14Gi
Swap: 9Gi 469Mi 9.5Gi
二、下载PPOCR模型
请将rknn_model_zoo-2.1.0.zip压缩包第一上传至虚拟机中,随后使用以下指令进行解压操作,并为解压后的rknn_model_zoo-2.1.0文件夹设置适当的权限。
RKNN Model Zoo下载地址:airockchip/rknn_model_zoo at v2.1.0
您也可以在 ELF 2 开发板资料包3-例程源码3-4 AI例程源码路径下找到rknn_model_zoo-2.1.0.zip。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ unzip rknn_model_zoo-2.1.0.zip
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ chmod -R 755 rknn_model_zoo-2.1.0
进入rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Det/model路径下载PPOCR-Det模型。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Det/model$ ./download_model.sh

进入rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Rec/model路径下载PPOCR-Det模型。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Rec/model$ ./download_model.sh

三、模型转换成rknn格式
进入rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Det/python路径下,执行以下命令进行OCR检测模型转换。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Det/python$ python3 convert.py ../model/ppocrv4_det.onnx rk3588
进入rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Rec/python路径下,执行以下命令进行OCR识别模型转换。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Rec/python$ python3 convert.py ../model/ppocrv4_rec.onnx rk3588
四、应用编译
确定模型正常转换完成后,需要先将CPP目录的例程编译出来,然后将编译出来的文件夹推送到开发板中进行板端部署推理。进入rknn_model_zoo-2.1.0路径下,先执行环境变量,然后编译例程。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ export GCC_COMPILER=/home/elf/work/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0$ ./build-linux.sh -t rk3588 -a aarch64 -d PPOCR-System
五、板卡部署及测试
编译完成会在modelzoo目录下的
install/rk3588_linux_aarch64/rknn_PPOCR-System_demo生成可执行文件、库文件、模型文件等。将模型和可执行文件等都拷贝到开发板上。
注意:库文件拷贝到板卡的/usr/lib/目录,可执行文件、模型以及测试文件可以拷贝到板卡任意路径。
elf@elf2-desktop:~$ ./rknn_ppocr_system_demo model/ppocrv4_det.rknn model/ppocrv4_rec.rknn model/test.jpg
model input num: 1, output num: 1
input tensors:
index=0, name=x, n_dims=4, dims=[1, 480, 480, 3], n_elems=691200, size=691200, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-14, scale=0.018658
output tensors:
index=0, name=sigmoid_0.tmp_0, n_dims=4, dims=[1, 1, 480, 480], n_elems=230400, size=230400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
model is NHWC input fmt
model input height=480, width=480, channel=3
model input num: 1, output num: 1
input tensors:
index=0, name=x, n_dims=4, dims=[1, 48, 320, 3], n_elems=46080, size=92160, fmt=NHWC, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
output tensors:
index=0, name=softmax_11.tmp_0, n_dims=3, dims=[1, 40, 6625, 0], n_elems=265000, size=530000, fmt=UNDEFINED, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
model is NHWC input fmt
model input height=48, width=320, channel=3
origin size=500x500 crop size=496x496
input image: 500 x 500, subsampling: 4:4:4, colorspace: YCbCr, orientation: 1
src width=500 height=500 fmt=0x1 virAddr=0x0x39c28320 fd=0
dst width=480 height=480 fmt=0x1 virAddr=0x0x39cdf4e0 fd=0
color=0x0
rga_api version 1.10.1_[0]
Error on improcess STATUS=-1
RGA error message: Unsupported function: src unsupport width stride 500, rgb888 width stride should be 16 aligned!
try convert image use cpu
finish
DRAWING OBJECT
[0] @ [(28, 37), (302, 39), (301, 71), (27, 69)]
regconize result: 纯臻营养护发素, score=0.998116
[1] @ [(26, 82), (172, 82), (172, 104), (26, 104)]
regconize result: 产品信息/参数, score=0.994699
[2] @ [(27, 112), (332, 112), (332, 134), (27, 134)]
regconize result: (45元/每公斤,100公斤起订), score=0.961024
[3] @ [(28, 142), (282, 144), (281, 163), (27, 162)]
regconize result: 每瓶22元,1000瓶起订), score=0.989327
[4] @ [(25, 179), (298, 177), (300, 194), (26, 195)]
regconize result: 【品牌】:代加工方式/OEMODM, score=0.986156
[5] @ [(26, 209), (234, 209), (234, 228), (26, 228)]
regconize result: 【品名】:纯臻营养护发素, score=0.996216
[6] @ [(26, 240), (241, 240), (241, 259), (26, 259)]
regconize result: 【产品编号】:YM-X-3011, score=0.983581
[7] @ [(413, 233), (429, 233), (429, 305), (413, 305)]
至此,就已完成PPOC在ELF 2开发板上的本地部署。希望本次实践能对屏幕前的各位小伙伴有所协助,如有任何问题,欢迎随时交流。