Hola!

Hoy vamos con un post de esos rápidos, en el que cambio una app de Consola por una app WPF y en la misma, muestro el gesto detectado por el sensor además de la cantidad de dedos activos. Para este ejemplo me he basado en este post de la crack Iris Classon para crear el siguiente listener

   1: using System;

   2: using System.Threading.Tasks;

   3: using Leap;

   4:  

   5: namespace LeapWpf01

   6: {

   7:     public class ElBrunoListener : Listener

   8:     {

   9:         public void Sample(){}

  10:         public event Action<FingerList> OnFingersRegistered;

  11:         public event Action<GestureList> OnGestureMade;

  12:         private long _now;

  13:         private long _previous;

  14:         private long _timeDifference;

  15:  

  16:         public override void OnInit(Controller controller) { }

  17:  

  18:         public override void OnConnect(Controller controller)

  19:         {

  20:             controller.EnableGesture(Gesture.GestureType.TYPECIRCLE);

  21:             controller.EnableGesture(Gesture.GestureType.TYPEKEYTAP);

  22:             controller.EnableGesture(Gesture.GestureType.TYPESCREENTAP);

  23:             controller.EnableGesture(Gesture.GestureType.TYPESWIPE);

  24:         }

  25:  

  26:         public override void OnDisconnect(Controller controller) { }

  27:  

  28:         public override void OnExit(Controller controller) { }

  29:  

  30:         public override void OnFrame(Controller controller)

  31:         {

  32:             var frame = controller.Frame();

  33:             _now = frame.Timestamp;

  34:             _timeDifference = _now - _previous;

  35:  

  36:             if (frame.Hands.IsEmpty) return;

  37:  

  38:             _previous = frame.Timestamp;

  39:             if (_timeDifference < 1000) return;

  40:  

  41:             // Run async

  42:             if (frame.Gestures().Count > 0)

  43:                 Task.Factory.StartNew(() => OnGestureMade(frame.Gestures()));

  44:             if (frame.Fingers.Count > 0)

  45:                 Task.Factory.StartNew(() => OnFingersRegistered(frame.Fingers));

  46:         }

  47:     }

  48: }

El listener es bastante simple, publica en modo evento toda la información capturada por el LEAP cada 1 segundo.

Luego en la MainWindow de mi app WPF poseo el código del siguiente párrafo. Lo único que hay que tener en cuenta en este caso, es que en la inicialización del sensor mejor hacerla en el evento Loaded(), y siempre con cuidado en el closing de la View de cerrar el controller y el listener con el sensor.

   1: public partial class MainWindow : INotifyPropertyChanged

   2: {

   3:     private string _gesturesText;

   4:     private Controller _controller;

   5:     private ElBrunoListener _listener;

   6:     private string _fingersText;

   7:  

   8:     public MainWindow()

   9:     {

  10:         DataContext = this;

  11:         Loaded += MainWindow_Loaded;

  12:         Closing += MainWindow_Closing;

  13:         InitializeComponent();

  14:     }

  15:  

  16:     void MainWindow_Closing(object sender, CancelEventArgs e)

  17:     {

  18:         _controller.RemoveListener(_listener);

  19:         _controller.Dispose();

  20:     }

  21:  

  22:     void MainWindow_Loaded(object sender, RoutedEventArgs e)

  23:     {

  24:         _listener = new ElBrunoListener();

  25:         _controller = new Controller();

  26:         _controller.AddListener(_listener);

  27:         _listener.OnFingersRegistered += OnFingersRegistered;

  28:         _listener.OnGestureMade += OnGestureMade;

  29:     }

  30:  

  31:     void OnGestureMade(GestureList gestures)

  32:     {

  33:         var gesturesData = string.Empty;

  34:         foreach (var gesture in gestures)

  35:         {

  36:             gesturesData += gesture.Type + Environment.NewLine;

  37:         }

  38:         GesturesText = gesturesData;

  39:     }

  40:  

  41:     void OnFingersRegistered(FingerList fingers)

  42:     {

  43:         FingersText = "Active Fingers:" + fingers.Count;

  44:     }

  45: }

Luego, la funcionalidad de la app es bastante straigh forward,

 

La verdad es que como sensor está bien, ahora para poder tener algo up and running, hay que trabajar bastante. No por las capacidades, sino más bien porque el SDK te deja TODA la información en bruto, lo demás … pues a trabajarserlo

Saludos @ Home

El Bruno

image image image Google

Leave a comment

Discover more from El Bruno

Subscribe now to keep reading and get access to the full archive.

Continue reading