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:

video

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:
video

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.
video

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.....
video



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:
video

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

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.

18 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderSuprimir
  2. Hola, es un trabajo increible.

    Estoy intentando hacer lo mismo pero estoy teniendo problemas para encontrar el laser y el capuchón, podrías poner el enlace de la tienda, que mw tiene?

    Gracias.

    ResponderSuprimir
  3. Los láseres son de Aixiz Lasers. Puedes visitar su página web en:
    http://www.mfgcn.com/
    O hacer como yo y comprar directamente a su usuario en e-bay:
    http://myworld.ebay.com/aixiz_lasers/

    Los láseres que yo usé son los infrarrojos de 780nm y 25 mW, aunque con los de 10 debería ser suficiente.

    Las lentes de línea las compré también en la misma tienda, cogí los de 120 grados, para tener más ángulo, pero vamos, que con el de 90 también llegaría.

    Espero que te sirva la información, y si consigues hacer algo, envía al menos un enlace para ver qué tal te queda.

    ResponderSuprimir
  4. Muy bueno, yo lo tengo montado de momento unicamente como touchpad hasta que me haga con un proyector de sengunda mano. Y ahora voy a probar lo del laser a ver que tal funciona por curiosidad.

    Pero tengo una pregunta, ¿como has hecho para que te ruede el CCV?? Es que no lo consigo...
    Yo tengo instalado el minitouchlib, pero segun he deducido de leer y leer cosas en ingles, el CCV como programa trae algunas cosas mas. ¿No?

    Un abrazooo, y muy bueno el blog por cierto!

    PD:Por si te interesa, hay otro, "Bespoke software" o algo asi, que tiene buena pinta tambien, pero no he indagado mucho todavia.

    ResponderSuprimir
  5. El CCV es la versión mejorada y actualizada del touchLib.... es más, el TouchLib ya no lo renuevan, así que cualquier cosa que mejoren o pongan nueva te la perderás si no te cambias al CCV.
    De momento si no utilizas el CCV te pierdes la posibilidad de enviar los datos de pulsaciones de distintos modos (como TUIO, por ejemplo), y el soporte para algunas webcams y resoluciones.

    En principio no recuerdo haber tenido problema para poner a funcionar el CCV, instalas la webcam, lo ejecutas, y ya empieza a reconocerte puntos. El problema suele ser conseguir que te funcionen las aplicaciones.
    Para que te funcionen los programas de ejemplo tienes que marcar en el CCV cómo quieres que envíe las señales (que dependerá de los programas que utilices), y como los ejemplos están en flash, necesitarás marcar los ejemplos como aplicaciones fiables, para que tengan permiso para recibir las pulsaciones.

    Le echaré un ojo al Bespoke ese a ver que tal, aunque de momento estoy bastante contento con el CCV.

    Espero que te salgan bien los experimentos con láser... yo también estoy a la espera de conseguir un proyector o una pantalla de segunda mano para hacer algo más permanente y profesional, pero mientras la tele es un campo de pruebas estupendo.

    ResponderSuprimir
  6. Lo de los ejemplos en flash ya he tenido que hacerlo para el touchlib, mas o menos con eso me apaño, jaja.
    Y lo del laser ya esta probado y mi camara es demasiado cutre y no va nada bien,mientras la pantalla este negra, mas o menos funciona, pero en cuando sale algo luminoso, se nos jodio el invento. Pero bueno...

    Y nada, he probado con todas las versiones del CCV y no me anda.Me dice o bien "No se pudo iniciar la aplicacion porque su configuracion es incorrecta. Reinstalar la aplicacion puede solucionar el problema." o bien esto otro: "La aplicacion no se ha podido inicializar correctamente (0xc0150002). Haga click en Aceptar para terminar la aplicacion."

    En fin. Muchas gracias de todas formas, seguire intentadolo.

    Un abazoooo.

    ResponderSuprimir
  7. Caramba, que raro que no te funcione el CCV.
    Prueba a bajarte la última versión de http://ccv.nuigroup.com/, que si no me equivoco es la 1.3. Y si te sigue dando fallo, coméntaselo en el foro, que seguro que te ayudan.

    ¿Qué láser y qué cámara utilizas?, por que aunque tu cámara sea buena, si no es sensible a la longitud de onda del láser, entonces no te va a funcionar bien. Y la gran mayoría de las cámaras traen un filtro para bloquear infrarrojos que les tienes que sacar si las quieres utilizar para estos menesteres.

    Además recuerda que necesitarás un filtro para bloquear la luz visible, y que así no te afecte lo que salga por la pantalla (aunque por lo visto muchas pantallas emiten infrarrojos igualmente, pero siempre es mejor minimizar el ruido).

    ResponderSuprimir
  8. hola amigo ,no me quiere funcionar el cvv me sale error en la aplicacion , noce porq pueda ser , talves porq mi computador tiene windows 7 , ajuro tiene q ser windows xp para q funcione ?

    ResponderSuprimir
  9. Pues no sé cuál será tu problema, pero dudo mucho que sea por el Windows, por que el CCV funciona prácticamente en cualquier sistema.

    ResponderSuprimir
  10. Yo ya descubri porque no me iba con el XP... Necesitaba el service pack 3.

    Es que se me olvido ponertelo y ya he montado lo del laser y disfrutando como un niño aunque para manejar el ordenador de normal no es comodo, pero para vacilar... jajaja

    Un saludo!
    Y animate y sigue, futuro McGyver, que hace mucho que no te veo actualizar ;)

    ResponderSuprimir
  11. Me alegro de que te ya te funcione.

    En general para poder utilizar cómodamente un ordenador con los dedos necesitas una interfaz preparada para ser usada con los dedos.... botones grandes y todo eso... y bueno, el windows está pensado para usarlo con ratón... y se nota cuando tienes que usarlo con los dedos.


    Últimamente no actualizo casi nada por que prácticamente no tengo tiempo para hacer experimentos, inventos y demás, pero no te preocupes, que aunque tarde, seguiré publicando cosas en el blog.

    ResponderSuprimir
  12. Sigues indagando en el tema de la pantalla tactil?
    ¿Alguna novedad o lo dejaste parado el tema?

    ResponderSuprimir
  13. Me temo que tengo el proyecto completamente estancado. Mi idea era montar una mesa multitáctil, algo con lo que poder experimentar con plano láser y con reflexión difusa, y una vez que el chisme ya estuviese funcionando, programar algo y hacer mis propias aplicaciones (Aunque ahora a lo mejor es más cómodo ponerle algo con Android por debajo... habrá que ver). Pero para eso necesitaría un proyector o una televisión o monitor viejos (TFT o similar, y cuanto más grandes mejor), y claro, como no tengo nada de eso, pues tengo que dejar aparcado el proyecto, por que no voy a desmontar la tele del salón, que a lo mejor la rompo y aún está en garantía... y además la necesitamos para ver cosas tirados en el sofá...

    A ver si ahora que he empezado a currar me compro un proyector o una tele y hago una mesa fija, que tiene que molar mucho tener la mesa de escritorio multitáctil.

    Cuando haga avances podéis tener por seguro que pondré en el blog lo que vaya haciendo.

    ResponderSuprimir
  14. Ami también me quedó desenfocada ¿cómo hiciste para solucionar ese problema?

    ResponderSuprimir
  15. La verdad es que ya no recuerdo como hice exactamente, pero te comento el proceso.

    Las pruebas las hice con la cámara enchufada, viendo la imagen en el ordenador.

    Primero tienes que comprobar si necesitas alejar o acercar el cuerpo de las lentes.

    Algunas cámaras tienen un sistema de rosca para las lentes, y acercar y alejar es muy fácil, pero lo más seguro es que no tengas tanta suerte.

    La cámara de la PS3 tiene ese sistema de rosca, pero viene pegada de fábrica, con lo que es como si no lo tuviese.

    Como en general no se puede acercar, probamos a alejar. Si la imagen se vuelve más nítida, entonces hay que alejar. Para eso corté un trozo de goma eva, con la forma del cuerpo de las lentes, y con un agujero en medio.
    La idea es tener algo que separe, y que no deje entrar la luz por los laterales, ya que si entra luz por donde no debe la calidad de la imagen se resiente. Y que además se pueda apretar, para al apretar los tornillos permitan un ajuste fino del enfoque.

    Si lo que hay que hacer es acercar, entonces lo más fácil es usar una lija fina para ir comiendo plástico y acercando las lentes. Si lijáis de más, entonces volvemos al caso anterior.

    Yo empecé con la dremel y recorté mucho más de lo que debía, así que tuve que ir con la goma eva, y poco me faltó para tener que buscar tornillos más grandes y algún sistema para atornillar, porque casi me cargo el sistema de sujeción. Y la verdad es que tenía que rebajar muy poco.

    Así que como consejo, hay que ir poco a poco, es mejor no pasarse. Y limpiar bien el polvillo y las barbas, que pueden estropear el sensor, o empeorar la calidad de la imagen.

    ResponderSuprimir
  16. Hola, me parece muy interesante este tipo de desarrollos, hay un blog donde puedes colgar estas ideas o ver las últimas innovaciones en este campo. http://ideacommunity.blogspot.com/

    ResponderSuprimir
  17. una pregunta antes de comenzar; si no le pongo el filtro IR funciona igual?

    ResponderSuprimir
  18. Si no le pones a la cámara un filtro que bloquee la luz que no sea infrarroja, podrás ver que los dedos se iluminan, pero también verás lo que aparece por pantalla, y también tendrás puntos de luz generados por reflejos y similares.
    Esto hace que al CCV le cueste muchísimo más reconocer los puntos, probablemente te reconocerá pulsaciones donde no las hay, y si consigues calibrarlo para que funcione bien, seguramente dejará de funcionar correctamente si cambian las condiciones de iluminación.

    En general lo ideal es tener el filtro que bloquee todas las frecuencias de luz, excepto la específica de los láseres o leds que estés utilizando. El filtro que yo utilicé (porque me salía más barato) bloquea toda la luz por debajo de la frecuencia de infrarrojos. Funciona, pero me deja pasar mucha luz infrarroja que no me interesa, como la que genera la propia pantalla, los focos halógenos, o incluso el sol. Si coges un filtro para tu frecuencia específica te aseguras de que la cámara va a captar con más fuerza la luz de tus láseres y por lo tanto te reconocerá mejor las pulsaciones.

    ResponderSuprimir