Outils pour utilisateurs

Outils du site


wiki:tutoriels:leap-motion2:accueil

Leap-Motion et paramètres gestuels

Description

Découverte du capteur de mouvement « Leap Motion » à travers la conception d’une affiche interactive. Le leap motion est composé de 3 led et 2 caméras permettant de restituer les gestes de notre avant-bras. Avec la librairie Processing leap motion, 3 exemples sont fournit :

Objectif

Créer une affiche interactive avec le leap motion. Cette affiche permettrait au prospect de créer son propre dessin sans toucher un médium.

Leap-Motion gesture exemple

Le leap motion détecte plusieurs types de gestes de l’utilisateur, qu'il interprète comme un objet.

  • Swipe - Un long mouvement linéaire du doigt.
  • Circle - Un seul doigt traçant un cercle.
  • Screen Tap - Un tapotement du doigt comme s'il tapait sur un écran d'ordinateur vertical.
  • Key Tap - Un tapotement du doigt, comme si vous tapotiez sur une touche du clavier.

Le programme exemple LM_2_GESTURES de la librairie Leap Motion n'affiche rien, il détecte seulement les gestes et leurs allouent des espaces mémoire.

Début du programme exemple LM_2_GESTURES

import de.voidplus.leapmotion.*; //importation de la librairie

LeapMotion leap; // déclaration de l'objet leap motion
void setup(){
  size(800, 500); //taille de la fenêtre d'affichage
  background(255); //couleur d'arrière plan
 leap = new LeapMotion(this).allowGestures();  //Création de tout les gestes
  //leap = new LeapMotion(this).allowGestures("circle, swipe, screen_tap, key_tap"); //Création des gestes : cercle, swipe,screen_tap et Key_tap
  //leap = new LeapMotion(this).allowGestures("swipe");  //Création du geste Swipe uniquement
}
void draw(){
background(255);
}

Début fonction de l'objet Swipe

void leapOnSwipeGesture(SwipeGesture g, int state){//analyse des paramètres d'actions/reconnaissance du geste (objet) Swipe
  int     id               = g.getId(); 
  Finger  finger           = g.getFinger();//Objet Finger  
  PVector position         = g.getPosition();//Classe PVector décrivant la position des vecteurs de l'objet Swipe
  PVector positionStart    = g.getStartPosition();//Classe PVector décrivant la position de DEPART des vecteurs de l'objet Swipe
  PVector direction        = g.getDirection();//Classe PVector décrivant le balayage directionnel des vecteurs (gauche-droite) de l'objet Swipe (parallèle au mouvement de balayage)
  float   speed            = g.getSpeed();//vitesse du geste en ms
  long    duration         = g.getDuration();//Durée écouler du mouvement en microsecondes. !! Variable de type long : stock les grands entiers sur 64 bits (32bits pour les type int) utilisé pour stocker plus d'int sur la durée du geste
  float   durationSeconds  = g.getDurationInSeconds();//Même principe, sauf que l'unité est calculée en seconde et le type est Float (nous avons moins d'infos à stocker)

  switch(state){//états du gestes swipe en trois parties : debut/milieu/fin (different de gesture type = type de geste auxquels sont attribué une valeur) relatif à la console
    case 1://les données du geste sont recupérées
      break;
    case 2://Le geste est en cour de dessin
      break;
    case 3:// Fin/arret du geste
      println("SwipeGesture: " + id);//inscription du geste dans la console (paramètre de sortie)
      break;
  }
}

Début fonction de l'objet Circle

void leapOnCircleGesture(CircleGesture g, int state){//analyse des paramètres d'actions/reconnaissance du geste (objet) Circle
  int     id               = g.getId();
  Finger  finger           = g.getFinger();//Objet Finger 
  PVector positionCenter   = g.getCenter();//Stockage de la position centrale du geste
  float   radius           = g.getRadius();//Rayon de l'objet Circle de type float
  float   progress         = g.getProgress();//Nombre de fois ou l'objet est repassé par le bout du doight
  long    duration         = g.getDuration();//Durée écouler du mouvement en microsecondes. !! Variable de type long
  float   durationSeconds  = g.getDurationInSeconds();//Même principe, sauf que l'unité est calculée en seconde et le type est Float
  int     direction        = g.getDirection();

  switch(state){//même principe que SWipe gesture
    case 1://Start, début
      break;
    case 2://Update, milieu
      break;
    case 3://Stop, fin
      println("CircleGesture: " + id);//inscription de ces étapes dans la console (paramètre de sortie)
      break;
  }

  switch(direction){//2 état du geste circle 
    case 0://Anticlockwise/Left gesture/Geste commencé par la gauche, soit fait à l'inverse du sens des aiguilles d'une montre
      break;
    case 1://Clockwise/Right gesture//Geste commencé par la droite, soit dans le sens des aiguille d'une montre
      break;
  }
}

Début fonction de l'objet ScreenTap

void leapOnScreenTapGesture(ScreenTapGesture g){//analyse des paramètres d'actions/reconnaissance du geste (objet) ScreenTap
  int     id               = g.getId();
  Finger  finger           = g.getFinger();//Objet Finger
  PVector position         = g.getPosition();//Classe PVector décrivant la position des vecteurs de l'objet ScreenTap
  PVector direction        = g.getDirection();//Classe PVector décrivant le balayage directionnel des vecteurs (gauche-droite) de l'objet ScreenTap
  long    duration         = g.getDuration();//Durée écouler du mouvement en microsecondes. !! Variable de type long
  float   durationSeconds  = g.getDurationInSeconds();//Même principe, sauf que l'unité est calculée en seconde et le type est Float

  println("ScreenTapGesture: " + id);//inscription du geste effectué dans la console (paramètre de sortie)
}

Début fonction de l'objet Key Tap

void leapOnKeyTapGesture(KeyTapGesture g){//analyse des paramètres d'actions/reconnaissance du geste (objet) Keytap
  int     id               = g.getId();
  Finger  finger           = g.getFinger();//Objet Finger
  PVector position         = g.getPosition();//Classe PVector décrivant la position des vecteurs de l'objet Keytap
  PVector direction        = g.getDirection();//Classe PVector décrivant le balayage directionnel des vecteurs (gauche-droite) de l'objet Keytap
  long    duration         = g.getDuration();//Durée écouler du mouvement en microsecondes. !! Variable de type long
  float   durationSeconds  = g.getDurationInSeconds();//Même principe, sauf que l'unité est calculée en seconde et le type est Float

  println("KeyTapGesture: " + id);//inscription du geste effectué dans la console (paramètre de sortie)
}

Fin du programme LM_2_GESTURES

Programme de dessin

L’affiche interactive permet de dessiner sans toucher. L’intégration de la librairie pdf offre la possibilité avec un geste clé (Swipe gesture) d’arrêter le programme. Cet arrêt créer une sauvegarde pdf du dessin, imprimable par la suite.

Début description programme de l'affiche

import processing.pdf.*;//importation librairie PDF
import de.voidplus.leapmotion.*;//importation librairie leap motion
LeapMotion leap;//déclaration de l'objet
void setup() {
  size(1080, 720);//taille fenetre d'affichage
 smooth(10);//lissage des tracés
leap = new LeapMotion(this);//création de l'objet
leap = new LeapMotion(this).allowGestures("swipe");//créer l'objet SWIPE
 
  beginRecord(PDF, "leap.pdf");//type d'export .pdf
  

     fill(238,222,258);//rectangle fond & couleur rose
    rect(100, 100,880, 520);
}

Création d'une boucle for pour dessiner les doigts

void draw() {

  for (Finger finger : leap.getFingers ()) {//créer l'objet main
    finger.drawBones();//dessin du squellette 
  }
}

Déclaration de la méthode SWIPE, ayant pour instruction de couper le programme lors du geste

void leapOnSwipeGesture(SwipeGesture g, int state) {
  endRecord();//fin enregistrement 
  exit();//fin du programme
}

Finale

Le programme s'arrête et créer un pdf dans le dossier du programme.

Pistes future : exploiter d'avantage l'exemple gesture afin attribuer une forme de dessin à chaque geste.
wiki/tutoriels/leap-motion2/accueil.txt · Dernière modification: 2019/01/21 12:31 (modification externe)