整个系统是以DPU为核心,在 DPU 上部署对象检测模型实现实时智能检测,该系统视频输入可以来自 VCU 解码的视频或来自相机的实时视频图像。
Checkout So Easy 是本次介绍的项目系统名称。是在ultrascale+上利用 VCU 和 DPU 实现的智能零售系统。
Checkout So Easy 有两种应用场景:
将记录商品的视频以 mp4 等格式的视频发送到系统。借助Checkout So Easy的VCU解码器进行解码,我们将解码后的视频帧送入DPU计算商品价格。商品详情、价格、图像检测视频等结果将显示在显示器上。
商品信息是从连接到 FPGA 的摄像头捕获的。摄像头拍摄的图像将送入DPU计算商品的结果,并将详细信息显示在显示器上。与场景 1 不同的是,监视器上的结果将逐帧记录。借助 VCU 编码器,我们可以存储由帧组成的视频。当一些交易纠纷发生时,我们可以查看交易的整个过程。
https://github.com/alex0620ee05/Self-checkout-system/blob/main/Build_sdcard
构建步骤:
1.克隆完整的存储库(包括子仓库)
$ git clone --recurse-submodules $ git clone --recurse-submodules https://github.com/Xilinx/Vitis-In-Depth-Tutorial
$ cd Vitis-In-Depth-Tutorial/Runtime_and_System_Optimization/Design_Tutorials/02-ivas-ml/
注意:需要安装 Vitis 补丁:
此设计具有较大的 rootfs,并且 Vitis 2020.1 在打包超过 2GB 的 ext4 分区的 SD 卡映像时存在问题。此补丁更改了打包流程,将初始 rootfs 大小四舍五入为 ext4 分区512MB大小的第一个完整倍数。安装它:
$ cp ./vitis_patch/mkfsImage.sh ${XILINX_VITIS}/scripts/vitis/util
2.Vitis2020.1、PetaLinux2020.1和XRT2020.1源码
$ source ${XILINX_VITIS}/settings64.sh
$ source ${XILINX_PetaLinux}/settings.sh
$ source ${XILINX_XRT}/setup.sh
3.搭建硬件平台
$ cd platform/dev/zcu104_vcu
$ make
petalinux-config kernel、petalinux-build、petalinux-build --sdk时可能会出现错误。此时应该正确修改platform/dev/zcu104_vcu 和 platform/dev/zcu104_vcu/petalinux中的Makefile并重新执行出错的命令make 。
4.构建Vitis设计(添加DPU ip)
必须一次且仅一次,将 hw_src 目录中的补丁应用到 Vitis Vision 库。
$ cd ../../../hw_src/Vitis_Libraries
$ patch -p1 < ../vision_lib_area_resize_ii_fix.patch
$ cd ..
$ cp ../../../../../dpu_conf_zcu104.vh .
$ cp ../../../../../zcu10x_config .
$ make
5.获取SD卡镜像
第一步:将上面获取到的sd_card.img放入sd_card_zcu104/.
或者,可以下载预构建的sd_card.img(https://github.com/alex0620ee05/Self-checkout-system/tree/main/prebuilt/sd_card_image)
https://github.com/alex0620ee05/Self-checkout-system/tree/main/set_up_files
本节以下所有步骤均针对目标(ZCU104板)
将以下文件放入/home/root/目录:
将以下文件放入 /:
1.update.tar.gz
cd /home/root/scripts
sh ext4_auto_resize.sh
以下步骤需要开发板可联网(脚本使用wget下载)
cd /home/root/scripts
sh update.sh
sh install_vai.sh
https://github.com/alex0620ee05/Self-checkout-system/tree/main/host
编译好的文件ssd_mobilenet_v2_coco_tf.elf已经在demo/,可以跳过这一步,直接使用提供的文件。
按照Vitis-AI上的步骤构建 docker。
./docker_run.sh xilinx/vitis-ai-gpu:latest
只下载.pb文件,运行sh download_deploy_model.sh即可,此步可以跳过后面的说明。
也可以按照Xilinx/Vitis-AI/AI-Model-Zoo上的说明获取模型。
在我们的项目中,我们使用xilinx_model_sample/tf_ssdmobilenetv2_coco_300_300_3.75G作为我们的对象检测模型。
复制xilinx_model_sample/tf_ssdmobilenetv2_coco_300_300_3.75G/quantized/deploy_model.pb到host/ssd_mobilenet/.
执行./ssdmobilenet_compile_b4096.sh后,就会得到dpu_ssd_mobilenet_v2_coco_tf.elf
http://github.com/alex0620ee05/Self-checkout-system/tree/main/Vitis-AI/Vitis-AI-Library/overview/demo/tfssd_mobilenet
编译好的文件tfssdtest.so已经在demo/,可以跳过这一步,直接使用提供的文件。
按照Xilinx/Vitis-AI-Library(https://github.com/Xilinx/Vitis-AI/tree/master/Vitis-AI-Library)上的步骤操作
运行./build_final.sh,你会得到一个编译后的文件 tfssdtest.so(64位LSB共享对象,ARM aarch64格式)。
将编译后的文件复制到demo/
下一步
https://github.com/alex0620ee05/Self-checkout-system/tree/main/demo
以下步骤针对目标(ZCU104):
如果所有设置都完成,将demo/目录放入/home/root/.
sh set_monitor.sh
需要使用sd_card.img在vcu_decode/
带摄像头的实时结账系统:
python3 DEMO.py -c True
带有视频源的结帐系统:
python3 DEMO.py -v
Xilinx Vitis-AI quantizer & compiler / Xilinx Vitis-Ai-Library :
https://github.com/Xilinx/Vitis-AI
Xilinx Vitis Tutorial :
https://github.com/Xilinx/Vitis-In-Depth-Tutorial/tree/master/Runtime_and_System_Optimization/Design_Tutorials/02-ivas-ml
Checkout So Easy - Real-time Smart Retail System For FPGA :
https://www.hackster.io/maax/checkout-so-easy-real-time-smart-retail-system-for-fpga-468ad8
上面步骤需要的所有文件都有链接,链接都是开源的。完整的项目是运行在ZCU104官方板卡上,项目的完整链接如下:
https://github.com/alex0620ee05
当然按照上面的步骤,在自己的开发板上复现难度也是不大的~
- -THE END- -
往期精选
FPGA技术江湖广发江湖帖
无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,QQ微信双选,FPGA技术江湖打造最纯净最专业的技术交流学习平台。
FPGA技术江湖微信交流群
加群主微信,备注姓名+公司/学校+岗位/专业进群
FPGA技术江湖QQ交流群
备注姓名+公司/学校+岗位/专业进群