iPhone X Face ID 反复打开了一扇窗,人们开始意识到通过 AI 深入学习他们的脸比他们的指纹更加独特和准确。


我们构建了一个平台,展示了 AI 如何在 Ultra96 和 Intel Movidius NCS 以及 Tensorflow Inception Facenet 上运行。 该项目可以扩展到使用面部识别来解锁,记录进出情况,打开不同的灯光场景。


TensorFlow Facenet
我们使用基于 https://github.com/davidsandberg/facenet 的 Facenet 以及 Movidius 的 SDK。 Xilinx Ultra96 FPGA 非常适合处理 OpenCV,我们将通过 NCS 推断面部识别。


Facenet 不是一种经过训练的分类器,可以将面部归类为属于受过训练的特定个体。 相反,它被训练为一般地在面部上找到并量化地标。 通过比较两个图像上的面部界标量化值(网络推断输出),可以确定两个面部是同一个人的可能性。 这使我们能够创建一种简单易用的方法来对单个图像进行面部识别。Movidius 将用于在边缘设备上实时推断 AI。

 


Facenet image from Cole Murray's tutorial


第 1 步:收集材料
我们需要以下物品:

 


Materials needed

 

第 2 步:设置 Netduino 3 WiFi
Netduino 是一个基于 C#和 .NET 的物联网板,具有很多功能,这样我们就可以基于 C#创建整个项目。


从 https://visualstudio.microsoft.com/vs/mac/ 安装 Visual Studio ,在 这种情况下我使用的是 Mac。 然后转到 Visual Studio 社区菜单 - >扩展 - >图库,并搜索“MicroFramework”以安装 Micro Framework。

 


Micro Framework

 

按照此页面的说明更新最新固件
http://developer.wildernesslabs.co/Netduino/About/Updating_Firmware/#mac
安装最新固件后,我们需要通过 Netduino Deploy 设置 WiFi 网络,以便设备连接到互联网,我们将在这里使用静态 IP。

 


Netduino Deploy


第 3 步:连接硬件
因为因为锁需要 12v 并且 Netduino 的常规输出只能提供 5v,我们需要通过顶部的焊接 2 线接入 Netduino 的电源,如下图所示,这将允许我们在没有额外电源的情况下打开和关闭锁舌。


Modified Netduino with 12v Output


然后我们可以从设备中点击 12v 的输出直接连接到继电器,一个连接到门锁,因此继电器将从电路板本身接收+12v 电压,对继电器接收负电压。连接方式如下图


Wiring Frame


第 4 步:设置 Netduino Webserver
我们现在可以使用以下代码连接到计算机。 当它工作时我们可以进入下一步,我们已经创建了一个 Netduino Web 服务器,供其他设备通过 WiFi 网络连接。 以下代码设置了插座,当接收到“ON”时,它将打开 LED 和继电器,这使我们可以打开锁。

上传后,你会看到下面的图像,连接互联网。 一旦部署在 Netduino 上,我们就可以在终端上使用以下命令


Netduino Webserver 解锁 Deadbolt,如下所示


Netduino Unlocking Bolt


第 5 步:安装 PYNQ linux
Ultra96 很新,但可以非常友好地运行基础 Ubuntu,这是一个很大的优势,因为这允许我们在 ultra96 上构建不同的平台。 编译后的 debian 版本可以从 http://fileserver.linaro.org/owncloud/index.php/s/jTt3MYSuwtLuf9d 下载。之后我们可以使用像 ether 这样的工具将它加载到 mini-SD 卡上。

 

 

在启动时,我们首先必须通过删除损坏的 repos 来修复一些错误。


sudo rm -r /var/lib/apt/lists/*


这允许我们根据需要安装所有软件包以使用该平台。


第 6 步:安装 Movidius NCSDK
为了让 AI 和 Computer Vision 工作,我们可以使用 Movidius NCS,它具有一套工具来运行我们的项目。 Ultra96 没有演练,所以我们基本上通过 https://movidius.github.io/blog/ncs-apps-on-rpi/ 引用了这个。


首先我们必须安装依赖项,这部分没有 PYNQ,所以我们将安装它们以确保一切正常。


接下来我们可以安装 NCSDK SDK,它包含可以将应用程序连接到 NCS 的 API。 由于 NCSDK 不是为 Ultra96 构建的,我们可以使用 markjay4k 的 版本 对变通方法进行以下修改。


这项工作应该让我们使用与 Ultra96 和 PYNQ 一起使用的 NCSDK API

 


NCSDK on PYNQ


接下来我们将尝试让 NcAppZoo 和 Hello World 运行神经计算棒,我们需要在 pynq 上重复旧的 python 3.6


步骤 7:使用 Ultra96 和 NCS 在边缘 AI
在本指南中,我们将使用经过预先培训并与 Caffe 合作的 SSD 神经网络,我们还将学习如何利用其他神经网络进行一些工作。

 


Ultra96 with Movidius NCS


在这一步中,我们之前已经训练了通过 caffe 模型,我们必须在另一台机器上编译图形,因为我们只安装了 API 而不是工具包,因为它们不是为 aarch64 构建的。 但是,由于 API 可以工作,我们可以简单地在另一台机器上构建它并将图形文件传输到 Ultra96。 FPGA 可以处理所有 CV2 和 Movidius NCS。


使用 Facenet 安装 Movidius NCS


压缩整个文件夹并将其复制到 ultra96 上

 

第 8 步:构建面部识别验证
Movidius App Zoo 应该能够获得 NCS 和 OpenCV 的整个软件堆栈,接下来我们可以创建自己的文件夹并基于 video_face_matcher 示例运行。 我们只需要在 validated_images 下更改验证图像,因为 facenet 可以根据此进行训练。 你可以在 github repo 上看到完整的代码。

 


validation image


使用以下代码,我们应该能够访问 WiFi 点与使用手机的 WiFi Arduino 锁相同。我们如何做到这一点,特别是确保我们已经验证了超过 10 帧的图像,以避免误报。


当我们识别出错误的脸部时,我们可以显示周围的红色边框,以指示检测到错误的人物。

 


Wrong person detected


当检测到合适的人时,我们可以在周围显示绿色边框,一旦通过 10 帧,我们就可以使用它来解锁锁舌

 


Validated


效果演示(点击查看动图)

 

你想不想自己做个 AI 门锁?感兴趣的话请访问:
https://www.hackster.io/Nyceane/ai-facial-recognition-wifi-lock-7f9705
 

与非网编译内容,未经许可,不得转载!

 

有人说硬件技术将很快达到极限,而在我们看来,硬件创新,尤其是中国硬件工程师的创新,还远未走到尽头,而只是刚刚开始。作为致力于为全球硬件开发者提供技术共享服务的平台,与非网母公司 SupplyFrame 旗下最大的全球硬件开发者社区 Hackaday.com 已连续五年举办全球硬件开发者大赛 Hackadayprize,有超过 3000 多个硬件团队在这个赛事中互动交流、切磋技艺。

 
这个《硬件改变世界》系列,我们挑选在前几届 Hackadayprize 大赛中获奖的优秀作品加以展示,硬件技术可以多有意思,硬件开发者可以多有创意,从这些作品中你可以看到。
 
2019 年 3 月,Hackadayprize 中国区赛事将隆重开启,我们很期待看到国内的硬件开发者大开脑洞、大展技艺。你准备好了没,与来自全球的硬件开发者同台 PK?