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); }
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); } } } }