Hace unos días se celebró FICOD (Feria Internacional de Contenidos Digitales), en la cual Tecnilógica tuvo un papel destacado por las distintas propuestas de innovación que mostró. En concreto, presentamos un proyecto en el que estábamos metidos desde hace algún tiempo. Se trata de un dispositivo de reconocimiento facial basado en Arduino y codificado con Processing. Para los “menos puestos”, Arduino es una plataforma de hardware libre consistente en una placa con un microprocesador y unos puertos de entrada/salida.

¿Qué elementos utilizamos para la realización de nuestro reconocimiento facial?

  • Placa Arduino Mega 2560
  • Sensor Shield V1.0
  • 2 Servos que harían la función de varillas
  • 1 Botón para sacar la foto
  • 1 Webcam
ArduinoMega2560_R3_Front_450px

(Imagen: arduino.cc)

Durante la realización de las pruebas se nos quemó uno de los servos. ¡Horror! Bueno, no tanto. Gracias a este despiste nos dimos cuenta de que no se pueden tener conectados 2 servos a la placa si la fuente de energía es un cable USB conectado a un PC, así que para arreglar este desaguisado añadimos a la placa un shield al que conectar los 2 servos y el botón que sacaría la foto, además de una fuente de alimentación conectada a la red eléctrica.

¿En qué consiste esta locura?
A través de la webcam nos sacamos una foto y con Processing y el api de reconocimiento facial obtenemos nuestra edad, nuestro sexo, si tenemos los ojos cerrados, si estamos sonriendo o si llevamos gafas. ¡Lo que viene siendo un oráculo, vamos!

¡El oráculo se ha pasado tres pueblos con mi edad, así que dime cómo funciona!
La mecánica es simple. Una vez que te haces la foto, entra en acción Processing. La foto capturada se trata y se escala de la forma más realista posible para poder enviarla al api de reconocimiento facial, el cual tratará la foto y devolverá una serie de parámetros definidos.

Vale, y entonces, ¿cómo se mueven las varillas?
Aquí es cuando entra en acción el Arduino. Para mover las varillas tenemos que poner en comunicación los datos de Processing y Arduino. Esto es posible gracias al puerto serie.

Dentro de Processing tenemos que definir un puerto serie al que le enviaremos los datos que nos devuelve el api de reconocimiento. Para nuestro proyecto hemos usado los datos de la edad y del sexo. Hay que decir que al puerto serie se le pasa un carácter cada vez que queremos comunicarnos con el Arduino, para lo cual transformamos los datos de sexo y edad en caracteres entendibles por el Arduino.

Utilizamos los valores decimales de los números y las letras.
Por ejemplo: para el sexo transformamos el valor devuelto en 0 y 9. El 0 corresponde al sexo hombre y el 9 al sexo mujer. Para la edad, la transformación se hizo con el valor decimal de las letras y una escala predefinida.

En resumen, por el puerto serie estamos enviado, por ejemplo, los siguientes valores:

  • 0A
  • 0F
  • 9A
  • 9F

Para poder mover las varillas de los servos, debemos escribir un código a través del software del Arduino que esté escuchando a través del puerto serie lo que le estamos enviando. Lo que hace este código es transformar los valores que llegan de Processing en un ángulo X en cada uno de los servos para señalar el sexo y la edad que el api de reconocimiento facial nos ha devuelto.

Así pues, este es el experimento que hemos llevado a la feria, el cual ha sido todo un éxito.

Y recordad, ¡el oráculo no miente!