LeapMotion: una guía para comenzar (con código).
Desde el principio de los tiempos, los seres humanos hemos usado nuestro cuerpo, en especial las señas, como medio de amplificación de contexto en la comunicación. Quienes aprendemos nuevos idiomas, conocemos la importancia de los gestos y las señas en la comunicación.
Hoy en día, una de las areas mas interesadas en este tipo de estudios, es Human Computer Interaction (HCI), o en castellano, interacción humana computarizada. HCI es un campo multidisciplinario enfocado en analizar, diseñar y desarrollar software, tecnologías computacionales, que involucren la interacción entre humanos y computadores.
Entre muchas de posibilidades, de esta area, hoy quiero presentarles el LeapMotion. Para dar una breve introducción debo decir que LeapMotion junto a Kinect, son de los grandes dispositivos, que están reduciendo las barreras entre las personas y las tecnologías e introduciendo realidad virtual a nuestras vidas. Este dispositivo, con un costo de unos 120 dolares, dispone de una SDK, que brinda soporte para diferentes lenguajes, como lo son JavaScript, Unity, C#, C++, Java, Python, Objective-C y Unreal. Finalmente, les presento mi LeapMotion (llamado por mi novia, mi nuevo juguete):
Este sensor fue desarrollado en 2008 por la empresa Leap Motion, Inc, fue colocado a la venta entre mayo y julio del 2013. Este periférico, funciona con una conexión USB, retornando frames de información de manos y dedos, posición y dirección, sin ningún contacto físico y en tiempo real. Para ver mas detalles de este dispositivo, véase Leap Motion WIKi o su documentación de desarrollador developer leap motion.
Para los que tengáis interes en conocer como comenzar a usar este dispositivo desde código, esta sección del texto les sera util. Comenzar a programar, debemos mirar primero los requerimientos de LeapMotion para nuestro sistema operativo (Windows, Linux, Mac) (32 o 64 bits). Esta información la consiguen en Leap Motion libraries. En el caso de este tutorial, quiero mostrarles algunos pasos para configurar un proyecto en Eclipse(usando la librería para Java).
LeapSDK/lib/LeapJava.jar — Leap Motion Java API class definitions
LeapSDK/lib/x64/LeapJava.dll — 64-bit Leap Motion Java library
LeapSDK/lib/x64/Leap.dll — 64-bit Leap Motion library
Para probar que todo funciona, podríamos usar la siguiente linea, desde la consola: javac -classpath (LeapSDK)/lib/LeapJava.jar Sample.java
Podemos crear un proyecto Maven o un simple proyecto Java. Actualmente, las librerías de LeapMotion no están disponibles en maven, pero para mis proyectos, prefiero usar directamente proyectos Maven.
Los pasos siguientes, son como de costumbre, completamos los campos necesarios siguiente. Luego que tenemos el proyecto ya creado, procedemos a importamos los archivos LeapJava.jar, LeapJava.dll, Leap.dll.
Ahora solo necesitamos dos clases: LeapMotionListener y LeapMotionController.
Veamos la clase LeapMotionController, la cual hereda (extends) de com.leapmotion.leap.Controller. Al momento de pasarle el objeto Listener(com.leapmotion.leap.Listener) a esta clase, estamos activando el LeapMotion para escuchar los frames de información. Es entonces aquí, donde comienza la magia (linea 18): controller.addListener(listener);.
ó en nuestro main
El LeapMotionListener recibe del controller cada frame y es allí exactamente, en nuestro caso, donde sobre escribimos (Overwrite) el método que recibe cada frame, mejor dicho, el método onFrame() de la clase com.leapmotion.leap.Listener, para que siga nuestra implementación. Aquí debemos fijarnos, que mi clase LeapMotionListener hereda (extends) a com.leapmotion.leap.Listener. Veamos:
En las ultimas lineas, se ven algunos cálculos matemáticos, los cuales buscan una normalización de la información direccional XYZ de cada dedo, devuelta por el sensor en cada frame. Dicha información se ve de la siguiente forma:
Para los que quieren saber exactamente que metodos nos ofrece la clase Frame, pueden ver la siguiente imagen como referencia:
También es posible preguntarle al sensor, sobre gestos predefinidos, cantidad de dedos abierto y cerrados, imagenes, entre otros. Para mayor detalles, les invito a visitar la API.
Mas que hablar del visualizer que nos ofrece la SDK de LeapMotion, vemos imagenes de la misma. Así cada quien se hace una idea de su funcionamiento.
A partir de esta implementación Listener del LeapMotion, podríamos evaluar crear diferentes aplicaciones destinadas tanto al area de los video juegos, como a la industria. Esperando que en futuras versiones del LeapMotion, los margenes de errores se reduzcan, podríamos estar hablando de crear aplicaciones para el area de la medicina. Imaginemos cambiar de canal con el LeapMotion, imaginemos aprender o interpretar lengua de señas en tiempo real usando la LeapMotion, imaginemos navegar por un mundo irreal (VR), usando nuestro cuerpo y nuestras manos para tomar decisiones, Imaginemos escribir sin usar un teclado, en fin, todo esta en nuestras ideas e implementaciones.
Ya para terminar, uno de mis objetivos, es crear un video juego pequeño usando Unity u otra tecnología, para el cual, el input para las acciones sea la LeapMotion. Para quienes llegaron hasta este punto, les agradezco leerme y si quieren ver la implemetación de mi código en GITHUB, no duden en escribirme.
En especial, les invito a visitar la galeria de LeapMotion, donde podrán encontrar demos descargables, experiencias, videos y brillantes ideas :)
(1) LeapMotion
(2) Wiki - LeapMotion (https://en.wikipedia.org/wiki/Leap_Motion)
(3) Mi trabajo de grado en la uni Tübingen. :)
@originalworks
Instagram: https://www.instagram.com/diAvokato/
Flickr: https://www.flickr.com/photos/145856611@N05/
Hoy en día, una de las areas mas interesadas en este tipo de estudios, es Human Computer Interaction (HCI), o en castellano, interacción humana computarizada. HCI es un campo multidisciplinario enfocado en analizar, diseñar y desarrollar software, tecnologías computacionales, que involucren la interacción entre humanos y computadores.
Entre muchas de posibilidades, de esta area, hoy quiero presentarles el LeapMotion. Para dar una breve introducción debo decir que LeapMotion junto a Kinect, son de los grandes dispositivos, que están reduciendo las barreras entre las personas y las tecnologías e introduciendo realidad virtual a nuestras vidas. Este dispositivo, con un costo de unos 120 dolares, dispone de una SDK, que brinda soporte para diferentes lenguajes, como lo son JavaScript, Unity, C#, C++, Java, Python, Objective-C y Unreal. Finalmente, les presento mi LeapMotion (llamado por mi novia, mi nuevo juguete):
Leap Motion Sensor
Este sensor fue desarrollado en 2008 por la empresa Leap Motion, Inc, fue colocado a la venta entre mayo y julio del 2013. Este periférico, funciona con una conexión USB, retornando frames de información de manos y dedos, posición y dirección, sin ningún contacto físico y en tiempo real. Para ver mas detalles de este dispositivo, véase Leap Motion WIKi o su documentación de desarrollador developer leap motion.
Programación
Para los que tengáis interes en conocer como comenzar a usar este dispositivo desde código, esta sección del texto les sera util. Comenzar a programar, debemos mirar primero los requerimientos de LeapMotion para nuestro sistema operativo (Windows, Linux, Mac) (32 o 64 bits). Esta información la consiguen en Leap Motion libraries. En el caso de este tutorial, quiero mostrarles algunos pasos para configurar un proyecto en Eclipse(usando la librería para Java).
Librerias a descargar
Para probar que todo funciona, podríamos usar la siguiente linea, desde la consola: javac -classpath (LeapSDK)/lib/LeapJava.jar Sample.java
Eclipse
Podemos crear un proyecto Maven o un simple proyecto Java. Actualmente, las librerías de LeapMotion no están disponibles en maven, pero para mis proyectos, prefiero usar directamente proyectos Maven.
Veamos la clase LeapMotionController, la cual hereda (extends) de com.leapmotion.leap.Controller. Al momento de pasarle el objeto Listener(com.leapmotion.leap.Listener) a esta clase, estamos activando el LeapMotion para escuchar los frames de información. Es entonces aquí, donde comienza la magia (linea 18): controller.addListener(listener);.
ó en nuestro main
public static void main(String[] args) {
LeapMotionListener listener = new LeapMotionListener();
LeapMotionController controller = new LeapMotionController();
System.out.println("ini");
controller.addListener(listener);
// Keep this process running until Enter is pressed
System.out.println("Press Enter to quit...");
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
// Remove the sample listener when done
controller.removeListener(listener);
}
El LeapMotionListener recibe del controller cada frame y es allí exactamente, en nuestro caso, donde sobre escribimos (Overwrite) el método que recibe cada frame, mejor dicho, el método onFrame() de la clase com.leapmotion.leap.Listener, para que siga nuestra implementación. Aquí debemos fijarnos, que mi clase LeapMotionListener hereda (extends) a com.leapmotion.leap.Listener. Veamos:
leapTHUMB XYZ = 85.787750244, -14.4923191074, 49.2994385
leapINDEX XYZ = 74.627067565, -62.357772827, 23.287544258
leapMIDDLE XYZ = 83.700859069, -8.3389348983, 54.0798677734
leapRING XYZ = 70.87342856, -21.551595681, 67.175043047
leapPINKY XYZ = -10.7800219238, -92.205406484, 37.174632305
El visualizer
Mas que hablar del visualizer que nos ofrece la SDK de LeapMotion, vemos imagenes de la misma. Así cada quien se hace una idea de su funcionamiento.
¿Posibles implementaciones a partir de esta código?
A partir de esta implementación Listener del LeapMotion, podríamos evaluar crear diferentes aplicaciones destinadas tanto al area de los video juegos, como a la industria. Esperando que en futuras versiones del LeapMotion, los margenes de errores se reduzcan, podríamos estar hablando de crear aplicaciones para el area de la medicina. Imaginemos cambiar de canal con el LeapMotion, imaginemos aprender o interpretar lengua de señas en tiempo real usando la LeapMotion, imaginemos navegar por un mundo irreal (VR), usando nuestro cuerpo y nuestras manos para tomar decisiones, Imaginemos escribir sin usar un teclado, en fin, todo esta en nuestras ideas e implementaciones.
Ya para terminar, uno de mis objetivos, es crear un video juego pequeño usando Unity u otra tecnología, para el cual, el input para las acciones sea la LeapMotion. Para quienes llegaron hasta este punto, les agradezco leerme y si quieren ver la implemetación de mi código en GITHUB, no duden en escribirme.
Fuentes
(1) LeapMotion
(2) Wiki - LeapMotion (https://en.wikipedia.org/wiki/Leap_Motion)
(3) Mi trabajo de grado en la uni Tübingen. :)
@originalworks
Instagram: https://www.instagram.com/diAvokato/
Flickr: https://www.flickr.com/photos/145856611@N05/
Tremendo dispositivo, ¿sobre qué tópico piensas hacer el videojuego? Sería un trabajo interesante. Creo que estos dispositivos se desarrollarán gracias a los videojuegos, ya que en estas fases iniciales no tienen ningún otro uso muy útil, de manera que en el futuro, se puedan usar para cosas más importantes, como la industria o la medicina.
Saludos!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Saludos!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Interesante dispositivo, imagino que su uso para aquellos que realizan animación y cine es de gran ayuda.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
No cabe duda que cada día se aprende algo, muy interesante este dispositivo.
Te deseo mucho éxito y que logres tu meta de crear un videojuego.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @mrangelm! You have received a personal award!
1 Year on Steemit
Click on the badge to view your Board of Honor.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
¿Quieres recibir mejores recompensas en tus post de informática, tecnología o programación, ayúdanos delegando algo de SP:
1 SP, 5 SP, 10 SP
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit