目的
构建一个具有 3D 面部识别功能的智能开门器
适用于一个或两个家庭的房子。
所需材料
英特尔实感 ID F455 摄像头
树莓派 4B >= 4 GB 内存
Geeek Pi Raspberry Pi 4 护甲箱
16 GB 或更高的 microSD 存储卡,例如 Samsung EVO Select 64 GB microSD
明纬 IRM-60-5ST 5V 10A 电源
Lindby 的传感器外墙灯 Severina 作为外壳
RGB LED 64x32 P2,5 矩阵模块 160mm x 80mm 例如 Adafruit 5036
E18-D80NK IR反射镜+10KΩ上拉电阻
40 针 GPIO 带状电缆或 10x 公/母跳线,20x 母/母跳线
M3 黄铜间隔螺栓 4x 40mm、4x15mm、2x 10mm
8 个 M3 螺母,用于将间隔螺栓固定到外壳的后面板
4x M2.5 螺钉 12mm,用于将 Raspi 连接到外壳的后面板
¼ 英寸螺丝,用于将相机固定在机箱底部
外壳底部用于 USB 电缆的电缆索环
用于绝缘低压电源端子的收缩管
用于前门蜂鸣器的基于 IP 的接口,例如 Siedle 网关(德国品牌内部对讲机)
可选:带有 40 针间距堆叠接头的 Adafruit RGB 矩阵式发动机罩 - 增加矩阵式发动机罩与电路板的距离,使其突出于装甲箱
可选:PIR 传感器 HC-SR 501 作为替代存在检测器和 E18-D80NK 回归反射传感器的替代品
所需工具
钻头
螺丝刀
烙铁
前提
2021 年初,英特尔通过发布 RealSense ID F455 摄像头采纳了这一原则,并为制造商提供了一款有趣的产品,可集成到自制解决方案中。该相机通过大量文档、适用于 Linux、Windows 和 Android 的开源 SDK 以及 C、C++、C# 和 Python 语言来评分。与 Apple 相比,它允许对多个人进行身份验证,他们的个人资料要么集中存储在服务器上,要么存储在相机本身的数据库中。英特尔和苹果给出的“错误录取率”——即被错误录取的人数——为 1:100 万。相机的整个认证过程不到一秒钟。
功能性
智能开门器取代了过时的入口照明,因此被安置在一个外壳中。该系统仅由主电压供电,并通过内部 WIFI 进行通信。因此,必须确保准入控制的位置具有适当的 WIFI 接收。
由于相机本身没有存在检测器,它由红外反射光屏障触发。要求入场的人将手擦过挡光板或靠近他们的脸。可以短暂看到机箱底部倒置摄像头的红外照明器发出微弱的红光。摄像头现在将波长为 850 nm 的不可见红外点投射到面部,通过侧面集成的两个全高清摄像头记录它们,并使用它们形成三维点云,并通过 AI 与存储的面部轮廓进行比较推理。相机需要不到一秒钟的时间进行此身份验证过程,并通过 USB 电缆将结果(在肯定的情况下是识别人的姓名)传输到 Raspberry Pi 计算机。
由于我们只使用一台相机,这些配置文件本地存储在相机上。对于具有多个访问权限的身份验证,摄像机提供了一种服务器模式,其中访问配置文件存储在中央服务器上,因此可以由多个摄像机使用。如果验证通过,则被识别人的姓名会在 LED 矩阵显示屏上显示几秒钟,然后通过 WIFI 使用 MQTT 命令打开门。空闲时,LED 矩阵面板显示时间、星期几和当前日期。您可以在此处通过 YouTube 视频找到其工作原理的演示:识别出的人名会在 LED 矩阵显示屏上显示几秒钟,然后通过 WIFI 使用 MQTT 命令打开门。空闲时,LED 矩阵面板显示时间、星期几和当前日期。您可以在此处通过 YouTube 视频找到其工作原理的演示:识别出的人名会在 LED 矩阵显示屏上显示几秒钟,然后通过 WIFI 使用 MQTT 命令打开门。空闲时,LED 矩阵面板显示时间、星期几和当前日期。
硬件设置
在这里我使用了带有 Raspberry PI OS aka Raspian 的 Raspberry 4B 用作主机。
我们决定在不锈钢外壳中安装户外灯,当放置在前门前时,它会散发出不显眼的图像。除了 Raspi 之外,它还包含一个功率为 50 瓦的 5V 电源、一个回归反射传感器和一个分辨率为 64x32 RGB LED 的 Adafruit 5036 LED 矩阵显示器。它使用 4 个间隔螺栓连接到外壳的底板,每个间隔螺栓的长度为 55 毫米(40 毫米 + 15 毫米)。矩阵模块的厚度为 15 毫米,因此底板和磨砂丙烯酸玻璃之间的距离为 70 毫米。为确保 LED 矩阵内容不会因缎面处理而变得过于模糊,LED 矩阵模块与丙烯酸玻璃直接接触非常重要。
接线
将 RGB 矩阵显示器连接到 Raspberry PI 有 2 个选项:
Adafruit RGB Matrix Hat/Bonnet:此插件板通过 LED 矩阵模块随附的 HUB75 连接器提供整齐的布线。为了避免插件板不妨碍 Raspi Armor Case,必须使用 40 针间距堆叠接头将其抬起。这造成了更高设计的缺点。6厘米。由于 Raspi 安装在与传感器相对的外壳下部,因此可以使用 PIR 传感器 HC-SR 501,但在组装外壳长度为 5.5 厘米的 E18-D80NK 红外光栅时会导致碰撞的灯壳。因此,在使用 E18-D80NK 光栅时,我们建议使用如下所示的分立接线或交换位置 - 电源单元在外壳下部,Raspi 在上部!Raspi 通过插头或 Adafruit 阀盖上的螺丝端子供电。此外,Adafruit Bonnet 使用其他用于通信的GPIO端口,因此在 Adafruit Bonnet 案例中,我们使用 GPIO 19 作为存在传感器。因此,传感器输出的跨接电缆必须焊接到阀盖上。
使用跨接电缆或带状电缆的离散接线稍微复杂一点,但功能相同。存在传感器(PIR 或光电传感器)用于在离散接线的情况下连接到GPIO 引脚 5。Meanwell 电源在低压输出端有一个 4 针螺钉端子,通过随附的电源线为 RGB 矩阵和 Raspi 通过 GPIO 引脚 2 提供 5V 电源和 GPIO 引脚 39 用于接地。我们不建议使用跨接电缆为 Raspi 供电,而是使用具有更高横截面和更快速端子的更粗电缆。为此,我们重新使用了 LED Matrix 电源的 2 个冗余电缆夹,用小螺丝刀将它们拉出,并用收缩管覆盖它们,这样就不会有 GPIO 引脚 2 短路的风险。
PIR传感器
为 PIR 传感器的镜头预留的前部外壳孔,通过用两个封闭的塑料螺母将反射式红外光屏障的内外拧紧,将反射式红外光屏障填充。传感器通过矩阵式阀盖提供 5V 电压。如果使用 Adafruit Matrix Bonnet,棕色电缆将连接到标有“5V Out”的端子。
使用离散接线,有几种方法可以从GPIO引脚获得 5V 电压。例如,引脚 4 上的 +5V 和 GND - 蓝色电缆 - 引脚 34 上。传感器输出 - 黑色电缆 - 连接到引脚 29 或逻辑 GPIO 端口 5。
如果您没有对面的墙壁或类似的反射红外光的物体,您可以使用 PIR 传感器,例如 HC-SR 501,而不是光栅。在我们的案例中,这记录了许多误报事件,因此经常触发相机,因为 LED 矩阵模块对人眼来说是不可见的闪烁,并通过对面的墙壁刺激 PIR 传感器。
机箱安装
Severina by Lindby 传感器控制的户外壁灯外壳采用 160 毫米 x 80 毫米尺寸的 RGB LED 矩阵,并提供足够的空间来容纳所有组件。要安装它,您必须在后面板上钻几个孔。
摄像机用 1/4 英寸螺钉从外壳内部拧到下部不锈钢板上。为了防止贵重的相机简单地扭断,它用两个 10 毫米长的间隔螺栓固定。
软件安装
对于软件安装,我们假设一个新安装的 Raspberry Pi OS aka Raspian,它通过内部 WIFI 连接到 Internet。我们还建议通过 Raspberry Pi 系统配置打开 ssh 和 vnc 服务以进行远程访问。
程序“dooropenerF455”基于两个软件模块:第一,英特尔的 RealSense ID SDK,用于控制 3D 摄像头,第二,Henner Zeller 的 RPI LED 矩阵模块。我们使用 MQTT 接口打开门,因此将 Mosquitto 安装为 MQTT 代理:
# installation of smartdoorF455
# bring Raspi up2date and get additional software developement tools
sudo apt update -y
sudo apt upgrade -y
# install essential development tooling
sudo apt install cmake build-essential -y
# mosquitto is the MQTT broker
sudo apt install mosquitto mosquitto-dev libmosquittopp-dev mosquitto-clients -y
# libgraphicsmagick++-dev is required to build rpi-rgb-led-matrix utilities
sudo apt install libgraphicsmagick++-dev libwebp-dev -y
# you may want to encrypt network communication
sudo apt install libssl-dev libcurl4-openssl-dev -y
# let's build the RealSense ID SDK by Intel
cd ~
git clone https://github.com/IntelRealSense/RealSenseID.git
cd RealSenseID
mkdir build
cd build
cmake ..
make -j4
# let's build the rpi-rgb-led-matrix library by Henner Zeller
cd ~
git clone https://github.com/hzeller/rpi-rgb-led-matrix.git
cd rpi-rgb-led-matrix/
make -C examples-api-use
# let's build the smartdoorF455 application
cd ~
git clone https://github.com/joergwall/smartdoorF455.git
cd smartdoorF455
mkdir build
cd build
cmake ..
make -j4
编译后的 C++ 二进制可执行文件“smartdoorF455”或 C 挂件“smartdoorF455_c”现在应该存在于 ~/smartdoorF455/bin 目录中。源代码可以在 ~/smartdoorF455/cpp 或 ~/smartdoorF455/c 中找到。该程序通过带有 sudo 的 shell 脚本启动:
cd ~/smartdoorF455/bin
sudo ./run_smartdoorF455.sh
或者谁更喜欢编程语言 C 的变体:
sudo ./run_smartdoorF455_c.sh
并根据用户名和时间/日期提供以下输出:
/home/pi/log created
smartdoorF455 started successfully
watch /home/pi/log/20211216_092446_smartdoorF455.log for errors
即使相机还没有排练一张脸,时间、星期几和日期现在也应该是可见的。如果不是这种情况,请转到故障排除一章。
人脸进行身份验证
为了将授权用户的脸带入相机,我们使用了一个带有命令行界面的工具。如果设备 /dev/ttyACM0 丢失,请改用 /dev/ttyACM1。当前存储在相机中的参数和选择菜单现在出现。旋转参数可以在“s”菜单中设置为 0 或颠倒设置为 180,具体取决于相机是否倒置 - 即取决于相机是倒置在外壳上还是直立,例如在随附的 mini 上三脚架。菜单项“e”提供了在相机上使用本地配置文件存储的培训。脸部应距离相机约 30 至 50 厘米。然后该过程如下所示:
# enroll user for authentication
cd ~/RealsenseID/build/bin
sudo ./rsid-cli /dev/ttyACM0
Connected to device
Authentication settings::
* Rotation: 0 Degrees
* Security: High
* Algo flow Mode: All
* Face policy : Single
* Dump Mode: CroppedFace
* Matcher Confidence Level : High
Please select an option:
'e' to enroll.
'a' to authenticate.
'd' to delete all users.
'c' to capture images from device.
's' to set authentication settings.
'g' to query authentication settings.
'u' to query ids of users.
'n' to query number of users.
'b' to save device's database before standby.
'v' to view additional information.
'x' to ping the device.
'q' to quit.
server mode options:
'E' to enroll with faceprints.
'A' to authenticate with faceprints.
'U' to list enrolled users
'D' to delete all users.
> e
User id to enroll: Julia
Connected to device
*** Hint Success
*** Hint Success
这样,所有授权人员的面部轮廓都被学习了。指定名称时,请注意RGB LED 矩阵模块只能显示少量字母。使用我们使用的字体,这些只有 5 个字符。如有需要,请在源代码第 99 行使用缩写或缩小 BDF 字体的大小,这样一行最多可以显示 8 个字符
#define FONT_NAME FONT_PATH "4x6.bdf"
源代码
~/smartdoorF455/cpp 或 ~/smartdoorF455/c 下的源代码必须适应情况。是使用 MQTT 还是使用 Adafruit Bonnet 来连接 LED RGB 矩阵模块?这将在源代码中使用适当的#define 常量定义进行调整。例如,如果使用 Adafruit Bonnet,则使用 GPIO 19 而不是 GPIO 5 用于红外反射光栅,因为 RGB 矩阵是通过其他 GPIO 引脚控制的:
/* START SYSTEM CONFIGURATION SECTION */
#define MOSQUITTO_IN_USE /* comment this line, if MQTT is not used to open door */
#define ADAFRUIT_BONNET_IN_USE /* comment this line, if you have direct cable wiring from Raspi to LED Matrix */
#define STDOUT_ADDTL_INFO /* provides additional information on stdout e.g. prints date/time when movement sensor triggers camera */
/* END SYSTEM CONFIGURATION SECTION */
开门指令
为了能够使用此处介绍的解决方案解锁前门,门对讲机必须提供 IP 接口。如果你想解决这个项目的副本,你应该首先详细分析贝尔系统的当前状态,并尝试找到添加IP接口的方法。
我们需要处理基于 Siedle 总线的门禁对讲机,因此使用 Oskar Neumann 的网关,该网关通过 WIFI 将 MQTT 命令转换为 Siedle 总线,但是市场上不再提供。Siedle 提供 Smart Gateway SG-150 作为 IP 接口,然而,对于自建项目来说,价格超过 600 美元是一大笔钱。我们尚未检查的 Siedle IP 接口的其他替代方案是第三方网关,例如Hamares或SMS Guard的智能开门器,它也提供 MQTT 接口。
任何已经在使用基于 IP 的门对讲系统的人都可以摆脱困境,并且可以在标有“TRIGGER DOOR OPENER START”和“TRIGGER DOOR OPENER END”的 C/C++ 代码之间调整源代码来触发开门器。例如,如果此触发器是一个 http 请求,则可以使用 Linux 系统调用将其插入到 ~/smartdoorF455/c/main.c 或 ~/smartdoorF455/cpp/main.cpp 文件中:
/* TRIGGER DOOR OPENER START - ADAPT THIS CODE according to your interface to
your door buzzer */
/* exemplary adaptation of the C/C++ code */
/* Assumption: the door opener can be opened with the http request */
/* ------- http://192.168.178.27:8083/fhem?cmd=set%20Siedle%20open */
/* Make sure the curl module is installed in Raspian: */
/* sudo apt install curl */
/* Since no MQTT protocol is used for the door opener */
/* remove those enclosed between "#ifdef MOSQUITTO_IN_USE" and "#endif" */
/* lines. */
system("curl http://192.168.178.27:8083/fhem?cmd=set%20Siedle%20open");
/* TRIGGER DOOR OPENER END */
Mosquitto MQTT 代理
如果使用 MQTT 与开门机通信,则必须创建以下配置文件用于 Raspi 上的 MQTT 代理的配置:
sudo nano /etc/mosquitto/conf.d/mymosquitto.conf
# add following lines
listener 1883
listener 1884
allow_anonymous true
之后,重新启动代理:
sudo systemctl restart mosquitto
mosquitto 客户端允许我们窃听代理交换的消息以进行调试
mosquitto_sub -d -t "#"
摄像头安全
英特尔在 RealSense ID SDK 中提供了一种安全通信模式。此模式使相机能够与主机系统配对并加密通信。这消除了不速之客通过另一个实感 ID 摄像头(通过 USB-C 快速插入)和其他面部配置文件获得未经授权访问的可能性。由于复杂的原因,我们这里没有使用这种模式。
优化
为了从进程调度程序的管理中删除四个处理器内核之一,以便将其留给我们的应用程序独占使用,必须修改以下文件:
sudo nano /boot/cmdline.txt
“isolcpus=3” 附加到行尾,使其看起来像这样:
console=serial0,115200 console=tty1 root=PARTUUID=e0d8ecc0-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles isolcpus=3
此步骤在重新启动计算机后生效,旨在防止 LED 矩阵显示屏出现任何闪烁。我们程序的处理器亲和性在 run_smartdoor_F455.sh 使用 taskset 命令的启动脚本结束时分配给释放的 CPU。
结论
三维生物特征面部识别的用户身份验证是一个新领域,为创客社区开辟了令人兴奋的应用场景。但很可惜,英特尔在宣布仅仅8个月后就埋下了这个新的业务领域。尽管如此,我们还是对这款 3D 相机充满热情,并且作为开门器(或者,正确地说,作为门释放器,因为您仍然必须自己打开前门),他们一直在可靠地完成他们的工作。
全部0条评论
快来发表一下你的评论吧 !