2014-12-05 39 views
2

我必須創建一個Android應用程序,以識別相機中的某些物體(汽車方向盤,車輪)。我試着用哈爾分類器,但沒有成功,我耗盡時間(這是一個學校項目)。所以我決定尋找另一種方式。我發現了一些其他的方法來實現我的目標 - ORB。我發現我應該怎麼做this answer。我的問題是,事情搞糟了。你能給我一個循序漸進的回答:如何實現我給出的鏈接中的問題的答案:使用ORB逐步檢測物體

從提取特徵點到訓練KD樹並將它用於從相機。

獎金問題: 你可以給一個特徵點的定義嗎?這是我無法準確理解的。 使用ORB將檢測緩慢嗎?我知道OpenCV可以在原生Android中使用,不會讓事情變得更快嗎?

我需要儘快創建這個應用程序。請幫忙!

+1

特徵點是類別的「興趣點」,http://en.wikipedia.org/wiki/Feature_detection_%28computer_vision%29#Definition_of_a_feature - 可能相當於您的情況中的「像素」。 – zapl 2014-12-05 00:44:07

+0

另外,[這個問題]的答案(http:// stackoverflow。com/questions/14808429/classification-of-detectors-extractors-and-matchers/14912160#14912160)提供了一個相當不錯的描述符,匹配器和這樣的總結。它也給你一些很好的組合,如果你想嘗試一些其他的東西而不是ORB。 – TheOmegaPostulate 2014-12-09 04:43:35

回答

5

我目前正在開發一個類似的應用程序。我建議首先獲取某個參考圖像,原因如下:

  1. 如果您剛剛開始並且稍後可以更改,則更容易做到並理解。
  2. 對於android應用程序,您的處理能力有限,因此更多的圖像=較低的fps。

你應該看看OpenCV tutorials這是非常有用的。一旦閱讀了「OpenCV for Android SDK」部分並瞭解了三個教程,您可以輕鬆添加功能,以便分析視頻饋送。

我建議你做應用程序時,以下

的基本邏輯路徑是:

  1. 閱讀參考形象。
  2. 創建並使用您的FeatureDetector,DescriptorExtractor和DescriptorMatcher。
  3. 使用上述檢測關鍵點,然後描述關鍵點(前兩個,不要忘記將它轉換爲墊子,然後轉換爲灰度)。
  4. 每當您從相機中取出相框時,請重複第3步,然後比較圖像中的關鍵點(與第2部分的第3部分)。
  5. 使用結果來確定是否存在匹配(如果存在,則在其周圍繪製一個框或某物)。
  6. 獲取新框架。

嘗試使它適用於單個對象,然後再添加到其他對象中。您可以添加的另一件事是在開始時允許用戶選擇他們想要搜索的內容。

此外,ORB速度相當快,尤其是與SIFT和SURF相比。我在HTC One上獲得約3fps的參考圖像。

+1

非常感謝您的詳細解答。我有問不是3 fps太低的幀率?如果我用本地代碼編寫代碼,你也可以給出答案,不會更快嗎? – definera 2014-12-05 16:37:59

+0

這不是很好,但如果你只是爲了一個學校項目而做,它應該是足夠的。另外請注意,這是我獲得的最低幀頻,已經達到了20fps左右。這很大程度上取決於設備的處理能力和檢測到的功能數量(如果數量不多,則速度非常快)。 RE以原生寫作:我還沒有對此進行過任何實驗,所以我不能肯定地說,但我想它可能會(雖然我不知道多少)。 – TheOmegaPostulate 2014-12-07 22:42:28

+0

謝謝。我還有一個問題。如何區分方向盤和汽車輪胎?你知道方向盤是不同的,我能檢測出它們中的大部分嗎?如果我是方向盤,汽車輪胎,我只需要打電話。 https://www.youtube.com/watch?v=h2KHje-Pf10這裏的這個人可以發現不同的面孔,這些面孔並不是很不一樣,所以這給了希望。你會(如果可以的話)告訴我如何區分我的物體嗎? – definera 2014-12-08 22:49:15