用Jetson NANO做个智能门铃应用

2019-07-30 19:37:23 浏览数 (1)

使用Nvidia Jetson Nano,您可以用很少的预算构建运行gpu加速的深度学习模型的独立硬件系统。它有点像树莓派,但速度比树莓派快得多。

为了激发您的灵感,今天这个博主要教你用Jetson Nano构建一个真正的硬件项目——智能门铃,它可以跟踪每一个走到你家前门的人。通过人脸识别,它会立即知道你门前的人是否曾经来过你——即使他们穿着不同。如果他们来过,它可以告诉你确切的时间和频率。

所需要准备的材料:

1.一台已经按照NVIDIA官网步骤刷好镜像文档的NVIDIA Jetson NANO,

2. 安装上树莓派V2摄像头

3. 网线

4. 连接上显示器

5. 电源

此时,已经安装了Python 3.6和OpenCV。您可以打开一个终端窗口并立即开始运行Python程序,就像在任何其他计算机上一样。但在运行智能门铃程序之前,我们还需要安装更多的库。

安装所需的Python库

为了构建我们的人脸识别系统,我们需要安装几个Python库。虽然Jetson Nano预装了很多很棒的东西,但也有一些奇怪的遗漏。例如,OpenCV是用Python绑定安装的,但是没有安装pip和numpy,这些绑定是用OpenCV做任何事情所必需的。让我们解决这个问题。

在Jetson Nano桌面中,打开一个终端窗口并运行以下命令。当它要求输入您的密码时,请输入您创建用户帐户时输入的相同密码:

首先,我们正在更新apt,这是一个标准的Linux软件安装工具,我们将使用它来安装其他所有东西。接下来,我们将使用apt安装一些基本库,稍后我们将需要这些库来编译numpy和dlib。

在继续之前,我们需要创建一个swapfile。Jetson Nano只有4GB内存,不足以编译dlib。为了解决这个问题,我们将设置一个swapfile,它允许我们将磁盘空间用作额外的RAM。幸运的是,有一个简单的方法可以在Jetson Nano上设置一个swapfile。只需运行这两个命令:

此时,您需要重新启动系统以确保swapfile正在运行。

当您重新登录时,打开一个新的终端窗口,我们可以继续。首先,让我们安装一个Python库numpy:

这个命令将花费15分钟,因为它必须从头编译numpy。

现在,我们准备安装dlib,这是Davis King创建的一个深度学习库,它为face_recognition库做了大量工作。

然而,目前在Jetson NANO CUDA库中存在一个bug (https://devtalk.nvidia.com/default/topic/1049660/jetson-nano/issues-with-dlib-library/2?source=post_page),使其无法正常工作。为了解决这个bug,我们必须下载dlib,编辑一行代码,然后重新编译它。不过别担心,没什么大不了的。

在终端运行以下命令:

这将下载并解压dlib的源代码。在编译它之前,我们需要注释掉一行。运行这个命令:

这需要打开文本编辑器中编辑的文件。在文件中搜索以下代码行(应该是第854行):

然后在它前面添加两个斜杠来注释它,所以它看起来是这样的:

现在保存文件,关闭编辑器,回到终端窗口。接下来,运行以下命令编译和安装dlib:

这将花费大约30-60分钟完成,你的Jetson Nano可能会变热,但不用理会。

最后,我们需要安装face_recognition Python库。使用此命令执行此操作:

现在,您的Jetson Nano已准备好通过完整的CUDA GPU加速进行人脸识别。

运行人脸识别智能门铃演示App

face_recognition库是我编写的一个Python库,它使人脸识别变得超级简单。它允许您检测人脸,将每个检测到的人脸转换成一个表示人脸的独特的人脸编码,然后比较人脸编码,看看它们是否可能是同一个人——所有这些都只需要几行代码。

利用这个库,我编写了一个门铃摄像应用程序,它可以识别那些走到你家前门的人,并在每次有人回来时跟踪他们。当你运行它时,它看起来是这样的:

首先,让我们下载代码。我在这里发布了完整的代码和注释,但这里有一个更简单的方法从命令行下载到你的Jetson Nano:

然后你可以运行代码:

您将看到一个视频窗口在您的桌面上弹出。每当一个陌生人走到摄像机前,它就会记录下他们的脸,并开始追踪他们在你家附近待了多久。如果同一个人离开并在5分钟后回来,它将注册一个新的访问并再次跟踪他们。你可以在任何时候按下键盘上的q键退出。

该应用程序将自动将它看到的每个人的信息保存到名为known_faces.dat的文件中。当您再次运行程序时,它将使用这些数据来记住以前的访问者。如果您想清除已知面孔列表,只需退出程序并删除该文件。

0 人点赞