李國防 闕中強



摘要:針對車道安檢場景,實現了智慧人臉識別系統中間件子系統,起到了從前端硬件采集到調用人臉比對引擎比對接口的一個橋梁作用。該中間件結合多線程技術、內存緩存技術,極大提高了安檢的效率。
關鍵詞:智慧人臉識別系統中間件;人臉識別;終端程序;比對程序;人臉識別引擎;人臉相機
中圖分類號:TP18 文獻標識碼:A
文章編號:1009-3044(2019)36-0184-03
1背景
人臉識別技術已經非常成熟,現在已經可以非常容易得實現在14億人口庫中毫秒級識別出相似度最高的多張人臉,市面上提供人臉識別引擎的公司有很多家,比如商湯、依圖。這些公司通過提供API接口讓用戶直接調用實現人臉去重和人臉識別能力。盡管通過購買人臉識別引擎可以擁有人臉識別能力,但是針對不同的使用場景,需要實現不同業務邏輯的人臉中間件。人臉中間件的作用是從前端獲取人臉數據、處理重復人臉、調用人臉引擎實現人臉識別,由此可以看卅人臉中間件起到“承上啟下”的作用。人臉中間件如果實現不好,會成為整個系統的木桶短板,影響整個智慧人臉識別系統的性能和用戶體驗。因此,如何更好地實現人臉中間件,是一個值得考慮的問題。本文將以車輛人員安檢為例,敘述如何更好地實現人臉中間件。
2智慧人臉識別系統整體架構
2.1系統架構
智慧人臉識別系統由前端采集子系統、中間件子系統和人臉比對引擎子系統三部分組成。其中前端采集子系統由車輛停車區安裝的四臺人臉相機組成,完成車輛乘客人臉的采集;中間件子系統由終端程序和比對程序組成,終端程序負責接管人臉相機,獲取人臉相機采集的人臉圖片,將人臉圖片作為參數調用比對程序接口,根據比對程序返回的人臉狀態和人臉身份信息顯示到人臉顯示終端上;人臉比對程序完成同一輛車的人臉去重和人臉比對功能,通過調用第三方提供的人臉比對引擎獲得人臉圖片的狀態和身份信息。人臉比對引擎子系統是指第三方提供的人臉比對服務器,通過調用給定API可以完成人臉圖片毫秒級比對。
三個子系統的組成關系如圖l所示。
2.2系統功能模塊
如圖2所示,智慧人臉識別系統分為13個功能模塊,每個模塊完成一個具體功能。其中前端采集模塊完成人臉、車牌的采集,人臉調優模塊用來提高人臉相機輸出的人臉圖片質量,以達到第三方接口需提出的人臉圖片質量的最低要求。
終端程序由獲取人臉模塊、調用比對程序模塊、終端顯示模塊三大模塊組成。完成從人臉相機獲取人臉圖片、調用比對程序獲取人臉狀態和身份信息、在顯示終端顯示出來最終人臉結果三個功能。
比對程序由人臉去重模塊、人臉比對模塊、入庫緩存模塊、定時刪除人臉庫模塊組成。人臉去重用來將一輛車上的人臉進行去重,同一張人臉只顯示一次,只調用一次人臉比對模塊;人臉比對模塊用來調用人臉比對引擎,返回人臉的具體狀態;入庫緩存用來存儲每輛車去重時的中間結果,定時刪除;定時刪除人臉庫模塊用來定時刪除超過一定時間的人臉庫,用來防止人臉比對引擎人臉庫數量無休止增加。
人臉識別引擎子系統由人臉庫相關接口和人臉比對相關接口組成。其中人臉庫接口由建立人臉庫、刪除指定人臉庫、向人臉庫添加不重復人臉三個接口組成,完成人臉的去重功能。人臉比對接口包含人臉比對接口和獲取人臉對應信息接口,完成人臉狀態和身份信息獲取。
2.3系統數據流
智慧人臉識別系統有人臉圖片、車牌號碼兩種類型的數據。終端程序通過調用前端人臉相機和車牌相機獲取車牌號碼和對應的人臉圖片,將此數據作為參數調用比對程序接口,比對程序接口會借助Redis數據庫作為臨時緩存,判斷此車牌號對應的人臉圖片是否重復,不重復就調用人臉比對引擎的人臉庫接口,建立人臉庫,將人臉存入剛建立的人臉庫,并將人臉庫唯一id存入車牌號為key的redis數據庫中;如果重復直接返回人臉重復的結果給終端程序讓其不顯示此人臉。人臉不重復的話會繼續調用人臉比對接口,判斷此人臉狀態和身份信息,并將結果返回給終端程序。終端程序獲得數據后,直接在人臉終端程序上顯示出來。
系統數據流程如圖3所示。
3智慧人臉識別系統中間件的實現及存在問題
3.1中間件一終端程序的實現
終端程序邏輯實現如圖4所示。終端程序通過相機SDK初始化人臉和車牌相機,獲取到人臉和車牌數據,將這兩個數據封裝成JSON數據作為參數調用人臉比對程序。
值得注意的是終端程序得到人臉后會串行去請求人臉比對接口,后一張人臉需要等待上一張人臉返回比對結果后才能調用比對接口。如果并行請求人臉比對程序,會造成人臉去重效果特別差。因為現在市面上的人臉相機只能夠保證進入相機視野范圍內瞳距變化不大情況下只拍攝一張人臉,但沒有具有去重效果的人臉相機,因此去重只能夠通過人臉比對程序實現,并且人臉相機會拍攝到一個人多個不同角度的人臉圖片發送給終端程序。同一張人臉不同角度的照片發送給終端程序,終端程序如果并發調用比對接口,會導致比對程序的去重功能失效,此時終端顯示人臉去重效果會特別差。因此,終端程序只能夠通過串行調用比對程序接口來保證去重的效果。
終端程序串行調用比對程序接口造成一個問題是顯示終端顯示人臉比對結果特別慢,顯示也是串行一個個順序顯示,用戶體驗很差。
3.2中間件一比對程序的實現
圖5所示是比對程序的流程圖。
比對程序通過提供接口供終端程序調用,終端程序發送車牌號和base64的人臉圖片調用此接口。
首先比對程序判斷車牌號是否在redis數據庫已建立對應的key,如果未建立說明此車牌號第一次調用此接口,不需要人臉去重,直接去建立一個新的此車牌號唯一對應的人臉庫并將人臉庫對應的id存入redis數據庫中緩存,繼續調用人臉比對引擎提供的人臉比對接口,如果比對接口調用正常,那么將此人臉加入到人臉庫當中并返回給前端人臉狀態和身份信息(之所以放在比對接口返回之后再添加,是因為之前添加,如果比對接口報錯,此時會不讓前端顯示,那么此人臉下次再抓拍到調用接口會因為已經加入到了人臉庫視為重復人臉不讓前端顯示,就會得不到此人臉對應的信息);如果人臉比對接口調用失敗,直接返回給前端結果不讓前端顯示調用接口失敗的人臉圖片。
如果已建立,取出此車牌存儲的對應人臉庫id,判斷此id對應的人臉庫中此人臉是否重復,不重復的話,調用人臉比對引擎提供的比對接口;重復的話,直接返回給前端結果不讓前端顯示此重復人臉圖片。
3.3存在問題
按照3.1 3.2邏輯實現的人臉中間件會存在一個很嚴重的問題是,比對程序只有一個對外接口,終端程序只能獲取到圖片之后串行調用比對程序接口。由于人臉相機是四個同時抓拍人臉,并且每個相機會抓拍同一個人的多張人臉,這就會造成相機上報照片堵塞在終端程序的消息隊列。最明顯的表現就是終端程序顯示結果需要一張張人臉串行顯示出來,用戶體驗差。
如果直接讓終端程序每接收到一張人臉圖片就開啟一個線程調用比對程序接口,此時會發生同一個人的多張人臉沒法去重,導致終端顯示程序顯示多張重復人臉。
4智慧人臉識別系統中間件的優化
4.1終端程序的優化
圖6所示是優化后終端程序流程圖。
第2章節中實現的中間件,限制終端程序并行調用比對程序的關鍵是人臉去重需要多線程共享人臉圖片。實際上人臉去重時間相較于人臉比對引擎的比對接口返回結果時間是很短的,因此人臉去重串行并不會影響整個中間件的效率。因此圖六的終端程序流程圖調用的比對程序對外開放了去重和比對兩個接口,終端程序串行調用去重接口,并行調用比對接口。
4.2比對程序的優化
圖7是優化后比對程序流程圖。
比對程序提供去重和比對兩個接口。終端程序串行調用去重接口,并行調用比對接口。通過終端程序并行調用和比對程序分為兩個接口這兩種方式,讓人臉中間件速度顯著提升。
4.3優化效果
假設一輛小客車有4個乘客,每個人臉相機拍攝3張照片,那么一輛車共上報12張人臉照片;每張人臉圖片去重時間大概0.2s,比對時間大概2s。如果按照第2章節的程序來調用,每張照片需要2.2s,共計需要26.4s;如果按照第3章節程序來調用,共計需要4.6s(12*0.2+2.2=4.6s)。效率提升接近6倍。
5結束語
在車輛安檢場景下,通過使用智慧人臉識別系統中間件,可以極大提升車輛安檢效率,降低用戶勞動強度,保證車輛安檢時不會造成車輛擁堵情況的發生。
該文敘述的人臉中間件已經通過實踐優化過,具有實際的使用價值,并且其對于各個場景下的人臉識別系統中間件的開發都有一定的參考價值和借鑒意義。
參考文獻:
[1]王文峰.人臉識別原理與實戰[M].北京:電子工業出版社,2018.
[2]王映輝.人臉識別[M].北京:科學出版社,2010.
[3]邱城銓,羅回彬,陳汕,等.智慧校同人臉識別系統的設計與實現[J].現代計算機,2019(7).
【通聯編輯:謝媛媛】
收稿日期:2019-10-29
作者簡介:李國防,男,山東泰安人,助理工程師,南京郵電大學研究生,研究方向為物聯網、大數據;闕中強,男,任職于公安部第一研究所。