From 46ba1d805155f261787d953d72047d36416f15e3 Mon Sep 17 00:00:00 2001 From: MediaPipe Team Date: Mon, 13 Mar 2023 18:46:54 -0700 Subject: [PATCH] Use ExternalFile to set metadata of GeometryPipelineCalculator. PiperOrigin-RevId: 516384491 --- mediapipe/tasks/cc/vision/face_geometry/BUILD | 4 +- .../cc/vision/face_geometry/calculators/BUILD | 3 + .../geometry_pipeline_calculator.cc | 33 +++------ .../geometry_pipeline_calculator.proto | 3 +- .../face_geometry_from_landmarks_graph.cc | 10 +-- ...face_geometry_from_landmarks_graph_test.cc | 69 ++++++++++++------ .../tasks/cc/vision/face_geometry/proto/BUILD | 9 +++ .../proto/face_geometry_graph_options.proto | 28 +++++++ .../tasks/cc/vision/face_landmarker/BUILD | 2 + .../face_landmarker/face_landmarker_graph.cc | 21 +++++- .../cc/vision/face_landmarker/proto/BUILD | 1 + .../proto/face_landmarker_graph_options.proto | 5 ++ .../face_landmarker_with_blendshapes.task | Bin 3680528 -> 3700070 bytes third_party/external_files.bzl | 10 +-- 14 files changed, 137 insertions(+), 61 deletions(-) create mode 100644 mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options.proto diff --git a/mediapipe/tasks/cc/vision/face_geometry/BUILD b/mediapipe/tasks/cc/vision/face_geometry/BUILD index 265b0dc9e..6bd9912b2 100644 --- a/mediapipe/tasks/cc/vision/face_geometry/BUILD +++ b/mediapipe/tasks/cc/vision/face_geometry/BUILD @@ -19,9 +19,6 @@ package(default_visibility = ["//mediapipe/tasks:internal"]) cc_library( name = "face_geometry_from_landmarks_graph", srcs = ["face_geometry_from_landmarks_graph.cc"], - data = [ - "//mediapipe/tasks/cc/vision/face_geometry/data:geometry_pipeline_metadata_landmarks", - ], deps = [ "//mediapipe/calculators/core:begin_loop_calculator", "//mediapipe/calculators/core:end_loop_calculator", @@ -39,6 +36,7 @@ cc_library( "//mediapipe/tasks/cc/vision/face_geometry/calculators:geometry_pipeline_calculator_cc_proto", "//mediapipe/tasks/cc/vision/face_geometry/proto:environment_cc_proto", "//mediapipe/tasks/cc/vision/face_geometry/proto:face_geometry_cc_proto", + "//mediapipe/tasks/cc/vision/face_geometry/proto:face_geometry_graph_options_cc_proto", "//mediapipe/util:graph_builder_utils", "@com_google_absl//absl/status:statusor", ], diff --git a/mediapipe/tasks/cc/vision/face_geometry/calculators/BUILD b/mediapipe/tasks/cc/vision/face_geometry/calculators/BUILD index b134c81f4..b3d4e604a 100644 --- a/mediapipe/tasks/cc/vision/face_geometry/calculators/BUILD +++ b/mediapipe/tasks/cc/vision/face_geometry/calculators/BUILD @@ -45,6 +45,7 @@ mediapipe_proto_library( srcs = ["geometry_pipeline_calculator.proto"], deps = [ "//mediapipe/framework:calculator_options_proto", + "//mediapipe/tasks/cc/core/proto:external_file_proto", ], ) @@ -59,6 +60,8 @@ cc_library( "//mediapipe/framework/port:ret_check", "//mediapipe/framework/port:status", "//mediapipe/framework/port:statusor", + "//mediapipe/tasks/cc/core:external_file_handler", + "//mediapipe/tasks/cc/core/proto:external_file_cc_proto", "//mediapipe/tasks/cc/vision/face_geometry/libs:geometry_pipeline", "//mediapipe/tasks/cc/vision/face_geometry/libs:validation_utils", "//mediapipe/tasks/cc/vision/face_geometry/proto:environment_cc_proto", diff --git a/mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.cc b/mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.cc index d6082e62d..78cb1146a 100644 --- a/mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.cc +++ b/mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.cc @@ -24,6 +24,8 @@ #include "mediapipe/framework/port/status.h" #include "mediapipe/framework/port/status_macros.h" #include "mediapipe/framework/port/statusor.h" +#include "mediapipe/tasks/cc/core/external_file_handler.h" +#include "mediapipe/tasks/cc/core/proto/external_file.pb.h" #include "mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.pb.h" #include "mediapipe/tasks/cc/vision/face_geometry/libs/geometry_pipeline.h" #include "mediapipe/tasks/cc/vision/face_geometry/libs/validation_utils.h" @@ -69,8 +71,8 @@ using ::mediapipe::tasks::vision::face_geometry::proto:: // A vector of face geometry data. // // Options: -// metadata_path (`string`, optional): -// Defines a path for the geometry pipeline metadata file. +// metadata_file (`ExternalFile`, optional): +// Defines an ExternalFile for the geometry pipeline metadata file. // // The geometry pipeline metadata file format must be the binary // `GeometryPipelineMetadata` proto. @@ -95,7 +97,7 @@ class GeometryPipelineCalculator : public CalculatorBase { ASSIGN_OR_RETURN( GeometryPipelineMetadata metadata, - ReadMetadataFromFile(options.metadata_path()), + ReadMetadataFromFile(options.metadata_file()), _ << "Failed to read the geometry pipeline metadata from file!"); MP_RETURN_IF_ERROR(ValidateGeometryPipelineMetadata(metadata)) @@ -155,32 +157,19 @@ class GeometryPipelineCalculator : public CalculatorBase { private: static absl::StatusOr ReadMetadataFromFile( - const std::string& metadata_path) { - ASSIGN_OR_RETURN(std::string metadata_blob, - ReadContentBlobFromFile(metadata_path), - _ << "Failed to read a metadata blob from file!"); + const core::proto::ExternalFile& metadata_file) { + ASSIGN_OR_RETURN( + const auto file_handler, + core::ExternalFileHandler::CreateFromExternalFile(&metadata_file)); GeometryPipelineMetadata metadata; - RET_CHECK(metadata.ParseFromString(metadata_blob)) + RET_CHECK( + metadata.ParseFromString(std::string(file_handler->GetFileContent()))) << "Failed to parse a metadata proto from a binary blob!"; return metadata; } - static absl::StatusOr ReadContentBlobFromFile( - const std::string& unresolved_path) { - ASSIGN_OR_RETURN(std::string resolved_path, - mediapipe::PathToResourceAsFile(unresolved_path), - _ << "Failed to resolve path! Path = " << unresolved_path); - - std::string content_blob; - MP_RETURN_IF_ERROR( - mediapipe::GetResourceContents(resolved_path, &content_blob)) - << "Failed to read content blob! Resolved path = " << resolved_path; - - return content_blob; - } - std::unique_ptr geometry_pipeline_; }; diff --git a/mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.proto b/mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.proto index afcc20a13..a748cdf8b 100644 --- a/mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.proto +++ b/mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.proto @@ -17,11 +17,12 @@ syntax = "proto2"; package mediapipe.tasks.vision.face_geometry; import "mediapipe/framework/calculator_options.proto"; +import "mediapipe/tasks/cc/core/proto/external_file.proto"; message FaceGeometryPipelineCalculatorOptions { extend mediapipe.CalculatorOptions { optional FaceGeometryPipelineCalculatorOptions ext = 512499200; } - optional string metadata_path = 1; + optional core.proto.ExternalFile metadata_file = 1; } diff --git a/mediapipe/tasks/cc/vision/face_geometry/face_geometry_from_landmarks_graph.cc b/mediapipe/tasks/cc/vision/face_geometry/face_geometry_from_landmarks_graph.cc index 08b3d1bf4..8c69a31fd 100644 --- a/mediapipe/tasks/cc/vision/face_geometry/face_geometry_from_landmarks_graph.cc +++ b/mediapipe/tasks/cc/vision/face_geometry/face_geometry_from_landmarks_graph.cc @@ -28,6 +28,7 @@ limitations under the License. #include "mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.pb.h" #include "mediapipe/tasks/cc/vision/face_geometry/proto/environment.pb.h" #include "mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry.pb.h" +#include "mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options.pb.h" #include "mediapipe/util/graph_builder_utils.h" namespace mediapipe::tasks::vision::face_geometry { @@ -49,10 +50,6 @@ constexpr char kIterableTag[] = "ITERABLE"; constexpr char kBatchEndTag[] = "BATCH_END"; constexpr char kItemTag[] = "ITEM"; -constexpr char kGeometryPipelineMetadataPath[] = - "mediapipe/tasks/cc/vision/face_geometry/data/" - "geometry_pipeline_metadata_landmarks.binarypb"; - struct FaceGeometryOuts { Stream> multi_face_geometry; }; @@ -127,6 +124,7 @@ class FaceGeometryFromLandmarksGraph : public Subgraph { } ASSIGN_OR_RETURN(auto outs, BuildFaceGeometryFromLandmarksGraph( + *sc->MutableOptions(), graph.In(kFaceLandmarksTag) .Cast>(), graph.In(kImageSizeTag).Cast>(), @@ -138,6 +136,7 @@ class FaceGeometryFromLandmarksGraph : public Subgraph { private: absl::StatusOr BuildFaceGeometryFromLandmarksGraph( + proto::FaceGeometryGraphOptions& graph_options, Stream> multi_face_landmarks, Stream> image_size, std::optional> environment, Graph& graph) { @@ -185,7 +184,8 @@ class FaceGeometryFromLandmarksGraph : public Subgraph { "mediapipe.tasks.vision.face_geometry.FaceGeometryPipelineCalculator"); auto& geometry_pipeline_options = geometry_pipeline.GetOptions(); - geometry_pipeline_options.set_metadata_path(kGeometryPipelineMetadataPath); + geometry_pipeline_options.Swap( + graph_options.mutable_geometry_pipeline_options()); image_size >> geometry_pipeline.In(kImageSizeTag); multi_face_landmarks_no_iris >> geometry_pipeline.In(kMultiFaceLandmarksTag); diff --git a/mediapipe/tasks/cc/vision/face_geometry/face_geometry_from_landmarks_graph_test.cc b/mediapipe/tasks/cc/vision/face_geometry/face_geometry_from_landmarks_graph_test.cc index df935135d..74baff5d8 100644 --- a/mediapipe/tasks/cc/vision/face_geometry/face_geometry_from_landmarks_graph_test.cc +++ b/mediapipe/tasks/cc/vision/face_geometry/face_geometry_from_landmarks_graph_test.cc @@ -20,6 +20,7 @@ limitations under the License. #include "absl/status/statusor.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" +#include "absl/strings/substitute.h" #include "mediapipe/framework/api2/port.h" #include "mediapipe/framework/calculator_framework.h" #include "mediapipe/framework/calculator_runner.h" @@ -31,6 +32,7 @@ limitations under the License. #include "mediapipe/framework/port/gtest.h" #include "mediapipe/framework/port/parse_text_proto.h" #include "mediapipe/framework/tool/sink.h" +#include "mediapipe/tasks/cc/core/proto/external_file.pb.h" #include "mediapipe/tasks/cc/vision/face_geometry/proto/environment.pb.h" #include "mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry.pb.h" @@ -49,6 +51,9 @@ constexpr char kTestDataDirectory[] = "/mediapipe/tasks/testdata/vision/"; constexpr char kFaceLandmarksFileName[] = "face_blendshapes_in_landmarks.prototxt"; constexpr char kFaceGeometryFileName[] = "face_geometry_expected_out.pbtxt"; +constexpr char kGeometryPipelineMetadataPath[] = + "mediapipe/tasks/cc/vision/face_geometry/data/" + "geometry_pipeline_metadata_landmarks.binarypb"; std::vector GetLandmarks(absl::string_view filename) { NormalizedLandmarkList landmarks; @@ -89,17 +94,25 @@ void MakeInputPacketsAndRunGraph(CalculatorGraph& graph) { TEST(FaceGeometryFromLandmarksGraphTest, DefaultEnvironment) { CalculatorGraphConfig graph_config = ParseTextProtoOrDie< - CalculatorGraphConfig>(R"pb( - input_stream: "FACE_LANDMARKS:face_landmarks" - input_stream: "IMAGE_SIZE:image_size" - output_stream: "FACE_GEOMETRY:face_geometry" - node { - calculator: "mediapipe.tasks.vision.face_geometry.FaceGeometryFromLandmarksGraph" - input_stream: "FACE_LANDMARKS:face_landmarks" - input_stream: "IMAGE_SIZE:image_size" - output_stream: "FACE_GEOMETRY:face_geometry" - } - )pb"); + CalculatorGraphConfig>(absl::Substitute( + R"pb( + input_stream: "FACE_LANDMARKS:face_landmarks" + input_stream: "IMAGE_SIZE:image_size" + output_stream: "FACE_GEOMETRY:face_geometry" + node { + calculator: "mediapipe.tasks.vision.face_geometry.FaceGeometryFromLandmarksGraph" + input_stream: "FACE_LANDMARKS:face_landmarks" + input_stream: "IMAGE_SIZE:image_size" + output_stream: "FACE_GEOMETRY:face_geometry" + options: { + [mediapipe.tasks.vision.face_geometry.proto.FaceGeometryGraphOptions + .ext] { + geometry_pipeline_options { metadata_file { file_name: "$0" } } + } + } + } + )pb", + kGeometryPipelineMetadataPath)); std::vector output_packets; tool::AddVectorSink("face_geometry", &graph_config, &output_packets); @@ -116,19 +129,27 @@ TEST(FaceGeometryFromLandmarksGraphTest, DefaultEnvironment) { TEST(FaceGeometryFromLandmarksGraphTest, SideInEnvironment) { CalculatorGraphConfig graph_config = ParseTextProtoOrDie< - CalculatorGraphConfig>(R"pb( - input_stream: "FACE_LANDMARKS:face_landmarks" - input_stream: "IMAGE_SIZE:image_size" - input_side_packet: "ENVIRONMENT:environment" - output_stream: "FACE_GEOMETRY:face_geometry" - node { - calculator: "mediapipe.tasks.vision.face_geometry.FaceGeometryFromLandmarksGraph" - input_stream: "FACE_LANDMARKS:face_landmarks" - input_stream: "IMAGE_SIZE:image_size" - input_side_packet: "ENVIRONMENT:environment" - output_stream: "FACE_GEOMETRY:face_geometry" - } - )pb"); + CalculatorGraphConfig>(absl::Substitute( + R"pb( + input_stream: "FACE_LANDMARKS:face_landmarks" + input_stream: "IMAGE_SIZE:image_size" + input_side_packet: "ENVIRONMENT:environment" + output_stream: "FACE_GEOMETRY:face_geometry" + node { + calculator: "mediapipe.tasks.vision.face_geometry.FaceGeometryFromLandmarksGraph" + input_stream: "FACE_LANDMARKS:face_landmarks" + input_stream: "IMAGE_SIZE:image_size" + input_side_packet: "ENVIRONMENT:environment" + output_stream: "FACE_GEOMETRY:face_geometry" + options: { + [mediapipe.tasks.vision.face_geometry.proto.FaceGeometryGraphOptions + .ext] { + geometry_pipeline_options { metadata_file { file_name: "$0" } } + } + } + } + )pb", + kGeometryPipelineMetadataPath)); std::vector output_packets; tool::AddVectorSink("face_geometry", &graph_config, &output_packets); diff --git a/mediapipe/tasks/cc/vision/face_geometry/proto/BUILD b/mediapipe/tasks/cc/vision/face_geometry/proto/BUILD index 9559448f3..c9dd15845 100644 --- a/mediapipe/tasks/cc/vision/face_geometry/proto/BUILD +++ b/mediapipe/tasks/cc/vision/face_geometry/proto/BUILD @@ -44,3 +44,12 @@ mediapipe_proto_library( name = "mesh_3d_proto", srcs = ["mesh_3d.proto"], ) + +mediapipe_proto_library( + name = "face_geometry_graph_options_proto", + srcs = ["face_geometry_graph_options.proto"], + deps = [ + "//mediapipe/framework:calculator_options_proto", + "//mediapipe/tasks/cc/vision/face_geometry/calculators:geometry_pipeline_calculator_proto", + ], +) diff --git a/mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options.proto b/mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options.proto new file mode 100644 index 000000000..03831d1dc --- /dev/null +++ b/mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options.proto @@ -0,0 +1,28 @@ +// Copyright 2023 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package mediapipe.tasks.vision.face_geometry.proto; + +import "mediapipe/framework/calculator_options.proto"; +import "mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.proto"; + +message FaceGeometryGraphOptions { + extend mediapipe.CalculatorOptions { + optional FaceGeometryGraphOptions ext = 515723506; + } + + optional FaceGeometryPipelineCalculatorOptions geometry_pipeline_options = 1; +} diff --git a/mediapipe/tasks/cc/vision/face_landmarker/BUILD b/mediapipe/tasks/cc/vision/face_landmarker/BUILD index 3df2f2db6..ac78edda5 100644 --- a/mediapipe/tasks/cc/vision/face_landmarker/BUILD +++ b/mediapipe/tasks/cc/vision/face_landmarker/BUILD @@ -210,8 +210,10 @@ cc_library( "//mediapipe/tasks/cc/vision/face_detector:face_detector_graph", "//mediapipe/tasks/cc/vision/face_detector/proto:face_detector_graph_options_cc_proto", "//mediapipe/tasks/cc/vision/face_geometry:face_geometry_from_landmarks_graph", + "//mediapipe/tasks/cc/vision/face_geometry/calculators:geometry_pipeline_calculator_cc_proto", "//mediapipe/tasks/cc/vision/face_geometry/proto:environment_cc_proto", "//mediapipe/tasks/cc/vision/face_geometry/proto:face_geometry_cc_proto", + "//mediapipe/tasks/cc/vision/face_geometry/proto:face_geometry_graph_options_cc_proto", "//mediapipe/tasks/cc/vision/face_landmarker/proto:face_blendshapes_graph_options_cc_proto", "//mediapipe/tasks/cc/vision/face_landmarker/proto:face_landmarker_graph_options_cc_proto", "//mediapipe/tasks/cc/vision/face_landmarker/proto:face_landmarks_detector_graph_options_cc_proto", diff --git a/mediapipe/tasks/cc/vision/face_landmarker/face_landmarker_graph.cc b/mediapipe/tasks/cc/vision/face_landmarker/face_landmarker_graph.cc index 52c8b08a0..d6cc630b2 100644 --- a/mediapipe/tasks/cc/vision/face_landmarker/face_landmarker_graph.cc +++ b/mediapipe/tasks/cc/vision/face_landmarker/face_landmarker_graph.cc @@ -40,8 +40,10 @@ limitations under the License. #include "mediapipe/tasks/cc/core/utils.h" #include "mediapipe/tasks/cc/metadata/utils/zip_utils.h" #include "mediapipe/tasks/cc/vision/face_detector/proto/face_detector_graph_options.pb.h" +#include "mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator.pb.h" #include "mediapipe/tasks/cc/vision/face_geometry/proto/environment.pb.h" #include "mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry.pb.h" +#include "mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options.pb.h" #include "mediapipe/tasks/cc/vision/face_landmarker/proto/face_blendshapes_graph_options.pb.h" #include "mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarker_graph_options.pb.h" #include "mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarks_detector_graph_options.pb.h" @@ -93,6 +95,8 @@ constexpr char kFaceDetectorTFLiteName[] = "face_detector.tflite"; constexpr char kFaceLandmarksDetectorTFLiteName[] = "face_landmarks_detector.tflite"; constexpr char kFaceBlendshapeTFLiteName[] = "face_blendshapes.tflite"; +constexpr char kFaceGeometryPipelineMetadataName[] = + "geometry_pipeline_metadata_landmarks.binarypb"; struct FaceLandmarkerOutputs { Source> landmark_lists; @@ -305,6 +309,7 @@ class FaceLandmarkerGraph : public core::ModelTaskGraph { absl::StatusOr GetConfig( SubgraphContext* sc) override { Graph graph; + bool output_geometry = HasOutput(sc->OriginalNode(), kFaceGeometryTag); if (sc->Options() .base_options() .has_model_asset()) { @@ -318,6 +323,18 @@ class FaceLandmarkerGraph : public core::ModelTaskGraph { sc->MutableOptions(), !sc->Service(::mediapipe::tasks::core::kModelResourcesCacheService) .IsAvailable())); + if (output_geometry) { + // Set the face geometry metdata file for + // FaceGeometryFromLandmarksGraph. + ASSIGN_OR_RETURN(auto face_geometry_pipeline_metadata_file, + model_asset_bundle_resources->GetModelFile( + kFaceGeometryPipelineMetadataName)); + SetExternalFile(face_geometry_pipeline_metadata_file, + sc->MutableOptions() + ->mutable_face_geometry_graph_options() + ->mutable_geometry_pipeline_options() + ->mutable_metadata_file()); + } } std::optional> environment; if (HasSideInput(sc->OriginalNode(), kEnvironmentTag)) { @@ -338,7 +355,6 @@ class FaceLandmarkerGraph : public core::ModelTaskGraph { .face_landmarks_detector_graph_options() .has_face_blendshapes_graph_options())); } - bool output_geometry = HasOutput(sc->OriginalNode(), kFaceGeometryTag); ASSIGN_OR_RETURN( auto outs, BuildFaceLandmarkerGraph( @@ -481,6 +497,9 @@ class FaceLandmarkerGraph : public core::ModelTaskGraph { auto& face_geometry_from_landmarks = graph.AddNode( "mediapipe.tasks.vision.face_geometry." "FaceGeometryFromLandmarksGraph"); + face_geometry_from_landmarks + .GetOptions() + .Swap(tasks_options.mutable_face_geometry_graph_options()); if (environment.has_value()) { *environment >> face_geometry_from_landmarks.SideIn(kEnvironmentTag); } diff --git a/mediapipe/tasks/cc/vision/face_landmarker/proto/BUILD b/mediapipe/tasks/cc/vision/face_landmarker/proto/BUILD index f943420c6..d3e236619 100644 --- a/mediapipe/tasks/cc/vision/face_landmarker/proto/BUILD +++ b/mediapipe/tasks/cc/vision/face_landmarker/proto/BUILD @@ -60,5 +60,6 @@ mediapipe_proto_library( "//mediapipe/framework:calculator_proto", "//mediapipe/tasks/cc/core/proto:base_options_proto", "//mediapipe/tasks/cc/vision/face_detector/proto:face_detector_graph_options_proto", + "//mediapipe/tasks/cc/vision/face_geometry/proto:face_geometry_graph_options_proto", ], ) diff --git a/mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarker_graph_options.proto b/mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarker_graph_options.proto index 67599295e..dc8654608 100644 --- a/mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarker_graph_options.proto +++ b/mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarker_graph_options.proto @@ -21,6 +21,7 @@ import "mediapipe/framework/calculator.proto"; import "mediapipe/framework/calculator_options.proto"; import "mediapipe/tasks/cc/core/proto/base_options.proto"; import "mediapipe/tasks/cc/vision/face_detector/proto/face_detector_graph_options.proto"; +import "mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options.proto"; import "mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarks_detector_graph_options.proto"; option java_package = "com.google.mediapipe.tasks.vision.facelandmarker.proto"; @@ -45,4 +46,8 @@ message FaceLandmarkerGraphOptions { // Minimum confidence for face landmarks tracking to be considered // successfully. optional float min_tracking_confidence = 4 [default = 0.5]; + + // Options for FaceGeometryGraph to get facial transformation matrix. + optional face_geometry.proto.FaceGeometryGraphOptions + face_geometry_graph_options = 5; } diff --git a/mediapipe/tasks/testdata/vision/face_landmarker_with_blendshapes.task b/mediapipe/tasks/testdata/vision/face_landmarker_with_blendshapes.task index d20846326dce2b8956c500b4cee60ee96e865294..04adf1841069b8e884d9158a8e54bcf741c086e6 100644 GIT binary patch delta 20033 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 IWjXhM035k+HUIzs delta 313 zcmW;I%WgqY6vpv$Y(?qT)~)WU7njzhwAeF=nPcK1ya66y55&NvLgGopz+3PFr-^jn zDg2$4{8qlK!OF_|KmVD(2iugxfpABRYlRmhEoai4N!L~itp$VmQVY0o0}s6L;TC=b za0iJX?(u*}gb+pqQN-|sI1)%Ag)}nAB8O+>@q$;p;T;7OQQ9qac^`5vwCwWSvOn;N z3aY4~jxRLO#5aD>LVIV~ozv>NVbhqXt`o)+)ptU2s#31rdefPzd{7v|IP#xjNzpF= Cvv}D6 diff --git a/third_party/external_files.bzl b/third_party/external_files.bzl index c140003bf..4e26dff29 100644 --- a/third_party/external_files.bzl +++ b/third_party/external_files.bzl @@ -67,7 +67,7 @@ def external_files(): http_file( name = "com_google_mediapipe_BUILD", sha256 = "d2b2a8346202691d7f831887c84e9642e974f64ed67851d9a58cf15c94b1f6b3", - urls = ["https://storage.googleapis.com/mediapipe-assets/BUILD?generation=1661875663693976"], + urls = ["https://storage.googleapis.com/mediapipe-assets/BUILD?generation=16618756636939761678323576393653"], ) http_file( @@ -318,8 +318,8 @@ def external_files(): http_file( name = "com_google_mediapipe_face_landmarker_with_blendshapes_task", - sha256 = "a75c1ba70e4b8568000af2ad0b355ed559ab5d5793db50fa9ad241f8dc4fad5f", - urls = ["https://storage.googleapis.com/mediapipe-assets/face_landmarker_with_blendshapes.task?generation=1678323586260800"], + sha256 = "b44e4cae6f5822456d60f33e7c852640d78c7e342aee7eacc22589451a0b9dc2", + urls = ["https://storage.googleapis.com/mediapipe-assets/face_landmarker_with_blendshapes.task?generation=1678504998301299"], ) http_file( @@ -822,8 +822,8 @@ def external_files(): http_file( name = "com_google_mediapipe_portrait_expected_face_geometry_with_attention_pbtxt", - sha256 = "5cc57b8da3ad0527dce581fe1309f6b36043e5837e3f4f5af5e24005a99dc52a", - urls = ["https://storage.googleapis.com/mediapipe-assets/portrait_expected_face_geometry_with_attention.pbtxt?generation=1678323601064393"], + sha256 = "7ed1eed98e61e0a10811bb611c895d87c8023f398a36db01b6d9ba2e1ab09e16", + urls = ["https://storage.googleapis.com/mediapipe-assets/portrait_expected_face_geometry_with_attention.pbtxt?generation=1678505004840652"], ) http_file(