瑞芯微Rockchip开发者社区
直播中

jf_07365693

1年用户 136经验值
擅长:嵌入式技术 控制/MCU
私信 关注
[讨论]

【幸狐Omni3576边缘计算套件试用体验】车牌识别

car_plate_recog

【幸狐Omni3576边缘计算套件试用体验】车牌识别

本文介绍了幸狐 Omni3576 边缘计算套件结合 LPRNet 算法实现车牌识别的项目设计和部署方案。

算法介绍

在城市交通管理、车辆识别和停车场管理中,车牌识别是一项重要且极具挑战性的任务。

车牌识别网络 (License Plate Recognition Network, LPRNet) 是一种专门设计用于车牌识别的深度学习模型。

LPRNet_paper.jpg

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

lprnet_github_table.jpg

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

lprnet_onnx.jpg

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

输出模型

lprnet_onnx-convert-rknn.jpg

编译和构建

将 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

lprnet_build_model.jpg

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

lprnet_build_files.jpg

运行程序

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

输出车牌识别结果

lprnet_recog_test_xiang.jpg

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

lprnet_recog_su.jpg

通过打印的识别过程发现,该车牌识别模型对输入的图片尺寸有要求,即宽度为 94,高度为 24

  • 若图片较大可能无法保证识别结果;
  • 若图中存在多张车牌,也无法准确识别。

识别效果

搜集了一些省市的车牌,用来检验识别效果

car_plate_list.jpg

将车牌图片像素调整至 94 x 24 传输至板端 rknn_LPRNet_demo/model 文件夹下,依次执行

./rknn_lprnet_demo ./model/lprnet.rknn ./model/xxx.jpg

其中 xxx.jpg 为目标识别图片的名称。

部分车牌识别效果如下

lprnet_recog.jpg

从测试结果发现,该模式的整体识别较为准确。

注意到对于车牌包含连续重复数字的情况,只显示 1 位,对于数字 1 的识别存在疏漏的情况。

若需提升识别效果和准确率,可以考虑增加模型样本数量、提高识别分辨率、更新算法模型、扩充迭代次数等。

总结

本文介绍了幸狐 Omni3576 边缘计算套件实现车牌识别的项目设计和部署方案,包括模型介绍、推理测试、板端部署、程序运行和效果展示等,并分析了结果和误差产生原因,给出了相应的解决方案,为智能识别相关项目提供了参考。

回帖(1)

无垠的广袤

2025-4-1 22:36:40
图片尺寸只能是固定值才能识别吗?怎么解决这个问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分