Live camera fix

This commit is contained in:
mslight 2022-07-14 15:08:37 +04:00
parent 0b4954e6c7
commit d7bc754150
4 changed files with 35 additions and 53 deletions

View File

@ -148,11 +148,6 @@ namespace mediapipe
{ {
return absl::OkStatus(); return absl::OkStatus();
} }
if (cc->Inputs().HasTag(kMaskTag) &&
cc->Inputs().Tag(kMaskTag).IsEmpty())
{
return absl::OkStatus();
}
// Initialize render target, drawn with OpenCV. // Initialize render target, drawn with OpenCV.
std::unique_ptr<cv::Mat> image_mat; std::unique_ptr<cv::Mat> image_mat;
@ -163,6 +158,9 @@ namespace mediapipe
MP_RETURN_IF_ERROR(CreateRenderTargetCpu(cc, image_mat, &target_format)); MP_RETURN_IF_ERROR(CreateRenderTargetCpu(cc, image_mat, &target_format));
} }
if (cc->Inputs().HasTag(kMaskTag) &&
!cc->Inputs().Tag(kMaskTag).IsEmpty())
{
const std::vector<std::unordered_map<std::string, cv::Mat>> &mask_vec = const std::vector<std::unordered_map<std::string, cv::Mat>> &mask_vec =
cc->Inputs().Tag(kMaskTag).Get<std::vector<std::unordered_map<std::string, cv::Mat>>>(); cc->Inputs().Tag(kMaskTag).Get<std::vector<std::unordered_map<std::string, cv::Mat>>>();
if (mask_vec.size() > 0) if (mask_vec.size() > 0)
@ -170,7 +168,7 @@ namespace mediapipe
for (auto mask : mask_vec) for (auto mask : mask_vec)
MP_RETURN_IF_ERROR(DrawLipstick(cc, image_mat, &target_format, mask)); MP_RETURN_IF_ERROR(DrawLipstick(cc, image_mat, &target_format, mask));
} }
}
// Copy the rendered image to output. // Copy the rendered image to output.
uchar *image_mat_ptr = image_mat->data; uchar *image_mat_ptr = image_mat->data;
MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr, image_mat)); MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr, image_mat));

View File

@ -164,16 +164,6 @@ namespace mediapipe
{ {
return absl::OkStatus(); 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. // Initialize render target, drawn with OpenCV.
ImageFormat::Format target_format; ImageFormat::Format target_format;
@ -187,6 +177,11 @@ namespace mediapipe
image_width_ = image_mat->cols; image_width_ = image_mat->cols;
image_height_ = image_mat->rows; image_height_ = image_mat->rows;
if (cc->Inputs().HasTag(kMaskTag) &&
!cc->Inputs().Tag(kMaskTag).IsEmpty() &&
cc->Inputs().HasTag(kFaceBoxTag) &&
!cc->Inputs().Tag(kFaceBoxTag).IsEmpty())
{
const std::vector<std::unordered_map<std::string, cv::Mat>> &mask_vec = const std::vector<std::unordered_map<std::string, cv::Mat>> &mask_vec =
cc->Inputs().Tag(kMaskTag).Get<std::vector<std::unordered_map<std::string, cv::Mat>>>(); cc->Inputs().Tag(kMaskTag).Get<std::vector<std::unordered_map<std::string, cv::Mat>>>();
@ -198,7 +193,7 @@ namespace mediapipe
for (int i = 0; i < mask_vec.size(); i++) for (int i = 0; i < mask_vec.size(); i++)
MP_RETURN_IF_ERROR(SmoothFace(cc, &target_format, mask_vec[i], face_box[i])); MP_RETURN_IF_ERROR(SmoothFace(cc, &target_format, mask_vec[i], face_box[i]));
} }
}
// Copy the rendered image to output. // Copy the rendered image to output.
uchar *image_mat_ptr = image_mat->data; uchar *image_mat_ptr = image_mat->data;
MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr)); MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr));

View File

@ -16,7 +16,6 @@
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
//#include <android/log.h>
#include <memory> #include <memory>
@ -42,13 +41,6 @@ namespace mediapipe
constexpr char kMaskTag[] = "MASK"; constexpr char kMaskTag[] = "MASK";
constexpr char kImageFrameTag[] = "IMAGE"; constexpr char kImageFrameTag[] = "IMAGE";
enum
{
ATTRIB_VERTEX,
ATTRIB_TEXTURE_POSITION,
NUM_ATTRIBUTES
};
inline bool HasImageTag(mediapipe::CalculatorContext *cc) { return false; } inline bool HasImageTag(mediapipe::CalculatorContext *cc) { return false; }
} // namespace } // namespace
@ -153,11 +145,6 @@ namespace mediapipe
{ {
return absl::OkStatus(); return absl::OkStatus();
} }
if (cc->Inputs().HasTag(kMaskTag) &&
cc->Inputs().Tag(kMaskTag).IsEmpty())
{
return absl::OkStatus();
}
// Initialize render target, drawn with OpenCV. // Initialize render target, drawn with OpenCV.
ImageFormat::Format target_format; ImageFormat::Format target_format;
@ -170,6 +157,9 @@ namespace mediapipe
image_width_ = image_mat->cols; image_width_ = image_mat->cols;
image_height_ = image_mat->rows; image_height_ = image_mat->rows;
if (cc->Inputs().HasTag(kMaskTag) &&
!cc->Inputs().Tag(kMaskTag).IsEmpty())
{
const std::vector<std::unordered_map<std::string, cv::Mat>> &mask_vec = const std::vector<std::unordered_map<std::string, cv::Mat>> &mask_vec =
cc->Inputs().Tag(kMaskTag).Get<std::vector<std::unordered_map<std::string, cv::Mat>>>(); cc->Inputs().Tag(kMaskTag).Get<std::vector<std::unordered_map<std::string, cv::Mat>>>();
if (mask_vec.size() > 0) if (mask_vec.size() > 0)
@ -177,7 +167,7 @@ namespace mediapipe
for (auto mask : mask_vec) for (auto mask : mask_vec)
MP_RETURN_IF_ERROR(WhitenTeeth(cc, &target_format, mask)); MP_RETURN_IF_ERROR(WhitenTeeth(cc, &target_format, mask));
} }
}
// Copy the rendered image to output. // Copy the rendered image to output.
uchar *image_mat_ptr = image_mat->data; uchar *image_mat_ptr = image_mat->data;
MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr, image_mat)); MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr, image_mat));

View File

@ -30,7 +30,6 @@ cc_library(
"//mediapipe/calculators/beauty:smooth_face_calculator", "//mediapipe/calculators/beauty:smooth_face_calculator",
"//mediapipe/calculators/beauty:draw_lipstick_calculator", "//mediapipe/calculators/beauty:draw_lipstick_calculator",
"//mediapipe/calculators/beauty:whiten_teeth_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/util:landmarks_to_render_data_calculator",
"//mediapipe/calculators/landmarks:landmarks_to_mask_calculator", "//mediapipe/calculators/landmarks:landmarks_to_mask_calculator",
"//mediapipe/graphs/face_mesh/calculators:face_landmarks_to_render_data_calculator", "//mediapipe/graphs/face_mesh/calculators:face_landmarks_to_render_data_calculator",