10

Non sono riuscito a trovare spiegazioni valide in un punto su Internet. Ci sono troppe cose e invece di scoprire cosa fare, divento più confuso.Rilevamento oggetti con OpenCV SVM

Il mio obiettivo: (. I miei oggetti sono VOLANTE e una gomma di automobile) Creare un'applicazione Android che rileva gli oggetti in tempo reale utilizzando la fotocamera

Fino ad ora ho provato il classificatore Haar, ma è stato difficile per la formazione, ho impiegato molto tempo e non ho potuto allenarlo correttamente, quindi ho deciso di cercare un altro modo per raggiungere il mio obiettivo.

Ora ho scoperto i rilevatori di funzioni e l'addestramento SVM. Le mie domande sono:

1: Quale algoritmo dovrei usare (SURF, ORB, FREAK ecc.)?

2: Cosa ne pensi di HOG + Bag-Of-Words?

3: diresti come addestrare l'SVM o fornire un collegamento se lo hai? - Non ho trovato alcun tutorial su questo. Continuo a cercare, ma il mio tempo è limitato e ho deciso di chiedere.

4: Quale algoritmo fornirà i risultati migliori?

5: Devo implementarlo in nativo con Android NDK o non ci sarà una grande differenza con l'implementazione Java?

Se si dispone di esercitazioni o riferimenti, aggiungerli alla risposta o nei commenti. Ci scusiamo per la lunga domanda, come ho detto che il mio tempo è limitato (è un progetto scolastico) e penso anche che sarà bello se le persone trovino le risposte in un unico posto. Apprezzerò ogni risposta, anche se non è una risposta completa. Grazie in anticipo!

+0

"(i miei oggetti sono VOLANTE e una gomma di automobile.)" - e, secondo me, il problema maggiore. puoi rinegoziarlo? (Scuola-problema). raccontare mele dalle banane sarebbe uno scenario molto più amichevole. sai, che cosa significa "varianza di classe interna"? i tuoi post precedenti hanno mostrato che è dannatamente difficile trovare qualcosa come "il" volante. qui non andrà molto meglio, anche con algoritmi più sofisticati. – berak

+0

Sono sicuro che capisco esattamente quello che vuoi dirmi (forse perché le mie capacità di inglese non sono abbastanza buone). E no 'non so quale sia la varianza della classe interiore. – definera

+0

Inoltre, non ho ancora raggiunto il mio obiettivo perché sto usando OpenCV per la prima volta ed è difficile. – definera

risposta

8

1: Non esiste un algoritmo ottimale per tutti i casi, ma algoritmi che soddisfano determinati casi molto specifici in base ai requisiti dell'applicazione.

Si può provare vagliare e SURF che sono i descrittori più popolari, ma non sono molto efficienti (lento) e richiedono un sacco di memoria. Se l'efficienza è il tuo obiettivo, puoi provare i descrittori binari (ad esempio BRIEF, ORB, BRISK, FREAK) che sono molto più efficienti e richiedono meno spazio di archiviazione. Dai un'occhiata anche al rilevatore FAST.

02: Bag-of-Words per il problema di classificazione delle immagini è un metodo per riconoscere le categorie di oggetti in base a una serie di immagini di addestramento positive contenenti una classe di oggetti e una serie di immagini di allenamento negative che non lo sono.

Bag-Of-Parole ti porterà una rappresentazione vettore di ogni immagine di formazione.

Dopo aver ottenuto questo si dovrà addestrare un classificatore per discriminare i vettori corrispondenti al positivo (volante e uno pneumatico per auto) e le immagini di allenamento negativo. Per questo è possibile utilizzare una classe di classificazione SVM.

3: Hai qui un tutorial sull'approccio completo (BOW + SVM) in OpenCV 2.3.Avrai bisogno di apportare alcune modifiche nel codice, ma l'idea generale è lì: http://www.morethantechnical.com/2011/08/25/a-simple-object-classifier-with-bag-of-words-using-opencv-2-3-w-code/

Inoltre, il OpenCV tutorial per SVM: http://docs.opencv.org/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html

4: Come ho detto prima, non v'è nessun algoritmo perfetto, quindi non posso rispondervi. Penso che dopo aver fatto delle prove con le alternative che hai in (1.), sarai in grado di risponderci. :)

5. Penso che dovresti usare l'NDK di Android ma non ne so molto sullo sviluppo di Android.

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/android_dev_intro.html http://opencv.org/platforms/android.html

+0

Per prima cosa, grazie per la tua risposta dettagliata! E scond che vorrei chiederti è BOW + SVM il migliore o un buon approccio per raggiungere il mio obiettivo? – definera

+0

Come ti ho spiegato, è impossibile dirti se quell'approccio risolverà il tuo problema in modo efficace. In entrambi i casi la mia scommessa è che l'approccio BOW + SVM ti darà buoni risultati. Ma devi provare a confermare questo. – zedv

+0

In primo luogo, mi dispiace per questo continuo a fare domande, ma le cose non sono facili per me. Ho scoperto che non posso usare BOW con descrittori binari. Purtroppo SIFT e SURF non sono gratuiti ed è per questo che non voglio usarli. Non riesco a trovare come addestrare un SVM con funzionalità estratta FAST. È possibile? Hai qualche riferimento per farlo? Grazie mille in anticipo. (Forse se hai delle risposte a queste domande sarà bene se le aggiungi alla tua risposta) – definera

Problemi correlati