2010-02-02 66 views
34

我有一個靜止的相機,指向室內區域。人們會走過距離攝像機約5米的地方。使用OpenCV,我想檢測走過去的人 - 我理想的返回是一組檢測到的個人,邊界矩形。如何檢測和跟蹤使用OpenCV的人?

我看了幾個內置的樣品:

  • 的Python樣品都沒有真正適用
  • Ç斑點跟蹤樣品看起來很有希望,但不接受實時視頻,這使測試變得困難。它也是最複雜的示例,提取相關知識並將其轉換爲Python API存在問題。
  • C'motempl'樣本也看起來很有前景,因爲它可以根據後續視頻幀計算出輪廓。據推測,我可以使用它來找到強連通的組件,並提取單個斑點和邊界框 - 但我仍然試圖找出一種方法來識別在後續幀中發現的斑點作爲相同的斑點。

是否有人能夠爲此提供指導或示例 - 最好在Python

+2

+1大膽的努力。有興趣看看會發生什麼。 – 2010-02-02 23:51:51

+0

@Trent不知道你是否認真。 OpenCV沒有任何這樣的方法。 – 2010-02-03 09:05:37

+0

@尼克約翰遜,對不起,這是一個不好的幽默嘗試。能夠在真實世界的環境中檢測和跟蹤人員並不重要。克服的障礙很多,包括:不同的照明條件,障礙物,陰影去除等。 – Trent 2010-02-03 15:28:49

回答

27

最新的SVN版本的OpenCV包含基於HOG的行人檢測(無文檔)實現。它甚至配備了一個預先訓練好的探測器和一個python包裝器。基本用法如下:

from cv import * 

storage = CreateMemStorage(0) 
img = LoadImage(file) # or read from camera 

found = list(HOGDetectMultiScale(img, storage, win_stride=(8,8), 
       padding=(32,32), scale=1.05, group_threshold=2)) 

因此,您可以在每個幀中運行檢測器並直接使用其輸出,而不是跟蹤。

請參閱src/cvaux/cvhog.cpp爲實現和samples/python/peopledetect.py爲更完整的Python示例(都在OpenCV源)。

1

這與我們作爲計算機視覺課程的一部分所做的項目類似,現在我可以告訴你,這是一個難以正確解決的難題。

您可以使用前景/背景分割,找到所有斑點,然後決定他們是一個人。問題在於它不會很好地工作,因爲人們往往會一起走過去,彼此經過等等,所以一個blob可能很好地由兩個人組成,然後當他們走的時候,你會看到blob分裂和合並。

您將需要一些方法來區分一個blob中的多個人。這不是問題,我希望任何人都能夠在單個SO帖子中回答。

我的建議是潛入可用的研究,看看你是否能找到任何東西。考慮到存在這樣做的產品,問題不是不可解決的:奧托立夫有一種產品可以在汽車上使用紅外攝像頭檢測行人,我還看到其他產品處理計數進出商店的客戶。

+0

實際上我並沒有太在意在一個'blob'中識別多個人 - 我是更關心定位活動的斑點並找到它們的邊界框和質心。我希望有人能夠簡單地提出OpenCV中可用的一系列算法。 :) – 2010-02-03 11:55:21

4

這顯然是一項不平凡的任務。你將不得不看科學出版物的靈感(Google Scholar是你的朋友在這裏)。下面是一篇關於人體檢測和跟蹤的文章:Human tracking by fast mean shift mode seeking

+0

正如我所評論的,我不需要確定它們是人類 - 我只需要隔離移動的斑點並追蹤它們。 – 2010-02-14 14:32:06

5

尼克,

你在找什麼不是人檢測,但運動檢測。如果你告訴我們更多關於你想要解決/做什麼的事情,我們可以更好地回答。 無論如何,有很多方法可以進行運動檢測,具體取決於您將如何處理結果。最簡單的是差分法,然後是閾值法,而一個複雜的可能是適當的背景建模 - >前景減法 - >形態學運算 - >連通分量分析,如果需要則進行斑點分析。下載opencv代碼並查看示例目錄。你可能會看到你在找什麼。另外,還有一本關於OCV的奧雷利書。

希望這會有幫助, Nand