人臉跟蹤開(kāi)源項(xiàng)目HyperFT代碼算法解析及改進(jìn)

一、簡(jiǎn)介

人臉識(shí)別已經(jīng)成為計(jì)算機(jī)視覺(jué)領(lǐng)域中最熱門(mén)的應(yīng)用之一,其中,人臉信息處理的第一個(gè)環(huán)節(jié)便是人臉檢測(cè)和人臉跟蹤。人臉檢測(cè)是指在輸入的圖像中確定所有人臉的位置、大小和姿勢(shì)的過(guò)程。人臉跟蹤是指在圖像序列中確定各幀間人臉的對(duì)應(yīng)關(guān)系的過(guò)程,即確定每個(gè)人臉的運(yùn)動(dòng)軌跡及其大小變化的過(guò)程。


人臉跟蹤最初的應(yīng)用源于人類(lèi)識(shí)別。人臉識(shí)別是指將輸入的人臉圖像與已知人臉庫(kù)中的模型進(jìn)行比較,以確定是否存在相匹配的人臉。隨著近幾年信息化進(jìn)程日益加快,安全認(rèn)證系列應(yīng)用的涌現(xiàn),這使得高度自動(dòng)化的人臉識(shí)別系統(tǒng)的研究成為一個(gè)熱點(diǎn)。以往大多數(shù)系統(tǒng)要求被識(shí)別者固定在攝像機(jī)前的某一位置,?十分不便,且在某些場(chǎng)合如監(jiān)控領(lǐng)域也無(wú)法實(shí)現(xiàn)。如何基于視頻,在復(fù)雜背景中直接檢測(cè)、定位運(yùn)動(dòng)的人臉,并加以識(shí)別,這一問(wèn)題迫切需要得到解決。



二、HyperFT

這是一個(gè)移動(dòng)端快速視頻多人臉跟蹤的開(kāi)源項(xiàng)目,項(xiàng)目是基于mtcnn人臉檢測(cè)加上簡(jiǎn)單的模板匹配進(jìn)行人臉跟蹤,算法簡(jiǎn)單但效果顯著,移動(dòng)端速度可達(dá)150幀以上,該項(xiàng)目的優(yōu)點(diǎn)是可實(shí)現(xiàn)多人臉跟蹤。


github地址:https://github.com/zeusees/HyperFT


三、代碼算法解析

HyperFT項(xiàng)目的多人臉跟蹤算法分為三大部分:

第一部分是初始化。通過(guò)mtcnn的人臉檢測(cè)找出第一幀的人臉位置,然后根據(jù)結(jié)果對(duì)人臉跟蹤進(jìn)行初始化;


第二部分是更新。首先利用模板匹配進(jìn)行人臉目標(biāo)位置的初步預(yù)判,再結(jié)合mtcnn中的onet對(duì)人臉位置進(jìn)行更加精細(xì)的定位,最后通過(guò)mtcnn中的rnet的置信度來(lái)判斷跟蹤目標(biāo)是否為人臉,防止當(dāng)有手從面前慢慢揮過(guò)時(shí),框會(huì)跟著手走,導(dǎo)致無(wú)法跟蹤到真正的人臉;


第三部分是定時(shí)檢測(cè)。通過(guò)在更新的部分中加入一個(gè)定時(shí)器來(lái)做定時(shí)人臉檢測(cè),從而判斷中途是否有新的人臉加入,本項(xiàng)目在定時(shí)人臉檢測(cè)中使用了一個(gè)trick——就是將已跟蹤的人臉?biāo)谖恢美妹砂嬲诒纹饋?lái),避免了人臉檢測(cè)的重復(fù)進(jìn)行,從而減少其計(jì)算量,提高了檢測(cè)速度。


四、算法改進(jìn)的思路

HyperFT項(xiàng)目是在當(dāng)前已實(shí)現(xiàn)多人臉跟蹤的開(kāi)源項(xiàng)目中取得顯著效果的項(xiàng)目之一,其優(yōu)點(diǎn)是人臉跟蹤速度快且可以進(jìn)行對(duì)多個(gè)人臉的跟蹤。由于使用的算法是基于mtcnn和模板匹配實(shí)現(xiàn)的,在進(jìn)行多人臉跟蹤時(shí)有一定的局限性,所以算法仍存在一定的可提升空間。

1、替換人臉檢測(cè)模型:可將mtcnn的人臉檢測(cè)模型替換成yufacedetectnetRetinaFace等模型,人臉檢測(cè)的時(shí)間即可不受人臉數(shù)量的影響。

2、替換目標(biāo)跟蹤算法:可將模板匹配算法替換成TLD和光流法等跟蹤算法,相比于模板匹配,跟蹤速度有一定的提升。


五、項(xiàng)目中加入五個(gè)關(guān)鍵點(diǎn)跟蹤的實(shí)踐

1、在HyperFT項(xiàng)目中的Face類(lèi)中僅定義了人臉矩形的變量,如若需要加入五個(gè)關(guān)鍵點(diǎn)的跟蹤則需要在Face類(lèi)中需要定義一個(gè)Bbox類(lèi)的faceBbox,這樣Face即能保存人臉位置又能保存人臉關(guān)鍵點(diǎn)。

?


2、在原來(lái)的doingLandmark_onet函數(shù)的基礎(chǔ)上重載函數(shù),將傳入的std::vector<cv::Point> &pts改為傳入Bbox& faceBbox。


?

3、在tracking函數(shù)中修改doingLandmark_onet函數(shù)的調(diào)用

?


4、通過(guò)人臉跟蹤中Face類(lèi)中的faceBbox即可獲得人臉的位置及其五個(gè)人臉關(guān)鍵點(diǎn)(main.cpp)

?


改進(jìn)后的項(xiàng)目->GitHub地址:https://github.com/qaz734913414/Ncnn_FaceTrack


?


zeusee.com智云視圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容