2016-06-10 5 views
-1

Жесты пальцев влево, вправо, вверх и вниз не оптимизированы. Если задача должна выполняться с восходящим салфетки, она будет путаться с левым салфеткой и все еще выполнять ее. Пожалуйста, предложите мне параметры, которые будут оптимизированы для дифференциации swipes. Команды для идеального распознавания swipe. Также он путается с круг и салфетки. Я добавил свой код. В одном единственном фрейме должен быть обнаружен только один жест. Как я ограничиваю это здесь.Leap Motion путается между разными типами жестов. Как оптимизировать?

public MainWindow() 
{ 
InitializeComponent(); 

     this.controller = new Controller(); 

     this.listener = new LeapListener(this); 
     controller.AddListener(listener); 

     for (int iCount = 1; iCount < 23; iCount++) 
     { 
      images[iCount] = new BitmapImage(); 
      images[iCount].BeginInit(); 
      images[iCount].UriSource = new Uri("Images/" + iCount + ".png", UriKind.Relative); 
      images[iCount].EndInit(); 
     } 
     image.Source = images[1]; 
    } 



    delegate void LeapEventDelegate(string EventName); 




    public void LeapEventNotification(string EventName) 
    { 
     if (this.CheckAccess()) 
     { 
      switch (EventName) 
      { 
       case "onInit": 

        break; 
       case "onConnect": 

        this.connectHandler(); 
        break; 
       case "onFrame": 

        this.checkGestures(this.controller.Frame()); 

        break; 
      } 
     } 
     else 
     { 
      Dispatcher.Invoke(new LeapEventDelegate(LeapEventNotification 
       ), new object[] { EventName }); 
     } 
    } 

    public void connectHandler() 
    { 
     controller.EnableGesture(Gesture.GestureType.TYPE_SWIPE); 
     this.controller.EnableGesture(Gesture.GestureType.TYPE_CIRCLE); 
     this.controller.EnableGesture(Gesture.GestureType.TYPE_KEY_TAP); 
     this.controller.EnableGesture(Gesture.GestureType.TYPE_SCREEN_TAP); 


     // controller.Config.SetFloat("Gesture.Swipe.Speed", 4000.0f); 
     controller.Config.SetFloat("Gesture.Swipe.MinVelocity", 750f); 
     controller.Config.SetFloat("Gesture.Swipe.MinLength", 200f); 

     controller.Config.SetFloat("Gesture.KeyTap.MinDownVelocity", 40.0f); 
     controller.Config.SetFloat("Gesture.KeyTap.HistorySeconds", .2f); 
     controller.Config.SetFloat("Gesture.KeyTap.MinDistance", 40.0f); 

     controller.Config.SetFloat("Gesture.Circle.MinRadius", 15.0f); 
     controller.Config.SetFloat("Gesture.Circle.MinArc", 15f); 

     controller.Config.SetFloat("InteractionBox.Width", 1600.0f); 
     controller.Config.SetFloat("InteractionBox.Height", 1600.0f); 

     controller.Config.Save(); 
    } 


    public void checkGestures(Frame frame) 
    { 


     GestureList gestures = frame.Gestures(); 
     foreach (Gesture gesture in gestures) 
     { 

      // For Image 1 
      if (image.Source.Equals(images[1])) 
      { 



       if (gesture.Type == Gesture.GestureType.TYPE_SWIPE) 
       { 

        SwipeGesture swipe = new SwipeGesture(gesture); 
        if (swipe.State == Gesture.GestureState.STATE_START && swipe.Direction.x > 0 && Math.Abs(swipe.Direction.y) < 5) 
        { 

         image.Source = images[2]; 
         // Console.WriteLine("Second"); 
        } 

       } 

      } 

      // For Image 2 
      else if (image.Source.Equals(images[2])) 
      { 

       if (gesture.Type == Gesture.GestureType.TYPE_SWIPE) 
       { 
        SwipeGesture swipe = new SwipeGesture(gesture); 

        if (swipe.State == Gesture.GestureState.STATE_START && swipe.Direction.y > 0) 

        { 
         image.Source = images[3]; 
        } 
        else if (swipe.State == Gesture.GestureState.STATE_START && swipe.Direction.x > 0 && Math.Abs(swipe.Direction.y) < 5) 
        { 
         image.Source = images[7]; 
        } 
       } 
       if (gesture.Type == Gesture.GestureType.TYPE_KEY_TAP) 
       { 
        KeyTapGesture TapGesture = new KeyTapGesture(gesture); 
        image.Source = images[1]; 
        Console.WriteLine("Circle"); 
       } 
      } 
      // For Image 3 
      else if (image.Source.Equals(images[3])) 
      { 

       if (gesture.Type == Gesture.GestureType.TYPE_SWIPE) 
       { 
        SwipeGesture swipe = new SwipeGesture(gesture); 

        if (swipe.State == Gesture.GestureState.STATE_START && swipe.Direction.y < 0) 

        { 
         image.Source = images[4]; 
        } 
       else if (swipe.State == Gesture.GestureState.STATE_START && swipe.Direction.x < 0 && Math.Abs(swipe.Direction.y) < 5) 
        { 
         image.Source = images[16]; 
        } 

       } 
       if (gesture.Type == Gesture.GestureType.TYPE_KEY_TAP) 
       { 
        KeyTapGesture TapGesture = new KeyTapGesture(gesture); 
        image.Source = images[1]; 

       } 
      } 

      }//foreach 
     } 
    } 
} 
+0

Какую версию программного обеспечения Leap Motion вы используете? –

+0

Версия программного обеспечения 2.3.1 +31549 –

ответ

0

Избегаемые меры Жесты были устаревшими в 3.x (Орион), поскольку они не были надежными. Лучшее, что нужно сделать, это понять SDK и просто создать свои собственные жесты, вы можете выйти за рамки того, что уже выходит из коробки и более надежно. Все, что связано с 3D позиционированием, так что обратите внимание на Y, X, Z, используйте руки отладчика или создайте собственную систему отладки, чтобы увидеть, как она себя ведет.

Смежные вопросы