0

これは、いくつかの計算を含むポイントを記録するために使用するコードです。そうです、ポイントの値の場所を取得し、計算を行ってから、それらをリストに保存します。

gesture.L.E.AddFrameDescriptor(
    joints[JointType.ElbowLeft].Position.X, joints[JointType.ElbowLeft].Position.Y, joints[JointType.ElbowLeft].Position.Z,
    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
    spineBaseShoulderRHO
    );
gesture.L.W.AddFrameDescriptor(
    joints[JointType.WristLeft].Position.X, joints[JointType.WristLeft].Position.Y, joints[JointType.WristLeft].Position.Z,
    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
    spineBaseShoulderRHO
    );
gesture.L.H.AddFrameDescriptor(
    joints[JointType.HandTipLeft].Position.X, joints[JointType.HandTipLeft].Position.Y, joints[JointType.HandTipLeft].Position.Z,
    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
    spineBaseShoulderRHO
    );


gesture.R.E.AddFrameDescriptor(
    joints[JointType.ElbowRight].Position.X, joints[JointType.ElbowRight].Position.Y, joints[JointType.ElbowRight].Position.Z,
    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
    spineBaseShoulderRHO
    );
gesture.R.W.AddFrameDescriptor(
    joints[JointType.WristRight].Position.X, joints[JointType.WristRight].Position.Y, joints[JointType.WristRight].Position.Z,
    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
    spineBaseShoulderRHO
    );
gesture.R.H.AddFrameDescriptor(
    joints[JointType.HandTipRight].Position.X, joints[JointType.HandTipRight].Position.Y, joints[JointType.HandTipRight].Position.Z,
    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
    spineBaseShoulderRHO
    );

何らかの理由で、20回ほど繰り返される多くの値が繰り返されます。単一の値のみを保存すると、重要な値が得られ、繰り返しがなくなります。さらに、値の差は、0.05513 と 0.05413 のように互いに非常に近くなります。 20 0.05013 です。

編集リストに複数の値を保存した場合に得られるサンプル値は次のとおりです。

0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.399695181 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401078759 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401423597 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625 0.401669625

ご覧のとおり、数字は 20 回ほど繰り返されています。

拡張コード

private void DrawBody(IReadOnlyDictionary<JointType, Joint> joints, IDictionary<JointType, Point> jointPoints, DrawingContext drawingContext, Pen drawingPen)
    {
        foreach (var bone in this.bones)
        {
            this.DrawBone(joints, jointPoints, bone.Item1, bone.Item2, drawingContext, drawingPen);
        }

        foreach (JointType jointType in joints.Keys)
        {
            if (!(jointType.Equals(JointType.HandLeft) || jointType.Equals(JointType.HandRight) || jointType.Equals(JointType.ThumbLeft) || jointType.Equals(JointType.ThumbRight)))
            {
                Brush drawBrush = null;

                TrackingState trackingState = joints[jointType].TrackingState;

                if (trackingState == TrackingState.Tracked)
                {
                    drawBrush = this.trackedJointBrush;

                    check.Add(joints[JointType.ElbowLeft].Position.X);
                    if (this.status_active)
                    {
                        if (!this.status_ready && (new MathFunctions().GetDist2P(joints[JointType.HandTipLeft].Position.X, joints[JointType.HandTipRight].Position.X) <= 0.03 && joints[JointType.HandTipLeft].Position.Y < joints[JointType.SpineMid].Position.Y && joints[JointType.HandTipRight].Position.Y < joints[JointType.SpineMid].Position.Y))
                        {
                            lbl_status.Content = "READY"; lbl_status.Foreground = Brushes.Green; ellps_status.Fill = Brushes.Green;
                            this.status_ready = true;
                        }

                        else if (this.status_ready)
                        {
                            if (!this.status_recording && (joints[JointType.HandTipLeft].Position.Y > joints[JointType.SpineBase].Position.Y || joints[JointType.HandTipRight].Position.Y > joints[JointType.SpineBase].Position.Y))
                            {
                                lbl_status.Content = "RECORDING"; lbl_status.Foreground = Brushes.Red; ellps_status.Fill = Brushes.Red;
                                this.status_recording = true;

                                this.gesture = new Gesture();

                                spineBaseShoulderRHO = new MathFunctions().GetRho(
                                                                new MathFunctions().GetDist2P(joints[JointType.SpineBase].Position.X, joints[JointType.SpineShoulder].Position.X),
                                                                new MathFunctions().GetDist2P(joints[JointType.SpineBase].Position.Y, joints[JointType.SpineShoulder].Position.Y),
                                                                new MathFunctions().GetDist2P(joints[JointType.SpineBase].Position.Z, joints[JointType.SpineShoulder].Position.Z)
                                    );
                            }

                            else if (status_recording)
                            {
                                if (joints[JointType.HandTipLeft].Position.Y < joints[JointType.SpineBase].Position.Y && joints[JointType.HandTipRight].Position.Y < joints[JointType.SpineBase].Position.Y)
                                {
                                    lbl_status.Content = "ACTIVE"; lbl_status.Foreground = Brushes.Black; ellps_status.Fill = Brushes.Black;

                                    this.status_active = true;
                                    this.status_ready = false;
                                    this.status_recording = false;

                                    gesture = new SLFunctions().RemoveRedundantPoints(gesture);

                                    //  identify gesture
                                    if (tbox_word.Text == "")
                                    {
                                        SimilarityIndex minIndex = new SLFunctions().IdentifyGesture(library, gesture);

                                        lbl_word.Content = minIndex.gestureName;
                                    }

                                    //  new gesture
                                    else
                                    {
                                        gesture.name = tbox_word.Text;

                                        new SLFunctions().SaveGesture(gesture, "library");

                                        library.Add(gesture);

                                        tbox_word.Text = "";
                                    }
                                }
                                #region AddFrameDescriptor

                                gesture.L.E.AddFrameDescriptor(
                                    joints[JointType.ElbowLeft].Position.X, joints[JointType.ElbowLeft].Position.Y, joints[JointType.ElbowLeft].Position.Z,
                                    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
                                    spineBaseShoulderRHO
                                    );
                                gesture.L.W.AddFrameDescriptor(
                                    joints[JointType.WristLeft].Position.X, joints[JointType.WristLeft].Position.Y, joints[JointType.WristLeft].Position.Z,
                                    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
                                    spineBaseShoulderRHO
                                    );
                                gesture.L.H.AddFrameDescriptor(
                                    joints[JointType.HandTipLeft].Position.X, joints[JointType.HandTipLeft].Position.Y, joints[JointType.HandTipLeft].Position.Z,
                                    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
                                    spineBaseShoulderRHO
                                    );


                                gesture.R.E.AddFrameDescriptor(
                                    joints[JointType.ElbowRight].Position.X, joints[JointType.ElbowRight].Position.Y, joints[JointType.ElbowRight].Position.Z,
                                    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
                                    spineBaseShoulderRHO
                                    );
                                gesture.R.W.AddFrameDescriptor(
                                    joints[JointType.WristRight].Position.X, joints[JointType.WristRight].Position.Y, joints[JointType.WristRight].Position.Z,
                                    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
                                    spineBaseShoulderRHO
                                    );
                                gesture.R.H.AddFrameDescriptor(
                                    joints[JointType.HandTipRight].Position.X, joints[JointType.HandTipRight].Position.Y, joints[JointType.HandTipRight].Position.Z,
                                    joints[JointType.SpineMid].Position.X, joints[JointType.SpineMid].Position.Y, joints[JointType.SpineMid].Position.Z,
                                    spineBaseShoulderRHO
                                    );
                                #endregion
                            }
                        }
                    }
                }

                else if (trackingState == TrackingState.Inferred)
                {
                    drawBrush = this.inferredJointBrush;
                }

                if (drawBrush != null)
                {
                    drawingContext.DrawEllipse(drawBrush, null, jointPoints[jointType], JointThickness, JointThickness);
                }
            }
        }
    }
4

0 に答える 0