From 60bff660d21d7c99552b3295e282f6b9fbcfd4fb Mon Sep 17 00:00:00 2001 From: Mautisim Munir Date: Fri, 28 Oct 2022 20:19:04 +0500 Subject: [PATCH] added confidence threshold while drawing --- .../ComputerVisionPluginImpl.java | 12 ++++++++++++ .../solutions/posetracking/PoseTrackingResult.java | 7 ++++++- .../posetracking/PoseTrackingResultGlRenderer.java | 9 +++++++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/mediapipe/examples/android/solutions/posetracking-lindera/src/main/java/com/google/mediapipe/examples/posetracking_lindera/ComputerVisionPluginImpl.java b/mediapipe/examples/android/solutions/posetracking-lindera/src/main/java/com/google/mediapipe/examples/posetracking_lindera/ComputerVisionPluginImpl.java index 6ae829d53..705a1a699 100644 --- a/mediapipe/examples/android/solutions/posetracking-lindera/src/main/java/com/google/mediapipe/examples/posetracking_lindera/ComputerVisionPluginImpl.java +++ b/mediapipe/examples/android/solutions/posetracking-lindera/src/main/java/com/google/mediapipe/examples/posetracking_lindera/ComputerVisionPluginImpl.java @@ -80,6 +80,18 @@ public class ComputerVisionPluginImpl implements ComputerVisionPlugin { } } abbrev = abbrev.toUpperCase(Locale.ROOT); + // correct abbreviations here + switch (abbrev) { + case "P": + abbrev = "PE"; + break; + case "T": + abbrev = "TH"; + break; + case "S": + abbrev = "SP"; + break; + } XYZPointWithConfidence data = (XYZPointWithConfidence) field.get(bodyJoints); assert data != null; bodyJointsString = bodyJointsString.concat(String.format(abbrev+":%f,%f,%f=",data.x,data.y,data.z)); diff --git a/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResult.java b/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResult.java index fb77d0cd9..0106893df 100644 --- a/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResult.java +++ b/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResult.java @@ -126,17 +126,22 @@ public class PoseTrackingResult extends ImageSolutionResult { float x = 0; float y = 0; float z = 0; + float confidence = 1; + float presence = 1; final List ptsIdx = Arrays.asList(LEFT_EAR, LEFT_EYE, RIGHT_EYE, RIGHT_EAR); for (Integer i :ptsIdx){ LandmarkProto.Landmark landmark = landmarks.get(i); x+=landmark.getX(); y+=landmark.getY(); z+=landmark.getZ(); + presence = min(presence,landmark.getPresence()); + confidence = min(confidence,landmark.getVisibility()); } x = x/ptsIdx.size(); y = y/ptsIdx.size(); z = z/ptsIdx.size(); - LandmarkProto.Landmark midupper = LandmarkProto.Landmark.newBuilder().setX(x).setY(y).setZ(z).build(); + LandmarkProto.Landmark midupper = LandmarkProto.Landmark.newBuilder().setX(x).setY(y).setZ(z) + .setVisibility(confidence).setPresence(presence).build(); LandmarkProto.Landmark midlower = getJointBetweenPoints(landmarks.get(MOUTH_LEFT), landmarks.get(MOUTH_RIGHT), 0.5f); diff --git a/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResultGlRenderer.java b/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResultGlRenderer.java index c7fb83ecc..b85e21420 100644 --- a/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResultGlRenderer.java +++ b/mediapipe/java/com/google/mediapipe/solutions/posetracking/PoseTrackingResultGlRenderer.java @@ -24,7 +24,9 @@ import com.google.mediapipe.solutioncore.ResultGlRenderer; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; - +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** A custom implementation of {@link ResultGlRenderer} to render {@link PoseTrackingResult}. */ @@ -91,7 +93,10 @@ public class PoseTrackingResultGlRenderer implements ResultGlRenderer landmarks = result.multiPoseLandmarks(); + ImmutableList originalLandmarks = result.multiPoseLandmarks(); + List landmarks = originalLandmarks.stream().filter((landmark -> { + return landmark.getVisibility() > 0.25 || landmark.getPresence()>0.25; + })).collect(Collectors.toList()); // Draw keypoints.