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模型的某些图像会产生误报。其中包括:
- 白色的床枕头垂直支撑在沙发上
- 身体的各个部位(手等)都非常靠近相机。