martes, 25 de noviembre de 2014

OpenCV y Python II (Seguimiento de objeto por color)



Hoy vamos a aprender a seguir un objeto de un color determinado y en directo usando OpenCV.
Recordad, lo importante es entender el concepto, y para ello antes voy a explicar el procedimiento que vamos a usar para ello.

  1. Obtenemos la imagen de nuestra webcam.
  2. Convertimos esa imagen a el formato de color HSV (Matiz, Saturación, Brillo)
  3. Especificamos un rango de color para crear una plantilla, de blanco o negro, 0 y 1, verdadero falso... etc. ( para ello nosotros utilizaremos barras de configuración )
  4. Localizamos en la ventana el lugar que ocupa ese color en ese frame
  5. Dibujamos un circulo en esa posición.

De la libreria OpenCV usaremos estas nuevas funciones:

- cv2.createTrackbar ('Titutlo', 'ventana', rango inferior, rango superior, variable temporal).
Crea una barra deslizante.

- cv2.cvtColor (imagen, Tipo de conversion) Convierte la imagen de una paleta de colores a otra
- cv2.inRange(imagen, Rango min, Rango max)
- cv2.moments.
Datos sobre la posicion de un objeto donde:
    -m00 -> Area de blanco
    -m01 -> Posicion x
    -m10 -> Posicion y

- cv2.erode -> erosiona la imagen para eliminar puntos erroneos
- cv2.dilate -> dilata los pixeles detectados
- cv2.circle (imagen, posicion, color, tamaño de la linea)

El codigo fuente de la practica comentado.




import numpy as np
import cv2

def nothing(x):
    pass
# Creamos una variable de camara y asigamos la primera camara disponible con "0"
cap = cv2.VideoCapture(0)
cv2.namedWindow('Configuracion')

# Crearemos los controles para indicar el color que seguiremos

cv2.createTrackbar ('H min', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('H max', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('S min', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('S max', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('V min', 'Configuracion', 0,256,nothing)
cv2.createTrackbar ('V max', 'Configuracion', 0,256,nothing)

# Iniciamos el bucle de captura, en el que leemos cada frame de la captura
while(True):
    ret, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #Convertimos imagen a HSV

    # Asignamos las variables del rango de color que seguiremos
    Hmin = cv2.getTrackbarPos('H min', 'Configuracion')
    Hmax = cv2.getTrackbarPos('H max', 'Configuracion')
    Smin = cv2.getTrackbarPos('S min', 'Configuracion')
    Smax = cv2.getTrackbarPos('S max', 'Configuracion')
    Vmin = cv2.getTrackbarPos('V min', 'Configuracion')
    Vmax = cv2.getTrackbarPos('V max', 'Configuracion')

    # Aqui mostramos la imagen en blanco o negro segun el rango de colores.
    bn_img = cv2.inRange(hsv, np.array((Hmin,Smin,Vmin)), np.array((Hmax,Vmax,Smax)))

    # Limpiamos la imagen de imperfecciones con los filtros erode y dilate
    bn_img = cv2.erode (bn_img,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),iterations = 1)
    bn_img = cv2.dilate (bn_img,cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)),iterations = 1)
    # Localizamos la posicion del objeto
    M = cv2.moments(bn_img)
    if M['m00']>50000:
        cx = int(M['m10']/M['m00'])
        cy = int(M['m01']/M['m00'])
    # Mostramos un circulo verde en la posicion en la que se encuentra el objeto
        cv2.circle (frame,(cx,cy),20,(0,255,0), 2)


    # Creamos las ventanas de salida y configuracion
    cv2.imshow('Salida', frame)
    cv2.imshow('inRange', bn_img)

    if cv2.waitKey(1) & 0xFF == ord('q'): # Indicamos que al pulsar "q" el programa se cierre
        break

cap.release()
cv2.destroyAllWindows()


Al ejecutarlo tendremos 3 pantallas, una con las barras de configuración, otra con la imagen en blanco y negro, y la captura de la imagen. En la imagen de abajo vereis un pequeño ejemplo visual de su funcionamiento.
Hay que tener en cuenta en el proceso de configuracion que hablamos de rangos, osea que el maximo debe ser superior que el minimo, si no, no veremos nada.

viernes, 21 de noviembre de 2014

OpenCV y Python I (Instalación y ejemplo)

El contenido de este blog normalmente gira entorno a la idea de realizar un proyecto robótico, algo que he buscado desde que de pequeñito vi la peli de Cortocircuito, es una de esas cosas que forman parte de la lista de "Cosas que debo hacer antes de morir"


Y claro, mi hipotético futuro superrobot tiene que ver y entender según que cosas, como llamarme papá al verme... ahí es cuando entra OpenCV, una librería de visión artificial que empezaremos a utilizar con estos tutoriales.

En este post, aprenderemos a instalarla en Python y dejarla lista para usar, y ya de paso cargaremos un ejemplo de los que lleva para comprobar que funciona.


lunes, 17 de noviembre de 2014

5 aplicaciones web que deberías conocer

Hoy os presento una serie de herramientas para trabajar online que nos sacan de algún apuro, y haciendo alusión con el post anterior, nos impide que con las prisas descarguemos cualquier software y con ello llenemos nuestro pc de basura.


  • CloudConverter, convierte archivos de audio, vídeo, documentos e imágenes a otros formatos directamente desde esta web.
    Nos permite convertir el formato de un archivo desde URL, de nuestro PC o desde nuestro Dropbox.
  • ClipConverter, descarga videos y musica en multiples formatos, desde webs como YouTube, MySpace, Metacafe, Veoh..

  • Easel.ly, crea tus infografias desde esta web. Nos proporciona herramientas suficientes para crear un diseño muy profesional, plantillas gratuitas, una gran selección de imágenes predefinidas a las que podemos añadir las nuestras, diferentes estilos de texto y herramientas de edición y dibujo, todo esto con una interfaz muy limpia y atractiva.
  • Awwapp.com, una pizarra virtual muy sencilla en la que podremos hacer nuestros esquemas como si de la pizarra del cole se tratase, lo más interesante, pues que podemos compartir la pizarra en directo y que nuestro compañero dibuje también. Muy útil para jugar al 3 en raya... aunque seguro que hay alguien que le da usos más profesionales.
  • Soundation, ahora le toca al sonido, si supiera algo de componer bases de canciones probablemente le daría algo de utilidad a esta web, por el momento seguiré jugando a componer ruiditos en mis ratos de ocio-aburrimiento. Pues este tiene muchas opciones, una gran librería de sonidos gratuitos, teclado, posibilidad de grabar voz, y efectos.

martes, 11 de noviembre de 2014

Un poco de seguridad y limpieza

Seguro que a más de uno le ha pasado, nos damos cuenta de que hemos instalado un malware y buscamos una herramienta en Internet para eliminarlo, nos descargamos una que nos promete limpiar nuestro PC, el del vecino y a Maroto el de la moto... Lo único que conseguimos es empeorar la situación, los ciberdelincuentes saben que buscaremos eso, y crean herramientas falsas de limpieza ocultas tras este software.

A continuación os presento una serie de herramientas gratuitas para mantener nuestro PC limpio de virus, malware y basura innecesaria.
Pero antes os voy a dar unos pequeños consejos para ahorrarnos más de un disgusto:

- Mantened siempre vuestras aplicaciones actualizadas a su ultima versión, las actualizaciones no son sólo mejoras del software, también son mejoras a nivel de seguridad, solucionan grietas que pueden comprometer gravemente nuestra privacidad aunque ese software en concreto no contenga información privada.

- Mirad siempre lo que instaláis, leed bien durante el proceso de instalación y desconfiad SIEMPRE de la opción instalación rápida, o mejor dicho desconfiad de los instaladores de terceros como por ejemplo Softo... y compañía.

- No descargueis software pirata, la mayoría de ocasiones encontraremos su equivalente en software libre.

Y después de esto, lo prometido:

 -Anti-Malware (Malwarebytes): Nos busca y elimina el malware que encuentre en el sistema.

 -CCleaner: este limpia el PC de archivos innecesarios y nos limpia el registro de windows, guardad            siempre una copia de seguridad.

 -Antivirus AVG: Un antivirus muy potente, y gratuito.