From bb5782ee2ff572473428f53d8c74cf74b8638c33 Mon Sep 17 00:00:00 2001 From: Jiuqiang Tang Date: Thu, 10 Nov 2022 11:44:51 -0800 Subject: [PATCH] Correct the timestamp in the vision tasks result objects. PiperOrigin-RevId: 487597999 --- .../tasks/vision/core/BaseVisionTaskApi.java | 14 ++++++++++++++ .../gesturerecognizer/GestureRecognizer.java | 3 ++- .../vision/handlandmarker/HandLandmarker.java | 3 ++- .../vision/imageclassifier/ImageClassifier.java | 3 ++- .../vision/objectdetector/ObjectDetector.java | 3 ++- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/core/BaseVisionTaskApi.java b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/core/BaseVisionTaskApi.java index 0774b69a..04158abf 100644 --- a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/core/BaseVisionTaskApi.java +++ b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/core/BaseVisionTaskApi.java @@ -160,4 +160,18 @@ public class BaseVisionTaskApi implements AutoCloseable { .setRotation(-(float) Math.PI * imageProcessingOptions.rotationDegrees() / 180.0f) .build(); } + + /** + * Generates the timestamp of a vision task result object from the vision task running mode and + * the output packet. + * + * @param runningMode MediaPipe Vision Tasks {@link RunningMode}. + * @param packet the output {@link Packet}. + */ + public static long generateResultTimestampMs(RunningMode runningMode, Packet packet) { + if (runningMode == RunningMode.IMAGE) { + return -1; + } + return packet.getTimestamp() / MICROSECONDS_PER_MILLISECOND; + } } diff --git a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/gesturerecognizer/GestureRecognizer.java b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/gesturerecognizer/GestureRecognizer.java index d6faf598..d1ba94a1 100644 --- a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/gesturerecognizer/GestureRecognizer.java +++ b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/gesturerecognizer/GestureRecognizer.java @@ -175,7 +175,8 @@ public final class GestureRecognizer extends BaseVisionTaskApi { packets.get(HANDEDNESS_OUT_STREAM_INDEX), ClassificationList.parser()), PacketGetter.getProtoVector( packets.get(HAND_GESTURES_OUT_STREAM_INDEX), ClassificationList.parser()), - packets.get(HAND_GESTURES_OUT_STREAM_INDEX).getTimestamp()); + BaseVisionTaskApi.generateResultTimestampMs( + recognizerOptions.runningMode(), packets.get(HAND_GESTURES_OUT_STREAM_INDEX))); } @Override diff --git a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/handlandmarker/HandLandmarker.java b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/handlandmarker/HandLandmarker.java index 91ec07f0..089e1c6e 100644 --- a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/handlandmarker/HandLandmarker.java +++ b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/handlandmarker/HandLandmarker.java @@ -165,7 +165,8 @@ public final class HandLandmarker extends BaseVisionTaskApi { packets.get(WORLD_LANDMARKS_OUT_STREAM_INDEX), LandmarkList.parser()), PacketGetter.getProtoVector( packets.get(HANDEDNESS_OUT_STREAM_INDEX), ClassificationList.parser()), - packets.get(LANDMARKS_OUT_STREAM_INDEX).getTimestamp()); + BaseVisionTaskApi.generateResultTimestampMs( + landmarkerOptions.runningMode(), packets.get(LANDMARKS_OUT_STREAM_INDEX))); } @Override diff --git a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/imageclassifier/ImageClassifier.java b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/imageclassifier/ImageClassifier.java index f01546ff..5e278804 100644 --- a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/imageclassifier/ImageClassifier.java +++ b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/imageclassifier/ImageClassifier.java @@ -176,7 +176,8 @@ public final class ImageClassifier extends BaseVisionTaskApi { PacketGetter.getProto( packets.get(CLASSIFICATIONS_OUT_STREAM_INDEX), ClassificationsProto.ClassificationResult.getDefaultInstance())), - packets.get(CLASSIFICATIONS_OUT_STREAM_INDEX).getTimestamp()); + BaseVisionTaskApi.generateResultTimestampMs( + options.runningMode(), packets.get(CLASSIFICATIONS_OUT_STREAM_INDEX))); } catch (IOException e) { throw new MediaPipeException( MediaPipeException.StatusCode.INTERNAL.ordinal(), e.getMessage()); diff --git a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/objectdetector/ObjectDetector.java b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/objectdetector/ObjectDetector.java index 3f944eae..769b9137 100644 --- a/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/objectdetector/ObjectDetector.java +++ b/mediapipe/tasks/java/com/google/mediapipe/tasks/vision/objectdetector/ObjectDetector.java @@ -173,7 +173,8 @@ public final class ObjectDetector extends BaseVisionTaskApi { return ObjectDetectionResult.create( PacketGetter.getProtoVector( packets.get(DETECTIONS_OUT_STREAM_INDEX), Detection.parser()), - packets.get(DETECTIONS_OUT_STREAM_INDEX).getTimestamp()); + BaseVisionTaskApi.generateResultTimestampMs( + detectorOptions.runningMode(), packets.get(DETECTIONS_OUT_STREAM_INDEX))); } @Override