馮威翔,楊靜
(河南工業大學 信息科學與工程學院,河南鄭州, 450000)
隨著生活質量的提高,普通IC卡等傳統身份識別工具已不能滿足社會需求[1]。人臉識別技術已日趨成熟,在安防監控、身份認證等眾多領域都有著重要的作用[2]。
傳統的特征提取算法在復雜環境下準確率不高;而基于空間注意力機制的3D人臉識別算法,雖準確率高,但參數需根據經驗設置,使得門檻較高,易用性低[3];一些龐大的深度學習網絡模型,通過自學習的方式進行訓練,但運行在計算能力有限的嵌入式設備上有困難。
針對傳統人臉識別方案識別精度相對較低,提升識別精度對嵌入式設備的計算能力和算法優化要求比較高,導致易用性低的問題,本文利用云計算平臺準確率高,調用方便的特性[4],將百度智能云與樹莓派相結合,設計一款人臉識別門禁系統,使得整個系統更加準確、便捷化。
該系統由主控制器模塊、人體紅外感應模塊、圖像獲取模塊、密碼模塊、顯示模塊、模擬門禁開關模塊組成,經人體紅外傳感器觸發后調用攝像頭進行圖像采集,經過分辨率和格式轉換后上傳至百度智能云進行人臉的識別對比。為了應對一些網絡故障等情況,本設計還添加密碼模塊進行輔助解鎖。系統總體結構圖如圖1所示。

圖1 系統總體結構圖
考慮到擴展性、成本、功耗,本設計選擇樹莓派4B作為主控制器,主板有4個USB接口,可用來連接鼠標鍵盤USB攝像頭等。搭載4核1.5GHz CPU,兩個支持4K顯示的HDMI接口,接上一塊屏幕可以用它來編輯文檔、瀏覽網頁等[5]。具有2.4GHz和5GHz的WiFi模塊以及以太網接口,向上可以提供云端API,指令數據通過API調用下發至設備端[6],硬件示意圖如圖2所示。

圖2 樹莓派4B硬件示意圖
為減少資源浪費,添加紅外觸發。HCSR501原理圖如圖3所示。人會發出10μm左右波長的紅外線。具有熱釋電效應的半導體,用于檢測8~12μm波長的紅外信號。將產生的微弱電壓變化經過BISS0001放大后輸出,調節可變電阻RL2和RT1改變放大倍數,來改變傳感器的檢測距離和靈敏度。信號輸出接樹莓派的GPIO4接口,本設計采用可重復觸發,距離在3m左右。

圖3 HC—SR501原理圖
圖像獲取模塊采用500萬像素的樹莓派專用攝像頭,尺寸小,功耗低[7]。通過CSI扁平帶狀電纜將相機板連接到樹莓派上,手動使能。查看API文檔,API接口要求輸入的分辨率為1024×768,圖片格式必須為Base64編碼格式,編碼后的圖片大小不超過2M。
為應對網絡故障等情況,本設計添加密碼模塊用來輔助解鎖。矩陣鍵盤控制行的4個引腳接到樹莓派的GPIO 21~24,控制列的4個引腳接到樹莓派的GPIO 26~29。初始化GPIO 21~24為輸出高電平。GPIO 26~29為輸入,通過內置上拉電阻,上拉為高。
選用0.96寸I2C通信OLED進行文字交互提示。手動配置開啟樹莓派I2C通信接口。通過HDMI外接7寸IPS電容觸摸屏進行圖像采集過程的顯示。
選用常見舵機SG90進行模擬開門,信號線接到樹莓派的GPIO6引腳。通過PWM脈沖控制,開門后釋放PWM信號可手動關門,一段時間后如果沒有識別到人將控制關門。
如果成功開門或檢測到人臉未在人臉庫中或密碼錯誤。調用有源蜂鳴器進行聲音警報。調用API服務,通過微信將原因、時間和圖像發送給用戶。
硬件總體連線如圖4所示。

圖4 硬件總體連線圖
本系統選用官方指定的Raspberry Pi OS,在官網中下載鏡像文件,通過鏡像文件燒錄工具燒錄到SD卡中。
為了方便文件傳輸,整個開發過程采用遠程桌面連接進入樹莓派桌面進行開發。使用Python作為開發語言,樹莓派官方提供的系統中自帶Python編譯器Python3.9,以及Python集成開發環境Thonny。運行時,實時反饋交互的運行結果,給予一些優化建議,對樹莓派支持良好。
本設計通過百度智能云平臺提供的應用程序接口(Application Programming Interface,API)接口實現人臉識別。
首先,注冊并登錄百度智能云,創建一個人臉識別的應用,依次創建用戶組、用戶和添加用戶的人臉照片。用戶組數量沒有限制,每個用戶組中的用戶數量也沒有限制,每個用戶可以注冊的人臉數量為20個。創建成功后可以得到這個應用的AppID、API Key、Secret Key,也就是在程序中進行接口調用時的用戶名和密碼等信息。
其次,下載適用于Python的人臉識別軟件開發工具包(Software Development Kit,SDK)。將下載的SDK通過VNC Viewer的文件傳輸功能傳入到樹莓派中,用Python編譯SDK文件中的setup.py來安裝百度AI模塊如圖5所示。

圖5 安裝百度AI模塊圖
最后,根據之前記錄的所創建應用的用戶名和密碼進行訪問所創建的應用,調用AipFace模塊中的search函數將返回人臉匹配的結果,返回值是一個字典。通過error_mag來判斷是否為人臉,如果檢測不到人臉就返回-1。如果檢測到人臉,則獲取相似度score,通過相似度來判斷是否在人臉庫中,如果滿足相似度就返回1,否則返回0。
密碼模塊包括密碼的輸入、清除、判斷和修改。掃描第一行時,設置GPIO21引腳輸出低電平,延時20ms來繞過抖動區間進行防抖,掃描GPIO 26~29引腳是否為低電平,來判斷S1~S4的按鍵狀態,2、3、4行同理。
密碼的輸入封裝在函數中,將被按下的按鍵以字符的形式放入列表中。當輸入為6位時返回列表。密碼存放在本地的文本文件中,使用operator函數進行判斷,如果輸入與密碼不匹配返回0,否則返回1。如果判斷鍵盤輸入“*”,則清空列表,來達到清除的目的。輸入6個#來進行修改密碼,先輸入原密碼,如果密碼正確將修改的密碼替換掉文本文件中的內容。
系統開始工作后,判斷人體紅外傳感器的狀態,當檢測到有人時,進入人臉識別部分,點亮發光二極管來模擬燈光照明,調用OLED來提示用戶相關操作,調用攝像頭進行圖像采集,按照技術文檔進行格式轉換后上傳到百度智能云。如果返回結果為不是人臉,判斷為人體紅外誤觸,將回到人體紅外檢測部分。如果人臉匹配成功,控制舵機模擬開門,記錄下用戶名及開門時間在本地文本文件,回到人體紅外檢測部分。如果人臉匹配失敗,再次進行檢測。如果連續兩次檢測失敗將提示進入密碼識別。如果密碼識別正確,控制舵機模擬開門;如果密碼識別錯誤兩次,將延時一段時間后回到人體紅外檢測部分。無論是否成功通過都會將記錄下來的時間、原因和圖像通過微信公眾號發送給用戶。程序流程圖如圖6所示。

圖6 總體程序流程圖
系統測試一共有3位測試者參與,分別為2位在圖庫中的人和1位不在圖庫中的人,對人臉識別等各模塊功能進行測試。每個實驗對象在光線充足和光線暗弱兩種環境下進行多次實驗。實物圖如圖7所示,測試過程圖如圖8所示。

圖7 實物圖

圖8 測試過程圖
經測試,系統各模塊功能工作正常,人臉識別測試結果如表1所示。在5G網絡下調用所需時間大約在0.9s,4G網絡下調用時間在3s左右,經100次測試,僅有一次在光線暗弱的環境下出現誤判現象。

表1 人臉識別測試結果
本設計以樹莓派4B為主控,通過調用百度智能云平臺實現了以人臉識別為主的門禁系統。實驗表明該系統性能穩定,識別準確率為99.8%,保證了門禁系統的真實、安全。在5G網絡下,檢測時間大約在0.9s,實現了防盜防范的作用,減少了不必要的安全隱患。