Kinect распознает слишком много движений вправо, даже если я сижу на месте

Это из моего главного окна:

foreach (Joint joint in skeleton.Joints)
{
    if (joint.TrackingState != JointTrackingState.Tracked)
        continue;

    if ((joint.JointType == JointType.HandRight) || (joint.JointType == JointType.HandLeft))
    {
        swipeGestureRecognizer.Add(joint.Position, kinectSensor, joint.JointType);
    }            
}

И мои жесты написаны так:

// Swipe to right
if (ScanPositions((p1, p2) => Math.Abs(p2.Y - p1.Y) < SwipeMaximalHeight, // Height
            (p1, p2) => p2.X - p1.X > -0.05f, // Progression to right
            (p1, p2) => Math.Abs(p2.X - p1.X) > SwipeMinimalLength, // Length
            SwipeMininalDuration, SwipeMaximalDuration)) // Duration
{
    if (jointul == JointType.HandLeft)
    {
        SetClothByGesture(1, 0);
        RaiseGestureDetected("SwipeToRight");
    }
    return;
}

// Swipe to left
if (ScanPositions((p1, p2) => Math.Abs(p2.Y - p1.Y) < SwipeMaximalHeight,  // Height
            (p1, p2) => p2.X - p1.X < 0.05f, // Progression to right
            (p1, p2) => Math.Abs(p2.X - p1.X) > SwipeMinimalLength, // Length
            SwipeMininalDuration, SwipeMaximalDuration))// Duration
{
    if (jointul == JointType.HandRight)
    {
        SetClothByGesture(-1, 0);
        RaiseGestureDetected("SwipeToLeft");
    }
    return;
}

Моя логика заключается в том, что если вы проводите правой рукой влево, то это будет что-то делать, если вы проводите левой рукой вправо, оно будет делать что-то еще. Кто-нибудь знает, что я делаю не так?

1 ответ

Решение

Изменил код, вместо того, чтобы проводить пальцами, если правая или левая рука дальше, чем голова с 0,45f, то она выполняет команду.

Другие вопросы по тегам