吳晶瑩
(中北大學理學院,山西太原,030051)
在人口密度大、就餐時間規(guī)律的大型場所,用餐環(huán)境的特性是在固定的用餐時間都會有人流的激增,造成短時間內的擁堵,服務員忙碌不能及時提供服務。本設計可以自動巡邏式檢測人臉,當發(fā)現(xiàn)目標人臉對其眨眼,機器得到指令給用戶提供所需。本項目是基于人臉檢測系統(tǒng)上的智能化用餐服務配發(fā)設備,搭載上智能車平臺,按需移動實現(xiàn)移動式配發(fā)。
本設計的重點也是核心是人臉檢測系統(tǒng),首先需要搭建完成人臉檢測系統(tǒng)。對于人臉檢測的系統(tǒng)主要有兩種設想,一是通過搭建神經(jīng)網(wǎng)絡來對人臉及動作進行檢測,二是通過Haar Cascade分類器來進行人臉檢測,動作識別則需要其他算法來求解或者尋找其他辦法來進行確認。此外便是搭建移動式平臺,本設計因需要具有略大負載能力的智能車,此處便選擇了恩智浦智能車競賽里越野組所用的 L型車模。總體實現(xiàn)的流程圖如圖1所示。

圖1 總體實現(xiàn)流程圖
人臉檢測是指對電子設備采集到的圖像進行搜索,找到所有可能是人臉的位置,并返回人臉位置和大小的過程。在這個過程中,系統(tǒng)的輸入是一張可能含有人臉的圖片或者視頻輸入,輸出是人臉位置的矩形框。獲得包含人臉的矩形框后,第二步要做的就是人臉對齊(Face Alignment)。原始圖片中人臉的姿態(tài)、位置可能較大的區(qū)別,為了之后統(tǒng)一處理,要把人臉“擺正”。為此,需要檢測人臉中的關鍵點(Landmark),如眼睛、鼻子、嘴巴的位置、臉的輪廓點等。通過Python自帶的FacialLandmark Detection功能,它可以檢測出面部的68個關鍵點,如下圖2所示。

圖2 人臉68個關鍵點
根據(jù)這些關鍵點可以使用仿射變換將人臉統(tǒng)一校準,以盡量消除姿勢不同帶來的誤差。識別人臉可以使用機器學習算法和工具Dlib,也可以使用OpenCV,通過實際操作情況可得OpenCV識別的速度比Dlib要快得多,但是OpenCV的識別正確率較低,所以,經(jīng)過綜合考慮,采用Dlib對人臉進行識別。利用OpenCV對檢測到的人臉畫出方框進行反饋。上述過程的實現(xiàn)效果如下圖3所示。

圖3 實現(xiàn)效果圖
由于顏色信息對于人臉檢測沒有影響,且為了減小條帶失真和減少計算量要將圖片灰度化。對每個像素以及其周圍的像素進行分析,依據(jù)明暗度畫一個箭頭,重復操作,這些像素將會被箭頭即梯度(gra-dients)所取代。最終將原始圖像轉換成一個非常簡單的HOG表達形式,便于捕獲面部的基本結構。如圖4所示。

圖4 圖像HOG轉換
針對人臉面部動作——眨眼識別。本設計采用的是Soukupová和Cech發(fā)表的論文《使用面部標志實時眼睛眨眼檢測》推導出反映這種關系的方程,稱為眼睛縱橫比(EAR)。

這個方法與傳統(tǒng)的計算眨眼圖像處理方法是不同的,使用眼睛的長寬比是更為簡潔的解決方案,它涉及到基于眼睛的面部標志之間的距離比例是一個非常簡單的計算。其中p1,p2,p3,p4,p5,p6是2D面部地標位置如圖5(a)所示,圖5(b)是閉眼地標所在位置。

圖5
通過觀察繪出的眼縱橫比隨時間的視頻剪輯的曲線圖,如下圖6所示。可知眼睛縱橫比是恒定的,然后迅速下降到接近零,然后再增加,表明進行一次眨眼。

圖6 人眼眨眼檢測數(shù)據(jù)
在上一步檢測的基礎上我們已經(jīng)得到了68個面部特征,從這些特征點可以很容易的計算出眼睛縱橫比,這時主要的程序循環(huán)部分已經(jīng)出來了,也就是說,通過while循環(huán)從攝像頭部分讀取每一幀,在檢測部分中將其轉化為灰度圖并檢測人臉。通過遍歷臉部,在每個臉部應用面部標志檢測得到68個關鍵位置,然后提取左眼和右眼的坐標來計算長寬比,以檢查眼睛長寬比是否低于我們的眨眼閾值,如果是,則表示正在進行眨眼;否則,我們將處理眼睛寬高比不低于眨眼閾值的情況,并檢查是否有足夠數(shù)量的連續(xù)幀包含低于預定義閾值的眨眼速率。因為是要用于餐具放下時的確認工作,此時的“眨眼”應為有確認意義的“閉眼”,一幀時間為1 /12s,而眨眼一次時間為0.2到0.4s,所以只需要判斷大于5幀或者保險起見大于6、7幀的“眨眼”就可作為確認信號了。
實現(xiàn)人臉檢測的流程主要包括人臉Haar—like特征提取、AdaBoost級聯(lián)分類器生成以及人臉檢測結果三個環(huán)節(jié)。adaboost算法首先使用haar-like特征表示出人臉,但是此時得到的人臉特征值并不精確,然后通過增加閾值的方式設計出弱分類器,對特征值進行篩選,此時得到的人臉特征值還是比較粗糙,因此將弱分類器并聯(lián)起來組成強分類器,經(jīng)過強分類器篩選之后的特征值非常接近真實的人臉特征值,為了增加檢測速度,以級聯(lián)的形式將已獲得的強分類器串聯(lián)成最終的分類器,Rainer Lienhart和Jochen Maydt兩位將這個進行了擴展,最終形成了OpenCV現(xiàn)在的Haar分類器。經(jīng)過長時間的改進,我們利用Haar特征分類器來檢測人臉并利用眼睛的位置判斷動作。
基礎系統(tǒng)構成包括基于ARM11的嵌入式系統(tǒng)開發(fā)板樹莓派(Raspberry Pi)3B+、CSI視頻接口攝像頭元件、顯示屏。因為該平臺開始處理圖像時視頻幀數(shù)會極低,極大地影響到正常動作識別,成功率也因此大大降低。為此我們選用了新的開發(fā)平臺——Nvidia JETSON Nano,如下圖7所示。

圖7 Nvidia JETSON Nano
Jetson Nano提供472 GFLOP,用于快速運行現(xiàn)代AI算法。它可以并行運行多個神經(jīng)網(wǎng)絡,同時處理多個高分辨率傳感器,非常適合入門級網(wǎng)絡硬盤錄像機(NVR)、家用機器人以及具備全面分析功能的智能網(wǎng)關等應用。利用Linux+Python的編程環(huán)境和Python語言的可跨平臺特性,代碼的移植沒有太多障礙,輔以OpenCV這一開源計算機視覺庫,來進行基本的圖像處理。
底部的智能車選用的是競賽用的恩智浦智能車L型車模,因為其負載能力大,在越野組的競賽中表現(xiàn)優(yōu)異,故將其作為移動式平臺。我們用基于ARM Cortex-M4內核、帶有高級外設的節(jié)能型MCU的LPC54606搭建了一個遙控L車來進行測試。使用逐飛的LPC普通組主板+LPC核心板+MOS單驅搭建的測試平臺對車模進行控制。通過采集接收機的PWM占空比信號,解析出遙控器的動作。并使用LPC控制電機以及舵機動作。工作時:通過藍牙模塊接受上位機的跑位信號,在固定的路線慢速巡航配發(fā),當接收到緊急信號的時候迅速跑到感應器位置進行工作。該機器人設計工作流程如下圖8所示。

圖8 機器人工作流程圖
該智能服務設計旨在方便用戶,在用餐高峰期有效識別用戶以機器視覺的形式進行用餐。該裝置可擴展性很高,在此基礎上可以增加餐具回收或者餐具消毒功能。目前這款裝置的缺陷在于,若用餐者佩戴眼睛裝飾品比如眼鏡的時候,面部特征標記的68個點位置偏差較大,在光線過于明亮的環(huán)境中,眼鏡的反光會使眼部特征無法檢測與辨認。但總體而言,在條件合適的工作場景下,該配發(fā)裝置具有較高的工作效率,可以緩解日常餐廳就餐使得人流擁堵現(xiàn)象。