【幸狐Omni3576边缘计算套件试用体验】车牌识别
本文介绍了幸狐 Omni3576 边缘计算套件结合 LPRNet 算法实现车牌识别的项目设计和部署方案。
算法介绍
在城市交通管理、车辆识别和停车场管理中,车牌识别是一项重要且极具挑战性的任务。
车牌识别网络 (License Plate Recognition Network, LPRNet) 是一种专门设计用于车牌识别的深度学习模型。

LPRNet 是一种端到端的车牌识别算法,能够直接从原始图像中识别出车牌文本,相较于传统的字符分割方法更加高效和准确。
环境部署
这里简要介绍环境部署流程,详细方案参考前面关于图像识别的帖子。
Ubuntu 22.04 操作系统
Windows 系统下安装 VM 虚拟机,下载 并在虚拟机中部署 Ubuntu 22.04 系统,分配磁盘空间大于 100GB 。
RKNN-Toolkit2 安装
克隆 rknn-toolkit2 库文件(约 3 GB)
git clone https://github.com/airockchip/rknn-toolkit2.git
安装对应的 python 环境
sudo apt-get update
sudo apt-get install python3 python3-dev python3-pip
sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc
安装 RKNN-ToolKit2 依赖包
pip3 install -r rknn-toolkit2-2.3.0/rknn-toolkit2/packages/x86_64/requirements_cp310-2.3.0.txt
注意根据不同的Python版本,选择安装对应的依赖包。
安装 RKNN-ToolKit2
pip3 install rknn-toolkit2/packages/x86_64/rknn_toolkit2-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
执行指令
python3
from rknn.api import RKNN
验证安装效果。
Conda 安装
推荐使用 Conda 创建 python 虚拟环境,便于在各种应用场景下灵活切换,避免出现版本兼容问题导致无法运行。在 AI 模型的训练、模型转换的过程中需要使用不同的 python 虚拟环境。
安装 miniconda
下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh
安装miniconda
chmod 777 Miniconda3-4.6.14-Linux-x86_64.sh
bash Miniconda3-4.6.14-Linux-x86_64.sh
在计算机终端,进入 Conda base 环境
source ~/miniconda3/bin/activate
创建 RKNN-Toolkit2 Conda 环境
创建 RKNN-Toolkit2 开发 Conda 环境, -n
参数表示环境名称,指定 python 版本为 3.8
conda create -n RKNN-Toolkit2 python=3.8
进入 RKNN-Toolkit2 Conda 环境
conda activate RKNN-Toolkit2
验证 Python 版本是否使用正确
python --version
获取 RKNN-Toolkit2 安装包
git clone https://github.com/airockchip/rknn-toolkit2.git
进入文件夹
cd rknn-toolkit2
安装 RKNN-Toolkit2 相关的依赖库,cp38
为对应的 Conda 环境 python 版本,实验使用的版本为 3.8 所以使用后缀为 cp38
的依赖项
pip install tf-estimator-nightly==2.8.0.dev2021122109
pip install -r rknn-toolkit2/packages/x86_64/requirements_cp38-2.3.0.txt -i https://pypi.mirrors.ustc.edu.cn/simple/
安装 RKNN-Toolkit2
pip install rknn-toolkit2/packages/x86_64/rknn_toolkit2-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
验证是否安装成功
python
>>> from rknn.api import RKNN
至此,RKNN 推理测试的开发环境搭建完成。
推理测试
rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,最新的示例支持 mobilenet 模型部署和 yolo 模型部署。
根据该模型的 GitHub 介绍文档,支持车牌识别的库对应 LPRNet,且硬件支持 RK3576

1.克隆 rknn_model_zoo 库文件
git clone https://github.com/airockchip/rknn_model_zoo.git
2.获取 LPRNet ONNX 模型文件
cd rknn_model_zoo/examples/LPRNet/model
chmod a+x download_model.sh
./download_model.sh

3.执行 rknn_model_zoo/examples/LPRNet/python
目录下的模型转换程序 convert.py
,
conda activate RKNN-Toolkit2
cd rknn_model_zoo/examples/LPRNet/python
python3 convert.py ../model/lprnet.onnx rk3576
输出模型

编译和构建
将 ONNX 模型转换成 RKNN 模型后,对 rknn_model_zoo/examples/LPRNet
目录下的例程进行交叉编译。
编译前需设置环境变量
export GCC_COMPILER=/home/ljl/Omni3576-sdk/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
注意工具链路径,建议先 编译官方 SDK .
执行 rknn_model_zoo 目录下的 build-linux.sh 脚本
chmod +x ./build-linux.sh
./build-linux.sh -t rk3576 -a aarch64 -d yolov10

交叉编译完成后在 rknn_model_zoo/install
目录下生成 rknn_LPRNet_demo
文件夹,包含编译出来的程序和库文件

运行程序
将 rknn_LPRNet_demo
文件夹传输至开发板,ADB 执行
adb push H:\rknn_yolov10_demo /home/luckfox
或使用 FileZilla 软件将文件夹拖拽至板端。
修改目标程序权限,执行程序。
chmod a+x rknn_LPRNet_demo
./rknn_LPRNet_demo ./model/lprnet.rknn ./model/test.jpg
输出车牌识别结果

在 rknn_LPRNet_demo/model
文件夹下添加车牌图片,打印相应的识别结果

通过打印的识别过程发现,该车牌识别模型对输入的图片尺寸有要求,即宽度为 94,高度为 24
- 若图片较大可能无法保证识别结果;
- 若图中存在多张车牌,也无法准确识别。
识别效果
搜集了一些省市的车牌,用来检验识别效果

将车牌图片像素调整至 94 x 24
传输至板端 rknn_LPRNet_demo/model
文件夹下,依次执行
./rknn_lprnet_demo ./model/lprnet.rknn ./model/xxx.jpg
其中 xxx.jpg
为目标识别图片的名称。
部分车牌识别效果如下

从测试结果发现,该模式的整体识别较为准确。
注意到对于车牌包含连续重复数字的情况,只显示 1 位,对于数字 1 的识别存在疏漏的情况。
若需提升识别效果和准确率,可以考虑增加模型样本数量、提高识别分辨率、更新算法模型、扩充迭代次数等。
总结
本文介绍了幸狐 Omni3576 边缘计算套件实现车牌识别的项目设计和部署方案,包括模型介绍、推理测试、板端部署、程序运行和效果展示等,并分析了结果和误差产生原因,给出了相应的解决方案,为智能识别相关项目提供了参考。