一损肛、簡介
人臉識別已經(jīng)成為計算機視覺領(lǐng)域中最熱門的應(yīng)用之一稿黄,其中,人臉信息處理的第一個環(huán)節(jié)便是人臉檢測和人臉跟蹤铛只。人臉檢測是指在輸入的圖像中確定所有人臉的位置、大小和姿勢的過程糠溜。人臉跟蹤是指在圖像序列中確定各幀間人臉的對應(yīng)關(guān)系的過程淳玩,即確定每個人臉的運動軌跡及其大小變化的過程。
人臉跟蹤最初的應(yīng)用源于人類識別非竿。人臉識別是指將輸入的人臉圖像與已知人臉庫中的模型進行比較蜕着,以確定是否存在相匹配的人臉。隨著近幾年信息化進程日益加快,安全認(rèn)證系列應(yīng)用的涌現(xiàn)红柱,這使得高度自動化的人臉識別系統(tǒng)的研究成為一個熱點承匣。以往大多數(shù)系統(tǒng)要求被識別者固定在攝像機前的某一位置,?十分不便,且在某些場合如監(jiān)控領(lǐng)域也無法實現(xiàn)豹芯。如何基于視頻悄雅,在復(fù)雜背景中直接檢測、定位運動的人臉铁蹈,并加以識別宽闲,這一問題迫切需要得到解決众眨。
二、HyperFT
這是一個移動端快速視頻多人臉跟蹤的開源項目容诬,項目是基于mtcnn人臉檢測加上簡單的模板匹配進行人臉跟蹤娩梨,算法簡單但效果顯著,移動端速度可達150幀以上览徒,該項目的優(yōu)點是可實現(xiàn)多人臉跟蹤狈定。
github地址:https://github.com/zeusees/HyperFT
三、代碼算法解析
HyperFT項目的多人臉跟蹤算法分為三大部分:
第一部分是初始化习蓬。通過mtcnn的人臉檢測找出第一幀的人臉位置纽什,然后根據(jù)結(jié)果對人臉跟蹤進行初始化;
第二部分是更新躲叼。首先利用模板匹配進行人臉目標(biāo)位置的初步預(yù)判芦缰,再結(jié)合mtcnn中的onet對人臉位置進行更加精細的定位,最后通過mtcnn中的rnet的置信度來判斷跟蹤目標(biāo)是否為人臉枫慷,防止當(dāng)有手從面前慢慢揮過時让蕾,框會跟著手走,導(dǎo)致無法跟蹤到真正的人臉或听;
第三部分是定時檢測探孝。通過在更新的部分中加入一個定時器來做定時人臉檢測,從而判斷中途是否有新的人臉加入誉裆,本項目在定時人臉檢測中使用了一個trick——就是將已跟蹤的人臉?biāo)谖恢美妹砂嬲诒纹饋矶俾苊饬巳四槞z測的重復(fù)進行,從而減少其計算量找御,提高了檢測速度元镀。
四、算法改進的思路
HyperFT項目是在當(dāng)前已實現(xiàn)多人臉跟蹤的開源項目中取得顯著效果的項目之一霎桅,其優(yōu)點是人臉跟蹤速度快且可以進行對多個人臉的跟蹤栖疑。由于使用的算法是基于mtcnn和模板匹配實現(xiàn)的,在進行多人臉跟蹤時有一定的局限性滔驶,所以算法仍存在一定的可提升空間遇革。
1、替換人臉檢測模型:可將mtcnn的人臉檢測模型替換成yufacedetectnet和RetinaFace等模型揭糕,人臉檢測的時間即可不受人臉數(shù)量的影響萝快。
2、替換目標(biāo)跟蹤算法:可將模板匹配算法替換成TLD和光流法等跟蹤算法著角,相比于模板匹配揪漩,跟蹤速度有一定的提升。
五吏口、項目中加入五個關(guān)鍵點跟蹤的實踐
1奄容、在HyperFT項目中的Face類中僅定義了人臉矩形的變量冰更,如若需要加入五個關(guān)鍵點的跟蹤則需要在Face類中需要定義一個Bbox類的faceBbox,這樣Face即能保存人臉位置又能保存人臉關(guān)鍵點昂勒。
?
2蜀细、在原來的doingLandmark_onet函數(shù)的基礎(chǔ)上重載函數(shù),將傳入的std::vector<cv::Point> &pts改為傳入Bbox& faceBbox戈盈。
?
3奠衔、在tracking函數(shù)中修改doingLandmark_onet函數(shù)的調(diào)用
?
4、通過人臉跟蹤中Face類中的faceBbox即可獲得人臉的位置及其五個人臉關(guān)鍵點(main.cpp)
?
改進后的項目->GitHub地址:https://github.com/qaz734913414/Ncnn_FaceTrack
?
zeusee.com智云視圖