コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        if (saveCounter == 6 && !flag)
        {
            for (int i = 0; i < 2 * numExercises; i++)
            {
                //Get the data of the particular pose from the respective exercise, store it PoseModelDataClass object and then add it to the AllSavedPoses array
                PoseModelDataClass pose = new PoseModelDataClass();

                pose.numExercise = exerciseIndex;
                pose.BonePos     = ArraySavedPoses[i];

                AllSavedPoses.Add(pose);
            }
            flag = true;
        }
    }
コード例 #2
0
        // Gets the difference between the User pose and the list of saved poses
        private void GetPoseDifference(bool isMirrored)
        {
            // by-default values
            bPoseMatched   = false;
            fMatchPercent  = 0f;
            fMatchPoseTime = 0f;

            KinectManager kinectManager = KinectManager.Instance;

            if (poseJoints == null || poseUser.avBoneDirs == null)
            {
                return;
            }

            if (sbDebug != null)
            {
                sbDebug.Clear();
                sbDebug.AppendLine();
            }

            // check the difference with saved poses, starting from the last one
            for (int p = 0; p < 2; p++)
            {
                float fAngleDiff = 0f;
                float fMaxDiff   = 0f;

                PoseModelDataClass modelPose = PoseArchive.AllSavedPoses[p + exerNum];
                for (int i = 0; i < poseJoints.Count; i++)
                {
                    Vector3 vPoseBone = modelPose.BonePos[i];
                    Vector3 vUserBone = poseUser.avBoneDirs[i];

                    if (vPoseBone == Vector3.zero || vUserBone == Vector3.zero)
                    {
                        continue;
                    }

                    float fDiff = Vector3.Angle(vPoseBone, vUserBone);
                    if (fDiff > 90f)
                    {
                        fDiff = 90f;
                    }

                    fAngleDiff += fDiff;
                    fMaxDiff   += 90f; // we assume the max diff could be 90 degrees

                    if (sbDebug != null)
                    {
                        sbDebug.AppendFormat("SP: {0}, {1} - angle: {2:F0}, match: {3:F0}%", p, poseJoints[i], fDiff, (1f - fDiff / 90f) * 100f);
                        sbDebug.AppendLine();
                    }
                }

                float fPoseMatch = fMaxDiff > 0f ? (1f - fAngleDiff / fMaxDiff) : 0f;
                if (fPoseMatch > fMatchPercent)
                {
                    fMatchPercent = fPoseMatch;
                    //fMatchPoseTime = poseModel.fTime;
                    bPoseMatched = (fMatchPercent >= matchThreshold);
                    if (bPoseMatched)
                    {
                        matchPercentIndex[p] = fMatchPercent * 100f;
                    }
                    else
                    {
                        matchPercentIndex[p] = 0;
                    }
                }
            }

            Debug.Log("THE MATCH PERCENTAGES ARE HERE: " + new Vector2(matchPercentIndex[0], matchPercentIndex[1]));
            //PosePercentage.text = matchPercentIndex[0].ToString() + "   ,   " + matchPercentIndex[1].ToString();

            //This is to find which pose the user is close to

            /*
             * if (matchPercentIndex[0] != 0 && matchPercentIndex[1] != 0)
             * {
             *  Debug.Log(new Vector2(matchPercentIndex[0], matchPercentIndex[1]));
             *  if (matchPercentIndex[0] / matchPercentIndex[1] > 1)
             *      identifiedPose = 1;
             *  else
             *      identifiedPose = 2;
             * }
             * else
             * {
             *  identifiedPose = 0;
             * }*/

            //This is to check if user's start and end poses are close to a threshold percentage value
            if (matchPercentIndex[0] != 0 && matchPercentIndex[1] == 0)
            {
                identifiedPose = 1;
            }
            else if (matchPercentIndex[0] == 0 && matchPercentIndex[1] != 0)
            {
                identifiedPose = 2;
            }
        }