1. 程式人生 > >opencv目標跟蹤概述和人臉跟蹤

opencv目標跟蹤概述和人臉跟蹤

概述

opencv內部實現了一些單目標跟蹤演算法,可以很方便的使用。

這裡說的目標跟蹤不是多目標跟蹤,往往是需要人工或程式給定初始目標位置。

資源及跟蹤演算法介紹

這個頁面介紹了幾個常用的跟蹤演算法:

  • BOOSTING Tracker:基於線上Adaboosting的跟蹤演算法,這個演算法也經常被使用 HAAR級聯的人臉檢測演算法使用。演算法比較老,效果一般,一般不推薦使用
  • MIL Tracker:原理與上面的很類似,區別在於除了當前位置,還把周圍部分割槽域作為positive example。導致跟蹤的目標經常不在正中間。這個演算法在部分遮擋下也有不錯的表現,在沒有KCF之前可以作為首選。缺點也有,不能從完全遮擋中恢復
  • KCF Tracker:全稱是Kernelized Correlation Filters,利用了上面兩個跟蹤演算法的一些原理。這個跟蹤器利用了這個事實:在MIL跟蹤器中使用的多個正樣本有很大的重疊區域。這些重疊的資料可以被這個跟蹤器有效利用,使跟蹤更快、更準確。綜合來說,速度和精度都比上面兩個好,但是完全遮擋後不可恢復。
  • TLD Tracker:TLD表示Tracking, learning and detection.就像名字裡說的,這個演算法把長期跟蹤問題分解為(短期的)三個子任務:tracking, learning, detection。這個跟蹤器的輸出會跳來跳去,好處就是可以在物體大小變化、移動和遮擋的情況下有不錯的表現,所以比較適合有遮擋的物體跟蹤。
  • MEDIANFLOW Tracker:這個跟蹤器在時間的前向和後向上做跟蹤。當物體於運動方向有規則和沒有遮擋時,它的效果是最好的。
In goturn.prototxt,
replace all "data1" to ".data1" & "data2" to ".data2"

親測有效,不過速度很慢,cpu上也就10fps.GOTURN對於外形、視角、光線的變化適應性較強,對於遮擋處理的不好。

對於人臉的跟蹤效果

測試物件為畫面中比較近的單個人臉,運動慢,有轉動,無遮擋和明顯光線變化。

重點考察KCF、MEDIANFLOW和GOTURN。

速度:MEDIANFLOW > KCF > GOTURN

精度:MEDIANFLOW > KCF > GOTURN

其實,在近場人臉場景下,MIL和KCF效果差不多,只是慢一點,跟蹤穩定性上還有點優勢。
最後選擇了MEDIANFLOW作為人臉跟蹤演算法。

原始碼