树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

树莓派人脸识别门禁系统的总体设计
硬件包括:树莓派3B、电源模块、转5V降压模块、触摸感应传感器模块、声光报警模块和驱动模块。
由此设计出的人脸识别门禁系统总体结构框图如下:
树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

总体结构框图

程序运行时树莓派会将本地照片中的面部图像发送至云端服务进行分析,识别出的人脸会给出face_token,用于后续的人脸比对等操作。触摸传感器触发主函数实时拍照并发送至云服务调用Search API在Faceset中找出与目标人脸最相似的一张或多张人脸。将比对结果发送到树莓派本地终端,提取返回结果并将其显示在树莓派终端。
树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

主流程图

系统主要功能实现
当触摸开关被按下LED闪烁,接着进行一张人脸的采集。并将此照片与已经上传的三张照片做对比。判断出相似的人脸。当相似度大于70%,则开门(电机正转开门 、停止并发出警报声、电机反转关门)。
主要模块各自的功能如下:
主控模块。在本设计中主要起到集中分配的作用,不仅需要即时采集人脸图像,调用API处理图像,同时还要提供摄像头检测、驱动芯片、显示屏等数字器件的工作信号。
触发模块。系统的输入部分,实现人机交互。通过接收触控按键的电平信息,使得树莓派得到需要的数据。
检测模块。对人脸进行采集摄像的模块,提供最原始的图片信息。
驱动模块。大门开闭的过程控制的控制元件
显示模块。以连接一台电脑液晶显示器即可
系统电源模块。系统电源模块主要负责给系统提供符合要求的电流与电压
报警模块。系统的声光报警模块,利用LED灯和蜂鸣器来提示人脸即将检测的信息。


主控板的选型

树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

树莓派3B

触发模块

树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

触摸开关模块

检测模块

树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

树莓派摄像头

树莓派专用500W摄像头提供了三个应用程序,分别为:raspistill、raspivid、raspistillyuv。其中 raspistill 和 raspistillyuv 非常相似,并且都是用于捕捉图像,而 raspivid 用于捕捉视频。
树莓派上电即开机进入系统。启动人脸识别检测程序。程序启动后触摸传感器循环检测是否被触发。检测周期时2S,当触摸感应开关被触发则启动摄像头实时拍照。照片存储到本地之后上传云服务处理。之后判断返回的处理结果是否通过。
搭建opencv环境将在下一个文章详细介绍,此处跳过。除此之外安装pycurl.使用apt-get的方式安装$ sudo apt-get install python-pycurl。
树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

流程图

到Face++网站https://www.faceplusplus.com.cn/注册自己的APIkey.
Sdk的facepp.py
文件中包含如下底层api接口提供我们使用。

|_APIS = [
'/detect',
'/detection/landmark'
'/compare',
'/search',
'/faceset/create',
'/faceset/addface',
'/faceset/removeface',
'/faceset/update',
'/faceset/getdetail',
'/faceset/delete',
'/faceset/getfacesets',
'/face/analyze',
'/face/getdetail',
'/face/setuserid'
]|

输入自己在Face++网站注册的APIkey。
树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

FACE++的API

Detect API
调用者提供图片文件或者图片URL,进行人脸检测和人脸分析。识别出的人脸会给出face_token,用于后续的人脸比对等操作。请注意,只对人脸包围盒面积最大的5个人脸进行分析,其他人脸可以使用Face Analyze API进行分析。如果您需要使用检测出的人脸于后续操作,建议将对应face_token添加到FaceSet中。如果一个face_token连续72小时没有存放在任意FaceSet中,则该face_token将会失效。如果对同一张图片进行多次人脸检测,同一个人脸得到的face_token是不同的。
Search API
在Faceset中找出与目标人脸最相似的一张或多张人脸。支持传入face_token或者直接传入图片进行人脸搜索。使用图片进行比对时会选取图片中检测到人脸尺寸最大的一个人脸。
树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理
树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

调用正确的返回值

系统调试及运行
树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理

等待对比的照片先存储在本地 等待代码中上传


程序初始设置
首先拍摄的照片上传到本文件夹并修改图片文件名,然后在代码中将三张待对比照片赋值给face_one、face_two、face_three三个变量。并设置进行对比的照片名为customer.jpg。

|face_one = 'face_one.jpg'
face_two = 'face_two.jpg'
face_three = 'face_three.jpg'
face_search = 'customer.jpg'
置GPIO编码方式为BOARD,GPIO13为输入模式,GPIO11,12,15,16,40为输出模式。
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(13,GPIO.IN)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(15,GPIO.OUT)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(40,GPIO.OUT)
在python程序中设置调用API的key和secret。
#http_url='https://api-cn.faceplusplus.com/facepp/v3/detect'
key = "XXXXXXXXXXXXXXXXXXXX"
secret = "XXXXXXXXXXXXXXXXXXXXXXXX"
api = facepp.API(key, secret)|

各功能函数
蜂鸣器,前面已经初始设置GPIO12为输出模式,此处bee()函数设置GPIO12为高电平,延时0.5s后置为低。意味着当调用bee()函数时蜂鸣器鸣叫0.5s.

|def bee():
GPIO.output(12, False)
time.sleep(0.5)
GPIO.output(12, True)|

步进电机,设置旋转角度为180°,closewise=1时,步进电机顺时针旋转,closewise=0时,步进电机逆时针旋转。步进电机驱动模块由树莓派的GPIO35、 GPIO36、 GPIO38 、GPIO40四个GPIO驱动。

|def motor_open():
steps = 180;

clockwise = 1;

arr = [0,1,2,3];

if clockwise!=1:
arr = [3,2,1,0];

ports = [40,38,36,35]
# GPIO 21(Pin 40) GPIO 20(Pin 38) GPIO 16(Pin 36) GPIO 19(Pin 35)
for p in ports:
GPIO.setup(p,GPIO.OUT)
for x in range(0,steps):
for j in arr:
time.sleep(0.002)
for i in range(0,4):
if i == j:
GPIO.output(ports[i],True)
else:
GPIO.output(ports[i],False)|

(3)流水灯:初始设置已经将GPIO11、GPIO15、GPIO16为输出模式。分别把三个LED发光二极管的长引脚接到这三个GPIO上,短引脚接至负极。通过把对应的引脚置为高电平延时0.3s后置为低,循环点亮三个小灯。

|def light():
GPIO.output(11, True)
time.sleep(0.3)
GPIO.output(11, False)
GPIO.output(15, True)
time.sleep(0.3)
GPIO.output(15, False)
GPIO.output(16, True)
time.sleep(0.3)
GPIO.output(16, False)|

系统预热好,提示做好准备 ,一段时间后进行拍照。在终端窗口输出提示信息。并调用light()来实现LED发光二极管的流水灯效果。并调用bee()让蜂鸣器发出提示声音。

|def prep():
print("欢迎使用人脸识别检测系统 请面对摄像头 5秒钟后进行人脸采集")
light()
print("************************5*********************")
light()
print("************************4*********************")
light()
print("************************3*********************")
light()
print("************************2*********************")
light()
print("************************1*********************")
bee()|

调用拍照函数时流水灯点亮,然后使用opencv利用摄像头采集一张照片,将照片保存为customer.jpg。

|def take_photo():
light()
capture = cv2.VideoCapture(0)
if not capture.isOpened():
print('Capture failed because of camera')
ret, img = capture.read()
cv2.imwrite('customer.jpg', img)
print("***********************照片采集完毕 请稍等*************************")
print '=' * 60|

函数调用API将本地存储的照片进行人脸检测和人脸分析。识别出的人脸会给出face_token,用于后续的人脸比对等操作。然后调用searchAPI在Faceset中找出与目标人脸最相似的一张或多张人脸。进行比对时会选取图片中检测到人脸尺寸最大的一个人脸。


触发检测的监测函数det(),程序运行时开始检测触摸开关是否被触发。当触摸开关被触发时会发送高电平信号给树莓派。当检测GPIO13为真时,在终端输出确定信息,并调用主函数进行对比操作。主程序运行结束后继续检测是否被触发。一直循环指导程序退出。

|def det():
while True:
if GPIO.input(13)==True:
print "confirm"
main()
else:
print "NO BODY"
time.sleep(2)
det()|

提取API.search返回结果,并将返回的信息保存到s,并从中提取相似度的值。转换s[0][‘configdence’]为整形变量赋值给m。当m大于70时输出通过检测并调用步进电机转动。


异常处理
目的是删除无用的人脸库,所以新建了一个debug.py
的python文件。当检测失败之后执行一次debug.py
即可。

|import facepp
#http_url='https://api-cn.faceplusplus.com/facepp/v3/detect'
key = "xzFPqqR1q_fasM1D3s4yvUdcBoTovUMX"
secret = "4GXhLafqDOmnfQRxx-6ZlEVwQpOlZoW-"
api = facepp.API(key, secret)
# 创建一个Faceset用来存储FaceToken
# create a Faceset to save FaceToken
def main():
api.faceset.delete(outer_id='detect', check_empty=0)
#ret = api.faceset.create(outer_id='detect')
#print_result("faceset create", ret)
main()|

至此所有代码讲解完毕 有任何不懂得地方随时给我看留言
PS:


本文中为了节省篇幅 省略了opencv搭建的步骤。其实拍照功能可以换成调用os使用命令行的方式拍照:

|def take_photo():
os.system('raspistill -w 480 -h 360 -o customer.jpg -t 2000')
print("***********************首次照片采集完毕 请稍等*************************")
print '=' * 60|

如果你也想知道树莓派安装opencv和使用opencv做人脸检测、移动物体检测 请继续关注吧
跟我一起玩转树莓派

原文始发于:树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理|

树莓派智能小车结合摄像头opencv进行物体追踪

在开发树莓派智能小车的路上已经走了一年多时间了,起初做了以下简单的远程控制和避障功能,后来慢慢加入黑线循迹以及语音识别,物体识别的功能。前段时间在刷新闻头条的时候,偶然看到一外国大牛做的树莓派目标追踪平衡车。所以开始琢磨着让我自己的小车也加上物体追踪的功能。在几天的资料整理之后发现是利用opencv和python实现的。那么今天告诉大家如何安装opencv3.0和如何利用它实现我的小车追踪。

之前确实安装过几次opencv都倒在了cmake编译的路上,但有问题就得解决。翻了好几个帖子终于找到了一个靠谱的。用了一个下午的时间终于安装成功了。安装的教程篇幅过长且容易被头条认为成抄袭所以就在发到评论区吧。然后问题来了,opencv安装好了,怎么实现物体追踪呢。我开始在github上找案列,找啊找啊找,输入关键字 track car raspberry,找到一个,打开看看是树莓派加arduino做的。还好arduino只是用来控制步进电机的。我开始把树莓派gpio控制电机的部分移植到这个项目中。在一天的调试之后,改造版的树莓派物体追踪小车出炉了。怎么说呢,这只是个雏形,因为小车转向不够灵敏,追踪的功能需要进一步优化。个人水平有限,希望大家一起来研究。

来说说detect.py
小车物体追踪的源码。detect.py
中物体追踪是怎么实现的呢,首先它需要捕捉一个frame边框并确定一个物体去追踪。在确定了所要追踪的物体之后,小车将保持对物体的追踪。源码中定义了前后左右和停止的动作。当被锁定的物体移动时,小车则根据物体的位置作出响应即追踪物体前进。

附detect.py
源码:

#导入一些必须的包


from picamera.array import PiRGBArray

from picamera import PiCamera

import cv2

import serial

import syslog

import time

import numpy as np

import RPi.GPIO as GPIO

# 定义捕捉的画面尺寸

width = 320

height = 240

tracking_width = 40

tracking_height = 40

auto_mode = 0

#如下定义小车前后左右的功能函数

def t_stop():

GPIO.output(11, False)

GPIO.output(12, False)

GPIO.output(15, False)

GPIO.output(16, False)

def t_up():

GPIO.output(11, True)

GPIO.output(12, False)

GPIO.output(15, True)

GPIO.output(16, False)

time.sleep(0.05)

GPIO.output(11, False)

GPIO.output(12, False)

GPIO.output(15, False)

GPIO.output(16, False)

time.sleep(0.3)

def t_down():

GPIO.output(11, False)

GPIO.output(12, True)

GPIO.output(15, False)

GPIO.output(16, True)

def t_left():

GPIO.output(11, False)

GPIO.output(12, True)

GPIO.output(15, True)

GPIO.output(16, False)

time.sleep(0.05)

GPIO.output(11, False)

GPIO.output(12, False)

GPIO.output(15, False)

GPIO.output(16, False)

time.sleep(0.3)

def t_right():

GPIO.output(11, True)

GPIO.output(12, False)

GPIO.output(15, False)

GPIO.output(16, True)

time.sleep(0.05)

GPIO.output(11, False)

GPIO.output(12, False)

GPIO.output(15, False)

GPIO.output(16, False)

time.sleep(0.3)

def t_open():

GPIO.setup(22,GPIO.OUT)

GPIO.output(22,GPIO.LOW)

def t_close():

GPIO.setup(22,GPIO.IN)

def check_for_direction(position_x):

GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)

GPIO.setup(11,GPIO.OUT)

GPIO.setup(12,GPIO.OUT)

GPIO.setup(15,GPIO.OUT)

GPIO.setup(16,GPIO.OUT)

GPIO.setup(38,GPIO.OUT)

if position_x == 0 or position_x == width:

print 'out of bound'

t_stop()

if position_x <= ((width-tracking_width)/2 - tracking_width):

print 'move right!'

t_right()

elif position_x >= ((width-tracking_width)/2 + tracking_width):

print 'move left!'

t_left()

else:

# print 'move front'

t_up()

# initialize the camera and grab a reference to the raw camera capture

camera = PiCamera()

 

树莓派智能小车结合摄像头opencv进行物体追踪

图文无关


camera.resolution = (width, height)

camera.framerate = 32

rawCapture = PiRGBArray(camera, size=(width, height))

rawCapture2 = PiRGBArray(camera, size=(width, height))

# allow the camera to warmup

time.sleep(0.1)

# set the ROI (Region of Interest)

c,r,w,h = (width/2 - tracking_width/2), (height/2 - tracking_height/2), tracking_width, tracking_height

track_window = (c,r,w,h)

# capture single frame of tracking image

camera.capture(rawCapture2, format='bgr')

# create mask and normalized histogram

roi = rawCapture2.array[r:r+h, c:c+w]

hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)

mask = cv2.inRange(hsv_roi, np.array([0,30,32]), np.array([180,255,255]))

roi_hist = cv2.calcHist([hsv_roi], [0], mask, [180], [0,180])

cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)

term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 80, 1)

# capture frames from the camera

for frame in camera.capture_continuous(rawCapture, format='bgr', use_video_port=True):

# grab the raw NumPy array representing the image, then initialize the timestamp

# and occupied/unoccupied text

image = frame.array

# filtering for tracking algorithm

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

dst = cv2.calcBackProject([hsv], [0], roi_hist, [0,180], 1)

ret, track_window = cv2.meanShift(dst, track_window, term_crit)

x,y,w,h = track_window

cv2.rectangle(image, (x,y), (x+w,y+h), 255, 2)

cv2.putText(image, 'Tracked', (x-25, y-10), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)

# show the frame

cv2.imshow("Raspberry Pi RC Car", image)

key = cv2.waitKey(1) & 0xFF

check_for_direction(x)

time.sleep(0.01)

# clear the stream in preparation for the next frame

rawCapture.truncate(0)

在树莓派上实现人脸识别

在树莓派上实现人脸识别

介绍
预计在不久后的将来,人脸识别和身份认证技术将在我们的日常生活中扮演一个非常重要的角色。这项技术为我们开辟了一个全新的世界,它几乎适用于我们生活的方方面面。面部识别/身份认证的使用案例包括安全系统、认证系统、个性化智能家居和家庭护理助理等。
我们将搭建什么?
本教程将帮助你建立一个可以训练 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 示例库下载到你的树莓派上,并导航到你想下载的目录,以下命令是将其下载到主目录最简单的方式。
1
git clone https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples.git
安装要求
接下来,你需要将计算机视觉库导航到目录并按照要求进行安装,如果你已经将库复制到你的主目录上,那么这一部分的命令如下:

|cd IoT-JumpWay-RPI-Examples/Computer-Vision/Python
pip install --upgrade pip
pip install -r requirements.txt|

安装 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 部分中,它告诉你如何修改媒体的保存目录,在本教程中,你应该将这些设置更改为:

|/home/YOURUSERNAME/IoT-JumpWay-RPI-Examples/Computer-Vision/Python/media|

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

  • /etc/nginx/key.key
  • /etc/nginx/csr.csr

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

  • /etc/nginx/ca.crt
  • /etc/nginx/crt.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)来实现这一点。
视频流
如果你遵循了以上步骤,如果它们还没有运行,你需要按照下面的步骤操作。

|sudo service motion start

sudo /etc/init.d/motion start
启动 NGINX
sudo service nginx start

sudo /etc/init.d/nginx start|

重要的是:这种流式传输是一个新的特性,我们仍然在消除一些扭结,如果你想让 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)。

|"IoTJumpWaySettings":{
"SystemLocation": 0,
"SystemZone": 0,
"SystemDeviceID": 0,
"SystemDeviceName" : "Your Device Name",
"SystemCameraID":0
  }
"IoTJumpWayMQTTSettings":{
"username": "Your MQTT Username",
"password": "Your MQTT Password"
  }|

训练你的数据
现在基本构架已经搭建好,是时候用你自己的照片训练你的模型了。当你下载这个 RPO 时,在那个被处理的文件夹中已经有一个经过训练的模型和被处理的图像,但是这个模型不会识别你。你需要选择自己在不同的位置和灯光下的照片。你训练模型的照片越多,它就越精确,如果你的设备没有识别你,你只需要用更多的图像来训练它。
你可以添加你喜欢的图片(这取决于你的树莓派 3 可用的空间),有很多像你这样人。为了将训练数据导航到训练文件夹中并创建目录,目录应该是一个数字,而且不是那个已处理文件夹中的数字。
一旦你建立了图像的文件夹,进入 Tas.Py 文件改变第 34 行(self.train = 0)为 self.train = 1,并启动程序。程序将循环检测你的图像,如果它检测到脸部,它将以模型所需的格式重新创建一个图像,将其保存到匹配文件夹处理后的目录中中,并删除原始图像以节省空间。如果它没有检测到面部,它将简单地删除原始图像,因为它是无效的面部识别。
一旦处理阶段完成,你的新模型将自动开始训练,训练完成后,它将自动运行主面部识别程序。把你的脸放在你连接的摄像头前面,看着程序的输出你是谁。
注意:从处理目录中删除 read me 文件。
执行程序

|sudo python/python3 TASS.py
|

自主物联网通信
当你的设备每次检测到一个人时,设备会把传感器数据传送到 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
转自雷锋网:https://club.leiphone.com/page/TextTranslation/624

原文始发于:在树莓派上实现人脸识别|