TL;DR He hecho un juego que se maneja con la webcam. Tienes el link para jugar al final đ
Probablemente el hardware mĂĄs comĂșnmente infrautilizado es la webcam. Hoy en dĂa todos los portĂĄtiles llevan una cĂĄmara, que todo el mundo tapa para evitar a los âhackersâ, o la enciende para hacer una videoconferencia⊠sĂłlo para apagarla a los pocos minutos porque el ancho de banda no es suficiente para el vĂdeo.
AsĂ que esta piweek he decidido darle una oportunidad para hacer algo mĂĄs. ÂżY quĂ© mejor que convertirla en un interfaz para un videojuego?. AdemĂĄs, con la potencia actual de los navegadores, y las capacidades de html5 para acceder a la cĂĄmara, deberĂa ser posible hacerlo en html y javascript. AsĂ surgiĂł la idea de Kam-Fu.
La verdad es que no he dedicado tiempo a investigar sobre visiĂłn artificial. Seguro que hay muchas ideas muy buenas por ahĂ. Pero yo tenĂa una teorĂa, que querĂa probar. Si se hace una foto estĂĄtica al principio, y luego se compara esa foto con cada fotograma, se pueden obtener las diferencias (con un cierto umbral). Cualquier pixel que sea diferente, es un sitio que el jugador estĂĄ "tocando". ParecĂa una buena teorĂa, asĂ que busquĂ© alguna biblioteca de comparaciĂłn de imĂĄgenes, y lleguĂ© a Resembe.js, que hacĂa justo lo que yo querĂa. ComencĂ© las primeras pruebas, y el lunes por la mañana ya conseguĂa "tocar" botones en el aire. ÂĄEl primer dĂa tenĂa funcionando lo que esparaba que me llevase casi toda la semana!.

Una vez tenĂa el interfaz para detectar los movimientos del usuario, era la hora de hacer algo chulo con ello. Lo primero que hice el martes fue el "minijuego" del menĂș, desde el que poder elegir otros juegos. Una vez lo tuve funcionando, tocĂł refactorizar todo, para extraer las partes comunes a cualquier juego. Una vez conseguido, tocaba lo que de verdad me apetecĂa⊠¥El juego de matar ninjas!.
Pero en ese punto me dĂ cuenta de que mi sistema de comparaciĂłn de imĂĄgenes era muy poco eficiente. ÂżPara quĂ© querĂa detectar todas las diferencias entre un frame y la imagen original? En realidad sĂłlo me interesaba si habĂa diferencias sobre alguno de los sprites del juego. AsĂ que me deshice de Resemble.js, y me escribĂ mi propia biblioteca de comparaciĂłn de imĂĄgenes, que permitĂa comparar un pixel concreto.
Una vez resuelto esto, ya estaba on-fire. Los siguientes dĂas llegaron no sĂłlo el juego de los ninjas, sino tambiĂ©n el de memoria, y el de baile.
Cosas que he aprendido:
- Desarrollar juegos es muy divertido, tanto como jugarlos.
- Para hacer juegos, es indispensable un diseñador gråfico. He dedicado demasiadas horas al Gimp para el resultado visual obtenido.
- Las capacidades multimedia de html5 son impresionantes.
- Con la potencia de hardware actual, hasta con un portatil modesto, la optimizaciĂłn ya no es algo vital. Tras invertir muchas horas en mejorar la eficiencia de cĂłdigo que se ejecuta varias veces por segundo, el resultado apreciable no era diferente.
Por supuesto, Kam-Fu es software libre, puedes acceder a su cĂłdigo fuente. Pero lo mĂĄs importante es que ÂĄpuedes jugar! (por ahora, sĂłlo para chrome): Kam-Fu