Visión Computacional, ¿qué es y por dónde comenzar?


Últimamente he estado trabajando con un proyecto que demanda cierto conocimiento sobre visión computacional y quiero compartirles algo que les va a ayudar a iniciar a experimentar.

¿Qué es la visión computacional?

Trata de emular en las computadoras la capacidad que tienen nuestros ojos. Es decir, trata de interpretar las imágenes recibidas por dispositivos como cámaras y reconocer los objetos, ambiente y posición en el espacio.

Lograr tal interpretación tal como el ser humano significa resolver un problema complejo. Sin embargo, ha habido avances considerables a lo largo de los años.  

En un inicio, dada la complejidad del sistema de visión humana se intentó abordar estos problemas de formas más directas a partir de tres enfoques:

  1. Comandado por las ideas. Azriel Rosenfeld, comenzó el desarrollo de técnicas empíricas basadas en criterios matemáticos que aproximaban estos problemas de estimación de bordes y líneas usando distintos criterios. Tuvo el inconveniente de no poder proponer métodos para la evaluación de los distintos algoritmos. Sin embargo ha seguido su desarrollo con notable éxito en algunos casos.
  2. En un segundo enfoque se profundiza el problema reduciendo su alcance a un mundo de bloques blancos mate iluminados sobre fondo negro. Los bloques podían tener cualquier forma, siempre que todas sus superficies fueran planas y todos sus bordes rectos. Este modelo (Waltz 1975/Mackworth 1973) desafortunadamente no se pudo llevar a mundos complejos por lo que se tuvo que estudiar un nuevo enfoque.
  3. Este (Horn 1975,1977) realizó trabajos pioneros sobre la formación de la imagen. Se establecen modelos de cálculo que expresan la formación de la imagen a través de ecuaciones diferenciales que relacionan los valores de intensidad de la imagen con la geometría, la reflectancia de la superficie y el punto de vista del observador actuaban de forma conjunta para crear los valores de intensidad medidos en la imagen. La idea era que debía existir un nivel adicional de comprensión en el que el carácter de las tareas de procesamiento de la información llevadas a cabo durante la percepción se analicen y comprendan de modo independiente a los mecanismos y escrituras particulares que los implementa en nuestros cerebros.

Ahora bien, debemos considerar que la visión computacional y el procesamiento de imágenes son cuestiones diferentes.  El procesamiento de imagen trata sobre cómo mejorar una imagen para su interpretación por una persona mientras que la visión computacional trata de interpretar las imágenes por la computadora.

La visión computacional se puede dividir en 3 grandes etapas:

  • Procesamiento de nivel bajo. Se extraen propiedades como orillas, gradiente, profundidad, textura, color, etc.
  • Procesamiento de nivel intermedio. Agrupa elementos de nivel bajo para obtener contornos y regiones con el propósito de segmentar.
  • Procesamiento de alto nivel. Consiste en la interpretación utilizando modelos y/o conocimiento del dominio del problema.

Actualmente, para interpretar imágenes se requiere utilizar un conjunto de  herramientas de software que te explicaré cómo instalar y comenzar a utilizar, sin embargo recuerda que aunque son muy buenas no son las únicas.  

¿Por dónde comenzar?

La primera herramienta que necesitas es Python, el lenguaje de programación multiplataforma administrado por la Python Software Foundation. Posee una licencia de código abierto, que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1. Puedes descargarlo  directamente del sitio web https://www.python.org/.  Te recomiendo iniciar con Python como lenguaje de programación debido a que es un lenguaje sencillo y ágil, con una curva de aprendizaje muy corta y tiene una sintaxis muy intuitiva y versátil.

Ten mucho cuidado de descargar la versión Python 2.7.13 porque si descargas la última versión (Python 3.6.1) vas a tener problemas de compatibilidad cuando trates de usarlo con las otras herramientas que recomendaré a continuación.

A continuación, puedes usar un editor de código, mi recomendación es que del sitio web http://www.liclipse.com/ descargues LiClipse. Este editor de código soporta python y es bastante ligero, sin embargo no es la única opción.

El siguiente paso a seguir es la instalación de NumPy (en su última versión), un paquete fundamental de Python que contiene sofisticadas funciones y mayor soporte para vectores y matrices, funciones matemáticas de alto nivel.

Si trabajas en Windows como yo, te encontrarás que necesitas tener el comando PIP funcionando para poder instalar el .whl. Para esto necesitas agregar en la configuración del sistema las variables del sistema correspondientes a la ruta donde tienes tu archivo Python.exe y a la carpeta Scripts dentro de Python.

Hecho lo anterior solamente tendrás que ejecutar desde el CMD el comando: pip install numpy-1.12.1-cp27-none-win_amd64.whl con lo que, si todo sale bien obtendrás algo como:

Con esto ya casi terminas, lo siguiente es instalar OpenCV.

OpenCV, es una librería libre de visión artificial publicada bajo licencia BSD, es  multiplataforma; existen versiones gratuitas para varios sistemas operativos y más de 500 funciones que abarcan una amplia gama de áreas en el proceso de visión y reconocimiento de objetos, calibración de cámaras, visión estérea y visión robótica. Se puede utilizar con los lenguajes de programación Python, C++ y Java. Puede ser ejecutada tanto en ambientes de escritorio (Windows, Linux, Android, MacOS, FreeBSD, OpenBSD) y móviles (Android, Maemo, iOS). Debes descargar la versión más resiente de OpenCV del sitio web http://opencv.org y solo necesitas elegir en qué ruta se descomprimirá como en la siguiente imagen:

Hecho esto, debes ir a la siguiente ruta dentro de la carpeta de OpenCV y copiar el archivo cv2.pyd.

C:\opencv\build\python\2.7\x64

La ruta es porque mi SO es de 64. Este archivo lo pegarás en la carpeta de Python dentro de Lib\site-packages. Hecho esto estás listo para hacer una primera prueba, sigue los siguientes pasos:

  1. Crea una nueva carpeta en tu proyecto de Python
  2. Guarda en la carpeta una imagen
  3. Escribe el siguiente código:

Considera que la ruta que escribirás debe corresponder al nombre de tu carpeta e imagen que guardaste en ella.

  1. Ejecuta. Y… ¡voalá! Tendrás algo como esto:

Recomendaciones

Algunas recomendaciones adicionales que te puedo dar son:

  • Dependiendo el editor de código que uses será la configuración que necesites para trabajar en Python.
  • Puedes tener problemas al querer usar PIP, verifica que estén bien las variables de entorno en tu SO.
  • Cuando descomprimas OpenCV asegúrate de estar copiando el archivo correcto en  la ruta correcta porque si no lo haces bien, no reconocerá el import de cv2
  • Puedes omitir importar numpy, en este ejemplo lo agregué para verificar que todos marche bien al importarlo.
  • En la sección Links del sitio oficial de OpenCV ( http://opencv.org ) puedes encontrar información relevante para iniciar tus proyectos de desarrollo, hay vínculos a tutoriales y sitios web muy interesantes.

Teniendo todo esto instalado puedes comenzar a experimentar con el reconocimiento de imágenes.  Obviamente necesitarás más que esto pero el objetivo del artículo es que puedas realizar una configuración mínima necesaria para comenzar, suerte con tus proyectos.

¡Hasta la próxima!


Ana2lp

Acerca de Ana2lp

Estratega y Consultora en TI y Comercio Electrónico. Tecnología+Creatividad+Innovación. ¡La tecnología no duele! ¿Quieres que hable de algún tema? Escríbeme un correo ¡Recuerda, la tecnología no duele!