在树莓派上实现人脸识别

本文为 AI 研习社编译的技术博客,原标题 Facial Recognition & Identification On Raspberry Pi,作者为 Adam Milton-Barker。 翻译 | 陶玉龙 校对 | 李欣 整理 | 凡江

介绍

预计在不久后的将来,人脸识别和身份认证技术将在我们的日常生活中扮演一个非常重要的角色。这项技术为我们开辟了一个全新的世界,它几乎适用于我们生活的方方面面。面部识别/身份认证的使用案例包括安全系统、认证系统、个性化智能家居和家庭护理助理等。

视频内容

我们将搭建什么?

本教程将帮助你建立一个可以训练 HARASCALDES 模型的树莓派,该模型可用于检测已识别的/未识别过的人,使用监控摄像头进行实时监控,并利用物联网 JumpWay 来发送传感和警告消息,进而允许你的设备利用其他物联网 JumpWay 网与其他设备进行通信。

本教程将利用 TechBubble Technologies 物联网 JumpWay Python MQTT 库进行通信,利用 OpenCV 实现计算机视觉,在本地端口上建造移动 Web 流和安全的 NGNX 服务器,以便可以安全地从外部访问视频流。

这个例子是我们最初的 TASS 版本,因为我们的进步依靠了很多更先进的计算机视觉库和框架,所以我们决定将代码进行开源。

Python 版本

  • 2.7 版本
  • 3.4 或更高版本

软件要求

  • Jessie
  • TechBubble IoT JumpWay Python MQTT Client(https://github.com/TechBubbleTechnologies/IoT-JumpWay-Python-MQTT-Clients)
  • Linux 驱动
  • Nginx

硬件要求

  • 树莓派
  • Linux 兼容摄像头

准备工作

在开始之前,有几个教程你应该看一下,尤其是如果这是你第一次按照我们的树莓派教程,或者如果这是你第一次使 TekBaseIO-JavaWoW 开发程序。如果这是你第一次在物联网项目中使用 TechBubble IoT JumpWay,在你创建 IOT 设备之前需要注册开发帐户,并在进行一些基本的设置。访问下面的物联网 JumpWay 开发者使用文档(5-10 分钟阅读/设置 https://github.com/TechBubbleTechnologies/IoT-JumpWay-Docs/),并查看引导来进行注册并设置你的位置、区域、设备和应用程序(大约 5 分钟)。

  • 物联网 JumpWay 开发者程序文档 (5-10 分钟 阅读/设置 https://github.com/TechBubbleTechnologies/IoT-JumpWay-Docs/)
  • 准备你的树莓派(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/1-Raspberry-Pi-Prep.md)
  • 设置区域名字 & 树莓派的 SSL(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/3-Raspberry-Pi-Domain-And-SSL.md)
  • 在你的树莓派上配置 OpenCV(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/2-Installing-OpenCV.md)
  • 在你的树莓派上配置 Linux 驱动(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/5-Installing-Motion.md)
  • 在树莓派上为 Linux 驱动安装(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/6-Secure-Nginx-Server-For-Motion.md)
  • 用 IPTables 确保树莓派的安全(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/4-Securing-Your-Raspberry-Pi-With-IPTables.md)

准备你的树莓派

花一些时间来确保你的树莓派的硬件和包都是最新的,并且确保你的准备过程严格按照树莓派 3 的教程文件(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/1-Raspberry-Pi-Prep.md),设备是安全的。

复制 Repo

你将需要将 echBubble IoT JumpWay (https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples)树莓派实例 Examples 示例库下载到你的树莓派上,并导航到你想下载的目录,以下命令是将其下载到主目录最简单的方式。

安装要求

接下来,你需要将计算机视觉库导航到目录并按照要求进行安装,如果你已经将库复制到你的主目录上,那么这一部分的命令如下:

安装 OpenCV

OpenCV 需要遵循树莓派教程(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/2-Installing-OpenCV.md)进行安装,它是我们将使用的一种计算机视觉库。

安装 Linux 驱动

我们将使用 Linux 驱动把视频流传送到树莓派本地端口上,OpenCV 在这里连接到视频流并从中读取图像帧。为了建立 Linux 驱动,遵循安装教程(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/5-Installing-Motion.md)在你的树莓派教上安装 Linux 驱动。

这里有一些修改,在驱动安装教程的第 9 部分中,它告诉你如何修改媒体的保存目录,在本教程中,你应该将这些设置更改为:

不要忘记注意第 10 部分中关于关闭图像保存来节省磁盘空间的问题。

设置域名和 SSL

我们希望我们提供的教程可以确保帮助人们学会创建安全的项目。为了使视频流安全工作,你需要设置指向你的树莓派域名,你也需要设置 SSL 证书来确保用于视频流的服务器是安全的。树莓派域名和 SSL 设置教程(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/3-Raspberry-Pi-Domain-And-SSL.md)会向你详细解释如何做到这一点,如果有疑问,你可以让你的注册员或主机来协助你。如果你将这个存储库复制到你的主目录中,你需要使用如下的 CSR 和密钥生成的路径:

一旦你从证书颁发机构收到你的签名 crt.crt 和 ca.crt 文件,你需要将它们上传到:

为 Linux 驱动安装安全的 NGINX 服务器

我们将使用 NGNIX 作为我们的服务器解决方案,并在 QualSS-SSL 实验室 SSL 报告中将其设置为 A 级+ SSL 等级。为了做到这一点,我们提供了一个可以在 RasBuriPi 上的 Linux 驱动上安装 NGINX 服务器的指南(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/6-Secure-Nginx-Server-For-Motion.md)。在开始这一步之前,你需要在你的树莓派上安装 Linux 驱动(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/5-Installing-Motion.md),并为你的树莓派设置域名和 SSL(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/3-Raspberry-Pi-Domain-And-SSL.md)。

用 IPTables 保证树莓派的安全

下一个你应该采取的安全步骤是设置 IPTABLE。遵循 Securing Your Raspberry Pi With IPTables 文件(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/4-Securing-Your-Raspberry-Pi-With-IPTables.md)来实现这一点。

视频流

如果你遵循了以上步骤,如果它们还没有运行,你需要按照下面的步骤操作

重要的是:这种流式传输是一个新的特性,我们仍然在消除一些扭结,如果你想让 OpenCV 直接访问网络摄像头,而不需要驱动/NGNIX 流,那么在 TASS.py 重取消注释 43 行,注释 44 行和 45 行。

连接证书和传感设置

下一步是在互联网 JumpWay 开发者控制台中安装设备实例。遵循 IoT JumpWay Location Device Doc (https://github.com/TechBubbleTechnologies/IoT-JumpWay-Docs/blob/master/4-Location-Devices.md)来设置你的设备。你将需要设置一个有闭路监控的设备,并且添加了传感器/执行器部分。

检索你的连接证书并用新的连接证书和相机 ID 设置更新配置文件 JSON 文件(你需要在创建它之后进入设备页面以获得正确的摄像头 ID)。

训练你的数据

现在基本构架已经搭建好,是时候用你自己的照片训练你的模型了。当你下载这个 RPO 时,在那个被处理的文件夹中已经有一个经过训练的模型和被处理的图像,但是这个模型不会识别你。你需要选择自己在不同的位置和灯光下的照片。你训练模型的照片越多,它就越精确,如果你的设备没有识别你,你只需要用更多的图像来训练它。

你可以添加你喜欢的图片(这取决于你的树莓派 3 可用的空间),有很多像你这样人。为了将训练数据导航到训练文件夹中并创建目录,目录应该是一个数字,而且不是那个已处理文件夹中的数字。

一旦你建立了图像的文件夹,进入 Tas.Py 文件改变第 34 行(self.train = 0)为 self.train = 1,并启动程序。程序将循环检测你的图像,如果它检测到脸部,它将以模型所需的格式重新创建一个图像,将其保存到匹配文件夹处理后的目录中中,并删除原始图像以节省空间。如果它没有检测到面部,它将简单地删除原始图像,因为它是无效的面部识别。

一旦处理阶段完成,你的新模型将自动开始训练,训练完成后,它将自动运行主面部识别程序。把你的脸放在你连接的摄像头前面,看着程序的输出你是谁。

注意:从处理目录中删除 read me 文件。

执行程序

自主物联网通信

当你的设备每次检测到一个人时,设备会把传感器数据传送到 TechBubble IoT JumpWay(https://iot.techbubbletechnologies.com/),当运动传感器检测到入侵者时会发出警报。你可以使用传感器值和警告消息与连接到 IoT JumpWay Location 的其他设备实现自主通信。

在「设备编辑」页面上,向下滚动到「执行器/传感器」下的「创建规则」部分。你可以在这里利用下拉菜单创建规则,允许你的设备发电子邮件给你,或者在状态更新、传感器数据和警告的情况下自主地与其网络上的其他设备进行通信。

查看数据

每次你的设备检测到一个人或一个入侵者,它将发送数据到 TechBubble IoT JumpWay。你将能够访问 TechBubble IoT JumpWay 开发区中的数据(https://iot.techbubbletechnologies.com/developers/dashboard/)。一旦登录到开发区,访问 TechBubble IoT JumpWay Location Devices Page 页面(https://iot.techbubbletechnologies.com/developers/location-devices),找到你的设备,然后访问传感器/执行器页和警告页,查看从你的设备发送的数据。物联网 JumpWay 树莓派计算机视觉实例缺陷/问题

当你在运行物联网 JumpWay 树莓派计算机视觉实例遇到困难时请保持一种释然,当你遇到麻烦时你也可以在提问区寻求帮助。

物联网 JumpWay 树莓派实例贡献者

TechBubble 科技公司创始人:Adam Milton Barker(https://github.com/AdamMiltonBarker)

TechBubble Technologies Dev 公司:Andrej Petelin(https://github.com/AndrejPetelin)

原文链接:

https://www.hackster.io/AdamMiltonBarker/facial-recognition-identification-on-raspberry-pi-1c7495

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美团技术团队

业务赋能利器之外卖特征档案

应用背景及现状 美团外卖业务自2013年9月启动至今已运营三年时间。截至2016年12月,美团点评整个外卖平台的日订单超过900万。从发展速度和体量上看,外卖业...

4147
来自专栏华章科技

干货 | 22个免费的数据可视化和分析工具推荐

当你分析和可视化数据前,常需要“清理”工作。比如一些输入性列表“New York City” ,同时其他人会说”New York, NY” 。因此你需要标准化这...

1204
来自专栏钱塘大数据

钱塘干货 | 数据收集和处理工具一览

进入大数据时代,调查报道愈加成为信息战。从哪里收集有效数据?如何抽取、筛选、整合、分类大量琐碎的信息?如何分享、存储数据,并实现随取随用?钱塘君整理了一张数据收...

4427
来自专栏ATYUN订阅号

Facebook推出Spiral:通过实时机器学习自动调节服务

对于使用Facebook的数十亿人来说,我们的服务可能看起来像是一个统一的移动应用程序或网站。公司内部的视角是不同的。Facebook使用数千种服务构建,功能从...

1294
来自专栏ATYUN订阅号

时隔三年半,英特尔发布开源计算机视觉库OpenCV 4.0

OpenCV是英特尔的开源计算机视觉库,是在BSD许可下发布的,因此它可以免费用于学术和商业用途。它具有C ++,Python和Java接口,并支持Window...

1035
来自专栏腾讯移动品质中心TMQ的专栏

测试建模兵器谱

0.引子 有人的地方就有江湖,有测试的地方就有建模。 每个产品都是一片江湖,每一次迭代就是一场武林大会,而一个个的需求,就是一封封战书。 测试同学在面对复杂的...

2926
来自专栏AI研习社

如何在 Kaggle 中高效搜索数据集?快吃下这枚安利

对于关注数据科学的同学来说,Kaggle 上庞大的数据集是一个极好的资源池,但是这么多的数据,如何进行更精准的搜索?近日,Kaggle 官方博客就刊登了 Rac...

2844
来自专栏大数据

掌握数据处理的新方法!

来自:数据观 https://www.shujuguan.cn/?from=qiehao 一提到数据处理,我们首先想到的就是excel,作为日常必备的办公软件,...

2076
来自专栏SDNLAB

如何提高SDN可拓展性

Software Defined Networking是一种控制平面和数据平面分离的可编程的网络架构,目前已经有许多商业落地案例。在部署SDN时,往往会因SDN...

3277
来自专栏PPV课数据科学社区

【数据可视化专题】22个免费的数据可视化和分析工具推荐

本文总结推荐22个免费的数据可视化和分析工具。列表如下: ? 数据清理(Data cleaning) 当你分析和可视化数据前,常需要“清理”工作。比如一些输入性...

3045

扫码关注云+社区

领取腾讯云代金券