0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

科技观察员 来源:hackster.io 作者:hackster.io 2022-04-05 16:45 次阅读

该项目为实时系统,仅允许通过授权/受邀人员,使用人脸识别或NFC卡。

工作步骤:

人脸接近对讲机

看着相机

系统将脸与授权人进行比较

如果找到对应的数据,那么门就会打开,允许一个人可以进入

还有另一种通过方式;

持有通行卡的人将其放置到RFID位置,如果在其数据库中找到此卡的代码,门就会打开

准备

继电器连接

将继电器连接到RPI3。在我的例子中,我使用GPIO12引脚作为数据,5v作为电源,你可以选择任何GND。

您可以使用shell脚本测试中继,只需创建一个简单的sh脚本:

poYBAGJIDOqAMCZOAAAUcxybbTw407.png

粘贴下面的代码并运行它。

脚本代码:

poYBAGJIDOWAfW10AAF1vuJZEgc269.png

相机连接

连接相机模块并在raspi-config中启用它:

从终端打开工具:raspi-config

pYYBAGJIDOCAR_HCAAAGo2w90aE708.png

选择Enablecamera并点击Enter,然后转到,系统Finish将提示您重新启动。

要测试系统是否已安装并正常工作,请尝试以下命令:

pYYBAGJIDNyALjSKAAAHUV7a238706.png

LED连接

将您的LED连接到您想要的任何GPIO+GND。在我的例子中,我将GPIO16用于绿色LED,将GPIO26用于红色。完成后,测试:

为绿色和红色LED创建2个简单的Python脚本,内容如下:

绿灯.py

pYYBAGJIDNiAQB4xAAA93WzYn9M176.png

红色led2.py

pYYBAGJIDNSABSJNAAJyJUfD-cE476.png

接着就可以进行测试了。如果LED发光,则一切正常。

poYBAGJIDNCAa2UWAAAQmhDok2s551.png

人脸识别脚本

pip3使用(或用于Python2)从pypi安装此模块:pip2

poYBAGJIDMyAREptAAASV9IQrmI149.png

例如,在 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")

测试

pYYBAGJIDMWAedH6AAAJl_PaUBM655.png

RFID连接

引脚:

pYYBAGJIDMGAerplAAD66c-bwo0765.png

我们需要这个以将我们的RFID模块连接到RaspberryPi1。

ready:

poYBAGJIDL2AesjJAABkkvyaapk312.png

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")

  • 使用这个例子:

poYBAGJIDLeAfcu9AAA4FhFgnQQ774.png

按钮 + 通讯
#!/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

pYYBAGJIDK-AO9UEAAE3wrUuV0w710.png

此处为智能对讲增加了按钮。它会将您的最后一张照片发送给通讯机器人,并向Ubuntu桌面PC发送通知。

poYBAGJIDKuAe3h4AADeZMsaQ3I474.png

为按钮添加计时

为了通过按钮在特定时间禁用入口,我制作了以下bash脚本:

poYBAGJIDKWATOopAABSuTRooYo121.png

action.sh-早上7点到晚上19​​点开门

error.sh-在晚上19​​点到早上7点之间停止使用,显示限制图像error.sh脚本

pYYBAGJIDKCAaWeJAABxRytDlY4834.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 树莓派
    +关注

    关注

    113

    文章

    1640

    浏览量

    104750
  • 智能门禁系统

    关注

    0

    文章

    14

    浏览量

    4959
  • 树莓派3B+
    +关注

    关注

    0

    文章

    3

    浏览量

    647
收藏 人收藏

    评论

    相关推荐

    新到手的树莓3B系统为什么是32位的

    我到手的树莓3系统是32位的,CPU是armv7l,而不是宣传的armv8,内存和主频到是没有问题。我想知道,现在的树莓
    发表于 04-10 17:17

    树莓3B 装不上PYQT

    树莓3B装不上PYQT ,按照方法1: sudoapt-get -y install Python-qt4 sudoapt-get -y install python-dev显示 :【警告
    发表于 06-08 16:50

    树莓3B 如何把HDMI切换到3.5寸屏幕上显示

    树莓3B 如何把HDMI切换到3.5寸屏幕上显示?????????
    发表于 06-08 17:27

    树莓3B 烧录w10 物联无法开机 求解

    树莓3B烧录w10物联无法开机 不知道是我烧录出了问题还是怎么回事 求大神帮忙愿意付辛苦费
    发表于 05-29 04:41

    树莓3b,为什么是32位的armv7

    3b是32位(图上这个getconf是硬件还是软件位数),硬件是32位的?3b的处理器写着是bcm2837,系统里看是arm7这是正常
    发表于 10-01 22:10

    请问树莓3B有没有wifi模块的能支持自建AP么?

    帮会员提问,请大家帮帮他树莓3B有没有wifi模块的。能支持自建AP么?树莓3B有没有wif
    发表于 06-09 15:12

    请问树莓3B/3B+和4B如何安装OpenCV?

    树莓3B/3B+和4B安装OpenCV教程
    发表于 11-05 07:17

    怎样利用树莓3B去控制28步进电机?

    ,楼主自行购买了28步进电机及相应的驱动器,完成了对步进电机的控制。硬件设备:树莓3B 28步进电机及其驱动 12V开关电源...
    发表于 07-08 07:39

    树莓3b的工作电流不足会有什么影响

    树莓3b最好的工作电流是多少?树莓3b的工作电流不足会有什么影响?
    发表于 10-11 08:16

    如何利用树莓实现智能小车的四轮驱动?

    如何利用树莓实现智能小车的四轮驱动?
    发表于 10-19 09:36

    树莓3B的硬件配置有哪些

    1、树莓3B(Raspberry Pi 3 型号 B SBC)硬件配置Broadcom BCM2837 芯片组,运行频率 1.2 GHz
    发表于 01-19 06:55

    用于覆盆子树莓3B及以上型号的RGB LED帽

    描述树莓 4 RGB 帽子用于覆盆子 Pi 3B 及以上型号的 RGB LED 帽。采用矩阵形式的 WS2812 LED。特征:5X 行和 5X 列5x5 矩阵外形关闭展示位置以提高显示质量可以以
    发表于 07-27 06:50

    树莓3B/4B散热风扇帽

    描述树莓 4 风扇帽树莓 3B/3B+/4B
    发表于 07-27 06:02

    请问一下为什么树莓3B开启CONFIG_ARCH_ARM64=y编译会报错呢

    请问一下为什么树莓3B开启CONFIG_ARCH_ARM64=y编译会报错呢?
    发表于 09-22 10:35

    树莓3树莓4原理图分享

    提供了树莓3树莓3B树莓
    发表于 09-27 07:58