Visión Computacional

Publicado en

Autor

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 al mismo nivel que el ser humano es un problema complejo. Sin embargo, ha habido avances considerables a lo largo de los años.

Del procesamiento de imágenes a la visión computacional

Durante la década de los 1970s se dieron los primeros avances significativos en el campo de análisis de imágenes por computadora. Resaltan los siguientes trabajos::

  • Azriel Rosenfeld es uno de los pioneros en este campo, su trabajo se enfocó principalmente en el desarrollo de técnicas empíricas basadas en criterios matemáticos para representar objetos físicos por medio de un conjunto de discreto de datos.

  • Otro enfoque fue el propuesto por Waltz y Mackworth en 1975, reduciendo el alcance del problema 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. Aunque este enfoque fue útil para experimentar, dadas sus restricciones no se pudo llevar a mundos complejos.

  • Por su parte, el trabajo de Berthold Horn se enfocó en establecer modelos de cálculo que expresan la formación de imágenes 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. 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:

  1. Procesamiento de nivel bajo. Se extraen propiedades como orillas, gradiente, profundidad, textura, color, etcétera.

  2. Procesamiento de nivel intermedio. Agrupa elementos de nivel bajo para obtener contornos y regiones con el propósito de segmentar.

  3. Procesamiento de alto nivel. Consiste en la interpretación utilizando modelos y/o conocimiento del dominio del problema.

Experimentando con OpenCV

Actualmente, una de las tecnologías más usadas para visión computacional es OpenCV.  Esta es una librería publicada bajo licencia BSD que está disponible para una gran variedad de sistemas operativos y tiene 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, entre otros.

A continuación explicaré como instalar un ambiente de desarrollo para visión computacional con OpenCV y Python.

En este caso, Python es una excelente opción de lenguaje de programación por ser un lenguaje de código abierto, multiplataforma, con una sintaxis intuitiva, una curva de aprendizaje corta y un amplio ecosistema de bibliotecas. En caso de que no tengas Python instalado, puedes obtenerlo en https://www.python.org/downloads . Procura usar una versión 2.7.x de Python (al momento de este artículo la versión más reciente de esta rama es la 2.7.13) ya que si usas una versión 3.6.x tendrás problemas de compatibilidad cuando trates de usarlo con las otras herramientas que recomiendo en este artículo.

Si quieres utilizar un editor de código, personalmente me gusta LiClipse, pero en gustos se rompen géneros así que utiliza tu preferido.

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 extiende el soporte para vectores, matrices y funciones matemáticas de alto nivel. La forma más sencilla de instalar numpy es por medio de la utilería pip. Si trabajas en Windows, como yo, recuerda agregar 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 la línea de comandos:

pip install numpy

Si todo sale bien obtendrás un mensaje confirmando que numpy se instaló exitosamente.

Ahora vamos a instalar OpenCV. Si usas Windows, para instalar OpenCV debes descargarlo de http://opencv.org/releases.html donde encontrarás un ejecutable de Windows. Este archivo es un paquete que descomprime OpenCV en la carpeta que elijas. Una vez hecho esto, entra a la carpeta que se creó y localiza el archivo cv2.pyd bajo la ruta build/python/2.7/x64  (el x64  ruta es suponiendo que tu sistema operativo sea de 64 bits, que es lo más probable). Ahora copia el archivo cv2.pyd a la carpeta lib/site-packages de tu instalación de Python.

Si usas Linux, puedes instalar OpenCV del repositorio de paquetes de tu sistema operativo. En el caso de OSX, lo más sencillo es instalar OpenCV por medio de Homebrew (tienes que habilitar el repositorio homebrew/science).

Para verificar que nuestra instalación de OpenCV funciona correctamente hagamos un pequeño programa. Crea en tu computadora una carpeta donde pongas un archivo de imagen, y crea un programa python con el código mostrado en el listado 1.

Listado 1. Prueba de opencv

Reemplaza “carro.jpg” por el nombre de archivo de tu imagen (recuerda incluir la ruta en caso que tu imagen esté en una imagen distinta a tu programa).

Si todo está bien, al ejecutar tu programa se desplegará una ventana con tu imagen, tal como se muestra en la figura 1.

img4.png

Figura 1. Ejecución de programa con OpenCV

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.

Te comparto algunas recomendaciones para continuar en tu exploración:

  • Puedes tener problemas al querer usar PIP, verifica que estén bien las variables de entorno en tu sistema operativo.

  • 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.

  • En http://opencv.org/links.html puedes encontrar varios tutoriales e información de referencia sobre OpenCV.

  • Cuando trabajas con dispositivos como la RaspBerry tu código será un poco distinto. No pretendas probar sin tener el hardware, inicia tu código y pruebas hasta que lo tengas y te evitarás re-trabajo.

 

Bio

Ana Luz Loyo Páez es Ingeniero en Sistemas Computacionales (UNIVO) con Maestría en Comercio Electrónico (ITESM). Actualmente es Coordinadora de contenidos en Software Guru, y catedrático en la Universidad Veracruzana. Además es desarrolladora, instructora y asesora de TI y Negocios Electrónicos freelance.  TW @ana_loyo