使用樹(shù)莓派的人臉識(shí)別門鎖系統(tǒng)
人臉識(shí)別技術(shù)在過(guò)去十年中有了巨大的進(jìn)步,現(xiàn)在它主要用于監(jiān)視和安全目的。在今天的教程中,我們將學(xué)習(xí)如何使用樹(shù)莓派構(gòu)建人臉識(shí)別門鎖系統(tǒng)。本項(xiàng)目分為三個(gè)階段:
?數(shù)據(jù)收集
?訓(xùn)練識(shí)別器
?人臉識(shí)別
在第一階段,我們將收集被授權(quán)開(kāi)鎖的面部樣本。在第二階段,我們將針對(duì)這些人臉樣本訓(xùn)練識(shí)別器,在最后階段,我們將使用訓(xùn)練器數(shù)據(jù)來(lái)識(shí)別這些人臉。如果樹(shù)莓派認(rèn)出一張臉,它就會(huì)打開(kāi)門鎖。
在這里,一個(gè)電磁鎖和一個(gè)Pi相機(jī)將與樹(shù)莓派一起使用樹(shù)莓派3來(lái)構(gòu)建這個(gè)基于人臉識(shí)別的門鎖系統(tǒng)。我們以前使用電磁鎖與樹(shù)莓派,也建立了一些項(xiàng)目與pi相機(jī),如Web控制樹(shù)莓派監(jiān)控機(jī)器人,基于物聯(lián)網(wǎng)的智能Wi-Fi門鈴,智能閉路電視監(jiān)控系統(tǒng)等。
組件的要求
?樹(shù)莓派3(任何版本)
?電磁鎖
?繼電器模塊
?跳線
線路圖
下面給出了樹(shù)莓派人臉識(shí)別門鎖的電路圖。
樹(shù)莓派和電磁鎖通過(guò)繼電器模塊連接。電磁鎖需要9 ~ 12V,樹(shù)莓派只能提供5V。因此,使用12V適配器為螺線管鎖供電。繼電器模塊的VCC和GND引腳連接樹(shù)莓派的5V和GND。繼電器的輸入端接在樹(shù)莓派的GPIO23上。
電磁鎖的正引腳接在12V適配器的正軌上,電磁鎖的負(fù)引腳接在繼電器的COM上。將繼電器的NO引腳接到12V適配器的負(fù)極上。
樹(shù)莓派3人臉識(shí)別門鎖的面包板設(shè)置如下所示:
在樹(shù)莓派3上安裝OpenCV
這里使用OpenCV庫(kù)來(lái)檢測(cè)和識(shí)別人臉。要安裝OpenCV,首先要更新樹(shù)莓派。
然后使用以下命令安裝所需的依賴項(xiàng),以便在樹(shù)莓派上安裝OpenCV。
之后,使用下面的命令在樹(shù)莓派上安裝OpenCV。
安裝人臉識(shí)別所需的其他軟件包
在開(kāi)始使用樹(shù)莓派的人臉識(shí)別門鎖系統(tǒng)程序之前,讓我們安裝所需的軟件包。
安裝dlib: dlib是包含機(jī)器學(xué)習(xí)算法和解決現(xiàn)實(shí)問(wèn)題的工具的現(xiàn)代工具包。使用下面的命令安裝dlib。
安裝face_recognition模塊:該庫(kù)用于通過(guò)命令行從Python識(shí)別和操作人臉。使用下面的命令安裝人臉識(shí)別庫(kù)。
安裝imutils: imutils用于使基本的圖像處理功能,如平移,旋轉(zhuǎn),調(diào)整大小,骨架化和顯示Matplotlib圖像更容易與OpenCV。使用以下命令安裝imutils:
安裝枕頭:枕頭用于打開(kāi),操作和保存不同格式的圖像。使用以下命令安裝枕頭:
樹(shù)莓派人臉識(shí)別門鎖編程
如前所述,我們將分三個(gè)階段完成這個(gè)項(xiàng)目。第一階段是數(shù)據(jù)收集;第二步是訓(xùn)練識(shí)別器,第三步是識(shí)別人臉。最后給出了這三個(gè)部分的程序。在這里,我們?cè)敿?xì)地解釋了其中的每一個(gè)。
1. 數(shù)據(jù)收集
在項(xiàng)目的第一階段,創(chuàng)建一個(gè)數(shù)據(jù)集來(lái)存儲(chǔ)人臉。這些面將以不同的id存儲(chǔ)。
為此,首先,創(chuàng)建一個(gè)保存所有項(xiàng)目數(shù)據(jù)的項(xiàng)目目錄。
除了三個(gè)python程序和數(shù)據(jù)集,這個(gè)目錄還有一個(gè)面部分類器文件。所有三個(gè)python程序和面部分類器文件在頁(yè)面末尾給出。
現(xiàn)在在FaceRecognitionProject目錄中,創(chuàng)建一個(gè)名為Dataset的新子目錄來(lái)存儲(chǔ)面部樣本。
現(xiàn)在打開(kāi)FaceRecognitionProject目錄下的Nano編輯器文件,粘貼最后給出的數(shù)據(jù)收集程序。
數(shù)據(jù)收集程序解釋如下:
初始化人臉檢測(cè)器。人臉?lè)诸惼魑募c人臉檢測(cè)器一起使用。
現(xiàn)在提供一個(gè)用戶輸入命令,以便用戶可以在收集數(shù)據(jù)之前輸入數(shù)字面部id。
在while循環(huán)中,使用檢測(cè)器提取人臉。
之后,保存每一個(gè)捕獲的幀,將其保存為“dataset”目錄下的文件,person id:
運(yùn)行python腳本并輸入人臉id。當(dāng)它檢測(cè)到人臉時(shí),它就開(kāi)始捕捉樣本。這些示例將保存在Dataset目錄中。
目錄和程序文件的結(jié)構(gòu)是這樣的:
2. 訓(xùn)練識(shí)別器
收集人臉樣本后,對(duì)識(shí)別器進(jìn)行訓(xùn)練,使其能夠準(zhǔn)確地預(yù)測(cè)人臉。
在FaceRecognition目錄中打開(kāi)一個(gè)Nano編輯器文件,粘貼訓(xùn)練器代碼(在最后給出)并將其保存為trainer.py
下面解釋了訓(xùn)練識(shí)別器的Python腳本:
通過(guò)導(dǎo)入所有必需的庫(kù)文件來(lái)啟動(dòng)代碼。
之后,輸入保存面部樣本的路徑。
接下來(lái),使用haarcascade_frontalface_default.xml面部分類器文件檢測(cè)示例圖像中的面部。然后使用識(shí)別器變量來(lái)創(chuàng)建一個(gè)LBPH(局部二值模式直方圖)人臉識(shí)別器。
現(xiàn)在使用前面初始化的路徑進(jìn)入face samples目錄。
之后,創(chuàng)建兩個(gè)用于存儲(chǔ)面部樣本和id的列表。
將圖像樣本轉(zhuǎn)換為灰度。之后,將PIL映像轉(zhuǎn)換為numpy映像。
數(shù)據(jù)集目錄中的樣本按如下方式保存:User.Id.SampleNumber。因此,為了獲得ID,我們將拆分圖像路徑。通過(guò)分割圖像路徑,我們將獲得一個(gè)用戶ID和樣本編號(hào)。
現(xiàn)在調(diào)用Faces和id列表并將它們輸入到訓(xùn)練器文件中。
3. 識(shí)別器
現(xiàn)在,在我們項(xiàng)目的最后一步,我們將使用人臉識(shí)別技術(shù)從實(shí)時(shí)視頻饋送中識(shí)別人臉。一旦樹(shù)莓派識(shí)別出任何保存的面孔,它將使繼電器模塊高位打開(kāi)電磁鎖。
完整的人臉識(shí)別程序在頁(yè)面的末尾給出。這段代碼的一些重要部分解釋如下:
這個(gè)程序類似于訓(xùn)練器程序,所以使用相同的庫(kù)文件和分類器文件。
之后,使用一個(gè)數(shù)組為每個(gè)面部id添加名稱。
現(xiàn)在從樹(shù)莓派相機(jī)獲得640x480分辨率的視頻饋送。如果您使用多個(gè)攝像機(jī),則在cam = cv2. videoccapture(0)函數(shù)中將0替換為1
之后,在while循環(huán)中,將視頻分解為圖像,然后將其轉(zhuǎn)換為灰度。
使用識(shí)別器。預(yù)測(cè)函數(shù)檢查人臉與樣本的匹配程度。
如果信心小于100,則打開(kāi)鎖。0代表完美匹配。
執(zhí)行這些python代碼需要外部監(jiān)視器或任何虛擬監(jiān)視器(如VNC查看器)。運(yùn)行數(shù)據(jù)集程序收集人臉樣本。當(dāng)你運(yùn)行這個(gè)程序時(shí),會(huì)彈出一個(gè)窗口。在該窗口中,輸入ID號(hào)并按enter。之后,將彈出另一個(gè)窗口,使用pi相機(jī)采集面部樣本。
在此之后,運(yùn)行教練程序。成功執(zhí)行后,將生成一個(gè)培訓(xùn)師。將Yml文件放入項(xiàng)目目錄。這個(gè)文件將被識(shí)別器用來(lái)識(shí)別人臉。
現(xiàn)在,在最后一步,運(yùn)行識(shí)別程序。如果在視頻源中識(shí)別出一張臉,你會(huì)發(fā)現(xiàn)它周圍有一個(gè)框,上面寫著這個(gè)人的名字,如下所示:
本文編譯自iotdesignpro