From d7bc754150fe808aaea679b439109510f81bf0d2 Mon Sep 17 00:00:00 2001 From: mslight Date: Thu, 14 Jul 2022 15:08:37 +0400 Subject: [PATCH] Live camera fix --- .../beauty/draw_lipstick_calculator.cc | 20 +++++------ .../beauty/smooth_face_calculator.cc | 35 ++++++++----------- .../beauty/whiten_teeth_calculator.cc | 32 ++++++----------- mediapipe/graphs/beauty/subgraphs/BUILD | 1 - 4 files changed, 35 insertions(+), 53 deletions(-) diff --git a/mediapipe/calculators/beauty/draw_lipstick_calculator.cc b/mediapipe/calculators/beauty/draw_lipstick_calculator.cc index 4dcabb00d..c71567199 100644 --- a/mediapipe/calculators/beauty/draw_lipstick_calculator.cc +++ b/mediapipe/calculators/beauty/draw_lipstick_calculator.cc @@ -148,11 +148,6 @@ namespace mediapipe { return absl::OkStatus(); } - if (cc->Inputs().HasTag(kMaskTag) && - cc->Inputs().Tag(kMaskTag).IsEmpty()) - { - return absl::OkStatus(); - } // Initialize render target, drawn with OpenCV. std::unique_ptr image_mat; @@ -163,14 +158,17 @@ namespace mediapipe MP_RETURN_IF_ERROR(CreateRenderTargetCpu(cc, image_mat, &target_format)); } - const std::vector> &mask_vec = - cc->Inputs().Tag(kMaskTag).Get>>(); - if (mask_vec.size() > 0) + if (cc->Inputs().HasTag(kMaskTag) && + !cc->Inputs().Tag(kMaskTag).IsEmpty()) { - for (auto mask : mask_vec) - MP_RETURN_IF_ERROR(DrawLipstick(cc, image_mat, &target_format, mask)); + const std::vector> &mask_vec = + cc->Inputs().Tag(kMaskTag).Get>>(); + if (mask_vec.size() > 0) + { + for (auto mask : mask_vec) + MP_RETURN_IF_ERROR(DrawLipstick(cc, image_mat, &target_format, mask)); + } } - // Copy the rendered image to output. uchar *image_mat_ptr = image_mat->data; MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr, image_mat)); diff --git a/mediapipe/calculators/beauty/smooth_face_calculator.cc b/mediapipe/calculators/beauty/smooth_face_calculator.cc index 33b578dd1..89ca7e2bc 100644 --- a/mediapipe/calculators/beauty/smooth_face_calculator.cc +++ b/mediapipe/calculators/beauty/smooth_face_calculator.cc @@ -164,16 +164,6 @@ namespace mediapipe { return absl::OkStatus(); } - if (cc->Inputs().HasTag(kMaskTag) && - cc->Inputs().Tag(kMaskTag).IsEmpty()) - { - return absl::OkStatus(); - } - if (cc->Inputs().HasTag(kFaceBoxTag) && - cc->Inputs().Tag(kFaceBoxTag).IsEmpty()) - { - return absl::OkStatus(); - } // Initialize render target, drawn with OpenCV. ImageFormat::Format target_format; @@ -187,18 +177,23 @@ namespace mediapipe image_width_ = image_mat->cols; image_height_ = image_mat->rows; - const std::vector> &mask_vec = - cc->Inputs().Tag(kMaskTag).Get>>(); - - const std::vector> &face_box = - cc->Inputs().Tag(kFaceBoxTag).Get>>(); - - if (mask_vec.size() > 0 && face_box.size() > 0) + if (cc->Inputs().HasTag(kMaskTag) && + !cc->Inputs().Tag(kMaskTag).IsEmpty() && + cc->Inputs().HasTag(kFaceBoxTag) && + !cc->Inputs().Tag(kFaceBoxTag).IsEmpty()) { - for (int i = 0; i < mask_vec.size(); i++) - MP_RETURN_IF_ERROR(SmoothFace(cc, &target_format, mask_vec[i], face_box[i])); - } + const std::vector> &mask_vec = + cc->Inputs().Tag(kMaskTag).Get>>(); + const std::vector> &face_box = + cc->Inputs().Tag(kFaceBoxTag).Get>>(); + + if (mask_vec.size() > 0 && face_box.size() > 0) + { + for (int i = 0; i < mask_vec.size(); i++) + MP_RETURN_IF_ERROR(SmoothFace(cc, &target_format, mask_vec[i], face_box[i])); + } + } // Copy the rendered image to output. uchar *image_mat_ptr = image_mat->data; MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr)); diff --git a/mediapipe/calculators/beauty/whiten_teeth_calculator.cc b/mediapipe/calculators/beauty/whiten_teeth_calculator.cc index 31c67eb69..a96666d9d 100644 --- a/mediapipe/calculators/beauty/whiten_teeth_calculator.cc +++ b/mediapipe/calculators/beauty/whiten_teeth_calculator.cc @@ -16,7 +16,6 @@ #include #include -//#include #include @@ -42,13 +41,6 @@ namespace mediapipe constexpr char kMaskTag[] = "MASK"; constexpr char kImageFrameTag[] = "IMAGE"; - enum - { - ATTRIB_VERTEX, - ATTRIB_TEXTURE_POSITION, - NUM_ATTRIBUTES - }; - inline bool HasImageTag(mediapipe::CalculatorContext *cc) { return false; } } // namespace @@ -153,11 +145,6 @@ namespace mediapipe { return absl::OkStatus(); } - if (cc->Inputs().HasTag(kMaskTag) && - cc->Inputs().Tag(kMaskTag).IsEmpty()) - { - return absl::OkStatus(); - } // Initialize render target, drawn with OpenCV. ImageFormat::Format target_format; @@ -169,15 +156,18 @@ namespace mediapipe mat_image_ = *image_mat.get(); image_width_ = image_mat->cols; image_height_ = image_mat->rows; - - const std::vector> &mask_vec = - cc->Inputs().Tag(kMaskTag).Get>>(); - if (mask_vec.size() > 0) - { - for (auto mask : mask_vec) - MP_RETURN_IF_ERROR(WhitenTeeth(cc, &target_format, mask)); - } + if (cc->Inputs().HasTag(kMaskTag) && + !cc->Inputs().Tag(kMaskTag).IsEmpty()) + { + const std::vector> &mask_vec = + cc->Inputs().Tag(kMaskTag).Get>>(); + if (mask_vec.size() > 0) + { + for (auto mask : mask_vec) + MP_RETURN_IF_ERROR(WhitenTeeth(cc, &target_format, mask)); + } + } // Copy the rendered image to output. uchar *image_mat_ptr = image_mat->data; MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr, image_mat)); diff --git a/mediapipe/graphs/beauty/subgraphs/BUILD b/mediapipe/graphs/beauty/subgraphs/BUILD index 62b329bf3..8fd1014ae 100644 --- a/mediapipe/graphs/beauty/subgraphs/BUILD +++ b/mediapipe/graphs/beauty/subgraphs/BUILD @@ -30,7 +30,6 @@ cc_library( "//mediapipe/calculators/beauty:smooth_face_calculator", "//mediapipe/calculators/beauty:draw_lipstick_calculator", "//mediapipe/calculators/beauty:whiten_teeth_calculator", - "//mediapipe/calculators/util:detections_to_render_data_calculator", "//mediapipe/calculators/util:landmarks_to_render_data_calculator", "//mediapipe/calculators/landmarks:landmarks_to_mask_calculator", "//mediapipe/graphs/face_mesh/calculators:face_landmarks_to_render_data_calculator",