基於視頻結構化的應用中,目標在通過跟蹤算法後,會獲得一個惟一標識和它對應的運動軌跡,利用這兩個數據咱們能夠作一些後續工做:測速(交通類應用場景)、計數(交通類應用場景、安防類應用場景)以及行爲檢測(交通類應用場景、安防類應用場景)。我會寫三篇文章依次介紹這三個主題。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秒。
以上是目標跟蹤中關於計數的詳細說明,有問題留言私信皆可。