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).
- Android Marshmallow - Llamada a un módulo de biblioteca (biblioteca nativa) de otro módulo de biblioteca que se estrelló
- ¿Se puede utilizar un android.hardware.camera2.CaptureRequest con OpenCV?
- OpenCV + Eclipse + Android: Error org.opencv.video Video.java
- Comparar imágenes SIFT / SURF detalles en archivos .yml OpenCV?
- Uso de OpenCV en Java Camera2 API
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!
- Cómo detectar (contar) el cabello de la imagen con OpenCV?
- Explorador de documentos Android con opencv
- No se encontró el paquete de la biblioteca OpenCV
- ClassNotFoundException: android.hardware.camera2.CameraAccessException con OpenCV 3.1.0
- OpenCV se bloquea después de un corto período de tiempo en la aplicación para Android
- ¿Es posible hacer zoom y enfocar usando OpenCV en Android?
- Referencia indefinida a 'cv :: initModule_nonfree ()' En Android
- OpenGL ES 2 no funciona en Android API23
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
- Ejemplo complejo de ListView getItemViewType ()
- Android: ¿Cómo lograr el efecto de resplandor cuando presiona un elemento de lista con mucho tiempo?