2012-05-20 9 views
11

Estoy trabajando en el proyecto de la escuela y parte de él debe ser sobre la situación actual sobre las bibliotecas de visión por computadora para Android. Fui a él con gran entusiasmo porque la visión por computadora parece un tema fascinante, pero he estado buscando más de una semana y no encontré mucho. Me gustaría poder brindar información sobre las bibliotecas y sobre la comparación entre ellas.Android Computer Vision JavaCV OpenCV comparación FastCV

Voy a compartir lo que he encontrado hasta ahora.

OpenCV

  • parece como la más avanzada y los más populares.

  • proporcionan el mayor número de funciones

  • que tenía un problema con la compatibilidad hacia atrás

  • es rápido (al menos por lo que he oído, pero tengo cero información al respecto)

  • sí tiene mayor cantidad de libros sobre el tema (por lo menos para la versión C++)

JavaCV

  • es envoltura para alguna otra librería OpenCV incluyendo

FastCv

  • nuevo con Qualcomm detrás de él.

Wikitude

  • esto es más de realidad aumentada, pero en su núcleo sigue siendo equipo visión.

Como puede ver, tengo un poco de información al respecto y hacer mis propias pruebas para cada biblioteca va más allá de mis habilidades actuales de visión por computadora.

Saludos cordiales, Peter.

+1

Alguien más trabajó en un proyecto similar antes: http: //www.cs.brown.edu/courses/csci1290/results/final/sbnguyen/ –

+0

@SamuelAudet deberías poner eso como respuesta oficial para que yo pueda representarlo! :) – Peter

+0

@SamuelAudet ahora mirándolo Parece que la información en el enlace está desactualizada. – Peter

Respuesta

24

buena Básicamente hay dos opciones: OpenCV y FastCV

OpenCV es una biblioteca más maduro con mucha más funcionalidad que FastCV. Para muchas tareas de visión por computadora, puede encontrar solo la funcionalidad más básica en FastCV, mientras que puede tener casi todas las alternativas populares disponibles en OpenCV. Compruebe los detectores de funciones disponibles, por ejemplo. OpenCV tiene Harris, SURF, SIFT, FAST, etc. FastCV, por otro lado, solo tiene Harris y FAST. OpenCV contiene optimizaciones de hardware para diferentes HW, incluidas las computadoras de escritorio y los dispositivos informáticos móviles. La posibilidad de utilizar OpenCV en el escritorio le proporciona una opción de desarrollo más flexible, ya que puede ajustar y probar el código en una computadora de escritorio rápida antes de comenzar a trabajar en el desarrollo móvil. También OpenCV se considera como parte de a Khronos Computer Vision Group Proposal. Entonces, si esto se aprueba, OpenCV puede convertirse en la API estándar para visión artificial. Por lo que puedo ver, FastCV proporciona optimizaciones superiores para las CPU de Snapdragon. Esto podría jugar un papel importante en la decisión a corto plazo, pero estoy seguro de que OpenCV cerrará la brecha muy rápido, si es que hay alguno.

Si elige la ruta de OpenCV, entonces hay dos subrutas: OpenCV con Android NDK contra JavaCV con Android SDK. JavaCV es un contenedor de OpenCV basado en JavaCpp. JavaCV principalmente envuelve C API, aunque OpenCV también proporciona una API C++ orientada a objetos. La API de C++ maneja la liberación de la memoria no utilizada automáticamente, por ejemplo. Sin embargo, la API C (por lo tanto, JavaCV) requiere que manejes la liberación de imágenes no usadas manualmente. Además, cuando te enfrentas a un problema en JavaCV, es difícil abordar el problema, porque hay demasiados indirectos para verificar. Los problemas son más fáciles de localizar cuando usa OpenCV directamente. Sin embargo, en el caso de Android, la dificultad añadida de NDK no debe olvidarse.

Si está disponible la funcionalidad de OpenCV para la aplicación específica, y no se necesita un código de procesamiento de nivel de píxel personalizado, JavaCV es el camino a seguir. Sin embargo, si se requiere una cantidad considerable de código de procesamiento de imágenes personalizado, el código de Java lo ralentizará, y tendrá que cambiar a NDK, de todos modos. En este último caso, OpenCV es la alternativa para elegir.

+0

Gracias, vizier, esa fue la respuesta que estaba buscando más o menos. – Peter

+0

Por cierto, podemos usar JavaCPP en lugar de usar el NDK directamente. –

+0

Vale la pena señalar que SIFT y SURF están patentados y no son gratuitos para uso comercial. No sé, pero posiblemente es por eso que FastCV los omite. –

5

Para un proyecto basado en Android, es fácil comenzar con JavaCV. Contiene casi todas las funciones disponibles en OpenCV.

Pero no hay una gran cantidad de documentación sobre JavaCV, pero OpenCV sí. De modo que puede encontrar los métodos relevantes de la documentación de OpenCV y usarlos en JavaCV (los mismos nombres de métodos).

Hay un documento completo en here. Eso es discutir sobre cómo configurar JavaCV en eclipse - entorno android.

+1

Gracias por la respuesta, pero no estaba buscando una biblioteca para usar, pero como título dice que estoy buscando comparsión general. – Peter

7

Usaría OpenCV ya que es la mejor biblioteca de visión por computadora en este momento. Usted programará sus funciones en C++, y luego compilará la aplicación Android utilizando la biblioteca JNI.Tiene información sobre cómo hacerlo en el official documentation.

He trabajado con esta configuración y el rendimiento de OpenCV en android es realmente bueno. Notará beneficios si realiza algunas funciones en aritmética de punto fijo. suerte

+1

Hola @jav_Rock gracias por tu respuesta, pero como he mencionado anteriormente, realmente estoy buscando una comparación seria. – Peter

3

visor respondió bastante bien pero tengo la impresión de que su análisis tiene un error. Creo que no sabe que Opencv tiene una versión para Android llamada OpenCV4Android. Se trata de envoltorios de Java para la funcionalidad C++, lo que significa que puede evitar el uso de Android NDK y programar todo en Java. Esto haría que la biblioteca "no oficial" de JavaCV sea redundante, excepto por el hecho de que esta, además de incluir opencv, también envuelve muchas otras buenas bibliotecas de CV.

Editar:

Esto no cambia conclusiones acerca de recomendar visir OpenCV, en realidad se añade más puntos para elegirlo.

1

Hay una nueva opción para CV en Android, la Google Mobile Vision API. La API está expuesta a través de com.google.android.gms.vision y le permite detectar varios tipos de objetos (caras, códigos de barras y características faciales) dado un mapa de bits de imagen arbitrario.

0

Comience con OpenCV, y luego realice el puerto de funciones importantes como seguimiento de funciones, convoluciones, dilatar/erosionar y tal vez SVM. En el caso de compilar para Android, ajuste esas llamadas con #ifdef __ANDROID__ y simplemente llame al equivalente de FastCV. La abstracción es tu amiga

Cuestiones relacionadas