diff --git a/mediapipe/tasks/ios/vision/object_detector/sources/MPPObjectDetector.mm b/mediapipe/tasks/ios/vision/object_detector/sources/MPPObjectDetector.mm index e10c50be3..35c16a3e6 100644 --- a/mediapipe/tasks/ios/vision/object_detector/sources/MPPObjectDetector.mm +++ b/mediapipe/tasks/ios/vision/object_detector/sources/MPPObjectDetector.mm @@ -25,6 +25,7 @@ namespace { using ::mediapipe::NormalizedRect; using ::mediapipe::Packet; +using ::mediapipe::Timestamp; using ::mediapipe::tasks::core::PacketMap; using ::mediapipe::tasks::core::PacketsCallback; } // namespace @@ -80,13 +81,22 @@ static NSString *const kTaskGraphName = @"mediapipe.tasks.vision.ObjectDetectorG if (options.completion) { packetsCallback = [=](absl::StatusOr status_or_packets) { NSError *callbackError = nil; - MPPObjectDetectionResult *result; - if ([MPPCommonUtils checkCppError:status_or_packets.status() toError:&callbackError]) { - result = [MPPObjectDetectionResult + if (![MPPCommonUtils checkCppError:status_or_packets.status() toError:&callbackError]) { + options.completion(nil, Timestamp::Unset().Value(), callbackError); + return; + } + + PacketMap &outputPacketMap = status_or_packets.value(); + if (outputPacketMap[kImageOutStreamName.cppString].IsEmpty()) { + return; + } + + MPPObjectDetectionResult *result = [MPPObjectDetectionResult objectDetectionResultWithDetectionsPacket:status_or_packets.value() [kDetectionsStreamName.cppString]]; - } - options.completion(result, callbackError); + + options.completion(result, outputPacketMap[kImageOutStreamName.cppString].Timestamp().Value() / + kMicroSecondsPerMilliSecond, callbackError); }; } @@ -111,7 +121,7 @@ static NSString *const kTaskGraphName = @"mediapipe.tasks.vision.ObjectDetectorG return [self initWithOptions:options error:error]; } -- (nullable MPPObjectDetectionResult *)detectINImage:(MPPImage *)image +- (nullable MPPObjectDetectionResult *)detectInImage:(MPPImage *)image regionOfInterest:(CGRect)roi error:(NSError **)error { std::optional rect = diff --git a/mediapipe/tasks/ios/vision/object_detector/utils/sources/MPPObjectDetectionResult+Helpers.h b/mediapipe/tasks/ios/vision/object_detector/utils/sources/MPPObjectDetectionResult+Helpers.h index 4c4925443..645f5c565 100644 --- a/mediapipe/tasks/ios/vision/object_detector/utils/sources/MPPObjectDetectionResult+Helpers.h +++ b/mediapipe/tasks/ios/vision/object_detector/utils/sources/MPPObjectDetectionResult+Helpers.h @@ -18,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN +static const int kMicroSecondsPerMilliSecond = 1000; + @interface MPPObjectDetectionResult (Helpers) /** diff --git a/mediapipe/tasks/ios/vision/object_detector/utils/sources/MPPObjectDetectionResult+Helpers.mm b/mediapipe/tasks/ios/vision/object_detector/utils/sources/MPPObjectDetectionResult+Helpers.mm index eaa38e170..3507b7d72 100644 --- a/mediapipe/tasks/ios/vision/object_detector/utils/sources/MPPObjectDetectionResult+Helpers.mm +++ b/mediapipe/tasks/ios/vision/object_detector/utils/sources/MPPObjectDetectionResult+Helpers.mm @@ -16,8 +16,6 @@ #import "mediapipe/tasks/ios/components/containers/utils/sources/MPPDetection+Helpers.h" -static const int kMicroSecondsPerMilliSecond = 1000; - namespace { using DetectionProto = ::mediapipe::Detection; using ::mediapipe::Packet;