采用 PYNQ 和 Vitis AI 的智能办公解决方案

FPGA开发圈 2021-11-12 12:04

本文投稿作者: zst123 (github.com/zst123) 

信息通信和电子爱好者, 热衷于钻研新技术。

使用 Ultra96-V2 进行边缘 AI 和图像处理的分布式移动办公办公室管理可扩展解决方案。



项目简介


在这个项目中,我将创建一款用于智能办公室移动办公布局的应用。


现代办公室正在广泛采用“移动办公”的概念。通过“先到先得”的方式能够更有效地利用共享的空间和办公桌。然而,其中面临的问题在于,员工可能会浪费更多时间来寻找空置的办公桌。此外,跟踪占用率并在预订就系统中进行更新的工作也很单调乏味。借助基于边缘的图像处理功能,我们能够检测区域内的人员并确定办公桌是否被占用。


在技术方面,我将使用 Ultra96-V2 演示 Vitis AI 模型库和面向 PYNQ 的 DPU IP 核的编译流程。我将从零开始进行编译,这样将更方便在以后修改硬件设计,我感觉获取环境设置的过程有些混乱,所以我会为大家一步一步地进行记录。


PYNQ & Vitis AI 工作流程说明

在开始之前,有一点很重要,我们需要知道 Ultra96-V2 使用的是赛灵思 Zynq UltraScale+™ MPSoC。我们可以把它称为基于 ARM 的 FPGA,这意味着它既包含处理系统 (PS),也包含可编程逻辑 (PL)。


我将会使用 PYNQ,我们需要制作在 PS 上运行的 Python 脚本。使用预编译的 PYNQ 叠加(或比特流),我们可以在 PL 中配置深度学习处理器单元 (DPU)。在 PS 上运行的软件可以使用 DPU 来加速图像识别任务。


使用的额外硬件

除了 Ultra96-V2 软件包以外,您可能还需要以下这些额外的硬件。


1.USB 摄像头

  • 我使用的是 Logitech C170 USB 摄像头。


  • 通常,大多数 Logitech 网络摄像头应该开箱即用。其他带有 Linux 驱动程序的品牌也应该能够很好地工作。


2.有源 Mini-DisplayPort 适配器

  • 我使用的是 PowerColour Active Mini Displayport to Single-Link DVI 适配器。

  • Ultra96-V2 只输出纯 DisplayPort 信号,因此需要配备有源适配器。

  • 为了获得更好的搜索结果,您可以尝试搜索“兼容 ATI Eyefinity”的适配器。众所周知,Eyefinity 适配器是有源的。


请注意:如果您有预算限制,可以不用这些。

例如,可以使用 IP 摄像头作为替代, 有一些应用可以将您的智能手机用作 IP 摄像头。如果您使用 USB 或远程 SSH 进行连接,则可能不需要 mini-DP 适配器。


1 / 2 • Logitech C170 USB 摄像头


准备 PYNQ 镜像

我们首先将 PYNQ 加载到电路板上,并做一些测试。您可以从从官方网站下载 Avnet Ultra96-V2 v2.5 PYNQ 镜像。


http://www.pynq.io/board.html


您可以在社区版块下面找到它。



根据这些说明将镜像写入 SD 卡中。


https://pynq.readthedocs.io/en/latest/appendix.html#writing-the-sd-card


插入您的 SD 卡,在 Ubuntu 上,您将能够在磁盘 应用中看到您安装的主板。

在这种情况下,器件名称是 /dev/sdb



卸载分区:


$ umount /dev/sdb


在处理下一个命令的器件名称时要非常小心,我们将要使用 PYNQ 镜像覆盖 SD 卡内容。


您可以使用 dd 命令将 PYNQ 镜像写入 SD 卡中,我决定使用 dcfldd 来显示进度:


$ sudo dcfldd bs=4M if=ultra96v2_v2.5.img of=/dev/sdb
1536 blocks (6144Mb) written.
1574+1 records in
1574+1 records out


启动 PYNQ

插入 SD 卡并按下电源按钮,以启动电路板。


将 Micro USB 电缆从您的 PC 连接到 Ultra96-V2,您将在您的 PC 上看到一个新的以太网接口。


您现在可以通过此链接在浏览器中访问 Jupyter Notebook  http://192.168.2.1:9090


如果需要密码,那就是“xilinx”



连接到 WiFi

我们需要将电路板连接到 Wifi,因为我们将下载一些东西。如果您有 USB-to-Ethernet 适配器,您也可以使用它,并跳过这个部分。


带有脚本的 Jupyter Notebook 可以帮助您连接到 Wifi。导航到 

notebooks/common/wifi.ipynb,在这里您可以将脚本修改为您自己的 Wifi 凭证。



或者,如果您熟悉 Linux 系统,您也可以发出以下命令:


# Scan Wifi
$ ifconfig wlan0 up
$ iwlist wlan0 scan

# Connect to WEP access point
$ iwconfig wlan0 essid "YOUR_SSID_NAME" key s:YOUR_PASSWORD

# Connect to WPA access point
$ wpa_passphrase YOUR_SSID_NAME YOUR_PASSWORD > /etc/wpa_supplicant.conf
$ sudo wpa_supplicant -c /etc/wpa_supplicant.conf -i wlan0 -B


在这里,我们可以从 Web 界面打开一个新的终端:



使用 Vitis AI 升级到最新的PYNQ


在后续步骤中,我们将在终端中发出一些命令,以便下载和安装大量软件包, 这估计需要 1 个小时的时间。


我建议安装 USB 风扇或任何散热装置,因为 Ultra96-V2 会变得非常得烫手。当它很热时,处理器将开始减少热量并减慢进程。


1 / 2


从 Jupyter Notebooks 打开终端。


从 Github Repo 下载并编译 Vitis AI PYNQ DPU。这个步骤是使用 Vitis-AI 来升级 PYNQ(可能需要大约一个小时才能完成):


$ git clone --recursive --shallow-submodules https://github.com/Xilinx/DPU-PYNQ.git
$ cd DPU-PYNQ/upgrade
$ make


安装 pynq-dpu python 包:


pip3 install pynq-dpu


将 pynq-dpu notebooks 下载到您的主文件夹中


cd $PYNQ_JUPYTER_NOTEBOOKS
pynq get-notebooks pynq-dpu -p .


测试 USB 网络摄像头功能

连接您的 USB 网络摄像头并测试功能:



这里我使用的是 Logitech C170,PYNQ 可以自动检测到它,您可以使用此命令进行确认。


$ lsusb
Bus 001 Device 004: ID 046d:082b Logitech, Inc. Webcam C170


在 Jupyter 中,通过./notebooks/common/usb_webcam.ipynb 打开 notebook,您可以运行它,以查看您的网络摄像头是否正常工作。



现在,我们已经验证了该电路板功能齐全。我们可以从 Vitis AI 库编译 PYNQ DPU 镜像和模型。


准备编译环境

我们需要安装赛灵思 Vitis 和赛灵思运行时 (XRT) 2020.1 版本。对于 Vitis 和 XRT 2020.1,受支持的最新操作系统是 Ubuntu 18.04.2 LTS。


Ubuntu 20.04 不受支持,所以我无法成功安装。因此,我在虚拟机中安装了所有东西。


虚拟机上的 Ubuntu 18.04.02 LTS


通过此链接下载赛灵思运行时 (XRT) 的 .deb 文件


https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html



使用此命令来进行安装:


sudo apt install ./xrt_202010.2.6.655_18.04-amd64-xrt.deb


接下来,下载赛灵思统一 Web 安装程序,它将安装 Vitis 2020.1。您需要注册一个赛灵思帐户。请遵循此网站上的说明


https://www.xilinx.com/html_docs/xilinx2020_1/vitis_doc/juk1557377661419.html


将 swappiness 设置为较低的值也很有帮助,因为构建过程中会使用大量的 RAM。它会告知操作系统在换出到硬盘之前可以使用更多的 RAM。


https://askubuntu.com/questions/103915/how-do-i-configure-swappiness


如需更改系统 swappiness 值,通过 root 权限打开 /etc/sysctl.conf


sudo gedit /etc/sysctl.con


然后,通过添加此行来更改 swappiness。我选择将该值设置为 1。这意味着在将 RAM 交换到硬盘之前,系统将使用高达 99% 的 RAM(剩余 1%)。



应用更改。


sudo sysctl -p



现在我们准备开始编译……


为 Ultra96-V2 编译 DPU-PYNQ

我们将仔细参考本指南:


https://github.com/Xilinx/DPU-PYNQ/blob/master/boards/README.md


首先,从赛灵思 DPU-PYNQ 库中复制构建文件


git clone --recursive --shallow-submodules https://github.com/Xilinx/DPU-PYNQ.git
cd DPU-PYNQ/boards


我们必须对构建文件进行一些更改,因为它们最初是在 Vitis 2019.2 中设计的,但现在我们正在使用新版本进行编译。


在 boards 文件夹中,编辑 check_env.sh



搜索 2019.2,将其改为 2020.1



同样转至 /vitis-ai-git/DPU-TRD/dpu_ip/dpu_eu_v3_2_0,并编辑 component.xml



搜索 2019.2,将其改为 2020.1



最后,如果您想对 DPU IP 配置进行任何更改,请转至 boards/Ultra96/dpu_conf.vh。


在这个案例中,我将存储器更改为 RAM_USAGE_HIGH。



我们准备好开始编译了:


打开一个终端,并获取赛灵思工具


source /opt/Xilinx/Vitis/2020.1/settings64.sh
source /opt/xilinx/xrt/setup.sh


开始编译(请注意: Ultra96 和 Ultra96-V2 可以使用相同的方法)


$ make BOARD=Ultra96


过了一段时间后,构建再次失败了,因为它检查到版本是 2019.2,而不是 2020.1。


查看 DPU-PYNQ/boards 目录。这是因为有一个名为 PYNQ-derivative-overlays 的新文件夹。构建脚本复制了另一个名为 PYNQ-derivative-overlays 的存储库。它负责将 DPU IP 置于 PYNQ 基础叠加之上。


转至 PYNQ-derivative-overlays/dpu/ 并编辑 dpu.tcl



同样地,将 2019.2 更改为 2020.1



然后继续制作过程。


$ make BOARD=Ultra96


综合过程所花的时间最长,可能需要一个小时


完成后,您将看到以下文件, 这些文件是面向 PYNQ 的比特流叠加。



我会将这些文件上传到 Juypyter 实例中,放在一个名为 mymodel 的文件夹中。


在右上角,单击“新建 > 文件夹”



然后在文件夹中,单击“上传”并选择 3 个文件。



从 Vitis 模型库编译 YoloV3

请注意:模型是特定于您编译的 DPU(即一种 DPU 配置的模型与另一种不兼容)。例如,这意味着如果您更改编译时使用的内核数量,您还必须重新编译模型。


准备 docker 文件


cd DPU-PYNQ/host
mkdir -p docker
cp -rf ../vitis-ai-git/docker_run.sh .
cp -rf ../vitis-ai-git/docker/PROMPT.txt docker
chmod u+x docker_run.sh


安装 docker


sudo apt install docker -y
sudo groupadd docker
newgrp docker


运行 docker 实例


./docker_run.sh xilinx/vitis-ai-cpu:latest



进入实例后,您可以编译模型


cp ../boards/Ultra96/dpu.hwh ./
./compile.sh Ultra96 tf_yolov3_voc_416_416_65.63G_1.1



完成后,您将在目录中看到模型 dpu_tf_yolov3.elf 



也将其上传到您的 Jupyter 实例:



Notebook 示例

pynq_dpu/dpu_yolo_v3.ipynb 中有一个示例,它可以测试 YoloV3 模型


现在制作副本(文件 > 制作副本),并修改代码以指向 mymodel 文件夹,其中包含我们自己编译的比特流和模型



运行所有单元(单元 > 运行所有)



验证镜像已经分类成功



我们终于准备好创建我们的应用了!


应用代码

最后,在完成了所有的硬件设置和测试后,我编写了软件代码来创建我自己的智能办公室移动办公应用。


它由 2 个并行运行的 Jupyter Notebooks 组成。第一个负责设置 PYNQ 叠加和处理视频馈送。第二个将利用数据显示基于座位可用性的控制面板。这个演示视频展示了它的外观:



结论

我希望这篇文章对您来说已经足够全面详细了。这是我第一次使用赛灵思硬件来了解边缘上的 FPGA 和 AI。因此,在开始时,最难的部分是使用开发工具和适应环境,因此,我尽力详细地展示了尽可能多的设置过程。感谢您阅读完全文!



更多资料请查阅:


原理图-框图

代码: Github Repo

https://github.com/zst123/Xilinx_Smart-Office-Hot-Desking


硬件组件

Avnet Ultra96-V2            ×1

             Logitech C170 网络摄像头    ×1


软件应用和在线服务

赛灵思 PYNQ 框架

赛灵思 Vivado 设计套件

赛灵思 Vitis AI 模型库

Jupyter Notebook

Snappy Ubuntu Core



月度项目

Monthly Project


如果您想要分享 Vitis、Vitis AI 或 Vivado 相关的创新项目,并想展示在赛灵思开发者官网上,请提交您的项目详细介绍,既有机会获得500美元的现金奖励。

(点击图片查看详情)


连续5周,专为中国工程师打造的40场FPGA在线研讨会!你,千万不要错过!


👇点击阅读原文 查看项目更多详
FPGA开发圈 这里介绍、交流、有关FPGA开发资料(文档下载,技术解答等),提升FPGA应用能力。
评论
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 150浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 113浏览
  • 故障现象 一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机的气缸编号 故障诊断接车后试车,发动机怠速运转平稳,但只要换挡起步,稍微踩下一点加速踏板,就能感觉到车身明显抖动。用故障检测仪检测,发动机控制模块(ECM)无故障代码存储,且无失火数据流。用虹科Pico汽车示波器测量气缸1点火信号(COP点火信号)和曲轴位置传感器信
    虹科Pico汽车示波器 2025-01-23 10:46 58浏览
  • 日前,商务部等部门办公厅印发《手机、平板、智能手表(手环)购新补贴实施方案》明确,个人消费者购买手机、平板、智能手表(手环)3类数码产品(单件销售价格不超过6000元),可享受购新补贴。每人每类可补贴1件,每件补贴比例为减去生产、流通环节及移动运营商所有优惠后最终销售价格的15%,每件最高不超过500元。目前,京东已经做好了承接手机、平板等数码产品国补优惠的落地准备工作,未来随着各省市关于手机、平板等品类的国补开启,京东将第一时间率先上线,满足消费者的换新升级需求。为保障国补的真实有效发放,基于
    华尔街科技眼 2025-01-17 10:44 233浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 293浏览
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 209浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 143浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 616浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 418浏览
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 117浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 186浏览
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 140浏览
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 189浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦