如何使用 TensorFlow 和 Arduino 进行人脸识别
在嵌入式硬件上运行机器学习模型的一个令人兴奋之处在于,能够利用低功耗设备实现更强的上下文感知能力,仅在有必要时才触发高能耗设备。
想要了解更多关于这一视觉应用的信息,请查看 Pete Warden 的博客。
作为概念验证,我们计划使用低功耗的 Arduino Nano 33 BLE Sense 和 ArduCam Mini 2MP,结合 TensorFlow Lite 库,当识别到有人时触发继电器,实现开关控制。
基本接线
请按照以下接线图将 Arduino Nano 33 BLE Sense 连接到 ArduCam Mini 2MP。该图还展示了在刷入 Arduino 后如何添加锂电池。
模型刷入
官方 TensorFlow 仓库已发布多个小型模型示例,其中最广为人知的是 micro_speech 模型。我们希望刷入“person_detection”(人脸识别)演示程序,但截至本文撰写之时,并非所有资源都已可用。从 micro_speech 示例中,我们发现这些 Arduino 压缩包被存储在与 Google 每晚发布的 TensorFlow 构建文件相同的目录下。当你访问此链接时,会看到一个文档树,其中包含各种夜间构建版本的链接:
通过快速在文档树中搜索,我们成功找到了缺失的包!(更新:TF 团队正在努力更新缺失的链接)
下载该包的链接,并将其重命名为 person_detection.zip。这将成为我们按照官方说明上传到 Arduino IDE 的库。
上传此压缩包后,我们需要进行一些额外修改以确保程序顺利运行。使用你选择的文本编辑器,找到 Arduino 库的安装位置,打开 library.properties 文件进行编辑。
将声明库名称的第一行更改为 TensorFlowLite:person_detection。你的文件应如下所示:
这样就能在 Arduino IDE 的示例菜单中显示该库。最后,在同一目录下的 examples/ 目录中,将子目录重命名为 person_detection。完成以上所有更改后,即可解决演示运行所需的各种差异问题。
从这里,您可以按照官方说明下载 ArduCam 和 JPEG 解码所需的库。
要运行示例,请转到“文件”->“示例”->“TensorflowLite:person_detection”,然后选择 person_detection 示例脚本。请确保您的 Arduino BLE 33 感应器已连接到电脑,并在 Arduino IDE 中被选为刷写目标。刷入示例后,设备应立即启动。内置 LED 将闪烁蓝色,表示图像已捕获且推理完成;如果未检测到人体,LED 将变为红色;若成功检测,则变为绿色。由于人脸识别模型对设备来说相对较大,推理耗时约 19 秒。
将 Arduino 用作智能开关
微控制器非常节能,有些甚至可以使用纽扣电池持续运行多年!随着近年来致力于将机器学习模型压缩至嵌入式设备运行的努力,我们可以构建智能“开关”,当需要供电或触发其他高耗电设备时,可自动启动这些设备。通过在Arduino BLE Sense上运行这个人体检测模型,我们可以使用sombrero屏蔽板触发高能耗设备,例如Donkeycar。我们将连接一个继电器到Arduino,并根据推理结果来控制其开关。
按照以下接线图将继电器、树莓派和Arduino连接起来:
然后只需在person_detection.ino示例中添加几行代码,即可查看推理结果并控制继电器的开关。
通过BLE扩展我们的智能开关
在某些情况下,高耗电设备可能从其他地方推断出的逻辑中获益。例如,假设你希望当大型仓库的另一区域检测到有人时,一台耗电较大的探测车自动启动。我们可以通过蓝牙低功耗(BLE)来扩展智能继电器开关的感知能力。
BLE是一种低功耗无线通信协议,用于传输少量数据。在此示例中,我们使用Arduino Nano 33 BLE Sense,并连接ArduCam作为控制单元,当检测到人时发送高警报。在person_detection脚本中,除了其他BLE初始化步骤外,我们还加入了当人检测得分足够高时发送高警报的逻辑。
第二个Arduino Nano 33 BLE Sense将作为外设设备,用于接收该警报并切换其连接的继电器。
本文编译自hackster.io





