麦斯科技 · 2021年04月18日

Arm Portenta H7 TinyML演示

https://github.com/ARM-software/developer/tree/master/projects/portenta_person_detection

描述

这是在Arduino / Arm Portenta H7板上的Arm Cortex-M7处理器上运行的TinyML应用程序的演示。

TinyML应用程序是Arduino“ person_detection”草图,已修改为在Portenta H7上运行。

“ person_detection”草图从H7的Vision Shield上的摄像机捕获图像,并使用TinyML(TensorFLow Lite)确定图像中是否有人。

该应用程序已得到增强,可以通过HTTP将捕获的图像发送到外部服务器进行查看,还可以选择将图像保存到SD卡。

根据当前配置,启用了将图像发送到服务器的功能,并且禁用了将图像保存到SD卡的功能。

通过修改person_detection.ino草图中的布尔值,可以启用或禁用这两项功能以及对Portenta串行控制台的附加日志记录。

Portenta H7人员检测设置

该演示需要使用Portenta H7和Portenta Vision Shield。

人员检测项目包含在此回购中的person_detection文件夹中。

要运行人员检测,您必须首先安装Arduino IDE。

然后,通过打开“工具”->“板”->“板管理器”菜单,并搜索“ Portenta”,在Arduino IDE中安装“启用Arduino mbed的板”软件包。选择“ Arduino mbed-enabled Boards”软件包,版本1.3.2

如果您已经安装了该板载软件包,但是它是较早的版本,请确保将其更新为1.3.2版。

现在,在person_detection文件夹中,将config.h.template文件复制到名为config.h的新文件,并将WIFI_SSID和WIFI_PASS条目的值更改为WiFi路由器的SSID和密码的正确值,然后更改该值SERVER_IP_ADDRESS到要在其上运行图像服务器的计算机的IP地址。

然后,您可以在Arduino IDE中打开person_detection / person_detection.ino文件,并将其编译并上传到开发板上。确保在“工具”-“主板”菜单中选择“ Arduino Portenta H7(M7核心)”板,并在“工具”->“端口”菜单中选择适当的端口(端口名称会因计算机的操作系统而异)。

在此步骤中,草图应已运行,但当然不会连接到外部“图像查看器”服务器,因为该服务器尚未运行。

请注意,我们已经看到Portenta / Vision Shield连接到WiFi接入点的问题。此问题似乎与Portenta WiFi模块的灵敏度或主板附带的天线有关。我们发现将板子移动到距接入点几英尺的范围内可以解决连接问题。

也建议连接一个更高增益的天线来代替板子附带的天线。

图像查看器设置

图像查看器由一个Python服务器组成,Portenta person_detection草图将通过HTTP POST向其发送图像和人员检测分数。然后,服务器通过Web浏览器提供图像和相关信息。

要运行图像查看器,

确保已安装Python 3。

转到此存储库中的图像服务器文件夹,并在命令行中:

创建一个虚拟环境

python3 -m venv venv

启用

. venv/bin/activate

安装要求

pip install -r requirements.txt

运行服务器

flask run --host=0.0.0.0

映像服务器运行后,重新启动Portenta,它应该开始将映像发送到映像服务器。

您可以通过打开Web浏览器访问http:// localhost:5000来查看图像和人员检测信息。

启用和禁用演示功能

WiFi /图像发送

默认情况下,Arduino草图被配置为连接到config.h文件中描述的WiFi接入点。

如果您不希望连接到WiFi接入点并将图像发送到图像服务器的实例,请将person_detection.ino文件中'send_scaled_image'变量的值更改为False。将其更改回True以重新启用它。

将图像写入SD卡

默认情况下,禁止将图像写入SD卡。

如果您希望将TensorFlow使用的96x96图像写入SD卡,则必须将SD卡插入Vision Shield的SD卡插槽中。

然后,可以通过将person_detection.ino文件中的'write_scaled_image'变量的值更改为True来启用此功能。将其更改回False以再次禁用它。

  • 请注意,我们在写入SD卡时遇到了问题,在写入大约10张左右(有时更多)的图像后,Portenta有时会锁定。如果发生这种情况,只需短暂按一下H7板底部的复位按钮即可重启板。

控制台记录

“ person_detection”草图将始终将一些基本信息记录到串行控制台。有关草图正在进行的操作的信息的详细程度由person_detection.ino文件中的'write_serial_info'变量控制。

默认情况下,草图会详细记录。为了减少日志记录(包括所有错误),请将“ write_serial_info”变量更改为False。若要重新启用详细日志记录,请将其更改回True。

其他注意事项

通量

人识别过程中的几个步骤可能会花费大量时间。特别是,TensorFlow分析和将图像发布到图像查看器每个过程可能需要花费几秒钟。使用图像查看器时,查看器中图像更改之间的时间往往约为7秒。由于上述等待时间,图像可能会在被相机捕获后的7到14秒内出现在查看器中。

灯光

person_detection草图在中等光照条件下效果很好,但在光线充足的条件下效果更好。

距相机的距离

当人们离相机约1英尺到10英尺时,此演示似乎效果最好。它无法识别距离较远的人,当距离较近时无法预测。

误报

我们已经注意到,呈现给TensorFlow模型的某些图像会产生误报。其中包括:

  • 白色的床枕头垂直支撑在沙发上
  • 身体的各个部位(手等)都非常靠近相机。
推荐阅读
关注数
5841
内容数
525
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息