如何利用树莓派3B实现智能门禁对讲系统的设计

该项目为实时系统,仅允许通过授权/受邀人员,使用人脸识别或nfc卡。
工作步骤:
人脸接近对讲机
看着相机
系统将脸与授权人进行比较
如果找到对应的数据,那么门就会打开,允许一个人可以进入
还有另一种通过方式;
持有通行卡的人将其放置到rfid位置,如果在其数据库中找到此卡的代码,门就会打开
准备
继电器连接
将继电器连接到rpi3。在我的例子中,我使用gpio12引脚作为数据,5v作为电源,你可以选择任何gnd。
您可以使用shell脚本测试中继,只需创建一个简单的sh脚本:
粘贴下面的代码并运行它。
脚本代码:
相机连接
连接相机模块并在raspi-config中启用它:
从终端打开工具:raspi-config
选择enablecamera并点击enter,然后转到,系统finish将提示您重新启动。
要测试系统是否已安装并正常工作,请尝试以下命令:
led连接
将您的led连接到您想要的任何gpio+gnd。在我的例子中,我将gpio16用于绿色led,将gpio26用于红色。完成后,测试:
为绿色和红色led创建2个简单的python脚本,内容如下:
绿灯.py
红色led2.py
接着就可以进行测试了。如果led发光,则一切正常。
人脸识别脚本
pip3使用(或用于python2)从pypi安装此模块:pip2
例如,在 documents 中创建目录“pic”和“unknown”,并在其中放置一些您认识的人的面部照片。就我而言,它是(“/home/pi/documents/pic/”)和(“/home/pi/documents/unknown/”)。
使用以下代码创建一个 python 脚本:
import face_recognition 
import picamera 
import numpy as np 
import os 
camera = picamera.picamera() 
camera.resolution = (320, 240) 
output = np.empty((240, 320, 3), dtype=np.uint8) 
print(loading known face image(s)) 
ep_image = face_recognition.load_image_file(/home/pi/documents/pic/ep.jpg) 
ep_face_encoding = face_recognition.face_encodings(ep_image)[0] 
vl_image = face_recognition.load_image_file(/home/pi/documents/pic/vl.jpg) 
vl_face_encoding = face_recognition.face_encodings(vl_image)[0] 
face_locations = [] 
face_encodings = [] 
while true: 
   print(capturing image.) 
   camera.capture(output, format=rgb) 
   face_locations = face_recognition.face_locations(output) 
   print(found {} faces in image..format(len(face_locations))) 
   face_encodings = face_recognition.face_encodings(output, face_locations) 
   for face_encoding in face_encodings: 
       match = face_recognition.compare_faces([ep_face_encoding,vl_face_encoding], face_encoding) 
       name =  
       os.system(python /home/pi/led2.py &) 
       import time 
       date_string = time.strftime(%y-%m-%d-%h:%m:%s) 
       camera.capture(/home/pi/documents/unknown/image- + date_string + .jpg) 
测试
rfid连接
引脚:
我们需要这个以将我们的rfid模块连接到raspberrypi1。
ready:
read.py :当脚本找到授权卡时,它在远程 rpi 3 上打开用户图片(运行 led 脚本),然后开门。
import mfrc522 
import signal 
import os 
continue_reading = true 
mifarereader = mfrc522.mfrc522() 
carda = [46,44,187,26,163] 
cardb = [176,203,130,124,133] 
cardc = [20,38,121,207,132] 
def end_read(signal, frame): 
 global continue_reading 
 continue_reading = false 
 print ctrl+c captured, ending read. 
 mifarereader.gpio_cleen() 
signal.signal(signal.sigint, end_read) 
while continue_reading: 
 (status,tagtype) = mifarereader.mfrc522_request(mifarereader.picc_reqidl) 
 if status == mifarereader.mi_ok: 
   print card detected 
 (status,backdata) = mifarereader.mfrc522_anticoll() 
 if status == mifarereader.mi_ok: 
   print card read uid: +str(backdata[0])+,+str(backdata[1])+,+str(backdata[2])+,+str(backdata[3])+,+str(backdata[4]) 
   if  backdata == carda: 
     print evghenii 
     os.system(sshpass -p *password* ssh root@10.0.0.60 fbi -t 1 -d /dev/fb1 -noverbose /home/pi/documents/pic/ep.jpg) 
     os.system(sshpass -p *password* ssh root@10.0.0.60 /home/pi/documents/open.sh 2>/dev/null) 
#      os.system(sshpass -p *password* ssh root@10.0.0.60 sleep 2) 
     os.system(sshpass -p *password* ssh root@10.0.0.60 killall fbi) 
   elif backdata == cardb: 
     print vlad 
     os.system(sshpass -p *password* ssh root@10.0.0.60 fbi -t 1 -d /dev/fb1 -noverbose /home/pi/documents/pic/vl.jpg) 
     os.system(sshpass -p *password* ssh root@10.0.0.60 /home/pi/documents/open.sh 2>/dev/null) 
#     os.system(sshpass -p *password* ssh root@10.0.0.60 sleep 2) 
     os.system(sshpass -p *password* ssh root@10.0.0.60 killall fbi) 
   elif backdata == cardc: 
     print is card c 
   else: 
     print wrong card 
     os.system(sshpass -p *password* ssh root@10.0.0.60 /home/pi/led2.py 2>/dev/null) 
使用这个例子:
按钮 + 通讯
#!/usr/bin/python 
import rpi.gpio as gpio 
from subprocess import call 
from datetime import datetime 
import time 
import os 
shutdownpin = 29 
shutdownminseconds = 5 
# button debounce time in seconds 
debounceseconds = 0.01 
gpio.setmode(gpio.board) 
gpio.setup(shutdownpin, gpio.in, pull_up_down=gpio.pud_up) 
buttonpressedtime = none 
def buttonstatechanged(pin): 
   global buttonpressedtime 
   if not (gpio.input(pin)): 
       # button is down 
       if buttonpressedtime is none: 
           buttonpressedtime = datetime.now() 
   else: 
       # button is up 
       if buttonpressedtime is not none: 
           elapsed = (datetime.now() - buttonpressedtime).total_seconds() 
           buttonpressedtime = none 
           if elapsed >= shutdownminseconds: 
               call(['shutdown', '-r', 'now'], shell=true) 
           elif elapsed >= debounceseconds: 
               os.system(bash /home/pi/timed.sh) 
# subscribe to button presses 
gpio.add_event_detect(shutdownpin, gpio.both, callback=buttonstatechanged) 
while true: 
   # sleep to reduce unnecessary cpu usage 
   time.sleep(5) 
功能.sh
#!/bin/bash 
sshpass -p password ssh epogonii@ipadress -p1337 notify-send -i /usr/share/icons/gnome/32x32/actions/ring2.png smart-intercom guest_at_the_door 
display=:0.0 xauthority=/home/pi/.xauthority /usr/bin/feh --hide-pointer -x -q -d 5 -b black -f /home/pi/doorway.png & 
sh /home/pi/documents/open.sh > log.out 2> /dev/null 
display=:0.0 xauthority=/home/pi/.xauthority xdotool key x 
sh /home/pi/tgphoto.sh facerec /var/www/html/last.jpg > log.out 2> /dev/null
此处为智能对讲增加了按钮。它会将您的最后一张照片发送给通讯机器人,并向ubuntu桌面pc发送通知。
为按钮添加计时
为了通过按钮在特定时间禁用入口,我制作了以下bash脚本:
action.sh-早上7点到晚上19​​点开门
error.sh-在晚上19​​点到早上7点之间停止使用,显示限制图像error.sh脚本

WT588F02B-8S语音芯片:灵活更换语音内容,降低开发成本与备货压力
第三方厂商为 PS5 推出自定义外壳
电压比较器与运放的差异
DARPA宣布将花费总计15亿美元研究其新材料与新架构,以重振芯片产业
一文详解MOS的寄生模型
如何利用树莓派3B实现智能门禁对讲系统的设计
汽车芯片缺货,会给国内车规级MCU厂商带来什么变化?
多相解决方案对电源数据中心的数字控制实验
为什么电流和磁传感器对TWS(真无线耳机)的设计至关重要
Nginx变身爆火神器,手把手教你在永洪BI中应用
高通、英特尔、美光等公司“游说”美政府 要求放宽华为禁令
曝华为Watch GT 2 Pro手表双12开售,心电图版可给出医生签名心电图报告
尼得科全球电器的高端电机及压缩机被小米智能家居产品采用
vivo游戏:携手和助力开发者共建生态,打造让用户热爱好平台
压力继电器的作用
RFID技术将助力港铁安全巡查绿化
北京大学实现千兆赫兹碳纳米管集成电路 推动了碳纳米管电子学的发展
澎芯半导体主驱级SiC MOSFET产出良率达到75%
使用STM32缓存来优化性能与功率效率
码垛机抓手的种类有哪些