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