Siempre creciendo, siempre aprendiendo. Cultura maker.

¡Buenas!. En esta ocasión, vamos a hacer una aproximación, MUY, MUY, MUY SUPERFICIAL a Open CV, una librería sobre visión computerizada inteligente que me tiene enamorado desde que me acerqué a ella por primera vez. 

 

Open CV es software libre (Open Source Computer Vision), y dispone de interfaces para utilizarlo en lenguajes C, C++, Java y Python (este último es el que vamos a utilizar nosotros).

logoopencv

Este software está enfocado al tratamiento inteligente de imagen y de video, y según su página de referencia (http://opencv.org) está fuertemente enfocado a aplicaciones en tiempo real, es decir, está optimizado para un funcionamiento eficiente y rápido, sin requerir apenas tiempo de computación de datos (signifique eso lo que signifique)

 

 

En nuestro experimento, nosotros vamos a hacer un programa en Python que siga la siguiente cadena:

  1.  Al arrancar el programa, se conectará a la webcam y le asignará una ventana en el escritorio que reflejará el video capturado.
  2. En cuanto aparezca un rostro en pantalla, el programa lo localizará y le asignará unas coordenadas x,y en pantalla.
  3. Transformará dichas coordenadas x, y a dos valores angulares que corresponderán a las posiciones de los servos de la base y el brazo principal de nuestro brazo robótico (para seguir dichas coordenadas x e y)
  4. Comunicará dichos datos mediante el puerto serie a nuestra Arduino, que inmediatamente los escribirá en los valores de ambos servos, provocando que el brazo robot se coloque en la posición especificada.

En suma, y como una imagen vale algo más que mil palabras, queremos ir consiguiendo efectos parecidos a éste:

 

 

 

¿Qué?. ¿Parece divertido?, ¡lo es y mucho!. ¡Eso sí, puede resultarte complicado al principio!, ¡vamos allá!

 

Trabajando con Python

 

En primer lugar, repetirte que nosotros vamos a trabajar con Python, concretamente en Windows 7 (sólo excepcionalmente, ¿eh?, es que no teníamos Linux a mano en estos días), y concretamente con la versión 2.7. No es objeto de este artículo, que de por sí acabará siendo bastante largo, explicarte los intríngulis de la introducción a este lenguaje de programación, así que tendrás que buscar tus propias fuentes por Internet. Como ayuda, ésta página me ha parecido un buen primer paso.

 

Instalando la librería OpenCV en Python para Windows

 

Hay que decir que sobre instalación de OpenCV en castellano existen ahora mismo muchos y muy buenos tutoriales. A los linuxeros (como yo) les recomiendo particularmente la página de Robologs, que trata no sólo éste, sino muchos otros temas relacionados con Robótica, Arduino y Raspberry Pi, entre otros. Yo lo recomiendo muy particularmente. De hecho (justo es reconocerlo), también en esta misma página tratan este tema, si bien desde un enfoque bastante distinto (pero lo recomiendo igualmente; los chicos de Robologs son unos estupendos ingenieros y divulgadores).

 

Pero ya hemos dicho que vamos a trabajar en Windows, así que, ¿qué hacemos para instalar esta librería?. Pues ir a la sección de DOWNLOADS en la página del proyecto, http://opencv.org

 

descargaOpenCV

 

 Escogemos la versión para Windows, que en el momento de escribir este artículo va por la versión 3.2, y nos lleva a la página de SourceForge en la que está alojado el archivo (118 MB, eso sí). Aunque es un archivo *.exe, en realidad nos encontramos ante un autoextraíble de tipo 7zip que nos preguntará dónde puede extraerse. Le indicamos la ruta que deseamos y esperamos a que termine de extraerse (447 MB, aviso. No es para discos duros muy petados).

 

En realidad, ocupa tanto espacio porque en este momento contamos con TODAS las librerías y utilidades disponibles no sólo para PYTHON, sino también para Java, C y C++. En realidad no necesitamos todo. Una vez hayamos terminado nuestro experimento, podríamos borrar esta carpeta, si necesitamos espacio.

 

Bueno, a lo que vamos. Sólo necesitamos un archivo, que se llama cv2.pyd  y que se encuentra en la ruta /carpetaextraida/opencv/build/python/2.7/x86/cv2.pyd o /carpetaextraida/opencv/build/python/2.7/x64/cv2.pyd (depende de la arquitectura de tu equipo operativo). Tienes que hacer una copia de dicho archivo a /rutadePython2.7/lib/site-packages.

Así, si has instalado tu entorno Python en la ruta por defecto, al acabar, deberías tener un archivo llamado cv2.pyd en C:/Python27/lib/site-packages

 

¿Cómo sé si lo he hecho bien?

 

Eso se comprueba rápido. Desde Inicio->Todos los programas->Python 2.7 activa la GUI de Python (IDLE). Cuando se abra la consola, limítate a escribir:

 

[code]import cv2[/code]

 

Si no da ningún mensaje de error, significa que vamos bien.

 

De momento voy bien y estoy animado, ¿qué viene ahora?

 

Para empezar, vamos a hacer nuestro propio "HOLA MUNDO". Para empezar, necesitarás (creo que era obvio desde el principio) cualquier tipo de webcam conectada a tu equipo. Desde la GUI  de Python, crea un archivo nuevo donde volcarás este código:

 

 

#Necesitas las librerías cv2 (la de openCV) y también la de numpy (utilizada por la anterior)

import numpy as np
import cv2

#Creamos un objeto que iniciará la captura de video en la primera entrada disponible (la 0)

cap = cv2.VideoCapture(0)
#Iniciamos un bucle continua
while(True):
    #Dos objetos irán grabando las imágenes del objeto cap
    ret, frame = cap.read()

    # Especificamos el tipo de color (existen decenas) que queremos mostrar de la captura de frame y lo asignamos a un objeto que llamamos marco
    marco = cv2.cvtColor(frame, cv2.COLOR_RGB2RGBA)

    # Mostramos el marco de ventana con el título "Hola Mundo" con el objeto "marco" dentro
    cv2.imshow('Hola Mundo',marco)

    #el procedimiento waitKey comprueba si se ha pulsado la tecla 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Si se ha roto el bucle, procedemos a destruir la ventana y finalizar el programa
cap.release()
cv2.destroyAllWindows()

Una vez grabado y ejecutado tu código, tu sonriente cara aparecerá en tu ordenador, algo así como esto:

tutoopencv1

Nota: no hace falta salir así de feo. Un rostro estándar debería ser suficiente para esta primera práctica.