2 de enero de 2011

Aprendiendo OpenCV - Vision de maquina con las librerias OpenCV



El libro "learning OpenCV" de es el primer referente cuando se quiere aprender visión artificial y procesamiento digital de imágenes haciendo uso de herramientas libres. Aunque es un libro excelente y muy recomendado, a mi parecer puede llegar a ser complicado para muchas personas que no tienen mucha experiencia en programación en lenguajes como C o C++. Ademas existe otra gran dificultad y es el idioma en el que esta, ya que no todas las personas que desean aprender a usar OpenCV pueden leer fluidamente en ingles, lo cual hace mas pronunciada la curva de aprendizaje.

La elección de Python como lenguaje de programación para el trabajo con OpenCV esta justificada desde dos puntos. uno es la facilidad de aprendizaje que esta respaldada por un sintaxis clara y limpia (Algunos llegan a llamar a Python como pseudo-codigo ejecutable) y segundo, el soporte oficial de OpenCV a Python desde la versión 2.1.

Aun no lo he comprobado pero al parecer la principal desventaja de trabajar con Python en aplicaciones de procesamiento digital de imágenes es su velocidad, ya que al ser un lenguaje interpretado no posee la misma velocidad de ejecución que un lenguaje compilado como lo es C++. Aun así, es mas rápido que el ToolBox de procesamiento digital de imágenes de MatLab.

En la pagina http://www.aishack.in/2010/02/why-opencv/ , se hace un paralelo entre el uso de OpenCV y MatLab para llevar a cabo procesamiento digital de imágenes, voy a hacer una breve explicación de las razones que el autor presenta:

ESPECIFICIDAD:

OpenCV fue hecho con el fin de disponer de librerías para facilitaran el trabajo en visión artificial especialmente en tiempo real, por lo que cada una de sus funciones están dirigidas hacia este fin. Por otro lado, MatLab es bastante genérico, sus aplicaciones se encuentran en los campos de la economía, la biología, la medicina, la ingeniería, etc.

VELOCIDAD:

Como lo dije anteriormente, en muchas aplicaciones de procesamiento digital de imágenes, en especial las que son en tiempo real, la velocidad de ejecución es un factor importante a tener en cuenta. Cuando se quiere obtener el mayor rendimiento es aconsejable desarrollar los programas en lenguajes de bajo nivel C. Aun así, si comparamos la velocidad en general de Python con la de MatLab, aun siendo ambos lenguajes compilados, Python se lleva el premio. En resumen, Python combina la facilidad y velocidad de desarrollo que brinda MatLab con la optimización de OpenCV.



EFICIENCIA:

MatLab es un programa que consume demasiada memoria, por lo que correr aplicaciones de visión de maquina en tiempo real es bastante ineficiente. Aunque en los computadores actuales que cuentan con grandes cantidades de memoria y velocidad de procesamiento, esto ya no es un problema tan serio, sigue siendo un factor a tener en cuenta.

Ademas de los puntos que expone la pagina, puedo agregar otro mas.

COSTOS Y DOCUMENTACIÓN:

los costos que acarrearía la compra de una licencia de MatLab son demasiado altos para cualquiera de nosotros. Como un gran punto a favor, OpenCV es totalmente gratuito y libre al igual que Python. Lo que las convierte en herramientas ideales para el desarrollo de proyectos tanto estudiantiles como profesionales. Aunque OpenCV sea gratuito, no quiere decir en lo absoluto que sea menos profesional que el toolbox de MatLab. En contra parte, la documentación de MatLab es mucho mas extensa y precisa como la de cualquier software propietario, aun así, no des merita para nada la documentación oficial de OpenCV y la ayuda que siempre están dispuestos a brindar los usuarios en los foros de OpenCV.

_________________________________________________________________________

8 comentarios:

  1. Vaya, que bueno que estás escribiendo un Blog sobre el tema. Hay mucha información en ingles, pero tener información en español ayuda a que quienes no les gusta leer ingles se animen.

    ResponderEliminar
  2. buenas! me acabo de cruzar con el blog...

    esta muy bueno, mas de todo que estoy buscando un buen lenguaje para usar con opencv para mi proyecto final.

    por fin encuentro tutoriales en español...

    muchas gracias

    Saludos

    ResponderEliminar
  3. Gracias por los comentarios... Para mi, python es un excelente programa para trabajar OpenCV por la facilidad de aprendizaje y la extensa lista de librerías para python disponibles para aumentar su funcionalidad.

    Saludos

    ResponderEliminar
  4. Rafael, por las dudas no conoceras de alguna libreria para poder crear un ejecutable de mi programa python+opencv??

    porque asi no tendria que estar instalando opencv en toda maquina donde quiera correr mi programa

    Saludos

    ResponderEliminar
  5. La libreria por excelencia para generar ejecutables en python es py2exe... La verdad no la he probado pero creo que no habria problemas para usarla con opencv.

    Si puedes dale un vistazo y me cuentas los resultados.

    Saludos

    ResponderEliminar
  6. Hola de nuevo, en cuanto al py2exe, no me anda muy bien...

    pero bueno, ya me las arreglare.

    he avanzado un poco mas en mis estudios de la libreria y me preguntaba si por casualidad no conoces alguna forma "rapida" de reconocimiento de objetos.

    Veras, estoy desarrollando un soft que a travez de la cam me identifique ciertas posiciones de las manos ( por el momento la palma y el puño). la cuestion es que al hacerlo con 2 haar cascades distintas me esta creando un delay importante, no conoces otro metodo (mejor) que pueda utilizar??

    Gracias

    ResponderEliminar
  7. Buenas... existe algun libro en español?
    gracias

    ResponderEliminar