¿Buen lenguaje para la visión por computadora?

28

Estoy tratando de implementar un sistema de recuperación de imágenes basado en contenido, pero antes de hacerlo, me gustaría obtener una visión general de algunos lenguajes de programación adecuados para esta tarea (tener buenas librerías y demás).

¿Alguien sabe algunos buenos idiomas y librerías para ese tipo de tarea? ¿Qué pasa con Python o Java?

Mejor

jstr
fuente
El alcance es un proyecto académico ;-) lo siento por no decir eso!
jstr
1
Trabajé durante ~ 3 años en un grupo de visión por computadora para un inicio de software. Utilizamos python + scipy / numpy para crear prototipos rápidamente y C ++ para el código de producción. boost :: python wrappers para C ++ pesado ayudó con la portabilidad. BLAS y LAPACK utilizados para cosas numéricas pesadas.
wim
2
@wim: tu comentario habría sido una excelente respuesta, con un poco más de detalle sobre por qué usaste esos idiomas para las diferentes fases de desarrollo.
Mark Booth
1
Puede usar Matlab u Octave para la creación rápida de prototipos y luego convertirlos a C ++ con la ayuda de kits de herramientas como Armadillo (para álgebra lineal) y MLPACK (para aprendizaje automático y reconocimiento de patrones). Armadillo usa BLAS y LAPACK internamente (igual que Matlab). También puede mezclar el código Matlab / Octave con el código C ++ a través de la interfaz mex de Armadillo.
mtall

Respuestas:

35

Quizás pueda ser más específico sobre el alcance y la escala de su trabajo (¿proyecto académico? ¿Producto comercial de escritorio o móvil? ¿Proyecto comercial basado en la web?).

Algunas recomendaciones y comentarios:

  • Matlab es común en el mundo académico y bastante bueno para bosquejar / validar ideas. Tendrá acceso a un gran cuerpo de código de otros investigadores (en CV y ​​aprendizaje automático); La creación de prototipos y la depuración serán muy rápidos y fáciles, pero lo que haya desarrollado en este entorno será difícil de poner en producción. Dependiendo de lo que esté haciendo su código, es posible que tenga problemas de memoria / rendimiento (hay situaciones en las que no puede describir lo que quiere hacer en términos de las primitivas de Matlab y tiene que comenzar a hacer bucles en píxeles y Matlab es un lenguaje interpretado que no es ayudando en este contexto). La interacción con bases de datos, servidores web, etc. no es fácil, a veces imposible (no obtendrá un programa de Matlab para convertirse en un servidor Thrift llamado por un front-end web). Costos $$$.

  • C ++ es lo que se usa para muchos sistemas de CV de grado de producción (piense en algo a la escala de la búsqueda de imágenes de Google o Streetview, o en muchas aplicaciones comerciales de robótica). Buenas bibliotecas como OpenCV, excelente rendimiento, fácil de poner en un entorno de producción. Si necesita hacer aprendizaje automático, existen muchas bibliotecas (LibSVM / SVMlight, Torch). Si tiene que recurrir al código de "bucle en todos los píxeles", funcionará bien. Fácil de usar para codificar los sistemas / capas de almacenamiento necesarios en un sistema de recuperación a gran escala (por ejemplo: un mapa de hash en disco muy grande para almacenar un hash de función de mapeo de índice invertido en imágenes). Cosas como Thrift / Message Pack pueden convertir su programa de recuperación en un servidor RPC al que puede llamar un front-end web. Sin embargo: no es muy ágil para la creación de prototipos, bastante terrible para probar nuevas ideas, tiempo de desarrollo más lento; y poner en manos de programadores inexpertos podría tener problemas de rendimiento y / o inestabilidad difíciles de rastrear.

  • Python es de alguna manera un punto medio entre ambos. Puede usarlo para la computación numérica de estilo Matlab (con numpy y scipy) + tiene enlaces a bibliotecas como OpenCV. Puede hacer cosas de sistemas / estructura de datos con él y obtener rendimientos aceptables. Existen bastantes paquetes de aprendizaje automático, aunque menos que en Matlab o C ++. A menos que tenga que recurrir al código de "bucle en todos los píxeles", podrá codificar casi todo lo que podría haber hecho con C ++ con una relación de rendimiento de 1: 1.5 a 1: 3 y una relación de 2: 1 a 10: 1 del tamaño del código fuente (discutible). Pero dependiendo del éxito de su proyecto, habrá un punto en el que el rendimiento será un problema y cuando la reescritura en C ++ no sea una opción.

pichenettes
fuente
44
Además, Matlab es muy fuerte en documentación, a diferencia de Python.
Andrey Rubshtein
1
¿Qué hay de C? Ese es mi lenguaje de referencia cuando tengo dudas.
Zetta Suro
10

Especialmente porque su proyecto es académico, Mathematica es un sistema de software muy bueno y apropiado. Mathematica 8 viene con un conjunto integral de características para el procesamiento de imágenes, álgebra lineal, números, GPU, etc. También es un sistema simbólico que muchas veces puedo obtener soluciones de forma cerrada para ecuaciones, bastante útil para tareas de visión por computadora. Mathematica también puede comunicarse con Python, C, C ++, Java, .NET, ..., código.

Matthias Odisio
fuente
5

Si se trata de un proyecto académico, definitivamente debe usar Matlab y, más específicamente, Image Processing Toolbox y Computer Vision System Toolbox. Le tomará órdenes de magnitud menos tiempo para crear prototipos y evaluar algoritmos en Matlab que en C ++.

Incluso con la interfaz de Python, OpenCV es mucho más difícil de usar que Matlab, y si realmente tiene que hacerlo, puede llamar al código C o C ++ desde Matlab a través de mex.

Dima
fuente
4

Para un sistema de recuperación de imágenes. Tendría el código del lado del cliente y del lado del servidor. El lado del servidor puede estar en Python o C / C ++. OpenCV es tu mejor opción aquí. Tiene ambas interfaces python y C ++. Para el lado del cliente, creo que es mejor usar Java.

nav
fuente
3

El mejor lenguaje para la visión por computadora es C ++. Aunque su mayor inconveniente es que es más difícil lograr lo que quieres. OpenCV es la mejor biblioteca para visión por computadora que existe, pero puede hacer lo mismo con matlab o python.

Echa un vistazo aquí .

omg_img
fuente