Detección de objetos con OpenCV SVM

No pude encontrar buenas explicaciones en un lugar en Internet. Hay demasiadas cosas y en vez de descubrir qué hacer, me confundo más.

Mi objetivo: Crear una aplicación de Android que detecta objetos en tiempo real con la cámara (mis objetos son volante y un neumático de automóvil).

Hasta ahora he probado el clasificador haar, pero fue difícil de entrenar, tomó mucho tiempo y no podía entrenarlo correctamente así que decidí buscar otra manera de lograr mi objetivo.

Ahora me enteré de los detectores de funciones y el entrenamiento SVM. Mis preguntas son:

1: ¿Qué algoritmo debo utilizar (SURF, ORB, FREAK, etc.)?

2: ¿Qué opinas de HOG + Bag-Of-Words?

3: ¿Diría usted cómo entrenar el SVM o dar un enlace si tiene? – No encontré ningún tutorial sobre esto. Sigo buscando, pero mi tiempo es limitado y decidí preguntar.

4: ¿Qué algoritmo dará los mejores resultados?

5: ¿Debo implementarlo en nativo con el Android NDK o no habrá una diferencia tan grande con la implementación de Java?

Si tiene tutoriales o referencias, sírvase agregarlos a su respuesta o en los comentarios. Lo siento por la larga pregunta, como he dicho mi tiempo es limitado (es un proyecto de la escuela.) Y también creo que será bueno si la gente puede encontrar esas respuestas en un lugar. Apreciaré cada respuesta, aunque no sea una respuesta completa. ¡Gracias de antemano!

1: No hay un algoritmo óptimo para todos los casos, pero los algoritmos que se adaptan a ciertos casos muy específicos en función de los requisitos de la aplicación.

Puede probar SIFT y SURF que son los descriptores más populares pero no son muy eficientes (lentos) y requieren mucha memoria. Si la eficiencia es su objetivo, puede intentar descriptores binarios (por ejemplo , BREVE, ORB, BRISK, FREAK ) que son mucho más eficientes y requieren menos almacenamiento. Echa un vistazo a FAST detector también.

2: Bag-of-Words para problemas de clasificación de imágenes es un método para reconocer categorías de objetos dado un conjunto de imágenes de entrenamiento positivas que contienen una clase de objeto y un conjunto de imágenes de entrenamiento negativo que no.

Bag-Of-Words te proporcionará una representación vectorial de cada imagen de entrenamiento.

Después de conseguir esto tendrá que entrenar a un clasificador para discriminar los vectores correspondientes a positivo (volante y un neumático de coche) y imágenes de entrenamiento negativo. Puede utilizar un clasificador SVM para esto.

3: Usted tiene aquí un tutorial del enfoque completo (BOW + SVM) en OpenCV 2.3. Tendrá que hacer algunos cambios en el código, pero la idea general está ahí: http://www.morethantechnical.com/2011/08/25/a-simple-object-classifier-with-bag-of-words- Using-opencv-2-3-w-code /

Además, el tutorial de OpenCV para SVM : http://docs.opencv.org/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html

4: Como he dicho antes, no hay un algoritmo perfecto, así que no puedo contestar. Creo que después de tomar algunas pruebas con las alternativas que tiene en (1.) va a ser capaz de responder a nosotros. 🙂

5. Creo que deberías usar el Android NDK pero no sé mucho sobre el desarrollo de Android.

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

  • Cómo detectar los límites de una página de pasaporte con OpenCV?
  • Android4OpenCV: configuración de la resolución al inicio
  • Cómo ejecutar código OpenCV sin OpenCv Manager
  • Cómo configurar la cámara de OpenCV para mostrar la vista previa tanto en orientación vertical como en pantalla completa
  • Android Studio + Experimental Gradle Plugin + NDK + OpenCV: mostrando errores en opencv include statement
  • Error: el paquete android.hardware.camera2 no existe OpenCV
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.