lunes, 17 de septiembre de 2012

Segundo Avance del Proyecto


1.- Resumen del proyecto:

Realizaremos un programa en Python capaz de reconocer una mano a través de una webcam conectada a la computadora donde se esta ejecutando el programa, dicha webcam estará en función durante todo el proceso del programa y estará actualizando constantemente la localización del objeto.


Este reconocimiento de la mano realizara la función de un control (semejante a la consola de videojuegos Wii o Kinect Xbox 360)  para una aplicación, que en nuestro caso sera un mini-juego, que tomara como datos de entrada las coordenadas de la localización del la mano, puño u objeto que partiendo los movimientos de coordenadas a la: Derecha, Izquierda, Arriba, Abajo (tomando como referencia el centro de la pantalla) para controlar así nuestro mini-juego.



Este tipo de programa puede ser utilizado en distintas áreas, como por ejemplo en las terapias, para poder estimular al paciente a mover la mano y que su terapia sea mas divertida, o también puede implementarse en el área de los videojuegos como lo realizo Wii y Kinect Xbox 360.

Aquí podemos observar como una nave es controlada por el puño a traves de una webcam, es un claro ejemplo de lo queremos realizar:



Este vendría siendo nuestro objetivo principal a alcanzar en el proyecto, si nos queda tiempo realizaremos que el mini-juego realiza acciones a traves de gestos que realiza la mano, por ejemplo, al levantar ciertos dedos el mini-juego tenga una acción

Aquí otro ejemplo de como el movimiento de la mano hace que se mueva el personaje y ademas realiza acciones segun el movimiento:




2.- Avance con respecto a la planeación:
Para presentar nuestro avances hemos utilizado el software grantt recomendado por la profesora de la clase.

Ha sido muy util este software ya que nos ayudara a organizarnos mejor y llevar un control sobre nuestros avances


A continuación se muestra el avance...













¿Que se ha hecho?

Lo que hemos realizado en relacion al avanze del proyecto vendría siendo mas que todo conoser mas el lenguaje en el que desarrollaremos el programa, ya que al principio tuvimos dudas acerca del lenguaje que utilizaríamos y empezamos a investigar sobre la facilidad de las librerías que nos ofresen cada uno y nos quedamos entre Java y Python, despues de ver tutoriales  y ejemplo de códigos de reconocimientos de objetos tomamos la decisión que nuestro lenguaje seria Python, y apartir de esa decisión nos dedicamos a conocer mas a fondo las herramientas y posibilidades que ofrece Python, para conocer mas que todo lo que podríamos llegar a hacer con ese lenguaje(no decir imposibles) antes de dar la propuesta formal de nuestro proyecto


¿Qué Falta?

Necesitamos comenzar en realizar el código, ya que el tiempo se nos vendrá encima. Para poder realizarlo hemos investigado sobre tutoriales que nos ayuden a mejor nuestro nivel de aprendizaje en el lenguaje python , así como también en buscar librerías que nos serán útiles para la realización de nuestro proyecto. Cada uno de nosotros por nuestra cuenta seguimos con la investigación, ya que cada uno colaboraremos en la realización del código. 

¿ Qué problemas se han presentado y cómo los has resuelto / piensas resolverlos?

Nuestro principal problema fue elegir el lenguaje el cual lo resolvimos investigando cual es el que mas se acomoda a  nuestras necesidades asi mismo cual es que nos ayudara a que nuestro proyecto se realice adecuadamente. Nuestro problema era que no nos decidíamos por usar java o python pero nuestro proyecto se adapta mas en usar el lenguaje python como la única opción de realizarlo.
Otro de los problemas que se ha presentado es aprender sobre el lenguaje ya que la mayoria de los integrantes del equipo no esta familiarizado con python , en algunos casos jamas lo han trabajo, lo cual hemos pensado en resolverlos en aprender el lenguaje por nuestra cuenta, ya sea con tutoriales, libros o algún curso que se pueda tomar.

Aquí unos tutoriales de los que estuvimos viendo:

  • Pagina donde te nos enseñaron tutoriales basicos de varios lenguajes que nos sirvio para escocer y descartar: Tutorial 1
  • En este otro lo estubimos observando al momento de decidirnos por Python: Tutorial 2
  • En este ultimo nos mostro un poco mas sobre reconocimiento ya enfocado a Python: Tutorial 3

3.- Lista Actualizada de Recursos y Herramientas:

Lenguaje:
Inicialmente habíamos pensado trabajar en el lenguaje Java, usando compiladores tales como NetBeans,  o Eclipse JDK. También habíamos planeado utilizar algo de Phyton, y habíamos considerado utilizar la librería OpenCV. Considerando el tipo de programa que desarrollaremos, el cual debe reconocer la mano del usuario e interactuar con ella, hemos decidido utilizar únicamente Python.

¿Por qué no seguir usando Java?
El proyecto que realizaremos, es un poco complejo, y Java es un lenguaje muy explicativo, y hace que los pseudocódigos usados sean difíciles de seguir, por lo tanto el código puede volverse difícil de revisar,  se volvería más largo.

¿Por qué usar Python y no otro lenguaje de programación?
Python es un lenguaje interpretado, es fácil de entender y se pueden desarrollar muchas cosas en él. Python puede manejar estructuras complejas en una forma eficiente y de manera que se hagan mas simples.

                           

            “Hacer las cosas fáciles muy fáciles, y las difíciles medianamente difíciles” - Python

Recursos:
Para reconocimiento, como lo habíamos mencionado en post pasados, usaremos la librería OpenCV, ya que facilita el trabajo y se usa en Python, además según nuestras investigaciones, se puede detectar la piel mediante el uso de Hue Saturation Value (HSV), que define color en términos de sus componentes. A continuación se presenta un video ejemplificando lo que se puede hacer con OpenCV, esto se relaciona a nuestro proyecto, sin embargo no es exactamente igual a lo que haremos. Clic AQUI para ver el video en youtube.


¿HSV…?
El color de piel humana se ha utilizado y ha demostrado ser una función eficaz en
muchas aplicaciones de detección de rostros por ende, se asume que será también una buena técnica para aplicar en nuestro proyecto, ya que a pesar de que no detectaremos rostros sino manos, al igual qe la cara, la mano es piel, y puede ayudar mucho. A pesar de que  diferentes personas tienen diferente color de piel, varios estudios han demostrado que  gran diferencia radica en la intensidad en lugar de en su crominancia.

Algunas Funciones
findContours
Es una librería de OpenCV que se utiliza en combinación con más funciones, precisamente para “Encontrar contornos” en este caso de la mano. Es útil porque debe distinguir que sea una mano y no otra parte del cuerpo la que mueva el juego.

cv2.approxPolyDP
Puede ser usada con la librería anterior para reconocer la mano.

Técnicas inteligentes
Redes neuronales artificiales: Podemos usarlas para que el programa “aprenda” a reconocer la mano, y no solo se guie por el color de la piel, ya que con la mano, será con la que el usuario ejecute la acción que llevará al programa a funcionar.


4.- Bosquejo de la solución:


Módulos mas importantes del proyecto

-Lenguaje Python.
Será un gran cambio respecto a proyectos de años anteriores ya que en otros cursos solíamos usar Lenguaje C, y para la programación orientada a objetos normalmente usamos Java, este cambio es debido a que el lenguaje Python contiene librerías que facilitarán el desarrollo de nuestro proyecto como lo es la librería OpenCV mediante la cual podemos detectar el color de piel mediante Hue Saturation Value. Esto simplificará el trabajo al momento de realizar el proyecto.

-Iniciación de la webcam y funcionamiento durante todo el proceso del programa.
Esto es un punto muy importante ya que sin esto nuestro programa no podría funcionar, es necesario que la webcam esté encendida siempre que el programa esté en ejecución y que funcione correctamente, ya que si no es así, podrían aparecer dificultades al momento de la ejecución del programa. También se tiene que tomar en cuenta si la webcam ya vendrá incluida en la computadora o se pueda traer una aparte, esto es para evitar fallos, es decir si una webcam llegara a fallar, tener otra disponible.

-Reconocimiento de la mano para realizar funciones.
Esto es en sí nuestro objetivo primordial del proyecto, ya que estamos apuntando primero a que nuestro programa reconozca por completo la mano del usuario, y no solo algunas características de ella como lo son el color de piel, para que, una vez que la haya reconocido poder hacer funcionar al programa mediante la mano. Para esto haremos uso de la librería OpenCV antes mencionada que nos será de gran utilidad.

-Coordenadas de localización de los movimientos de la mano ya sean: derecha, izquierda, arriba y abajo.
Esto con el motivo de situar la mano en el plano del programa, que no se pueda perder y que este siempre bien ubicada, para el caso de gestos con la mano, tener en cuenta los diversos movimientos que se pudieran presentar y la dirección de los mismos. Al igual que con las diferentes gesturas que el usuario podría hacer con su mano como lo son: cerrar el puño, abrir la mano completamente, señalar con sus dedos números como el 1, 2, 3, 4 o 5, hacer diferentes señas, etc.

-Implementación del mini-juego.
Es un objetivo secundario, no es necesariamente primordial como para realizarlo aún, tenemos algunas ideas del mismo, pero por el tiempo, quizá no lo podamos llegar a aplicar. Nuestra idea del mini juego sería para proporcionar ayuda a las personas que se encuentran en rehabilitación y así hacer la misma, mas amena y que no sea tan tediosa o aburrida, y que a la vez puedan ir mejorando día a día y recuperandose de cualquiera que haya sido su lesión.

-Control del mini-juego con el movimiento de la mano del usuario.
Este objetivo es más un complemento para nuestro proyecto para así demostrar el funcionamiento del mismo ya aplicado en un juego que nosotros mismos diseñariamos en base a ayudar a las personas que se encuentran en rehabilitación por alguna lesión, como ya habíamos mencionado, esto es aparte ya que nuestro objetivo principal del proyecto es, como ya dijimos, el reconocimiento total de la mano del usuario.







1 comentario:

  1. Bien. Sigan puliendo el diseño de solución y cuiden la ortografía.

    Resumen-- 10
    Avance-- 30
    Recursos-- 15
    Diseño de solución-- 35
    Organización y ortografía-- 8
    ================================
    Total: 98 (9.8 de 10)

    ResponderEliminar