2016-01-26 27 views
0

在我的項目中,我需要識別歐元硬幣,有人建議我使用OpenCV分類器和訓練算法。所以我下載了OpenCV的3.1版本,並試圖開始。我想知道一些我不明白的教程(我所遵循的是來自OpenCV官方文檔的this,thisthis)。OpenCV:如何使用opencv_createsamples和opencv_traincascade

首先,生成並考慮負樣本是強制性的嗎?如果是的話,我應該認爲哪種「對象」是否定的?在我的應用程序中,我應該檢測並識別歐元硬幣,所以...應該從任何其他隨機類型的對象創建底片嗎?其次,我的應用程序應該識別2歐元,1歐元和0.50歐元的硬幣。那麼,我應該用opencv_createsamples生成多少個正面樣本?每種硬幣(正面和背面)一個或所有3種硬幣都有一個獨特的硬幣?如果我理解的很好,那麼我會在iOS應用項目中包含一些.xml文件,對吧?

最後,detectMultiScale()不僅會檢測硬幣,而且它的種類?這就是爲什麼我認爲我需要的不僅僅是一個分類器文件,以便從右側區分和區分硬幣的價值。

希望我沒有寫出太寬泛的問題,感謝您的關注。

+1

我認爲負面樣本是必須的。我對歐元硬幣不熟悉,但'detectMultiScale()'不太可能識別硬幣類型,即使您單獨訓練它們並使用3種不同的探測器 - 它們只是形狀相似(圓?)。對於那個任務,你需要訓練一個物體識別。 –

+0

@QuangHoang謝謝你的回答。是的,所有歐元硬幣都是圓形的,非常相似。 Ehm,什麼是對象識別?你能聯繫我一個很好的教程嗎? –

+1

這與面部識別相似。通常你需要訓練一個分類機器,無論是PCA,SVM還是神經網絡。 OpenCV有[face recogintion](http://docs.opencv.org/2.4/modules/contrib/doc/facerec/facerec_tutorial.html),可能與您的硬幣數據集一起使用。 - 還要注意的是,他們確實有一個機器學習模塊,其中包含通用分類器的更一般的實現。 –

回答

0

關於負面(或背景)示例,請考慮在哪個背景下歐元硬幣將在您的程序必須處理的圖像中。例如,如果他們與非歐元一起在桌子上,則使用桌面(沒有硬幣)作爲底片。如果你想發現他們對那裏的人拿着他們的圖像,用雙手底片等

關於第二個問題 - 我也在尋找此建議。我想這取決於你需要識別的功能的複雜性以及背景的複雜性。我成功地訓練了一個具有40個圓圈正面的分類器,但完全沒有使用60(空中)牛圖像來訓練分類器。

關於你的第三個問題,我認爲(未測試!),這取決於你的識別需求:如果你只是想找到一個歐元硬幣,你會沒事的訓練一個分類器來自所有硬幣的圖像所有面。如果您想區分硬幣,請從各個方面創建具有各種硬幣圖像的不同分類器。如果你甚至需要區分前面和後面,你必須爲每個硬幣的每一面創建一個分類器。

0

是,陰性樣品是強制性的,再次是的,你可以有任意物體的圖像,但你需要有很多很多,所以我建議使用視頻,並提取其框架或網站,如this

下一個,你需要爲您的硬幣提供正面樣本。積極硬幣的數量越多,結果就越準確。你可以做的一件事就是拍攝2-3張你的硬幣圖像,每次疊加時改變一個角度,將它們強加在你的負面圖像上。這樣,如果您有500張負片圖像和2張正片圖像,則疊加後您將獲得1000張正片圖像。 opencv_createsamples腳本負責所有這些。