我目前正試圖通過opencv使用光流來實現人臉跟蹤。Opencv光流跟蹤:停止條件
爲了達到這個目的,我使用openCV人臉檢測器檢測臉部,通過調用goodFeaturesToTrack
來確定跟蹤檢測區域的功能,並通過調用calcOpticalFlowPyrLK
來操作跟蹤。
它給出了很好的結果。
但是,我想知道我目前正在追蹤的臉部何時不再可見(人離開房間,隱藏在物體或另一個人後面......),但calcOpticalFlowPyrLK
告訴我什麼它。
calcOpticalFlowPyrLK
函數的狀態參數很少報告有關被跟蹤功能的錯誤(因此,如果該人員消失,我仍然會有大量有效功能進行跟蹤)。
我試着計算每個特徵的方向向量,以確定面部每個特徵的前一幀和實際幀之間的移動(例如,確定臉部的某個點已經移動到左側這兩個框架),並計算這些向量的方差(如果向量大多不同,方差很高,否則不是),但它沒有給出預期的結果(在某些情況下很好,但在其他情況下不好)。
什麼可能是一個很好的條件來確定是否停止光流跟蹤?
我覺得像這些的一些可能的解決方案:
- 每個跟蹤功能的向量的距離(如果此舉是線性的,距離應幾乎相同,但方差如果事情發生了,距離將會不同)。
- 比較包含跟蹤要素的原始位置的區域的形狀和大小與包含當前位置的區域的大小。一開始我們有一個包含臉部特徵的正方形。但如果人離開房間,可能會導致形狀變形。
要完成您的答案,我已經實現了很多有趣的事情: 1.我的軟件能夠確定運動區域。所以,我放棄了那些不在這些動作中的點。這對減少點數很有用。 2.我正在檢查跟蹤點的bouding框的大小。如果它變形,我停止跟蹤。 3.我分析彼此之間每個跟蹤點的方向以檢測不一致。 –