聶承啟,李 增,左少華,石富文,江錦春
(1.華東師范大學 通信與電子工程學院,上海 201100;2.華東師范大學 物理與電子科學學院,上海 201100)
隨著信息科技的不斷發展,人臉識別技術愈發引起社會關注,應用愈發廣泛[1]。校園中隨處可見具有人臉識別技術的攝像頭,其已被應用于門禁管理與教室中,方便校園安全管理與課堂考勤[2-5]。張立剛等采用人臉識別技術進行礦井人員的唯一性檢測,確保入井人員的信息真實、準確[6]。在智能交通方面,人臉識別技術可方便安保人員識別、管控在逃人員,提高了身份驗證效率[7-10]。在智能家居領域,大多通過物聯網技術采集、檢測環境信息,獲取并保存視頻[11],尚未進行實時對象檢測和人臉識別。本文通過OpenCV和深度學習構建一個包括對象檢測、人臉識別和微信消息發送功能的視頻監控系統,以保障家庭安全。硬件選用樹莓派、Picamera攝像頭和英偉達TX2,系統搭建簡單,運行穩定,成本較低,可接入智能家居系統,提高房屋的安全監控等級。
本系統由客戶端(Client)、服務器(Server)、手機端等組成。客服端與服務器采用Linux系統,客戶端可以布置多個監控并由其獲取各處視頻。ImageZMQ庫將獲取的視頻發送至服務器,經過服務器的視頻幀處理模塊處理后得到相應的結果。之后對結果進行分析,按照不同的程序運行。
當出現檢測對象時,拍照并保存照片,進行人臉識別后將結果發送至手機微信指定聯系人。家居領域的視頻監控采用局域網通信,設備簡單,成本低,對象檢測精度高,系統運行穩定。系統流程如圖1所示。

圖1 系統流程
樹莓派3B+:搭載64位4核ARM Cortex-A53 CPU,擁有無線網卡、藍牙及充足的接口用于外設與串口間通信。可通過40 pin GPIO接口進行擴展板加載,方便后續功能擴展。
Picamera:樹莓派匹配的攝像頭具有豐富的Picamera API數據庫,通過Python語言可直接調用,縮短項目開發周期。
英偉達Jetson TX2:配有NVIDIA PascalTMGPU,各標準接口便于功能擴展,實現邊緣位置的AI計算。
樹莓派與Picamera構成客戶端,用以獲取檢測地的視頻圖像,在同一局域網下將服務端IP地址綁定到客戶端,通過VidoeStream獲取視頻流,借助ImageZMQ庫進行視頻幀傳輸。為區分視頻流來源地,客戶端采用Socket模塊獲取樹莓派Hostname,將其標記到所傳輸的視頻幀上。將TX2用作PC服務器,對接收的視頻流進行檢測、計算與顯示。如圖2所示,將客戶端攝像頭布置于所需場景中,例如臥室、客廳與家門前等,將獲取的監控視頻流通過局域網發送至服務器進行處理與顯示。服務器對視頻流中的對象進行檢測識別,將結果發送至手機微信指定聯系人。

圖2 硬件結構
ImageZMQ基于ZMQ(ZeroMQ)構建,ZMQ是分布式系統中使用的高性能異步消息傳遞庫,是使用率較高的消息傳遞系統之一。在構建使用OpenCV通過網絡傳輸實時視頻的系統時,需要專注于以下2方面:
(1)高吞吐量:來自視頻流的新幀快速進入;
(2)低延遲:當攝像機捕獲幀后立即分發到系統中的所有節點。
ZMQ側重于高吞吐量和低延遲類應用。ImageZMQ與OpenCV兼容,能夠實時傳輸數據,且運行穩定可靠,同時還具有易安裝等優點。
在服務端接收到所有客戶端傳送的視頻幀時,通過OpenCV調用blobFromImage函數對圖像進行預處理,并設置相關參數,為后續模型分類做準備。通過對網絡圖片數據集進行預先訓練,得到caff深度學習模型文件,其中caffemodel和prototxt文件用于目標對象檢測,本系統目前僅支持對狗、人和車的檢測。服務端PC可以通過調整對象檢測置信度來控制檢測精度,在對各自樹莓派視頻幀進行檢測后,將檢測結果以字典的形式存放,當出現目標物時利用OpenCV對目標使用方框標記,同時將檢測結果標記到各自的視頻幀上。每個樹莓派均獨立運行,相互解耦,以便于后續節點的調整。通過調整PC端顯示窗口的長和寬來容納接收的視頻幀,以實時動態顯示視頻。
為達到人臉識別的目的,當檢測結果中出現人物時,需對其進行識別處理。由于拍攝角度固定,而人物在移動,因此需要對大量視頻幀進行同步識別處理,避免無用視頻數據占用計算資源和空間,形成延遲。通過編寫shell腳本添加啟動項,按規定的間隔周期清理內存,防止存儲的圖片超出固有容量。本系統通過增加人臉檢測功能,進而有效控制待檢測視頻幀數量,以提高后續識別效率,降低延遲。
3.3.1 人臉檢測
在檢測結果出現人物時,本地服務端保存當前視頻幀,通過Redis將圖片路徑發布到指定通道,由人臉檢測程序獲取路徑對其進行檢測。同樣由預先訓練的caffemodel模型和prototxt文件進行檢測,通過設定的置信度進行精度控制。只有當檢測結果滿足要求時,才會進行后續的人臉識別流程,否則拋棄當前圖片,檢測下一幀圖片。
3.3.2 人臉識別
需要建立人臉識別數據集,通過程序調用攝像頭拍取一定數量的照片,將圖片分類后建立圖片數據庫,如圖3所示。此外,還需通過網絡獲取其他人物圖片建立陌生人類別。

圖3 數據集示例
(1)人臉特征向量提取:采用面部檢測器進行圖像面部定位。使用深度學習方法對人臉數據進行特征提取,生成面部描述的128維特征向量,與對應的標簽以字典格式序列化保存到pickle文件中。
(2)訓練人臉識別模型:獲取所有人臉特征向量后,安裝scikit-learn機器學習庫,采用支持向量機(SVM)進行訓練。將訓練獲取的模型和標簽以pickle文件保存在本地文件夾。
(3)人臉識別:通過對人臉特征向量的提取與模型的訓練,獲取圖片人臉識別模型,服務端PC將經過人臉檢測篩選的圖片路徑發送至人臉識別模塊。將待識別圖片進行面部定位后,提取對應的特征向量,將其輸入到訓練得到的模型進行比對,設置識別置信度參數閾值,以獲取最高的匹配度及相應的標簽名稱。之后將標簽與匹配度標記在圖片上,顯示在公屏。
當運行服務器程序時會自動彈出微信登錄二維碼,方便用戶使用網頁版微信。在實驗室中搭建2個客戶端,運行程序后服務端接收視頻幀并顯示,圖4所示為無人時的視頻監控畫面,可通過視頻窗口標簽得知監控地點與對象檢測結果。無人時顯示“car:0. person:0. dog:0。”

圖4 服務端視頻監控畫面
當攝像頭中出現檢測對象時,會進行類型分類與數目統計,并標記在視頻窗口。圖5所示為2人同時出現在pilivingroom2攝像頭中的檢測結果,即“car:0. person:2.dog:0。”出現檢測對象后,保存此視頻幀,并進行面部檢測與人臉識別。圖6所示為人臉識別結果,其中li的識別概率為99.87%,nie的識別概率為87.68%。對象檢測與人臉識別準確率較高。系統檢測到對象時,會通過網頁版微信Itchat庫將結果發送至指定聯系人進行實時提醒。圖7所示為微信發送監控結果。

圖5 視頻監控中人物出現的畫面

圖6 人臉識別結果

圖7 微信發送監控結果
本系統為家居安全提供了有效的視頻監控,可與智能家居系統平臺對接,通過增加客戶端樹莓派實現對目標地的監控,具有很強的兼容性和擴展性。同時還增加了人臉識別功能,可通過微信將監控結果實時發送至指定聯系人。系統硬件結構簡單,運行穩定,識別準確率較高,后續可進一步做系統優化與功能擴展,以滿足更廣泛的視頻監控需求。