2013-08-22 241 views
1

我目前正在進行人員檢測和計數項目。它基本上可以通過USB網絡攝像頭檢測現場的任何人,然後統計路過的人。目前,我的設置是:OpenGL人臉檢測

  1. OpenCV的2.4.6,使用檢測方法哈爾(浮點處理)
  2. ARM板與ARM A9四核心和Mali四核GPU

不幸的人頭上,處理時間不夠快,每幀70 - 100毫秒(14 - 10 fps),因此不會計算以正常速度或更快速度行走的人。瓶頸在於OpenCV HaarDetection方法,基本上每幀處理時間的90%被該進程消耗。

我試着在Haar旁邊使用另一個模型,這是基於整數處理的LBP模型,但到目前爲止,我的LBP模型並不令人滿意,我仍在努力創建新模型。此外,我嘗試使用TBB與OpenCV(原生在OpenCV中實現的多線程)但以某種方式導致Odroid崩潰,如果我不使用TBB,應用程序運行穩定。

我能想到的唯一優化就是利用板上的Mali GPU,使用修改後的HaarDetection重新編譯OpenCV以利用某些GPU處理能力。我的問題是,這是可以使用OpenGL庫嗎?我看到大多數OpenGL的例子都是渲染圖形,而不是處理圖像。

+3

今天大多數Mali四核處理器都是Mali-400 MP,它只支持OpenGL ES 2.0,並且沒有GPGPU api的說法。你可能有很多意志力和時間可能使用頂點/片段着色器將某些東西拼湊在一起,但它似乎很難實現(你不僅需要重寫算法,而且要以非常尷尬的分區方式重寫它)。拋出硬件或調整算法/改變你的方法。 – PeterT

+0

您可以嘗試使用latentsvm檢測器,但這意味着需要爲不直觀的人員培訓新模型。告訴我,如果你有興趣,我會提供更多的細節。 – GilLevi

+0

沒關係,有一個訓練有素的模特兒。 – GilLevi

回答

2

您可能會考慮的其他優化:
1.使用參數播放 - 縮放因子和最小窗口大小的微小變化都可以使您的算法更快。
2.嘗試使用不同的級聯
3.嘗試使用OpenCV構建參數 - WITH_TBB可能會幫助您(http://www.threadingbuildingblocks.org/)如果您的處理器支持多線程並且級聯可以使用多個線程(我認爲這可能 - 可能不會所有的時間,但至少有一部分可以)。請看一下ENABLE_SSE和ENABLE_SSE2。
4.搜索haar級聯探測器的一些其他實現或嘗試自己做 - 它可以使其更快,請參閱(文章和評論):http://www.computer-vision-software.com/blog/2009/06/fastfurious-face-detection-with-opencv/
5.如果您正在分析圖像序列檢查是否兩個連續的幀是相同/非常相似的 - 如果是這樣,您可以跳過當前幀的分析,因爲結果將是相同的(或非常相似)。我已經在我的BSc論文(使用720p網絡攝像機的簡單眼球記錄器)中使用了這個解決方案,並且它工作正常。
6.如上所述+僅在發生差異的地區進行搜索。
7.劃分你的圖像,例如16個矩形。檢查每個矩形中當前和前一幀之間的差異 - 如果一行或一列中的所有矩形幾乎與前一幀中的相同 - 不要分析此行/列(只將圖像的一部分傳遞給haar級聯 - 使用ROI) 。它應該給出相當好的結果並且提高速度,因爲人們會從框架的一側走到另一側 - 所有矩形在兩個連續幀之間改變的可能性很小。

+0

太棒了!期待着嘗試這些新想法。無論如何,我快速嘗試,也搜索: 3. WITH_TBB將導致我的應用程序崩潰在我的ARM板,但在PC中確定。使用Valgrind進行調試時停止了內核錯誤。 SSE和SSE2僅適用於英特爾系統,是嗎?我用ARM板 5.我用基於背景減法的運動檢測器,方法不適用是整個區域充滿了移動的人。更不用說背景減法和連接的組件消耗額外的時間。 無論如何,你的建議留下很多東西來嘗試和激勵我。謝謝! – bonchenko

+0

我遵循你的回答,根據膚色,調整參數檢測一些區域,並且fps從15變爲50!很好的答案,非常感謝 – bonchenko

0

您可以嘗試使用latensvm檢測器檢測人員(通過部件檢測)。幸運的是,有一個人訓練模型在這裏:

https://github.com/Itseez/opencv_extra/tree/master/testdata/cv/latentsvmdetector/models_VOC2007

它可能會更快然後HOG。

希望有所幫助。

+0

我曾在我的主機上試過HOG,但它比Haar慢了10倍。但在某些來源閱讀[鏈接](http://answers.opencv.org/question/12124/latentsvm-detector/)和[鏈接2](http://answers.opencv.org/question/8733/opencv- latentsvm-detector-too-slow /)表示OpenCV實現不適用於實時處理。儘管嘗試過LatentSVM,但很快就會嘗試。謝謝! – bonchenko