一、功能:
- 基于树莓派的人脸识别智能门锁采用树莓派开发板模块,电源模块,红外传感器感应模块,树莓派专用摄像头模块和扬声器以及12v电磁锁驱动模块,实现在线人脸识别控制
二、硬件材料:
- 树莓派3B(Raspberry Pi3 Model B) 显示器或电脑,SD卡(安装树莓派官方系统),读卡器,树莓派摄像头,12v电磁锁,5v继电器,红外发射接收测距传感器,扬声器,面包板 杜邦线
三、软件:
- 树莓派官方Linux系统,face++ 云服务平台,python软件 python语言 浏览器
四、实现方法:
- 采用红外传感器感应获取外部动态,摄像头采集信息 本地终端利用API接口向face++云服务平台发送请求并对人脸分析计算给出数值返回本地处理同时将获取的图片发送到指定个人微信中,方便监视,树莓派通过GPIO引脚输入输出控制外围硬件设备实现。
五、步骤:
- 安装系统:1、下载官方Linux系统镜像;2、下载安装工具win32diskimager;3、运行Win32DiskImager、在软件中选择系统镜像(img文件)、然后device(设备)下选择TF卡盘符;4、连接显示器、也可远程桌面控制、给树莓派供电至系统完全装好。
- 连接树莓派专用摄像头
- 电器正负极连接树莓派引脚正负极(见尾页树莓派引脚图)、s接口接树莓派GPIO(16) 继电器com与12v电源随便 一根相接,no接口连接电磁锁、另一条线直接接电磁锁接口另一线;
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/66cd1064463037b36bc00c09c53fa344.png)
- 红外传感器正负极接树莓派正负极,输出接口(out)接GPIO(12)。
- 注册申请face++获得key与secret
六、python代码
import requests
from json import JSONDecoder
import time
import RPi.GPIO as GPIO
import picamera
import pygame
#------------------------------------
GPIO.cleanup()
GPIO.setmode(GPIO.BOARD)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(12,GPIO.IN)
faceID0 = "./photo/photo.jpeg" #拍照图片文件路径
faceID1 = "./photo/faceid1.jpeg" #对比图片文件路径
#faceID2 = "./photo/faceid2.jpeg"
def 语音播报1():
pygame.mixer.init()
pygame.mixer.music.load('/home/pi/ai-renlian/voice/photo.mp3') #语音播报MP3文件路径
pygame.mixer.music.play()
time.sleep(3)
def 语音播报2():
pygame.mixer.init()
pygame.mixer.music.load('/home/pi/ai-renlian/voice/success.mp3') #语音播报MP3文件路径
pygame.mixer.music.play()
time.sleep(3)
def 语音播报3():
pygame.mixer.init()
pygame.mixer.music.load('/home/pi/ai-renlian/voice/fail.mp3') #语音播报MP3文件路径
pygame.mixer.music.play()
time.sleep(3)
def 红外感应():
res = GPIO.input(12)
return res
def 摄像头():
with picamera.PiCamera() as camera:
#camera.start_recording("/home/pi/ai-renlian/摄像.h264")
#camera.wait_recording(5184000)
#camera.stop_recording()
#camera.stop_preview()
camera.resolution = (1200, 1000)
camera.start_preview()
time.sleep(1)
camera.capture('./photo/photo.jpeg') #设置拍摄的照片保存的路径
def 人脸数据(photo,faceid1):
compare_url = "https://api-cn.faceplusplus.com/facepp/v3/compare" #face++申请
key = "5Ut_EUtu3dG8Q60UBQdj8_LICgc4KByR" #face++申请
secret = "cWXtsKOMx62m8zHUx810MG-0oGoOnhSO" #face++申请
data = {"api_key": key, "api_secret": secret}
files = {"image_file1": open(faceID0, "rb"), "image_file2": open(faceID1, "rb")}
response = requests.post(compare_url, data=data, files=files)
req_con = response.content.decode('utf-8')
req_dict = JSONDecoder().decode(req_con)
#-------------------------------异常处理-----------------------------------
try:
confidence = req_dict['confidence'] #置信度,越高说明越像
except:
return 0
return confidence
#--------------------------------------------------------------------------
def 门锁():
GPIO.output(16,GPIO.HIGH)
time.sleep(3)
GPIO.output(16,GPIO.LOW)
time.sleep(0.5)
def run():
while True:
sensorRes = 红外感应()#传感器返回数值
if sensorRes ==0:
语音播报1()
摄像头()
#confidence = [facePP(faceID0,faceID1),facePP(faceID0,faceID2),facePP(faceID0,faceID3)]
confidence = 人脸数据(faceID0,faceID1)#人脸对比相似值
#for i in confidence:
if confidence>=90:
语音播报2()
门锁()
else:
语音播报3()
run()
七、运行调试
- 手指接近红外避障传感器模块,语音提示“你好 欢迎光临,请对准摄像头”
- 摄像头红灯亮一会儿关闭说明照片获取成功
- 语音提示“识别成功门已打开”
- 继电器发生“铁”的一声,12v电磁锁打开。