白燕燕 ,陳潔浩,范亞州,張景彧
(西安工商學(xué)院,陜西西安,710200)
伴隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,萬(wàn)物互聯(lián)逐漸成為技術(shù)發(fā)展的趨勢(shì),信息安全也迎來(lái)了新的機(jī)會(huì)和挑戰(zhàn),如何實(shí)現(xiàn)高效率、高可靠性的身份識(shí)別成為關(guān)注的重點(diǎn)。在這種需求下,生物識(shí)別技術(shù)贏得廣泛關(guān)注,相比于傳統(tǒng)方式。生物識(shí)別技術(shù)具有更高的效率,更好的安全性,所以被廣泛的應(yīng)用在物聯(lián)網(wǎng)行業(yè),特別是安全相關(guān)的方面。最為人們所知曉的就是人臉識(shí)別,人臉識(shí)別發(fā)展至今已經(jīng)十分成熟可靠,從平面到立體,不僅能夠高效的完成人臉掃描,還能實(shí)現(xiàn)活體檢測(cè),甚至建立三維模型。
本設(shè)計(jì)采用樹莓派作為主控制器,將人臉識(shí)別與云服務(wù)結(jié)合起來(lái),設(shè)計(jì)一種能夠?qū)崟r(shí)通信的基于AI多模態(tài)融合的智能門禁系統(tǒng),主要內(nèi)容是借助樹莓派(樹莓派功能強(qiáng)大,能夠支持Python語(yǔ)言,自帶WIFI模塊且有強(qiáng)大的處理能力,不僅能夠借助眾多的庫(kù),還能夠很方便的通過(guò)HTTP協(xié)議對(duì)接云服務(wù)器以及借用API接口)和攝像頭模塊,從攝像拍取人臉信息,上傳云端進(jìn)行人臉比對(duì)、活體檢測(cè),判斷人臉信息是否符合。符合則驅(qū)動(dòng)門鎖打開,不符合就將照片上傳到云端,然后借助云端上的網(wǎng)站顯示,同時(shí)進(jìn)行公眾號(hào)示警。
基于AI多模態(tài)融合的人臉識(shí)別門禁系統(tǒng)由控制器模塊,電源模塊,攝像頭模塊,電動(dòng)鎖模塊組成。
本文的主控制器模塊采用樹莓派(Raspberry Pi)是一款基于ARM的微型電腦主板,以SD/Micro SD卡為內(nèi)存硬盤,卡片主板周圍有1/2/4個(gè)USB接口和一個(gè)10/100 以太網(wǎng)接口(A型沒有網(wǎng)口),可連接鍵盤、鼠標(biāo)和網(wǎng)線,同時(shí)擁有視頻模擬信號(hào)的電視輸出接口和HDMI高清視頻輸出接口,以上部件全部整合在一張僅比信用卡稍大的主板上,具備所有PC機(jī)的基本功能只需接通電視機(jī)和鍵盤,就能執(zhí)行如電子表格、文字處理、玩游戲、播放高清視頻等諸多功能。
攝像頭模塊采用樹莓派傳統(tǒng)攝像頭,它和樹莓派的兼容性極高。本次設(shè)計(jì)使用Python3運(yùn)行程序。Python提供了豐富的API工具,標(biāo)準(zhǔn)庫(kù)提供了系統(tǒng)管理、網(wǎng)絡(luò)通信、文本處理、數(shù)據(jù)庫(kù)接口、圖形系統(tǒng)、XML處理等額外的功能。人臉識(shí)別借助了百度AI云服務(wù)實(shí)現(xiàn)人臉信息的比對(duì)。總設(shè)計(jì)框圖如圖1所示。
圖1 總設(shè)計(jì)框圖
首先將使用者的人臉照片存入到百度AI云服務(wù)后臺(tái)文件中,然后執(zhí)行識(shí)別程序,執(zhí)行時(shí)會(huì)自動(dòng)調(diào)用樹莓派攝像頭獲取當(dāng)前照片,將照片通過(guò)密鑰認(rèn)證的百度人臉識(shí)別API上傳到后臺(tái)比對(duì),通過(guò)檢測(cè),返回相似度,若相似度大于89%就驅(qū)動(dòng)電動(dòng)鎖開門。圖2是電路總體結(jié)構(gòu)圖。
圖2 電路總體結(jié)構(gòu)圖
本次測(cè)試采用百度智能云服務(wù),百度云實(shí)現(xiàn)人臉識(shí)別一定要?jiǎng)?chuàng)建應(yīng)用和人臉庫(kù)。詳細(xì)步驟如下:
注冊(cè)百度賬號(hào);
在百度智能云人臉識(shí)別項(xiàng)目里面創(chuàng)建應(yīng)用;
在創(chuàng)建好的人臉庫(kù)中新建用戶組,并且向用戶組里面新建人臉I(yè)D,上傳照片。
獲取應(yīng)用的AppID、API Key和Secret Key(本次使用的時(shí)個(gè)人認(rèn)證的賬號(hào),只能使用一部分開放的接口,但對(duì)于完成人臉識(shí)別來(lái)說(shuō),這些個(gè)人的接口功能完全足夠。所以考慮到資金,本次測(cè)試是選擇了個(gè)人賬號(hào))。
在樹莓派上下載百度人臉識(shí)別的PythonSDK。然后通過(guò)API進(jìn)行代碼設(shè)計(jì)。(SDK(軟件開發(fā)工具包)是API的封裝,用來(lái)方便使用者二次開發(fā)的,并不能直接實(shí)現(xiàn)人臉識(shí)別功能和控制硬件的功能,這些功能還是要自行設(shè)計(jì)。(本設(shè)計(jì)使用的是Python HTTPSDK。)
主程序是根據(jù)物聯(lián)網(wǎng)MQTT協(xié)議,借助PythonSDK來(lái)實(shí)現(xiàn)的,在實(shí)現(xiàn)MQTT協(xié)議框架的基礎(chǔ)上,根據(jù)自己設(shè)置的軟件界面上的實(shí)例,定義對(duì)應(yīng)的實(shí)例和事件,如人臉識(shí)別開關(guān)按鈕就要根據(jù)軟件上的實(shí)例名,在on_message函數(shù)中設(shè)計(jì)事件函數(shù),當(dāng)獲取到按鈕點(diǎn)擊信息的時(shí)候,進(jìn)入到事件函數(shù)。在心跳函數(shù)中,開啟一個(gè)線程進(jìn)行人臉識(shí)別,并設(shè)置相應(yīng)的阻塞條件,根據(jù)按鈕事件進(jìn)行阻塞操作。
人臉識(shí)別程序是通過(guò)拍攝函數(shù)獲取攝像頭拍攝的照片,獲取當(dāng)前時(shí)間信息給照片命名,將照片儲(chǔ)存在本地后轉(zhuǎn)成base64格式,帶上AppID、APIKey和Secret Key通過(guò)post請(qǐng)求發(fā)送到百度云API上,并根據(jù)返回值比對(duì)后執(zhí)行相應(yīng)操作。
驅(qū)動(dòng)函數(shù)是根據(jù)樹莓派引腳設(shè)計(jì)的,外部電路是一個(gè)繼電器控制的電磁鎖,我們只需要當(dāng)識(shí)別人的人臉信息成功在人臉庫(kù)中找到時(shí),將GPIO2腳的電平調(diào)整到高電平即可。
報(bào)警函數(shù)是當(dāng)是別人的人臉信息不能在人臉庫(kù)中找到時(shí),通過(guò)post請(qǐng)求將保存在本地以時(shí)間命名的圖片轉(zhuǎn)成base64帶上密鑰,通過(guò)post請(qǐng)求,向云服務(wù)器的端口發(fā)送。同時(shí),通過(guò)SDK中的提醒函數(shù),設(shè)計(jì)提醒文本,實(shí)現(xiàn)公眾號(hào)的同步提醒。
云服務(wù)器的程序相對(duì)容易,用Python開放一個(gè)接受圖片的端口,設(shè)置密鑰驗(yàn)證,對(duì)接受的base64數(shù)據(jù)進(jìn)行解碼,然后將圖片寫入相應(yīng)的地址中。
準(zhǔn)備一個(gè)服務(wù)器,開放8081端口用作網(wǎng)頁(yè)來(lái)顯示檢測(cè)到陌生人時(shí)拍攝到的照片。
在服務(wù)器上部署簡(jiǎn)單的IIS網(wǎng)站,使用8080端口進(jìn)行圖片文件的傳輸,8081端口進(jìn)行網(wǎng)站的訪問(wèn)
在服務(wù)器上開放接受端口,并設(shè)置一個(gè)專用的驗(yàn)證密鑰,用來(lái)防止被誤用和亂用。(本次測(cè)試的主要目的是實(shí)現(xiàn)人臉識(shí)別報(bào)警功能中的圖片上傳,所以關(guān)于密鑰做的十分簡(jiǎn)單,沒有涉及到復(fù)雜的動(dòng)態(tài)加密。)
在樹莓派上將圖片和時(shí)間組合成JSON文件,帶上密鑰,通過(guò)post請(qǐng)求將文件發(fā)送到服務(wù)器上。
服務(wù)器接受文件后保存文件到網(wǎng)站存儲(chǔ)目錄下,構(gòu)建網(wǎng)站顯示圖片和圖片拍攝時(shí)間。
本次測(cè)試使用了點(diǎn)燈blinker軟件,通過(guò)點(diǎn)燈blinker自定義了APP頁(yè)面,將點(diǎn)燈blinker的SDK上傳到樹莓派上安裝。
通過(guò)“npm-gts-node”環(huán)境,再通過(guò)”git clone https://github.com/blinker-iot/blinker-js.git cd blinker-jsNpm i ”安裝。
在App中自定義界面,分別對(duì)各種實(shí)例進(jìn)行命名,并且在樹莓派中寫下對(duì)應(yīng)的實(shí)例名接受信息。在樹莓派中定義好各種實(shí)例的事件。
如果需要判斷一張圖片中的人臉,要通過(guò)API Key和Secret Key獲取access_token,然后去請(qǐng)求detect API獲得圖片上人臉的occlusion(遮擋范圍)、blur(模糊度范圍)、illumination(光照范圍)、Pitch(三維旋轉(zhuǎn)之俯仰角度)、Roll(平面內(nèi)旋轉(zhuǎn)角)、Yaw(三維旋轉(zhuǎn)之左右旋轉(zhuǎn)角)、completeness(人臉完整度)等信息,本程序直接借助返回信息進(jìn)行人臉解析判斷,若為人臉則直接比對(duì)。
對(duì)比功能是直接調(diào)用了百度API,將攝像頭的圖片轉(zhuǎn)碼成base64上傳,在其人臉庫(kù)集合中找出最相似的人臉返回一組置信度,表示相似的程度,用于判斷。但只能返回最相似的一個(gè)照片的置信度,而不是返回所有照片與拍攝照片對(duì)比的置信度。置信度超過(guò)80基本可以判斷是同一個(gè)人,如果超過(guò)90,就極有可能是同一個(gè)人。
開啟樹莓派,連接樹莓派原生攝像頭,打開命令行到桌面的程序目錄,輸入”sudoPython3 blinker。py”運(yùn)行程序,查看攝像頭紅燈亮起,對(duì)沒有在百度云服務(wù)上創(chuàng)建的人進(jìn)
行人臉識(shí)別,等待手機(jī)提示,在網(wǎng)站上查看結(jié)果。圖3是待采樣的人臉,圖4是采集到的人臉。
圖3 待采樣的人臉
圖4 采集的人臉
開啟云服務(wù)器上的IIS服務(wù)器,啟動(dòng)后端代碼開啟一個(gè)接受文件的端口如圖5所示。
圖5
然后讓沒有保存人臉照片的測(cè)試人員進(jìn)行人臉識(shí)別,查看網(wǎng)站后臺(tái)信息(見圖6)。
圖6
開啟樹莓派,啟動(dòng)程序如圖7所示。
圖7 啟動(dòng)程序
在APP頁(yè)面點(diǎn)擊開啟人臉識(shí)別按鈕,查看運(yùn)行情況和公眾號(hào)提示信息,運(yùn)行結(jié)果如圖8所示。圖9為開啟樹莓派。
圖8 運(yùn)行結(jié)果
圖9 開啟樹莓派
讓沒有保存人臉照片的測(cè)試人員進(jìn)行人臉識(shí)別查看軟件提示,提示如圖10所示。
圖10 人臉識(shí)別提示
本次測(cè)試建立了一個(gè)多人人臉庫(kù)模型,進(jìn)行了40次人臉測(cè)試,人臉測(cè)試的情況如圖11所示。在人臉識(shí)別的同時(shí)上傳樹莓派的內(nèi)存使用量、溫度等硬件信息。測(cè)試地點(diǎn)為家庭環(huán)境,將全部的軟件和硬件構(gòu)建完成,持續(xù)供電,在家庭環(huán)境中運(yùn)行半個(gè)月并正常使用,記錄其溫度和精確度等信息。最后結(jié)果表明,系統(tǒng)能持續(xù)穩(wěn)定工作,溫度變化不超過(guò)0.5℃。結(jié)果證明了該套系統(tǒng)的穩(wěn)定好,精度較高,能夠滿足使用要求。
圖11 人臉識(shí)別精確度
整個(gè)電路系統(tǒng)和軟件系統(tǒng)測(cè)試的結(jié)果表明預(yù)期的目標(biāo)完美的實(shí)現(xiàn)了,因?yàn)檎?qǐng)求百度人臉識(shí)別API需要發(fā)送post請(qǐng)求,所以該設(shè)備只有連接上了網(wǎng)絡(luò)才可以實(shí)現(xiàn)功能。同時(shí)基于百度人臉識(shí)別的樹莓派門禁系統(tǒng)可以在適應(yīng)不同環(huán)境,在灰度、亮度和人物角度不同的情況下快速檢測(cè)人臉信息。
本文基于樹莓派構(gòu)建了以人臉識(shí)別技術(shù)為核心的門禁報(bào)警系統(tǒng),該系統(tǒng)具有較高的精確度和實(shí)時(shí)性,產(chǎn)品成本偏低,有利于商用且具有較高的研究?jī)r(jià)值。