示例#1
0
        public static List <MLSkeleton> GetValidSkeletons(List <MLSkeleton> results)
        {
            if (results == null || results.Count == 0)
            {
                return(results);
            }
            List <MLSkeleton> mSkeletons = new List <MLSkeleton>();

            foreach (MLSkeleton skeleton in results)
            {
                List <MLJoint>  mJoints = new List <MLJoint>();
                IList <MLJoint> joints  = skeleton.Joints;
                foreach (MLJoint joint in joints)
                {
                    // Remove invalid point.
                    if (!(Math.Abs(joint.PointX - 0f) == 0 && Math.Abs(joint.PointY - 0f) == 0) &&
                        joint.Score >= MinJointScore)
                    {
                        mJoints.Add(joint);
                    }
                    else
                    {
                        mJoints.Add(new MLJoint(0f, 0f, joint.Type, 0f));
                    }
                }
                MLSkeleton mSkeleton = new MLSkeleton(mJoints);
                mSkeletons.Add(mSkeleton);
            }
            return(mSkeletons);
        }
示例#2
0
        public override void Draw(Canvas canvas)
        {
            for (int i = 0; i < skeletons.Count; i++)
            {
                MLSkeleton skeleton = skeletons.ElementAt(i);
                if (skeleton.Joints == null || skeleton.Joints.Count < 14)
                {
                    continue;
                }
                List <Path> paths = new List <Path>();
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeHeadTop), skeleton.GetJointPoint(MLJoint.TypeNeck)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeNeck), skeleton.GetJointPoint(MLJoint.TypeLeftShoulder)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeLeftShoulder), skeleton.GetJointPoint(MLJoint.TypeLeftElbow)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeLeftElbow), skeleton.GetJointPoint(MLJoint.TypeLeftWrist)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeNeck), skeleton.GetJointPoint(MLJoint.TypeLeftHip)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeLeftHip), skeleton.GetJointPoint(MLJoint.TypeLeftKnee)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeLeftKnee), skeleton.GetJointPoint(MLJoint.TypeLeftAnkle)));

                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeNeck), skeleton.GetJointPoint(MLJoint.TypeRightShoulder)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeRightShoulder), skeleton.GetJointPoint(MLJoint.TypeRightElbow)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeRightElbow), skeleton.GetJointPoint(MLJoint.TypeRightWrist)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeNeck), skeleton.GetJointPoint(MLJoint.TypeRightHip)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeRightHip), skeleton.GetJointPoint(MLJoint.TypeRightKnee)));
                paths.Add(GetPath(skeleton.GetJointPoint(MLJoint.TypeRightKnee), skeleton.GetJointPoint(MLJoint.TypeRightAnkle)));

                for (int j = 0; j < paths.Count; j++)
                {
                    if (paths.ElementAt(j) != null)
                    {
                        canvas.DrawPath(paths.ElementAt(j), linePaint);
                    }
                }

                foreach (MLJoint joint in skeleton.Joints)
                {
                    if (!(Math.Abs(joint.PointX - 0f) == 0 && Math.Abs(joint.PointY - 0f) == 0))
                    {
                        canvas.DrawCircle(TranslateX(joint.PointX),
                                          TranslateY(joint.PointY), 24f, circlePaint);
                    }
                }
            }
        }