viernes, 23 de abril de 2010

Pantalla multitáctil en acción

Bueno, ayer no tenía sueño, y como hoy no tenía que madrugar, aproveché que por fin tengo materiales y software, y preparé el primer experimento multitáctil en casa que funcionó a la perfección.

Ya hice una introducción sobre cómo funcionan este tipo de pantallas en la Introducción a las pantallas táctiles multipunto y también expliqué de modo resumido cómo funcionan las pantallas por plano láser.

Algunas cuestiones las volveré a repetir aquí para que queden claras.

La idea del invento es bastante sencilla, básicamente consiste en convertir una pantalla normal, o una superficie de proyección en una pantalla táctil capaz de reconocer varias pulsaciones a la vez. El iPhone, por ejemplo, utiliza tecnología capacitativa para detectar las pulsaciones y poder hacer esos gestos tan simpáticos para ampliar y reducir las fotografías.
La cuestión es que no tenemos la capacidad que tiene apple para fabricar ese tipo de pantallas y colocárselas a nuestra tele del salón o a la pantalla del ordenador.

Sin embargo, utilizando infrarrojos sí que podemos lograr esto con un equipo de lo más asequible.

La idea es relativamente simple. Utilizaremos una webcam apuntando a la pantalla (o a la superficie donde vayamos a tocar con los dedos). Esta webcam estará preparada para ver únicamente luz infrarroja. La luz infrarroja no puede verse a simple vista, de modo que todo lo que hagamos con ella es completamente invisible.
Por ejemplo, cuando vamos al cine a ver una película en 3D, nadie ve los flashes de luz infrarroja que le dicen a las gafas que tienen que cerrar uno u otro ojo. Tampoco vemos los pulsos de luz que emiten los mandos a distancia cuando cambiamos de canal en la televisión, ni vemos la línea de luz que detecta si estamos en la puerta del ascensor para que esta no se cierre y nos pille en medio.

Una vez que tenemos la cámara preparada, tenemos que conseguir que nuestros dedos brillen cuando toquemos la pantalla. La webcam registrará esos puntos luminosos, y después sólo tenemos que usarlos para controlar nuestros programas.

Hay varios sistemas para hacer que los dedos brillen al tocar la pantalla, pero el que utilicé yo es el denominado Plano láser.
Seguro que ya habéis visto más de un láser, sobre todo de los rojos. Emiten una luz muy concentrada (normalmente en un punto) y tremendamente potente.
A un láser se le puede añadir una lente que hace que en vez de dibujar un punto dibuje una línea.
Seguro que habéis visto en alguna película escenas parecidas, cuando llega algún tipo de robot y escanea un objeto, pasando una línea de luz por él. La idea es parecida.
El láser con la lente crea un plano de luz que no se ve, a no ser que algo lo atraviese, como por ejemplo un dedo.

Así que coloqué un láser infrarrojo con su lente en una esquina de la televisión, intentando que el plano de luz quedase paralelo al de la pantalla.

Este es el láser pegado en la televisión:

Es un láser infrarrojo de 780 nm (esto viene siendo como el tono de infrarrojo... como si fuese un infrarrojo clarito... no sé si me explico) Lo compré en eBay por unos 7 dólares. En la misma tienda compré también la lente para que dibuje una línea.

Lo alimenté con una fuente de alimentación de ordenador modificada que preparé hace poco para este tipo de experimentos.


La cámara que utilicé fue una PS3-Eye. La conseguí por poco más de 20€ y tiene unas características muy buenas. Las más importantes para este experimento es que tiene una respuesta muy rápida (se puede conseguir que grabe a 60 fotogramas por segundo) y tiene una sensibilidad muy buena a los infrarrojos.
El caso es que en general no interesa que las webcams capten infrarrojos, de modo que estas cámaras muchas veces llevan un filtro interno que bloquea ese tipo de luz.
Lo primero que tuve que hacer para adaptar la cámara fue quitar ese filtro, a base de cutter y algo de fuerza haciendo palanca.
Una vez eliminado el filtro la cámara ya capta infrarrojos a la perfección, pero como el filtro forma parte de la óptica, la cámara queda desenfocada sin él.
Con un poco de bricolaje conseguí enfocarla.
El siguiente paso es que la cámara capte únicamente los infrarrojos, y no la luz normal.
Para eso me compré un filtro que bloquea toda la luz visible por debajo de 720 nm.

El caso es que al hacer pruebas me di cuenta de que hay luz infrarroja por todos lados... el sol emite cantidad de luz infrarroja, y las lámparas halógenas... incluso la televisión emite infrarrojos. Eso hace que la webcam capte mucha luz, y en comparación los dedos no brillan tanto.
Lo que tendría que haber hecho es comprar un filtro que únicamente deja pasar un rango determinado de infrarrojos, para que además de bloquear la luz visible, me bloquease la luz infrarroja que no me interesa.

Aquí tenéis la cámara con el filtro:


Aunque el filtro no era el más adecuado para la tarea, sí que fue suficiente como para que funcionase todo.


Bueno, vamos ya con lo interesante.
Después de montar todo el tinglado, esto es lo que se podía ver por la cámara:



Como podéis ver, los dedos brillan cuando los acerco a la pantalla, y brillan bastante, por que el láser que utilicé tiene bastante potencia (como cinco veces más potente que uno normal de los chinos)
También podéis ver que el vídeo no tiene color. Eso es por que el filtro bloquea toda la luz visible, y los colores entran dentro de la luz visible.
La pantalla de la televisión se ve de un color claro por que está emitiendo infrarrojos. La imagen que emite no se ve por que es bloqueada por el filtro.

Vale, ahora ya tenemos nuestro modelo básico. Una pantalla, una webcam, y un sistema que hace que los dedos brillen cuando tocan la pantalla.

Ahora llega la parte del software. Necesitamos un programa que sea capaz de ver la imagen de la webcam y reconocer esos puntos luminosos. la gente del Natural User Interface Group
(NUIGroup) ya se han ocupado de eso, creando el Community Core Vision (CCV).

Este programa utiliza el vídeo que toma de la WebCam, le aplica una serie de filtros para tener una imagen clara de los puntos luminosos, los identifica, y envía los datos a nuestro programa.

Esta es la pinta que tiene el CCV:


No se aprecia demasiado bien por que estoy metiendo yo las manos por en medio, pero lo voy explicando.
En el recuadro superior izquierdo se ve lo que capta la WebCam, tal cual, con unas cuantas señalizaciones de los puntos que es capaz de reconocer.
En la parte inferior se ven varias imágenes pequeñas, que nos enseñan cómo va quedando la imagen al aplicarle los filtros.
El primero de los filtros quita el fondo, para quedarse únicamente con las pulsaciones. Así no tenemos que preocuparnos demasiado por la luz ambiente.
El resto de los filtros limpian la imagen, eliminan todo lo que no sea un punto brillante y lo amplifican para que se vea claramente.

Una vez que el CCV ya reconoce pulsaciones, tenemos que calibrarlo.
La cuestión es bastante tonta. La webcam no tiene por qué estar perfectamente centrada y orientada con respecto a la pantalla, y se ve en la imagen que no lo está. Para que el programa pueda traducir correctamente las pulsaciones a coordenadas, tenemos que darle unos cuantos puntos, para que sea capaz de identificar después en qué parte de la pantalla estamos pulsando.

En mi opinión lo mínimo para calibrar decentemente una pantalla son 3x3 puntos.
El programa te marca los puntos, y tienes que pulsar en ellos hasta que el círculo se vuelve blanco.
Una vez calibrado ya es capaz de reconocer perfectamente dónde pulsas, como se puede ver en este vídeo, que hice al terminar de calibrar.


Una vez llegados a este punto lo siguiente ya es probar a ver qué tal funciona. Así que puse a funcionar el programa de fotografías y.....




No funciona por que me olvidé de realizar un paso importante: indicarle al CCV cómo tiene que enviar los datos de las pulsaciones.

Una vez configurado el método de envío (que dependerá del programa que vayáis a utilizar) la cosa ya es muy distinta.

Este es un programa para pintar con los dedos:


Y aquí tenéis el programa de fotografías funcionando:


Todos estos programas vienen como ejemplos con el CCV, y por eso son estupendos para hacer las pruebas o dejar boquiabiertas a las visitas sin tener que matarnos mucho, pero la idea será crear nuestros propios programas aprovechando esta tecnología.

Bueno, espero que os sirva toda esta información y que disfrutéis con las pantallas multitáctiles tanto como yo... aunque ahora voy a tener que limpiar la pantalla de la tele.