Calculando la distancia y el movimiento

Esto es algo que puede resultar interesante por dos razones:

  • Al robot le puede interesar saber a qué distancia te encuentras
  • Nuestro programa de detección de emociones funciona óptimamente para un rango de distancias, y por tanto queremos indicar al usuario dónde ha de situarse

DETECCIÓN DE DISTANCIA

Parece algo en principio difícil y uno se pregunta cómo podrá realizar esta función con una cámara de fotos, ¿verdad? Pues es tremendamente sencillo. Veamos la idea:

Las imágenes como hemos visto anteriormente tiene dos parámetros que son width y height que indican su altura y anchura en pixels. Con ello podemos hallar el área en pixels, y sencillamente se comprueba que al acercarte a la cámara, las imágenes serán mayores, y al alejarte las imágenes serán menores, ya que la cara ocupará más en en primer caso y menos en el segundo dentro de la imagen global que saca la cámara.

Así con una simple regla de tres podemos hallar la distancia, relacionándola con el área de la imagen de la cara, y determinaremos una serie de rangos según lo que valga este área. Hay que indicar que esto es así con la resolución de la cámara que usamos, pero habría que probarlo para otras cámaras. Para probar los rangos, habrimos un fichero, nos vamos acercando y alejando y vemos los valores que se muestran en el fichero del área de la imagen. El área por tanto es areaDist=(imgCut->width)*(imgCut->height). Los rangos que determinamos con este proceso son los siguientes:

  1. Demasiado cerca. areaDist>25000
  2. Distancia óptima para la detección de emociones. 8000<areaDist<25000
  3. Distancia lejana para la detección de emociones  4500<areaDist<8000
  4. Distancia muy lejana para la detección de emociones  (prácticamente ni detecta caras) areaDist<4500

En realidad, lo que hacemos no es verlo en cada captura de la cámara, sino realizar una media de las últimas 20 capturas y ver lo que ocurre. Así podemos saber a qué distancia se encuentra el posible jugador.

DETECCIÓN DE MOVIMIENTO

Una vez tenemos la distancia es un proceso sencillo, y puede quedar muy bien, ya que nos dice si el usuario se está acercado o alejando de la cámara. Tenemos el estado actual de distancia y lo guardamos antes de actualizarlo otra vez en una variable que sea estado antiguo, de forma que comparando estas dos variables, vemos si el usuario se acerca o se aleja o se a quedado quieto en una zona. Los estados van del 1 al 4 como han sido indicados anteriormente, es decir,  1 es el más cercano y 4 el más alejado.  De esta forma si la resta del estado actual y el antiguo es mayor que 0, nos estamos alejando, si es menor, nos estamos acercando y si es igual nos hemos quedado quietos.

Esto ya puede indicarle al robot si el usuario está yéndose, acercándose y así ver si obedece sus peticiones en caso de llamarle a jugar, o si no lo hace.

El estado cero lo reservamos para el principio, de forma que si es cero, no realizamos la comparacíon porque no existe estado antiguo.

RESULTADO

El resultado, además de ser positivo en el sentido de que tenemos informacíon de la distancia a la que se encuentra el usuario y si se está acercando o alejando, nos permite no confundirnos con los clasificadores, ya que tendremos en cuenta sus valores solamente cuando el usuario se encuentre en la zona óptima, que será lo que el robot en principio le indicará que haga al usuario. De esta forma filtramos posibles errores.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: