目的
構(gòu)建一個(gè)具有 3D 面部識(shí)別功能的智能開(kāi)門(mén)器
適用于一個(gè)或兩個(gè)家庭的房子。
所需材料
英特爾實(shí)感 ID F455 攝像頭
樹(shù)莓派 4B >= 4 GB 內(nèi)存
Geeek Pi Raspberry Pi 4 護(hù)甲箱
16 GB 或更高的 microSD 存儲(chǔ)卡,例如 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 個(gè) M3 螺母,用于將間隔螺栓固定到外殼的后面板
4x M2.5 螺釘 12mm,用于將 Raspi 連接到外殼的后面板
? 英寸螺絲,用于將相機(jī)固定在機(jī)箱底部
外殼底部用于 USB 電纜的電纜索環(huán)
用于絕緣低壓電源端子的收縮管
用于前門(mén)蜂鳴器的基于 IP 的接口,例如 Siedle 網(wǎng)關(guān)(德國(guó)品牌內(nèi)部對(duì)講機(jī))
可選:帶有 40 針間距堆疊接頭的 Adafruit RGB 矩陣式發(fā)動(dòng)機(jī)罩 - 增加矩陣式發(fā)動(dòng)機(jī)罩與電路板的距離,使其突出于裝甲箱
可選:PIR 傳感器 HC-SR 501 作為替代存在檢測(cè)器和 E18-D80NK 回歸反射傳感器的替代品
所需工具
鉆頭
螺絲刀
烙鐵
前提
2021 年初,英特爾通過(guò)發(fā)布 RealSense ID F455 攝像頭采納了這一原則,并為制造商提供了一款有趣的產(chǎn)品,可集成到自制解決方案中。該相機(jī)通過(guò)大量文檔、適用于 Linux、Windows 和 Android 的開(kāi)源 SDK 以及 C、C++、C# 和 Python 語(yǔ)言來(lái)評(píng)分。與 Apple 相比,它允許對(duì)多個(gè)人進(jìn)行身份驗(yàn)證,他們的個(gè)人資料要么集中存儲(chǔ)在服務(wù)器上,要么存儲(chǔ)在相機(jī)本身的數(shù)據(jù)庫(kù)中。英特爾和蘋(píng)果給出的“錯(cuò)誤錄取率”——即被錯(cuò)誤錄取的人數(shù)——為 1:100 萬(wàn)。相機(jī)的整個(gè)認(rèn)證過(guò)程不到一秒鐘。
功能性
智能開(kāi)門(mén)器取代了過(guò)時(shí)的入口照明,因此被安置在一個(gè)外殼中。該系統(tǒng)僅由主電壓供電,并通過(guò)內(nèi)部 WIFI 進(jìn)行通信。因此,必須確保準(zhǔn)入控制的位置具有適當(dāng)?shù)?WIFI 接收。
由于相機(jī)本身沒(méi)有存在檢測(cè)器,它由紅外反射光屏障觸發(fā)。要求入場(chǎng)的人將手擦過(guò)擋光板或靠近他們的臉。可以短暫看到機(jī)箱底部倒置攝像頭的紅外照明器發(fā)出微弱的紅光。攝像頭現(xiàn)在將波長(zhǎng)為 850 nm 的不可見(jiàn)紅外點(diǎn)投射到面部,通過(guò)側(cè)面集成的兩個(gè)全高清攝像頭記錄它們,并使用它們形成三維點(diǎn)云,并通過(guò) AI 與存儲(chǔ)的面部輪廓進(jìn)行比較推理。相機(jī)需要不到一秒鐘的時(shí)間進(jìn)行此身份驗(yàn)證過(guò)程,并通過(guò) USB 電纜將結(jié)果(在肯定的情況下是識(shí)別人的姓名)傳輸?shù)?Raspberry Pi 計(jì)算機(jī)。
由于我們只使用一臺(tái)相機(jī),這些配置文件本地存儲(chǔ)在相機(jī)上。對(duì)于具有多個(gè)訪問(wèn)權(quán)限的身份驗(yàn)證,攝像機(jī)提供了一種服務(wù)器模式,其中訪問(wèn)配置文件存儲(chǔ)在中央服務(wù)器上,因此可以由多個(gè)攝像機(jī)使用。如果驗(yàn)證通過(guò),則被識(shí)別人的姓名會(huì)在 LED 矩陣顯示屏上顯示幾秒鐘,然后通過(guò) WIFI 使用 MQTT 命令打開(kāi)門(mén)。空閑時(shí),LED 矩陣面板顯示時(shí)間、星期幾和當(dāng)前日期。您可以在此處通過(guò) YouTube 視頻找到其工作原理的演示:識(shí)別出的人名會(huì)在 LED 矩陣顯示屏上顯示幾秒鐘,然后通過(guò) WIFI 使用 MQTT 命令打開(kāi)門(mén)。空閑時(shí),LED 矩陣面板顯示時(shí)間、星期幾和當(dāng)前日期。您可以在此處通過(guò) YouTube 視頻找到其工作原理的演示:識(shí)別出的人名會(huì)在 LED 矩陣顯示屏上顯示幾秒鐘,然后通過(guò) WIFI 使用 MQTT 命令打開(kāi)門(mén)。空閑時(shí),LED 矩陣面板顯示時(shí)間、星期幾和當(dāng)前日期。
硬件設(shè)置
在這里我使用了帶有 Raspberry PI OS aka Raspian 的 Raspberry 4B 用作主機(jī)。
我們決定在不銹鋼外殼中安裝戶(hù)外燈,當(dāng)放置在前門(mén)前時(shí),它會(huì)散發(fā)出不顯眼的圖像。除了 Raspi 之外,它還包含一個(gè)功率為 50 瓦的 5V 電源、一個(gè)回歸反射傳感器和一個(gè)分辨率為 64x32 RGB LED 的 Adafruit 5036 LED 矩陣顯示器。它使用 4 個(gè)間隔螺栓連接到外殼的底板,每個(gè)間隔螺栓的長(zhǎng)度為 55 毫米(40 毫米 + 15 毫米)。矩陣模塊的厚度為 15 毫米,因此底板和磨砂丙烯酸玻璃之間的距離為 70 毫米。為確保 LED 矩陣內(nèi)容不會(huì)因緞面處理而變得過(guò)于模糊,LED 矩陣模塊與丙烯酸玻璃直接接觸非常重要。
接線
將 RGB 矩陣顯示器連接到 Raspberry PI 有 2 個(gè)選項(xiàng):
Adafruit RGB Matrix Hat/Bonnet:此插件板通過(guò) LED 矩陣模塊隨附的 HUB75 連接器提供整齊的布線。為了避免插件板不妨礙 Raspi Armor Case,必須使用 40 針間距堆疊接頭將其抬起。這造成了更高設(shè)計(jì)的缺點(diǎn)。6厘米。由于 Raspi 安裝在與傳感器相對(duì)的外殼下部,因此可以使用 PIR 傳感器 HC-SR 501,但在組裝外殼長(zhǎng)度為 5.5 厘米的 E18-D80NK 紅外光柵時(shí)會(huì)導(dǎo)致碰撞的燈殼。因此,在使用 E18-D80NK 光柵時(shí),我們建議使用如下所示的分立接線或交換位置 - 電源單元在外殼下部,Raspi 在上部!Raspi 通過(guò)插頭或 Adafruit 閥蓋上的螺絲端子供電。此外,Adafruit Bonnet 使用其他用于通信的GPIO端口,因此在 Adafruit Bonnet 案例中,我們使用 GPIO 19 作為存在傳感器。因此,傳感器輸出的跨接電纜必須焊接到閥蓋上。
使用跨接電纜或帶狀電纜的離散接線稍微復(fù)雜一點(diǎn),但功能相同。存在傳感器(PIR 或光電傳感器)用于在離散接線的情況下連接到GPIO 引腳 5。Meanwell 電源在低壓輸出端有一個(gè) 4 針螺釘端子,通過(guò)隨附的電源線為 RGB 矩陣和 Raspi 通過(guò) GPIO 引腳 2 提供 5V 電源和 GPIO 引腳 39 用于接地。我們不建議使用跨接電纜為 Raspi 供電,而是使用具有更高橫截面和更快速端子的更粗電纜。為此,我們重新使用了 LED Matrix 電源的 2 個(gè)冗余電纜夾,用小螺絲刀將它們拉出,并用收縮管覆蓋它們,這樣就不會(huì)有 GPIO 引腳 2 短路的風(fēng)險(xiǎn)。
PIR傳感器
為 PIR 傳感器的鏡頭預(yù)留的前部外殼孔,通過(guò)用兩個(gè)封閉的塑料螺母將反射式紅外光屏障的內(nèi)外擰緊,將反射式紅外光屏障填充。傳感器通過(guò)矩陣式閥蓋提供 5V 電壓。如果使用 Adafruit Matrix Bonnet,棕色電纜將連接到標(biāo)有“5V Out”的端子。
使用離散接線,有幾種方法可以從GPIO引腳獲得 5V 電壓。例如,引腳 4 上的 +5V 和 GND - 藍(lán)色電纜 - 引腳 34 上。傳感器輸出 - 黑色電纜 - 連接到引腳 29 或邏輯 GPIO 端口 5。
如果您沒(méi)有對(duì)面的墻壁或類(lèi)似的反射紅外光的物體,您可以使用 PIR 傳感器,例如 HC-SR 501,而不是光柵。在我們的案例中,這記錄了許多誤報(bào)事件,因此經(jīng)常觸發(fā)相機(jī),因?yàn)?LED 矩陣模塊對(duì)人眼來(lái)說(shuō)是不可見(jiàn)的閃爍,并通過(guò)對(duì)面的墻壁刺激 PIR 傳感器。
機(jī)箱安裝
Severina by Lindby 傳感器控制的戶(hù)外壁燈外殼采用 160 毫米 x 80 毫米尺寸的 RGB LED 矩陣,并提供足夠的空間來(lái)容納所有組件。要安裝它,您必須在后面板上鉆幾個(gè)孔。
攝像機(jī)用 1/4 英寸螺釘從外殼內(nèi)部擰到下部不銹鋼板上。為了防止貴重的相機(jī)簡(jiǎn)單地扭斷,它用兩個(gè) 10 毫米長(zhǎng)的間隔螺栓固定。
軟件安裝
對(duì)于軟件安裝,我們假設(shè)一個(gè)新安裝的 Raspberry Pi OS aka Raspian,它通過(guò)內(nèi)部 WIFI 連接到 Internet。我們還建議通過(guò) Raspberry Pi 系統(tǒng)配置打開(kāi) ssh 和 vnc 服務(wù)以進(jìn)行遠(yuǎn)程訪問(wèn)。
程序“dooropenerF455”基于兩個(gè)軟件模塊:第一,英特爾的 RealSense ID SDK,用于控制 3D 攝像頭,第二,Henner Zeller 的 RPI LED 矩陣模塊。我們使用 MQTT 接口打開(kāi)門(mén),因此將 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++ 二進(jìn)制可執(zhí)行文件“smartdoorF455”或 C 掛件“smartdoorF455_c”現(xiàn)在應(yīng)該存在于 ~/smartdoorF455/bin 目錄中。源代碼可以在 ~/smartdoorF455/cpp 或 ~/smartdoorF455/c 中找到。該程序通過(guò)帶有 sudo 的 shell 腳本啟動(dòng):
cd ~/smartdoorF455/bin
sudo ./run_smartdoorF455.sh
或者誰(shuí)更喜歡編程語(yǔ)言 C 的變體:
sudo ./run_smartdoorF455_c.sh
并根據(jù)用戶(hù)名和時(shí)間/日期提供以下輸出:
/home/pi/log created
smartdoorF455 started successfully
watch /home/pi/log/20211216_092446_smartdoorF455.log for errors
即使相機(jī)還沒(méi)有排練一張臉,時(shí)間、星期幾和日期現(xiàn)在也應(yīng)該是可見(jiàn)的。如果不是這種情況,請(qǐng)轉(zhuǎn)到故障排除一章。
人臉進(jìn)行身份驗(yàn)證
為了將授權(quán)用戶(hù)的臉帶入相機(jī),我們使用了一個(gè)帶有命令行界面的工具。如果設(shè)備 /dev/ttyACM0 丟失,請(qǐng)改用 /dev/ttyACM1。當(dāng)前存儲(chǔ)在相機(jī)中的參數(shù)和選擇菜單現(xiàn)在出現(xiàn)。旋轉(zhuǎn)參數(shù)可以在“s”菜單中設(shè)置為 0 或顛倒設(shè)置為 180,具體取決于相機(jī)是否倒置 - 即取決于相機(jī)是倒置在外殼上還是直立,例如在隨附的 mini 上三腳架。菜單項(xiàng)“e”提供了在相機(jī)上使用本地配置文件存儲(chǔ)的培訓(xùn)。臉部應(yīng)距離相機(jī)約 30 至 50 厘米。然后該過(guò)程如下所示:
# 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
這樣,所有授權(quán)人員的面部輪廓都被學(xué)習(xí)了。指定名稱(chēng)時(shí),請(qǐng)注意RGB LED 矩陣模塊只能顯示少量字母。使用我們使用的字體,這些只有 5 個(gè)字符。如有需要,請(qǐng)?jiān)谠创a第 99 行使用縮寫(xiě)或縮小 BDF 字體的大小,這樣一行最多可以顯示 8 個(gè)字符
#define FONT_NAME FONT_PATH "4x6.bdf"
源代碼
~/smartdoorF455/cpp 或 ~/smartdoorF455/c 下的源代碼必須適應(yīng)情況。是使用 MQTT 還是使用 Adafruit Bonnet 來(lái)連接 LED RGB 矩陣模塊?這將在源代碼中使用適當(dāng)?shù)?define 常量定義進(jìn)行調(diào)整。例如,如果使用 Adafruit Bonnet,則使用 GPIO 19 而不是 GPIO 5 用于紅外反射光柵,因?yàn)?RGB 矩陣是通過(guò)其他 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 */
開(kāi)門(mén)指令
為了能夠使用此處介紹的解決方案解鎖前門(mén),門(mén)對(duì)講機(jī)必須提供 IP 接口。如果你想解決這個(gè)項(xiàng)目的副本,你應(yīng)該首先詳細(xì)分析貝爾系統(tǒng)的當(dāng)前狀態(tài),并嘗試找到添加IP接口的方法。
我們需要處理基于 Siedle 總線的門(mén)禁對(duì)講機(jī),因此使用 Oskar Neumann 的網(wǎng)關(guān),該網(wǎng)關(guān)通過(guò) WIFI 將 MQTT 命令轉(zhuǎn)換為 Siedle 總線,但是市場(chǎng)上不再提供。Siedle 提供 Smart Gateway SG-150 作為 IP 接口,然而,對(duì)于自建項(xiàng)目來(lái)說(shuō),價(jià)格超過(guò) 600 美元是一大筆錢(qián)。我們尚未檢查的 Siedle IP 接口的其他替代方案是第三方網(wǎng)關(guān),例如Hamares或SMS Guard的智能開(kāi)門(mén)器,它也提供 MQTT 接口。
任何已經(jīng)在使用基于 IP 的門(mén)對(duì)講系統(tǒng)的人都可以擺脫困境,并且可以在標(biāo)有“TRIGGER DOOR OPENER START”和“TRIGGER DOOR OPENER END”的 C/C++ 代碼之間調(diào)整源代碼來(lái)觸發(fā)開(kāi)門(mén)器。例如,如果此觸發(fā)器是一個(gè) http 請(qǐng)求,則可以使用 Linux 系統(tǒng)調(diào)用將其插入到 ~/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 與開(kāi)門(mén)機(jī)通信,則必須創(chuàng)建以下配置文件用于 Raspi 上的 MQTT 代理的配置:
sudo nano /etc/mosquitto/conf.d/mymosquitto.conf
# add following lines
listener 1883
listener 1884
allow_anonymous true
之后,重新啟動(dòng)代理:
sudo systemctl restart mosquitto
mosquitto 客戶(hù)端允許我們竊聽(tīng)代理交換的消息以進(jìn)行調(diào)試
mosquitto_sub -d -t "#"
攝像頭安全
英特爾在 RealSense ID SDK 中提供了一種安全通信模式。此模式使相機(jī)能夠與主機(jī)系統(tǒng)配對(duì)并加密通信。這消除了不速之客通過(guò)另一個(gè)實(shí)感 ID 攝像頭(通過(guò) USB-C 快速插入)和其他面部配置文件獲得未經(jīng)授權(quán)訪問(wèn)的可能性。由于復(fù)雜的原因,我們這里沒(méi)有使用這種模式。
優(yōu)化
為了從進(jìn)程調(diào)度程序的管理中刪除四個(gè)處理器內(nèi)核之一,以便將其留給我們的應(yīng)用程序獨(dú)占使用,必須修改以下文件:
sudo nano /boot/cmdline.txt
“isolcpus=3” 附加到行尾,使其看起來(lái)像這樣:
console=serial0,115200 console=tty1 root=PARTUUID=e0d8ecc0-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles isolcpus=3
此步驟在重新啟動(dòng)計(jì)算機(jī)后生效,旨在防止 LED 矩陣顯示屏出現(xiàn)任何閃爍。我們程序的處理器親和性在 run_smartdoor_F455.sh 使用 taskset 命令的啟動(dòng)腳本結(jié)束時(shí)分配給釋放的 CPU。
結(jié)論
三維生物特征面部識(shí)別的用戶(hù)身份驗(yàn)證是一個(gè)新領(lǐng)域,為創(chuàng)客社區(qū)開(kāi)辟了令人興奮的應(yīng)用場(chǎng)景。但很可惜,英特爾在宣布僅僅8個(gè)月后就埋下了這個(gè)新的業(yè)務(wù)領(lǐng)域。盡管如此,我們還是對(duì)這款 3D 相機(jī)充滿(mǎn)熱情,并且作為開(kāi)門(mén)器(或者,正確地說(shuō),作為門(mén)釋放器,因?yàn)槟匀槐仨氉约捍蜷_(kāi)前門(mén)),他們一直在可靠地完成他們的工作。
-
攝像頭
+關(guān)注
關(guān)注
60文章
4851瀏覽量
95917 -
面部識(shí)別
+關(guān)注
關(guān)注
1文章
375瀏覽量
26657 -
PIR傳感器
+關(guān)注
關(guān)注
3文章
57瀏覽量
9715
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論