LeapMotion无法识别任何手势

时间:2019-04-02 13:42:30

标签: java gesture leap-motion

我正在创建一个Java程序来识别LeapMotion的某些功能。

我正在关注此tutorial

代码

import com.leapmotion.leap.*;
import com.leapmotion.leap.Gesture.State;
import java.io.IOException;
//Listener
class LeapListener extends Listener {
    public void onInit(Controller controller) {
        System.out.println("Initialized");
    }

    public void onConnect(Controller controller) {
        System.out.println("Connected to Motion Sensor");
        controller.enableGesture(Gesture.Type.TYPE_SWIPE);
        controller.enableGesture(Gesture.Type.TYPE_CIRCLE);
        controller.enableGesture(Gesture.Type.TYPE_SCREEN_TAP);
        controller.enableGesture(Gesture.Type.TYPE_KEY_TAP);
    }

    public void onDisconnect(Controller controller) {
        System.out.println("Motion Sensor disconnected");
    }

    public void onExit(Controller controller) {
        System.out.println("Exited");
    }

    //Method for detection 
    public void onFrame(Controller controller) {
        Frame frame = controller.frame();
        //FRAME DATA always
        /*System.out.println("Frame id: "+ frame.id()
                            + ", Timestamp: " + frame.timestamp()
                            + ", Hands: " + frame.hands().count()
                            + ", Fingers: " + frame.fingers().count()
                            + ", Tools: " + frame.tools().count()
                            + ", Gestures: " + frame.gestures().count());*/

        //HAND DATE shown when hand is detected
        /*for (Hand hand: frame.hands()) {
            String handType = hand.isLeft() ? "Left Hand" : "Right hand";
            System.out.println(handType + " " + ", id: " + hand.id()
                                + ", Palm position: " + hand.palmPosition());

            Vector normal = hand.palmNormal();
            Vector direction = hand.direction();

            System.out.println("Pitch: " + Math.toDegrees(direction.pitch())
                                        + "Roll: " + Math.toDegrees(normal.roll())
                                        + "Yaw: " + Math.toDegrees(direction.yaw()));
        }*/

        //FINGER DATA shown when hand is detected
        /*for (Finger finger: frame.fingers()) {
            System.out.println("Finger Type: " + finger.type()
                                + " ID: " + finger.id()
                                + " Finger Length (mm): " + finger.length()
                                + " Finger Width (mm): " + finger.width());

            for (Bone.Type boneType : Bone.Type.values()){
                Bone bone = finger.bone(boneType);
                System.out.println("Bone Type: " + bone.type()
                    + " Start: " + bone.prevJoint()
                    + " End : " + bone.nextJoint()
                    + " Direction: " + bone.direction());
            }
        }*/

        //TOOL DATA
        /*for (Tool tool: frame.tools()) {
            System.out.println("Tool ID: " + tool.id()
                                + " Tip Position: " + tool.tipPosition()
                                + " Direction: " + tool.direction()
                                + " Width (mm): " + tool.width()
                                + " Touch Distance (mm): " + tool.touchDistance());
        }*/

        //GESTURE
        GestureList gestures = frame.gestures();
        for (int i = 0; i < gestures.count(); i++) {
            Gesture gesture = gestures.get(i);

            switch (gesture.type()) {
            case TYPE_CIRCLE:
                CircleGesture circle = new CircleGesture(gesture);

                String clockWiseness;
                if (circle.pointable().direction().angleTo(circle.normal()) <= Math.PI/4 ) {
                    clockWiseness = "clockwise";
                } else {
                    clockWiseness = "counter-clockwise";
                }

                double sweptAngle = 0;
                if (circle.state() != State.STATE_START) {
                    CircleGesture previous = new CircleGesture(controller.frame(1).gesture(circle.id()));
                    sweptAngle = (circle.progress() - previous.progress()) * 2 * Math.PI;
                } 

                System.out.println("Circle ID: " + circle.id()
                                    + " State: " + circle.state()
                                    // Progress = how many times did you make the circle
                                    + " Progress " + circle.progress()
                                    + " Radius: " + circle.radius()
                                    + " Angle: " + Math.toDegrees(sweptAngle)
                                    + " Direction: " + clockWiseness);

                break;

            case TYPE_SWIPE:
                SwipeGesture swipe = new SwipeGesture(gesture);
                System.out.println("Swipe ID: " + swipe.id()
                                + " State: " + swipe.state()
                                + " Swipe Position (mm): " + swipe.position()
                                + " Direction: " + swipe.direction()
                                + " Speed (mm/s): " + swipe.speed());
                break;

            case TYPE_SCREEN_TAP:
                ScreenTapGesture screenTap = new ScreenTapGesture();
                System.out.println("Tap ID: " + screenTap.id()
                                + " State: " + screenTap.state()
                                + " Position: " + screenTap.position()
                                + " Direction: " + screenTap.direction());
                break;

            case TYPE_KEY_TAP:
                KeyTapGesture keyTap = new KeyTapGesture();
                System.out.println("Key ID: " + keyTap.id()
                                    + " State: " + keyTap.state()
                                    + " Position: " + keyTap.position()
                                    + " Direction: " + keyTap.direction());
                break;

            default:
                    System.out.println("Unkown gesture");
                    break;
            }

        }

    }
}

public class LeapController {

    public static void main(String[] args) {
        //Initialize the listener
        LeapListener listener = new LeapListener();
        Controller controller = new Controller();

        controller.addListener(listener);

        System.out.println("Press enter to quit");

        try {
            System.in.read();
        } catch (IOException e){
            e.printStackTrace();
        }

        controller.removeListener(listener);
    }

}

当我需要显示我的手的数据时(该代码中对此进行了注释),该代码可以完美地工作,但是它从未进入为显示手势而创建的for中。你知道为什么吗?

这些是我试图识别的手势:

enter image description here

-

0 个答案:

没有答案