[AI開發]目標跟蹤之計數

基於視頻結構化的應用中,目標在通過跟蹤算法後,會獲得一個惟一標識和它對應的運動軌跡,利用這兩個數據咱們能夠作一些後續工做:測速(交通類應用場景)、計數(交通類應用場景、安防類應用場景)以及行爲檢測(交通類應用場景、安防類應用場景)。我會寫三篇文章依次介紹這三個主題。html

(1)目標跟蹤之速度計算算法

(2)目標跟蹤之計數跨域

(3)目標跟蹤之行爲檢測ide

後面會陸續添加連接。spa

本篇文章以交通類應用場景爲例,介紹車輛斷面計數方法。3d

 

人工計數方式code

設想一個場景,你蹲在地下通道旁邊,要統計穿過這條通道最近5分鐘的人流量,你實際的作法是什麼?目光是停留在一我的身上,從TA進入通道直到離開嗎?固然不是,由於這樣的話你根本沒有那麼多雙眼睛。正常人會在通道中某個位置想象出來一條虛擬分界線,目光緊盯這條線附近區域便可,有人跨線計數就加一。他們是不會關注這條直線兩邊稍遠區域的目標,由於那裏有什麼、有多少目標都不會影響最終的計數結果。視頻

如上圖,對於A區域和B區域範圍內的目標,觀察者是不須要考慮的,只有通過黃色虛擬計數線的目標纔會歸入計數範疇。在A和B區域出現的目標停留、調頭等都不影響最終的計數結果。htm

 

自動計數原理blog

自動計數原理其實跟人工計數一致,計數算法應該一樣假設出一條虛擬的分界線,目標穿過這條虛擬的分界線時,總計數加一。前面提到過,目標通過跟蹤算法處理後,會獲得一個惟一目標標識和對應的運動軌跡座標點集合,經過這兩個數據能夠很快判斷某個目標是否穿越某條直線。2D平面中判斷一個點(X,Y)在一條直線(X1, Y1)(X2, Y2)左側仍是右側的算法很簡單,下面是對應代碼:

 1 // check if point at one side of line
 2 bool LeftOfLine(Point p, Point p1, Point p2)
 3 {
 4     if (p1.X == p2.X)
 5     {
 6         return p.X < p1.X;
 7     }
 8 
 9     if (p1.Y == p2.Y)
10     {
11         return p.Y < p1.Y;
12     }
13 
14     if (p2.X < p1.X)
15     {
16         Point tmp = p2;
17         p2 = p1;
18         p1 = tmp;
19     }
20 
21     int ret = (p2.Y - p.Y) * (p2.X - p1.X) - (p2.Y - p1.Y) * (p2.X - p.X);
22     return ret < 0;
23 }    

上面代碼能夠判斷點P是否在P1和P2組成直線的左側,若是是返回True,不然返回False。(直線左側和右側並不太恰當,在實際使用過程當中,若是P1和P2已經肯定,該方法返回True表明點在直線的一側,返回False表明點在直線的另外一側)。目標剛出現時,咱們經過以上方法判斷它在直線的某一側(方法返回結果爲A),目標在移動過程當中,會不斷獲得新的位置點(軌跡點集合中最新的一點),咱們仍是經過以上方法來判斷目標在直線的某一側(方法返回結果爲B),若是A!=B,說明目標跨越了直線,此時計數應該加一。已經參與計數的目標設置一個Flag,後面再也不參與計數邏輯。

下面給出5種狀況,說明自動計數邏輯中,目標參與計數和不參與計數的規則:

(1)理想狀況下,目標從監控畫面底部P1進入時,便可被檢測算法檢測到,並被跟蹤算法跟蹤到,以後連續跟蹤,直到離開監控區域,從P2處消失。目標跨域虛擬計數線(圖中紅色虛線),計數生效。

(2)檢測算法準確性不高,目標到特定位置P1才被檢測到,直到離開監控區域,從P2處消失。目標跨域虛擬計數線,計數生效。

(3)檢測算法準確性不高,目標還未跨越虛擬計數線就不能被檢測到了。計數不生效。

(4)檢測算法準確性不高,或者跟蹤算法準確性不高,目標雖然被跟蹤到,可是跟蹤到的軌跡並非連續的,而且軌跡恰好在虛擬計數線那裏斷掉了。計數不生效。

(5)檢測算法準確性不高,目標軌跡沒有跨域虛擬計數線,這個狀況跟(3)一致。

注意,以上舉例都是假設目標從監控畫面底部進入視野(去向),當目標從監控畫面頂部進入視野時(來向),狀況相似。

 

影響自動計數準確性的因素

根據前面的討論,其實影響自動計數準確性的因素很好概括:

(1)檢測算法準確性。目標若是還未跨越虛擬計數線時,檢測算法就檢測不到該目標了,那麼計數確定丟失;

(2)跟蹤算法準確性。跟蹤算法效果很差時,目標軌跡不連續,極可能恰好在虛擬計數線那裏斷掉;

(3)虛擬計數線的位置。虛擬計數線不能太遠,不少檢測算法對遠處的小目標檢測效果不理想;固然也不能太近,咱們在計數時,爲了過濾錯誤的檢測目標,要求必須保證目標軌跡點的數量要大於某個值,好比目標在跨越計數線時,要求目標軌跡點集合中的點數量大於25(必須被連續跟蹤超過1秒,假設FPS爲25),若是虛擬計數線太近,目標從監控畫面下方進入時而且速度很快,那麼它不會被連續跟蹤超過1秒。

以上是目標跟蹤中關於計數的詳細說明,有問題留言私信皆可。

相關文章
相關標籤/搜索