<LeapMotion:1.1> Primeros pasos (develop)- por Angelos di Avocado.

in #spanish6 years ago (edited)

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

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


  • 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

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

    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.

    En especial, les invito a visitar la galeria de LeapMotion, donde podrán encontrar demos descargables, experiencias, videos y brillantes ideas :)

    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/
    Sort:  

    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!

    Hola @julioccorderoc. El dispositivo ya esta teniendo algo de vida en el area de la educación. Existe varios demos que te puedes ver, si visitar el sitio web de la empresa. En cuanto a mi video juego, pues puedo decirte que esta inclinado también al area de la educación. Estoy muy seguro, que en el futuro, dejaremos de usar guantes de datos, para usar este tipo de dispositivos.


    Saludos!

    I'd catch a grenade for you.

    Interesante dispositivo, imagino que su uso para aquellos que realizan animación y cine es de gran ayuda.

    Buenas @ubuldonet. Para los animadores, si que puede tener bastante utilidad, aunque esta enfocado mas a las manos, dedos, sus posición y dirección. Imagino que la industria del cine, si que se conoce estos dispositivos y quizás hasta trabajandolo en conjunto con Kinects (Array de kinects y LeapMotions). En fin, creo que se están abriendo otras puertas para la interación en realidades alternativas. ;)

    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.

    Hola @alexverde! Pues esa es la idea, "No dejar pasar un dia, sin aprender algo y apoyarnos mutuamente". Gracias por tus buenos deseos. Saludos.

    Congratulations @mrangelm! You have received a personal award!

    1 Year on Steemit
    Click on the badge to view your Board of Honor.

    Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

    Este post fue votado por la comunidad y trail @developspanish, comunidad encargada de curar a los programadores, traductores de software y bloggers de informática y tecnología de habla hispana.

    ¿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