该项目为实时系统,仅允许通过授权/受邀人员,使用人脸识别或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缓存来优化性能与功率效率
码垛机抓手的种类有哪些