Vitis-AI提供了大量的预构建模型。这个项目描述了如何利用这些模型来实现车牌识别。
Xilinx模型包含许多预先构建的卷积神经网络模型。
本项目利用了其中的几个模型,以便实现一个用于车牌识别的多推理应用程序。
让我们开始吧!
第 1 步 - 创建SD卡
为以下Avnet平台提供了预建的Vitis-AI 1.3 SD卡镜像:
下载预建SD卡图像的链接可在此找到:
Vitis- ai 1.3 Avnet Vitis平台流程:https://avnet.me/vitis-ai-1.3-project
下载和提取之后。img文件可以编程到16GB的micro SD卡上。
1. 解压缩存档以获得.img文件
2. 将单板特定的SD卡图像编程到16GB(或更大)的micro SD卡中
3.在Windows机器上,使用Balena Etcher或Win32DiskImager(免费开源软件)
4.在linux机器上,使用“Balena Etcher”或“dd”工具
$ sudo dd bs=4M if=Avnet-{platform}-Vitis-AI-1-3-{date}.img of=/dev/sd{X} status=progress conv=fsync
其中{X}是一个较小的大小写字母,用于指定SD卡的设备。您可以使用“df -h”来确定哪个设备对应您的SD卡。
第 2 步 - 克隆源代码存储库
本项目中使用的源代码可以从以下存储库中获得:
https://github.com/AlbertaBeef/vitis_ai_cpp_examples
如果你有一个活跃的互联网连接,你可以简单地克隆储存库到你的嵌入式平台的根目录:
$ cd ~
$ git clone https://github.com/AlbertaBeef/vitis_ai_cpp_examples
第 3 步 - platedetect示例的概述
为了实现车牌识别示例,我们修改了一个现有的示例platedetect,该示例可以在以下目录中找到:
~/Vitis-AI/demo/Vitis-AI-Library/samples/platedetect
如果我们查看test_jpeg_platedetect.cpp源代码,我们可以看到它非常小:
int main(int argc, char *argv[]) {
string model = argv[1];
return vitis::ai::main_for_jpeg_demo(
argc, argv,
[model] {
return vitis::ai::PlateDetect::create(model);
},
process_result, 2);
}
这段代码的可视化表示如下图所示:
我们可以看到main函数使用了通用的main_for_jpeg_demo()函数,并将提供create()和run()方法的PlateDetect类的实例以及process_result()函数传递给它。
该示例可以使用以下命令运行:
1. 在引导之后,启动dpu_sw_optimization .sh脚本,该脚本将优化DDR内存的QoS配置
$ cd ~/dpu_sw_optimize/zynqmp
$ source ./zynqmp_dpu_optimize.sh
2. 关闭dmesg verbose输出:
$ dmesg -D
3.使用以下参数启动platedetect应用程序:
为第一个参数指定“sample_platedetect.jpg”
$ cd ~/Vitis-AI/demo/Vitis-AI-Library/samples/platedetect
$ ./test_jpeg_platedetect sample_platedetect.jpg
应用程序将在以下文件中生成输出:
sample_platedetect_result.jpg
在这一点上有两点值得注意:
第 4 步 -创建车牌识别应用程序
我们可以使用这个通用的main_for_video_demo(),使用一个定义我们修改过的用例的自定义类,如下图所示:
对于车牌识别示例,使用三个模型来实现3推理管道:
下图说明了此示例的修改后的代码:
源代码可以在以下位置找到:
~/vitis_ai_cpp_examples/platerecognition/test_jpeg_platerecognition.cpp
~/vitis_ai_cpp_examples/platerecognition/test_video_platerecognition.cpp
1. 构建车牌识别应用程序
$ cd ~/vitis_ai_cpp_examples/platerecognition
$ ./build.sh
2. 在图像上启动车牌识别应用程序
$ cp ~/Vitis-AI/demo/Vitis-AI-Library/samples/platedetect/sample_platedetect.jpg .
$ export PLATERECOGNITION_DEBUG=TRUE
$ ./test_jpeg_platerecognition sample_platedetect.jpg
PLATERECOGNITION_DEBUG环境变量,当设置为TRUE时,将显示由3推理管道生成的信息:
Frame 1
SSD : label=1 x,y,w,h=2,1,272,304 confidence=0.906937
PlateDetect : x,y,w,h=103,257,63,21 confidence=0.99977
PlateNum : size=288,96 color=Blue number=[jingQ2P6J2]
注意,PlateNum模型输出编号有两部分:
区域:“京Q”
数量:“2 p6j2”
3.在视频上启动车牌识别应用
$ cd ~/vitis_ai_cpp_examples/platerecognition
$ export DISPLAY=:0.0
$ xrandr--output DP-1 --mode 800x600
$ unset PLATERECOGNITION_DEBUG
$ ./test_video_platerecognition./video/plate_recognition_video.mp4
遗留的问题
本项目实现的车牌识别适用于亚洲车牌。为了支持来自其他地区的车牌,还需要进行额外的工作。
你将如何解决这个问题?
结论
到这就结束了,我希望本文将帮助您快速开始使用Avnet平台上的Vitis-AI 1.3。
如果您对此项目有任何想法、意见或问题,请在下方留言。
以上内容翻译自网络,原作者:Mario Bergeron,如涉及侵权,可联系删除。
本文转载自:电路城