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