Fix empty packet bug with no hands detected.

PiperOrigin-RevId: 480469392
This commit is contained in:
MediaPipe Team 2022-10-11 15:35:37 -07:00 committed by Copybara-Service
parent 1b611c66bb
commit 64deb791dc

View File

@ -180,6 +180,15 @@ absl::StatusOr<std::unique_ptr<GestureRecognizer>> GestureRecognizer::Create(
if (status_or_packets.value()[kImageOutStreamName].IsEmpty()) { if (status_or_packets.value()[kImageOutStreamName].IsEmpty()) {
return; return;
} }
Packet image_packet = status_or_packets.value()[kImageOutStreamName];
if (status_or_packets.value()[kHandGesturesStreamName].IsEmpty()) {
Packet empty_packet =
status_or_packets.value()[kHandGesturesStreamName];
result_callback(
{{{}, {}, {}, {}}}, image_packet.Get<Image>(),
empty_packet.Timestamp().Value() / kMicroSecondsPerMilliSecond);
return;
}
Packet gesture_packet = Packet gesture_packet =
status_or_packets.value()[kHandGesturesStreamName]; status_or_packets.value()[kHandGesturesStreamName];
Packet handedness_packet = Packet handedness_packet =
@ -188,7 +197,6 @@ absl::StatusOr<std::unique_ptr<GestureRecognizer>> GestureRecognizer::Create(
status_or_packets.value()[kHandLandmarksStreamName]; status_or_packets.value()[kHandLandmarksStreamName];
Packet hand_world_landmarks_packet = Packet hand_world_landmarks_packet =
status_or_packets.value()[kHandWorldLandmarksStreamName]; status_or_packets.value()[kHandWorldLandmarksStreamName];
Packet image_packet = status_or_packets.value()[kImageOutStreamName];
result_callback( result_callback(
{{gesture_packet.Get<std::vector<ClassificationList>>(), {{gesture_packet.Get<std::vector<ClassificationList>>(),
handedness_packet.Get<std::vector<ClassificationList>>(), handedness_packet.Get<std::vector<ClassificationList>>(),
@ -218,6 +226,9 @@ absl::StatusOr<GestureRecognitionResult> GestureRecognizer::Recognize(
ASSIGN_OR_RETURN(auto output_packets, ASSIGN_OR_RETURN(auto output_packets,
ProcessImageData({{kImageInStreamName, ProcessImageData({{kImageInStreamName,
MakePacket<Image>(std::move(image))}})); MakePacket<Image>(std::move(image))}}));
if (output_packets[kHandGesturesStreamName].IsEmpty()) {
return {{{}, {}, {}, {}}};
}
return { return {
{/* gestures= */ {output_packets[kHandGesturesStreamName] {/* gestures= */ {output_packets[kHandGesturesStreamName]
.Get<std::vector<ClassificationList>>()}, .Get<std::vector<ClassificationList>>()},
@ -247,6 +258,9 @@ absl::StatusOr<GestureRecognitionResult> GestureRecognizer::RecognizeForVideo(
{{kImageInStreamName, {{kImageInStreamName,
MakePacket<Image>(std::move(image)) MakePacket<Image>(std::move(image))
.At(Timestamp(timestamp_ms * kMicroSecondsPerMilliSecond))}})); .At(Timestamp(timestamp_ms * kMicroSecondsPerMilliSecond))}}));
if (output_packets[kHandGesturesStreamName].IsEmpty()) {
return {{{}, {}, {}, {}}};
}
return { return {
{/* gestures= */ {output_packets[kHandGesturesStreamName] {/* gestures= */ {output_packets[kHandGesturesStreamName]
.Get<std::vector<ClassificationList>>()}, .Get<std::vector<ClassificationList>>()},