miércoles, 21 de noviembre de 2012

Magic Hand

Proyecto Final

Descripción del proyecto



Nuestro sistema consta de una aplicación adaptable a infinidades cantidades juegos, ya que con nuestro sistema se puede controlar en coordenadas x como y, esto se logra a través de nuestras manos pero sin tocar el teclado o raton, basta solo con colocar nuestra mano enfrente de nuestra camara y empezar a jugar sin necesidad de controles, palancas, teclas u otros objetos


Módulos mas relevantes


La forma en la que opera lógicamente hablando es la siguiente:






1.- Se captura una imagen a través de una cámara web


2.- Se pasa por una serie de "filtros" hechos por nosotros mismos, los cuales contienen restricciones de colores, convertirla en binaria, aplicarle umbral, entre otros.



3.- Se generan puntos externos de la imagen, los cuales por red compleja se saca el punto medio de la imagen.

3.- Se obtienen las coordenadas de los puntos. Y todo esto se realiza una y otra vez, es decir, cambia la imagen, se aplica filtro, puntos, centro, coordenadas, ...

4.- Estas coordenadas son aplicadas en el movimiento de cualquier juego, por ejemplo, el movimiento de la barra de este juego





Código relevante:


while 1: #Repeticion constante para recivir imagenes de la camara una y otra vez
            _,f = c.read() #Captura de la imagen
            .
            .
            .
            .
            .
            gray = cv2.cvtColor(f,cv2.COLOR_BGR2GRAY)#Filtros
            ret,thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)#Filtros
            fg = cv2.erode(thresh,None,iterations = 2)#Filtros
            bgt = cv2.dilate(thresh,None,iterations = 3)#Filtros
            ret,bg = cv2.threshold(bgt,1,128,1)#Filtros
            marker = cv2.add(fg,bgt)#Filtros
            .
            .
            .
            .
            .
            cv2.imshow('final',marker)#Imprecion de la imagen filtrada
            cv2.imshow('Original',f) #Imagen original
            .
            .
            .
            .
            .
            M = cv2.moments(marker) #Localizacion de puntos
            .
            .
            .
            .
            .
            x = int(M['m10']/M['m00'])
            y = int(M['m01']/M['m00'])
            print "Cordenada x: ",x #imprecion de coordenada x
            print "Cordenada y: ",y #imprecion de coordenada y




Herramietas pricipales:



Webcam: Dispositivo de entrada del juego que sirve para

lanzar las coordenadas hacia el juego, haciendo que este tome el patrón de la mano para guiarse.


›Python: Plataforma usada para diseñar el sistema, tanto en juego como en la aplicación de la web cam.


›OpenCV: Es la librería principal del programa ya que se utiliza para reconocer objetos, dependiendo del patrón que esté buscando.


›NumPy & ScyPy: Son librerías "complemento" si se les puede llamar así, de OPENCV las cuales ayudan al reconocimiento mas sencillo y especifico de patrones.


›PyGame›: Es una librería de python, como su nombre lo dice, está orientada al desarrollo de juegos y forma un papel de vital importancia en el proyecto.


Demostración:



No hay comentarios:

Publicar un comentario