黃富嗣,陳湘驥
(華南農業大學數學與信息學院,廣州510642)
物聯網技術的成熟,使得視覺嵌入式設備應用場景越來越廣泛。近年來,研究的熱點之一是在嵌入式設備上進行邊緣計算,并以物聯網傳輸處理結果,減少服務器運載負載。如秦超等人[1]通過Google Face Comparison API 來實現人臉識別,實現了樹莓派的人臉識別校園門禁管理系統。王敬仁等人[2]通過特征臉方法(Principal Component Analysis,PCA)來實現地鐵分流系統。許龍銘等人[3]通過Haar Cascade 特征檢測算法庫中的相關函數,應用到OpenMV 嵌入式視覺芯片來實現商店中對人員人臉的檢測來統計客流量。嚴正國等人[4]通過運用OpenCV 中的FaceRecongnizer 類實現人臉識別,設計出人臉考勤系統。此類算法通過正面人臉識別作為依據,缺少對側面或背面的人頭解析,應用方面缺少對人員流動的運動趨勢和姿態分析。蔡征等人[5]在關聯匹配中設計出代價函數,并基于運動特性設計出補償算法,有效解決了重合、消失等對多目標追蹤出現的問題。袁海娣等人[6]利用背景差分算法提取候選框區域,再通過識別安全帽的顏色和其他特征來分割、提取目標,并完成形態學處理。最后以匹配區域質心的方法實現對人員的實時跟蹤與人員計數,實現了井下人數統計的視覺分析。這類算法對人數進行了追蹤和統計,但缺少對人員姿態的信息解析,姿態信息有助于分析井下工作人員是否安危。
近幾年,深度學習算法成為熱點,深度學習在圖像和視覺領域取得很好的效果,例如涂鑫等人[7]改進CNN卷積網絡設計出課堂人臉打卡算法。盛恒[8]使用Faster R-CNN 對場景內的人員進行頭部檢測輸出模型的檢測成果,再根據IoU 算法濾去重復檢測的目標,實現了實驗室人數統計與管理系統。游忍等人[9]通過TINY-YOLO 算法用于識別人臉,結合了NCNN 框架,設計出實驗室人數統計管理系統。這類算法識別率高,但是需求的資源過大,需要昂貴的設備才能滿足算法的資源需求,一般的嵌入式設備無法提高到應用需要的幀數。
本文算法融合了背景差分和三幀差算法,通過計算分塊質心位移方差(Block Centroid Displacement Variance,BCDV),實現了固定場景下的多移動物體識別,輸出目標的位置、運動或揮手等姿態信息。
固定監控場景如校園實驗室監控、井下平臺人員安全監控,需要遠距離傳輸并人工提取監控信息、或是提供人數信息。本文算法運行在嵌入式設備上,將視頻信息處理成動態數據,包括人數、人物運動趨勢和姿態分析等信息,方便后臺服務器進一步作分析。
算法首先對原圖進行背景差分和三幀差算法處理,獲得的二值圖做分塊置信度計算和圖像融合。將圖像特征聚類處理獲得ROI 區域并計算區域的質心,通過當前質心與匹配的歷史質心的計算得出ROI 區域的運動趨勢。以質心為中心點將ROI 區域分成八個區域,通過區域質心與質心的計算與分析得出姿態信息。完整流程圖如圖1 所示。

圖1 算法流程圖
首先需要獲取圖像中感興趣的區域,采用背景差幀處理原圖獲得有特征的二值圖,并通過輕微的腐蝕膨脹來消除背景差分產生的噪點。接著把該圖像網格化成n×n 個大小的塊,n 為像素單位。通過USCD 數據集(UCSD Pedestrian Database)測試,當n 設置為8 效果較好,即網格化成8×8 個大小的塊。接著遍歷整個圖像,對每一個塊分別計算塊置信度,塊置信度公式如公式(1)所示。

其中A 為當前塊歸一化的分數,B 為相鄰塊的分數,C 為上一幀該塊的Score,α、β、γ為歸一化權重,經過UCSD 數據集的數個視頻的測試,當α為0.4,β為0.4,γ為0.2 效果較好。
對每個塊中的白色像素數與白色像素數最多的塊做歸一化,得到當前塊的分數A 如公式(2)所示。

其中x 為當前白色像素數,xmax為塊集合中塊中最多白色像素數,xmin為塊集合中塊中最少白色像素數,最少白色像素數基本為零,x*為歸一化結果。
把每個塊鄰邊的八個塊的當前分數累加并取平均獲得B,算出該塊的鄰邊分數。算出每個塊的置信度后,設立一個閾值threshold_connect 為0.2,排除置信度較低的塊。
對有效目標塊采用DFS 深度搜索算法把符合threshold_connect 并相鄰的塊連結起來,組成一個ROI區域,對該矩形區域的白色像素數聚類算質心,如公式(3-4)所示。

其中xc,yc為質心橫縱坐標,xi,yi為當前白色像素橫縱坐標,m 為矩形區域中白色像素總數。
算出質心后,質心匹配前一幀質心組中最短距離的質心,這里設置一個閾值threshold_centroid=50,不存在該閾值范圍內的質心時,則迭代往再前一幀的質心組搜尋匹配質心,匹配后,通過兩者之差獲取該矩形ROI 區域的運動方向和速度,并用箭頭標出運動方向,如圖2 所示。

圖2 運動趨勢
得到人物整體運動趨勢后,再將ROI 區域以目標質心為中心分割成八塊矩形區域,如圖3 所示。

圖3 ROI矩形分區
C 為目標質心,以C 的橫坐標分成兩個區域,兩個區域再單獨平分兩個區域,以C 的縱坐標分割該矩形的四個區域,得到八塊矩形區域。分別計算出目標落入每個區域的區域質心,并用公式(3-4)算出每個區域的區域質心,將質心與區域質心分別與矩形長度做歸一化,并通過以下公式計算方差。

xic主為前i 幀的質心基于ROI 矩形歸一化后的值,xic區為前i 幀的區域質心基于ROI 矩形歸一化后的值,m 為前n 幀質心組儲存幀數。對質心的xc主和區域質心的xc分進行歸一化并相減,得到區域質心相對于質心位移的差,通過公式(5)得到方差S2。設立一個閾值threshold_hand 為5,當圖3 中塊1 或2 的S2值超過threshold_hand,下面5、6、7、8 塊的值均沒 有超過threshold_hand,判定為招手姿態如圖4 所示。

圖4 揮手識別
測試系統是PC,CPU 為Intel i7 4720Q,系統是Ubuntu 16.04,算法編程語言是C++,采用的視覺庫是OpenCV 3.1.0,測試用數據集是UCSD Pedestrian Database 灰度數據集,分辨率為476×316。

表1 三種算法的實驗結果對比
實驗中共選用100 幀作為測試數據樣本。實驗結果表明,背景差分目標塊識別率為67%,三幀差識別率為84%,本文算法識別率為93%。實驗結果表明,本文算法提高效果較好,提高了9%。

表2 本文算法與OpenPose 算法對比
共選用70 幀作為測試數據樣本。深度學習Open-Pose 算法識別率91%,幀率有1.7 每秒。本文算法識別率88%,幀率有55 幀每秒。在識別率相比較低的情況下,幀數明顯高于OpenPose 算法。

表3 本文算法揮手識別測試
在自制數據集測試中,兩人共揮手23 次,識別護手22 次,通過回放研究發現,一次揮手未識別是揮手方向面向測試鏡頭垂直揮手導致未識別。
另外,本文算法還在樹莓派4 代上測試,2GB 內存配置,在分辨率320×180 中運行達到21 幀。
本文采用BCDV 算法,提取視頻中移動物體運動趨勢以及人物揮手等姿態信息,在樹莓派等嵌入設備上也能獲得較高的幀數。目前已應用于團隊實驗室智能監控,在智能監控管理場景有一定應用前景。