牟曉東
在現(xiàn)實(shí)生活中,小區(qū)的門禁系統(tǒng)能夠?qū)κ孪鹊怯涍^的“合法”汽車牌照進(jìn)行識(shí)別和自動(dòng)放行;同樣,單位的上下班“刷臉”系統(tǒng)則可以對(duì)職員的人臉進(jìn)行識(shí)別打卡。其實(shí),類似的車牌與人臉等身份識(shí)別的原理并不復(fù)雜,以“人臉識(shí)別”為例:系統(tǒng)先要對(duì)單位的員工進(jìn)行拍照和圖像預(yù)處理及特征的提取,然后將提取的信息存儲(chǔ)到“人臉”數(shù)據(jù)庫中;人臉識(shí)別的過程就是將“刷臉”抓拍到的數(shù)據(jù)特征與庫中的記錄進(jìn)行匹配,當(dāng)二者的相似度達(dá)到某個(gè)設(shè)定的閾值時(shí)(比如80%),即認(rèn)定為匹配成功,再執(zhí)行某些預(yù)設(shè)的“動(dòng)作”——比如語音輸出“張三上班打卡成功!”,同時(shí)還會(huì)在系統(tǒng)中進(jìn)行該用戶某一時(shí)刻打卡成功的記錄。目前,我們普通人可以借助于百度智能云,通過使用樹莓派和攝像頭等設(shè)備進(jìn)行開源硬件編程,快速打造出一個(gè)智能的門禁“刷臉”系統(tǒng)。
實(shí)驗(yàn)裝置包括樹莓派3B+和古德微擴(kuò)展板各一塊,USB接口高清攝像頭一個(gè),SG90舵機(jī)一個(gè),音箱一個(gè),紅色、綠色和黃色LED燈各一支。
首先,將擴(kuò)展板正確安裝在樹莓派上;接著,將舵機(jī)插入18號(hào)插孔,注意紅色線接VCC(電源正極)端、棕色線接GND(接地)端、黃色線接D(信號(hào))端;然后,將紅色、綠色和黃色LED燈分別插入5號(hào)、6號(hào)和12號(hào)插孔,注意“長(zhǎng)腿正、短腿負(fù)”的原則;最后,將攝像頭插入樹莓派的USB接口,音箱數(shù)據(jù)線插入音頻輸出孔;給樹莓派通電,啟動(dòng)操作系統(tǒng)(圖1)。
首先,訪問百度智能云(https://ai.baidu.com/),注冊(cè)并登錄進(jìn)入個(gè)人中心,點(diǎn)擊“文檔”-“產(chǎn)品文檔”項(xiàng);然后,在“文檔中心”頁面左側(cè)點(diǎn)擊“人工智能”,選擇中間區(qū)域的“人臉識(shí)別”項(xiàng),再點(diǎn)擊其中的“立即使用”按鈕,進(jìn)入“應(yīng)用”頁面;接著,點(diǎn)擊“創(chuàng)建應(yīng)用”按鈕,在“應(yīng)用名稱”處輸入“face”,“接口選擇”處的信息是之前申請(qǐng)時(shí)設(shè)置好的(包括人臉檢測(cè)和在線活體檢測(cè)等項(xiàng)),下方的“應(yīng)用歸屬”設(shè)置為“個(gè)人”,“應(yīng)用描述”中輸入“將‘人臉識(shí)別’應(yīng)用于小區(qū)門禁檢測(cè)的實(shí)驗(yàn)”,點(diǎn)擊“立即創(chuàng)建”按鈕(圖2)。
此時(shí),會(huì)有“創(chuàng)建完畢”的提示,點(diǎn)擊“返回應(yīng)用列表”按鈕就會(huì)看到已經(jīng)生成了一個(gè)名為“face”的應(yīng)用項(xiàng)目,后面對(duì)應(yīng)有三處非常關(guān)鍵的應(yīng)用信息,分別是應(yīng)用編號(hào)(AppID)、開發(fā)密鑰(API Key)和密鑰(Secret Key),復(fù)制粘貼到文本文件face.txt中,暫時(shí)保存(圖3)。
現(xiàn)在的“face”只是一個(gè)沒有用戶和人臉信息的“空倉庫”,可點(diǎn)擊“新建組”按鈕會(huì)彈出“新建用戶組”窗口,輸入組ID:“face_01”后點(diǎn)擊“確認(rèn)”按鈕,完成“face_01”用戶組的建立操作,“詳情”處顯示為只有“0張人臉”;然后,點(diǎn)擊“face_01”(會(huì)提示“沒有相關(guān)的用戶”),再點(diǎn)擊“馬上創(chuàng)建”按鈕,在“用戶ID”中輸入“ZhangSan”;接著,點(diǎn)擊下方的“點(diǎn)此添加圖片”按鈕,選擇一張“合法”用戶的“正面、無遮擋照片”,將事先拍攝準(zhǔn)備好的5MB以內(nèi)的相片進(jìn)行上傳,之后點(diǎn)擊“確認(rèn)”按鈕,完成第一個(gè)用戶人臉信息的采集。再使用同樣方法,添加第二個(gè)用戶“LiSi”的人臉信息,等等(圖4)。
值得一提的是,目前百度智能云對(duì)個(gè)人賬戶進(jìn)行了一定的限制,需要先進(jìn)行實(shí)名認(rèn)證,而且必須手動(dòng)申請(qǐng)免費(fèi)資源的領(lǐng)取才可以使用包括人臉識(shí)別在內(nèi)的相關(guān)接口服務(wù),操作方法是:從個(gè)人賬戶的“文檔”中再次找到“人臉識(shí)別”項(xiàng),按照提示先完成實(shí)名認(rèn)證后再點(diǎn)擊“領(lǐng)取免費(fèi)資源”項(xiàng),選中“接口名稱”處羅列的所有項(xiàng)目后再點(diǎn)擊下方的“0元領(lǐng)取”按鈕;此時(shí),會(huì)有“領(lǐng)取成功”的提示,只不過“領(lǐng)取的免費(fèi)測(cè)試資源預(yù)計(jì)30分鐘內(nèi)生效”,約半小時(shí)后刷新查看,發(fā)現(xiàn)在“已領(lǐng)取資源”中已經(jīng)有了對(duì)應(yīng)的基礎(chǔ)服務(wù)項(xiàng)(圖5)。
樹莓派門禁“刷臉”系統(tǒng)的實(shí)現(xiàn)功能是:黃色LED燈一直處于閃爍的警示狀態(tài),提醒慢行通過;當(dāng)有人在攝像頭前停留時(shí),開始進(jìn)行抓拍檢測(cè),如果該人臉信息與數(shù)據(jù)庫中的某合法用戶的人臉信息較為吻合(置信度較高),則紅色LED燈亮起,同時(shí)播放歡迎的語音提醒,舵機(jī)控制門禁桿緩緩抬起90度,然后熄滅紅色LED燈、亮起綠色LED燈并持續(xù)7秒鐘,行人通行后綠色LED燈熄滅;接著又會(huì)亮起紅色LED燈,由舵機(jī)控制門禁桿恢復(fù)為原來的0度位置,熄滅紅色LED燈;如果“刷臉”失?。ㄅ卸椤胺欠ā庇脩簦徊シ拧胺潜拘^(qū)人員,禁止入內(nèi)!”的語音提醒信息,LED燈和門禁桿均無動(dòng)作。
修改樹莓派config配置文件中的“baiduFaceKey”信息。首先,運(yùn)行Windows的“遠(yuǎn)程桌面連接”程序,通過IP地址(192.168.1.116)登錄進(jìn)入樹莓派的遠(yuǎn)程操作系統(tǒng)界面;接著,運(yùn)行“文件管理器”并定位于/home/pi/back/testWrite目錄,雙擊打開其中的config文件,找到“[baiduFaceKey]”項(xiàng),將原來默認(rèn)的三個(gè)“default”值(FaceAppID、FaceAPIKey和FaceSecretKey)進(jìn)行替換,分別對(duì)應(yīng)之前在百度智能云中“face”應(yīng)用項(xiàng)目的三處信息(AppID、API Key和Secret Key);最后,將config配置文件保存并關(guān)閉,重啟一次樹莓派操作系統(tǒng),使config配置文件生效(圖6)。
修改config配置文件中的“baiduFaceKey”信息,目的是讓樹莓派按照這些信息去進(jìn)行人臉數(shù)據(jù)的查找與判斷,相當(dāng)于在config配置文件中FaceAppID、FaceAPIKey和FaceSecretKey三處信息的“引導(dǎo)”下,與百度智能云對(duì)應(yīng)賬號(hào)的人臉庫“face_01”用戶組中所保存的若干張人臉信息數(shù)據(jù)進(jìn)行置信度的計(jì)算與匹配,從而判斷攝像頭所抓拍到的人臉是否為應(yīng)該放行的本小區(qū)“合法”用戶。
在古德微機(jī)器人網(wǎng)站登錄自己的賬號(hào)后,開始“積木”式圖形化編程:
第一個(gè)是“黃燈持續(xù)閃爍”函數(shù),通過“控制12號(hào)小燈亮/滅”(黃色LED燈插在12號(hào)引腳)和“等待1秒”模塊語句,在主程序中使用多線程調(diào)用后就會(huì)實(shí)現(xiàn)黃色LED燈不斷閃爍的功能(不必在函數(shù)中進(jìn)行循環(huán))。
第二個(gè)是“抬桿通行”函數(shù),實(shí)現(xiàn)紅色LED燈(5號(hào)引腳)先亮后滅、音箱語音播放“歡迎回家!”、舵機(jī)控制門禁桿抬起90度和熄滅紅色LED燈、控制綠色LED燈(6號(hào)引腳)持續(xù)亮起7秒后再熄滅的功能,其中的固定次數(shù)循環(huán)結(jié)構(gòu)(變量i從500到1500),作用是控制舵機(jī)(18號(hào)引腳)緩緩從0度升至90度。
第三個(gè)是“通行后落桿”函數(shù),實(shí)現(xiàn)的功能與“抬桿通行”函數(shù)相反:亮起紅色LED燈、語音播放“注意安全!”和舵機(jī)控制門禁桿由90度恢復(fù)為0度、熄滅紅色LED燈,其中的循環(huán)結(jié)構(gòu)所使用的變量i初值和終值分別是1500、500,步長(zhǎng)也由1改為-1,實(shí)現(xiàn)舵機(jī)“反轉(zhuǎn)”90度的功能(圖7)。
從左側(cè)“線程”中找到“添加子線程,線程函數(shù)名為‘’”功能模塊,將調(diào)用的函數(shù)名設(shè)置為“黃燈持續(xù)閃爍”;然后,在“重復(fù)當(dāng)真”的循環(huán)結(jié)構(gòu)中先建立一個(gè)名為“拍照”的變量,為其賦值為“用USB攝像頭拍一張照片”;接著,通過“檢測(cè)圖片‘拍照’中的人臉是否在人臉庫‘face_01’中”功能模塊,實(shí)現(xiàn)人臉信息置信度的獲取功能,將該數(shù)據(jù)保存至變量“人臉在人臉庫中的概率”中;再通過“建立字串使用”和“輸出調(diào)試信息”功能模塊,實(shí)現(xiàn)LOG調(diào)試信息區(qū)的提示輸出功能;最后,通過一個(gè)“如果…執(zhí)行…否則…”雙分支的選擇結(jié)構(gòu),對(duì)人臉置信度進(jìn)行設(shè)置的閾值(80%以上)判斷,條件成立,說明是“合法”用戶,則分別調(diào)用執(zhí)行“抬桿通行”和“通行后落桿”函數(shù);條件不成立,則輸出對(duì)應(yīng)的提醒信息(圖8)。
將程序保存并打開LOG調(diào)試信息區(qū),點(diǎn)擊“連接設(shè)備”后再點(diǎn)擊“運(yùn)行”按鈕:
黃色LED燈開始閃爍。先從手機(jī)中打開一張明星相片(未進(jìn)行過人臉采集),靠近攝像頭后,很快就在屏幕上顯示有“人臉識(shí)別置信度為:11%”和“非本小區(qū)人員,禁止入內(nèi)!”的提示信息,同時(shí)還會(huì)有語音提醒;然后,本人直接正面靠近攝像頭,屏幕上顯示的是“人臉識(shí)別置信度為:91%”和“歡迎回家!”的提示信息,接著紅色LED燈亮起、音箱語音播報(bào)“歡迎回家!”、舵機(jī)控制門禁桿慢速抬起90度、紅色LED燈熄滅、綠色LED燈發(fā)光7秒鐘(此為“合法”用戶的通行時(shí)段);接著,紅色LED燈又會(huì)亮起、門禁桿從90度慢速轉(zhuǎn)至0度位置、紅色LED燈熄滅。多次進(jìn)行“合法”與“非法”用戶的模擬檢測(cè),均實(shí)現(xiàn)了門禁“刷臉”系統(tǒng)的預(yù)設(shè)功能(圖9)。