Exemplo n.º 1
0
    public void UpdateAngle(Skeleton s)
    {
        Joint      joint            = s.GetJoint(JointType);
        Quaternion jointOrientation = Quaternion.Inverse(CalibrationInfo.SensorOrientation) * joint.ToQuaternionMirrored() * BaseRotOffset;

        Bone.rotation = jointOrientation;
    }
Exemplo n.º 2
0
    void ProcessSkeleton(Skeleton skeleton)
    {
        print($"Frame Counter: {frameCtr}");
        //Calculate the model position: take the Torso position and invert movement along the Z axis

        UnityEngine.Vector3 torsoPos = Quaternion.Euler(0f, 180f, 0f) * (-0.001f * skeleton.GetJoint(JointType.Torso).ToVector3());
        torsoPos[0] = torsoPos[0] * posModifier[0];
        for (int i = 0; i < 3; i++)
        {
            torsoPos[i] = torsoPos[i] + posModifier[i];
        }
        torsoPos           = torsoPos + posModifierPreview;
        transform.position = torsoPos;

        foreach (var riggedJoint in jointsRigged)
        {
            try {
                //Get joint from the Nuitrack
                nuitrack.Joint joint = skeleton.GetJoint(riggedJoint.Key);

                ModelJoint modelJoint = riggedJoint.Value;

                //Calculate the model bone rotation: take the mirrored joint orientation, add a basic rotation of the model bone, invert movement along the Z axis
                Quaternion jointOrient = Quaternion.Inverse(CalibrationInfo.SensorOrientation) * (joint.ToQuaternion()) * modelJoint.baseRotOffset;

                modelJoint.bone.rotation = jointOrient;
            } catch {
                // Ignore IndexOutOfRangeException (it occurs because model has more available joints than those provided by orbbec)
            }
        }
    }
Exemplo n.º 3
0
    void OnSkeletonUpdate(SkeletonData skeletonData)
    {
        string json = Nuitrack.GetInstancesJson();

        faceInfo = JsonUtility.FromJson <FaceInfo>(json.Replace("\"\"", "[]"));

        if (faceInfo.Instances.Length == 0)
        {
            return;
        }

        for (int i = 0; i < faceAnimControllers.Count; i++)
        {
            if (i < skeletonData.Skeletons.Length)
            {
                Skeleton skeleton = skeletonData.GetSkeletonByID(faceInfo.Instances[i].id);
                if (skeleton != null)
                {
                    nuitrack.Joint headJoint = skeleton.GetJoint(JointType.Head);

                    faceAnimControllers[i].gameObject.SetActive(headJoint.Confidence > 0.5f);
                    faceAnimControllers[i].UpdateFace(faceInfo.Instances[i], headJoint);
                }
            }
            else
            {
                faceAnimControllers[i].gameObject.SetActive(false);
            }
        }
    }
Exemplo n.º 4
0
    nuitrack.Joint[] ProcessKafkaMessage(string value)
    {
        nuitrack.Joint[] skeletonJoints = new nuitrack.Joint[19];

        print("1");


        string[] partitions = Regex.Split(value, "\"orientations\"");

        string[] pos = Regex.Split(partitions[0], "\"");
        string[] ori = Regex.Split(partitions[1], "\"");
        string[] vecStr;

        int h = 2;
        int i;
        int j = 0;
        int k;

        for (i = 7; i < pos.Length; i += 2)
        {
            vecStr = Regex.Split(Regex.Split(Regex.Split(pos[i + 1], "\\[")[1], "\\]")[0], ",");
            nuitrack.Vector3 vec = new nuitrack.Vector3(
                float.Parse(vecStr[0], CultureInfo.InvariantCulture.NumberFormat),
                float.Parse(vecStr[1], CultureInfo.InvariantCulture.NumberFormat),
                float.Parse(vecStr[2], CultureInfo.InvariantCulture.NumberFormat)
                );

            //print(ori[h]);
            string[] tmp1 = Regex.Split(ori[h], "\\[");
            string[] tmp2 = Regex.Split(tmp1[1], "\\]");
            vecStr = Regex.Split(tmp2[0], ","); h += 2;
            nuitrack.Orientation mat = new nuitrack.Orientation();
            mat.Matrix = new float[9];
            for (k = 0; k < 9; k++)
            {
                mat.Matrix[k] = float.Parse(vecStr[k], CultureInfo.InvariantCulture.NumberFormat);
                //print(mat.Matrix[k]);
            }

            nuitrack.Joint curJoint = new nuitrack.Joint();
            curJoint.Type   = jointMapping[pos[i]];
            curJoint.Real   = vec;
            curJoint.Orient = mat;

            skeletonJoints[j] = curJoint;
            j++;
            //if(j==19) {print(j)};
        }
        print("2");
        return(skeletonJoints);
    }
Exemplo n.º 5
0
    public override ComparisonFrameData Compare(Skeleton s1, Skeleton s2)
    {
        ComparisonFrameData comparisonData = new ComparisonFrameData();

        Skeleton uniformSkeleton1 = UniformSkeleton(s1);
        Skeleton uniformSkeleton2 = UniformSkeleton(s2);

        Joint[] joints1 = uniformSkeleton1.Joints;
        Joint[] joints2 = uniformSkeleton2.Joints;

        for (int i = 0; i < joints1.Length; i++)
        {
            Joint j1 = joints1[i];
            Joint j2 = joints2[i];

            if (j1.Type != j2.Type)
            {
                throw new InvalidOperationException($"wrong type of joints being compared: {j1.Type} != {j2.Type}");
            }

            Vector3 v1 = j1.ToVector3();
            Vector3 v2 = j2.ToVector3();

            Vector3 diff        = v2 - v1;
            float   preliminary = diff.magnitude;

            #region Different preliminary implementations

            //float preliminary = Mathf.Atan(v2.sqrMagnitude/v1.sqrMagnitude);
            //float preliminary = Mathf.Clamp(diff.magnitude, 0, 1);
            //float preliminary = v1 == v2 ? 1.0f : Vector3.Dot(v1, v2);
            //float preliminary = v1 == v2 ? 1.0f : Vector3.Dot(v1, v2);

            #endregion

            //float score = curve.Evaluate(preliminary);
            float score = curve.Evaluate(1 - preliminary);
            if (preliminary > 1.0f)
            {
                Debug.Log($"{j1.Type} : {preliminary}");
            }

            comparisonData[j1.Type] = score;
        }

        return(comparisonData);
    }
    public void ProcessSkeleton(Skeleton skeleton)
    {
        if (skeleton == null)
        {
            return;
        }

        for (int i = 0; i < jointsInfo.Length; i++)
        {
            nuitrack.Joint j = skeleton.GetJoint(jointsInfo[i]);
            if (j.Confidence > 0.5f)
            {
                joints[jointsInfo[i]].SetActive(true);
                joints[jointsInfo[i]].transform.position = new Vector2(j.Proj.X * Screen.width, Screen.height - j.Proj.Y * 344f);
            }
            else
            {
                joints[jointsInfo[i]].SetActive(false);
            }
        }

        for (int i = 0; i < connectionsInfo.GetLength(0); i++)
        {
            GameObject startJoint = joints[connectionsInfo[i, 0]];
            GameObject endJoint   = joints[connectionsInfo[i, 1]];

            if (startJoint.activeSelf && endJoint.activeSelf)
            {
                connections[i].SetActive(true);

                connections[i].transform.position = startJoint.transform.position;
                connections[i].transform.right    = endJoint.transform.position - startJoint.transform.position;
                float distance = Vector3.Distance(endJoint.transform.position, startJoint.transform.position);
                connections[i].transform.localScale = new Vector3(distance, 1f, 1f);
            }
            else
            {
                connections[i].SetActive(false);
            }
        }

        this.waistRollingAvgY = (JointPosition(JointType.Waist).y + this.waistRollingAvgY) / 2;
        this.gestureBarContainer.transform.position = JointPosition(JointType.Head) + new Vector3(50, 0, 0);
    }
Exemplo n.º 7
0
    protected Skeleton UniformSkeleton(Skeleton s)
    {
        Vector3 originalTorsoPos = Vector3.zero;

        Joint[] uniformJoints = new Joint[s.Joints.Length];

        for (int i = 0; i < uniformJoints.Length; i++)
        {
            Joint joint = s.Joints[i];

            Vector3 jointVector           = joint.ToVector3();
            Vector3 translatedJointVector = jointVector - originalTorsoPos;
            Vector3 normalizedVector      = translatedJointVector.normalized;

            joint.Real       = normalizedVector.ToNuitrackVector3();
            uniformJoints[i] = joint;
        }

        return(new Skeleton(s.ID, uniformJoints));
    }
Exemplo n.º 8
0
    void FixedUpdate()
    {
        Skeleton userSkeleton = SkeletonProvider.CurSkeleton;

        if (userSkeleton == null || !Enabled)
        {
            meshRenderer.enabled = false;
        }
        else
        {
            try {
                Joint joint = userSkeleton.GetJoint(JointType);
                actualPosition       = joint.ToVector3();
                meshRenderer.enabled = joint.Confidence >= MINIMUM_CONFIDENCE;

                Vector3 jointVector = joint.ToVector3();
                Vector3 newPosition = 0.01f * jointVector;

                if (Bound)
                {
                    newPosition += Origin;

                    if (JointType == OffsetJointType)
                    {
                        OwnerNativeAvatar.JointTrackerOffsetDistance = newPosition;
                        newPosition = Origin;
                    }
                    else
                    {
                        newPosition += Origin - OwnerNativeAvatar.JointTrackerOffsetDistance;
                    }
                }

                meshRenderer.material.color = Color;
                transform.position          = newPosition;
            } catch (IndexOutOfRangeException) {
                meshRenderer.enabled = false;
            }
        }
    }