Deformation model
This commit is contained in:
parent
d7bc754150
commit
a6ca4007f4
|
@ -0,0 +1,81 @@
|
|||
# Copyright 2019 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.
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
package(default_visibility = ["//visibility:private"])
|
||||
|
||||
cc_binary(
|
||||
name = "libmediapipe_jni.so",
|
||||
linkshared = 1,
|
||||
linkstatic = 1,
|
||||
deps = [
|
||||
"//mediapipe/graphs/deformation:mobile_calculators",
|
||||
"//mediapipe/java/com/google/mediapipe/framework/jni:mediapipe_framework_jni",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "mediapipe_jni_lib",
|
||||
srcs = [":libmediapipe_jni.so"],
|
||||
alwayslink = 1,
|
||||
)
|
||||
|
||||
ASSETS_DIR = "//mediapipe/graphs/deformation/config"
|
||||
|
||||
android_binary(
|
||||
name = "deformationgpu",
|
||||
srcs = glob(["*.java"]),
|
||||
assets = [
|
||||
"//mediapipe/graphs/deformation:mobile_gpu.binarypb",
|
||||
"//mediapipe/modules/face_landmark:face_landmark_with_attention.tflite",
|
||||
"//mediapipe/modules/face_detection:face_detection_short_range.tflite",
|
||||
ASSETS_DIR+":triangles.txt",
|
||||
ASSETS_DIR+":index_names.txt",
|
||||
ASSETS_DIR+":mediumFaceIndexes.txt",
|
||||
ASSETS_DIR+":mediumNoseIndexes.txt",
|
||||
ASSETS_DIR+":noseAllIndexes.txt",
|
||||
ASSETS_DIR+":cheekbonesIndexes.txt",
|
||||
ASSETS_DIR+":additionalNoseIndexes1.txt",
|
||||
ASSETS_DIR+":additionalNoseIndexes2.txt",
|
||||
ASSETS_DIR+":additionalNoseIndexes3.txt",
|
||||
ASSETS_DIR+":faceOvalIndexes.txt",
|
||||
ASSETS_DIR+":lowerLipCnt.txt",
|
||||
ASSETS_DIR+":upperLipCnt.txt",
|
||||
ASSETS_DIR+":widerLowerLipPts1.txt",
|
||||
ASSETS_DIR+":widerUpperLipPts1.txt",
|
||||
],
|
||||
assets_dir = "",
|
||||
manifest = "//mediapipe/examples/android/src/java/com/google/mediapipe/apps/basic:AndroidManifest.xml",
|
||||
manifest_values = {
|
||||
"applicationId": "com.google.mediapipe.apps.deformationgpu",
|
||||
"appName": "Deformation",
|
||||
"mainActivity": "com.google.mediapipe.apps.basic.MainActivity",
|
||||
"cameraFacingFront": "True",
|
||||
"binaryGraphName": "mobile_gpu.binarypb",
|
||||
"inputVideoStreamName": "input_video",
|
||||
"outputVideoStreamName": "output_video",
|
||||
"flipFramesVertically": "True",
|
||||
"converterNumBuffers": "2",
|
||||
},
|
||||
multidex = "native",
|
||||
deps = [
|
||||
":mediapipe_jni_lib",
|
||||
"//mediapipe/examples/android/src/java/com/google/mediapipe/apps/basic:basic_lib",
|
||||
"//mediapipe/framework/formats:landmark_java_proto_lite",
|
||||
"//mediapipe/java/com/google/mediapipe/framework:android_framework",
|
||||
"//mediapipe/modules/face_geometry/protos:face_geometry_java_proto_lite",
|
||||
],
|
||||
)
|
||||
|
29
mediapipe/examples/desktop/deformation/BUILD
Normal file
29
mediapipe/examples/desktop/deformation/BUILD
Normal file
|
@ -0,0 +1,29 @@
|
|||
# Copyright 2021 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.
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
package(default_visibility = ["//mediapipe/examples:__subpackages__"])
|
||||
|
||||
# Linux only
|
||||
cc_binary(
|
||||
name = "deformation_cpu",
|
||||
deps = [
|
||||
"//mediapipe/examples/desktop:demo_run_graph_main",
|
||||
"//mediapipe/graphs/deformation:desktop_calculators",
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
54
mediapipe/graphs/deformation/BUILD
Normal file
54
mediapipe/graphs/deformation/BUILD
Normal file
|
@ -0,0 +1,54 @@
|
|||
# Copyright 2019 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.
|
||||
|
||||
load(
|
||||
"//mediapipe/framework/tool:mediapipe_graph.bzl",
|
||||
"mediapipe_binary_graph",
|
||||
)
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
cc_library(
|
||||
name = "mobile_calculators",
|
||||
deps = [
|
||||
"//mediapipe/graphs/deformation/calculators:face_processor_calculator",
|
||||
"//mediapipe/calculators/core:flow_limiter_calculator",
|
||||
"//mediapipe/calculators/image:image_transformation_calculator",
|
||||
"//mediapipe/modules/face_landmark:face_landmark_front_gpu",
|
||||
"//mediapipe/calculators/core:constant_side_packet_calculator",
|
||||
"//mediapipe/gpu:gpu_buffer_to_image_frame_calculator",
|
||||
"//mediapipe/gpu:image_frame_to_gpu_buffer_calculator",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "desktop_calculators",
|
||||
deps = [
|
||||
"//mediapipe/graphs/deformation/calculators:face_processor_calculator",
|
||||
"//mediapipe/calculators/core:flow_limiter_calculator",
|
||||
"//mediapipe/calculators/image:image_transformation_calculator",
|
||||
"//mediapipe/modules/face_landmark:face_landmark_front_cpu",
|
||||
"//mediapipe/calculators/core:constant_side_packet_calculator",
|
||||
],
|
||||
)
|
||||
|
||||
mediapipe_binary_graph(
|
||||
name = "mobile_gpu_binary_graph",
|
||||
graph = "deformation_mobile.pbtxt",
|
||||
output_name = "mobile_gpu.binarypb",
|
||||
deps = [":mobile_calculators"],
|
||||
)
|
||||
|
51
mediapipe/graphs/deformation/calculators/BUILD
Normal file
51
mediapipe/graphs/deformation/calculators/BUILD
Normal file
|
@ -0,0 +1,51 @@
|
|||
# Copyright 2020 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.
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
cc_library(
|
||||
name = "face_processor_calculator",
|
||||
srcs = ["face_processor_calculator.cc"],
|
||||
hdrs = ["Tensor.h"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//mediapipe/framework:calculator_framework",
|
||||
"//mediapipe/framework:calculator_options_cc_proto",
|
||||
"//mediapipe/framework/formats:landmark_cc_proto",
|
||||
"//mediapipe/framework/formats:video_stream_header",
|
||||
"//mediapipe/framework/formats:location_data_cc_proto",
|
||||
"@com_google_absl//absl/memory",
|
||||
"@com_google_absl//absl/strings",
|
||||
"//mediapipe/framework/formats:image_format_cc_proto",
|
||||
"//mediapipe/framework/formats:image_frame",
|
||||
"//mediapipe/framework/formats:image_frame_opencv",
|
||||
"//mediapipe/framework/port:opencv_core",
|
||||
"//mediapipe/framework/port:opencv_imgproc",
|
||||
"//mediapipe/framework/port:opencv_highgui",
|
||||
"//mediapipe/framework/port:vector",
|
||||
"//mediapipe/framework/deps:file_path",
|
||||
"//mediapipe/framework/formats/object_detection:anchor_cc_proto",
|
||||
"//mediapipe/framework/port:file_helpers",
|
||||
"//mediapipe/framework/port:integral_types",
|
||||
"//mediapipe/framework/port:parse_text_proto",
|
||||
"//mediapipe/util:resource_util",
|
||||
"@com_google_absl//absl/flags:flag",
|
||||
],
|
||||
alwayslink = 1,
|
||||
)
|
||||
|
||||
|
||||
|
224
mediapipe/graphs/deformation/calculators/Tensor.h
Normal file
224
mediapipe/graphs/deformation/calculators/Tensor.h
Normal file
|
@ -0,0 +1,224 @@
|
|||
#include <iostream>
|
||||
#include <opencv2/core/core.hpp>
|
||||
#include <opencv2/highgui/highgui.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <cmath>
|
||||
#include <numeric>
|
||||
|
||||
using namespace std;
|
||||
using namespace cv;
|
||||
|
||||
template <typename T>
|
||||
class Tensor
|
||||
{
|
||||
private:
|
||||
vector<int> dims;
|
||||
Mat M;
|
||||
int dtype;
|
||||
|
||||
void _set_dtype() {
|
||||
if (typeid(T).name() == typeid(double).name())
|
||||
dtype = CV_64F;
|
||||
else if (typeid(T).name() == typeid(int).name())
|
||||
dtype = CV_32S;
|
||||
else
|
||||
dtype = CV_64F;
|
||||
}
|
||||
|
||||
public:
|
||||
Tensor() {
|
||||
_set_dtype();
|
||||
dims = vector<int>{ 3, 3 };
|
||||
M = Mat(dims, dtype);
|
||||
}
|
||||
|
||||
Tensor(vector<int> _dims) {
|
||||
_set_dtype();
|
||||
dims = _dims;
|
||||
M = Mat(dims, dtype);
|
||||
}
|
||||
|
||||
Tensor(Mat _M) {
|
||||
dims = vector<int>(_M.size.p, _M.size.p + _M.size.dims());
|
||||
M = _M;
|
||||
dtype = _M.type();
|
||||
}
|
||||
|
||||
Tensor(const Tensor<T>& _m) {
|
||||
dims = _m.dims;
|
||||
M = _m.M;
|
||||
dtype = _m.dtype;
|
||||
}
|
||||
|
||||
Tensor(T** arr, int _n, int _m) {
|
||||
_set_dtype();
|
||||
dims = { _n, _m };
|
||||
M = Mat(dims, dtype);
|
||||
|
||||
for (int i = 0; i < _n; i++)
|
||||
for (int j = 0; j < _m; j++)
|
||||
M.at<T>(Vec<int, 2>(i, j)) = arr[i][j];
|
||||
}
|
||||
|
||||
vector<T> get_1d_data() {
|
||||
return vector<T>(M.ptr<T>(0), M.ptr<T>(0) + dims[1]);
|
||||
}
|
||||
|
||||
T at(vector<int> _indexes) {
|
||||
return M.at<T>(_indexes.data());
|
||||
}
|
||||
|
||||
Tensor index(int i1) {
|
||||
return Tensor(M.row(i1));
|
||||
}
|
||||
|
||||
|
||||
Tensor index(vector<int> _indexes) {
|
||||
vector<int> _dims;
|
||||
_dims = dims;
|
||||
_dims[0] = 0;
|
||||
Mat _M = Mat(_dims, dtype);
|
||||
|
||||
for (int i = 0; i < _indexes.size(); ++i)
|
||||
_M.push_back(M.row(_indexes[i]));
|
||||
|
||||
return Tensor(_M);
|
||||
}
|
||||
|
||||
Tensor index(vector<vector<int>> _indexes) {
|
||||
vector<int> _dims;
|
||||
_dims = dims;
|
||||
_dims[0] = 0;
|
||||
Mat _M = Mat(_dims, dtype);
|
||||
|
||||
Mat tmp_M, _tmp_M;
|
||||
for (int i = 0; i < _indexes.size(); ++i) {
|
||||
_M.push_back(this->index(_indexes[i]).M);
|
||||
}
|
||||
|
||||
return Tensor(_M.reshape(1, _indexes.size()));
|
||||
}
|
||||
|
||||
Tensor index(Range r1, int index2) {
|
||||
if (r1.end < 0) {
|
||||
r1.end = M.rows + r1.end + 1;
|
||||
}
|
||||
return Tensor(M(r1, Range::all()).col(index2));
|
||||
}
|
||||
|
||||
Tensor index(Range r1, Range r2) {
|
||||
if (r1.end < 0) {
|
||||
r1.end = M.rows + r1.end + 1;
|
||||
}
|
||||
if (r2.end < 0) {
|
||||
r2.end = M.cols + r2.end + 1;
|
||||
}
|
||||
if (r1.start < 0 && r1.start > -2000000000) {
|
||||
r1.start = M.rows + r1.start;
|
||||
}
|
||||
if (r2.start < 0 && r2.start > -2000000000) {
|
||||
r2.start = M.cols + r2.start;
|
||||
}
|
||||
return Tensor(M(r1, r2));
|
||||
}
|
||||
|
||||
Tensor concat(Tensor t, int dim) {
|
||||
Mat dst;
|
||||
if (dim == 0) {
|
||||
vconcat(M, t.M, dst);
|
||||
}
|
||||
if (dim == 1) {
|
||||
hconcat(M, t.M, dst);
|
||||
}
|
||||
return Tensor(dst);
|
||||
}
|
||||
|
||||
Tensor matmul(Tensor t) {
|
||||
return Tensor(M * t.M);
|
||||
}
|
||||
|
||||
Tensor inverse() {
|
||||
return Tensor(M.inv());
|
||||
}
|
||||
|
||||
Tensor transpose() {
|
||||
return Tensor(M.t());
|
||||
}
|
||||
|
||||
T norm() {
|
||||
int ndims = dims.size();
|
||||
int size = 1;
|
||||
for (int i = 0; i < ndims; i++) {
|
||||
size = size * dims[i];
|
||||
}
|
||||
|
||||
vector<int> _index(ndims, 0);
|
||||
T _norm = pow(M.at<T>(_index.data()), 2);
|
||||
|
||||
for (int i = 0; i < size - 1; i++) {
|
||||
_index[ndims - 1] += 1;
|
||||
for (int j = ndims-1; j >= 0; j--) {
|
||||
if (_index[j] >= dims[j]) {
|
||||
_index[j] = 0;
|
||||
_index[j - 1] += 1;
|
||||
}
|
||||
}
|
||||
_norm += pow(M.at<T>(_index.data()), 2);
|
||||
}
|
||||
|
||||
return sqrt(_norm);
|
||||
}
|
||||
|
||||
|
||||
friend ostream& operator<<(ostream& os, const Tensor<T>& _M){
|
||||
os << _M.M;
|
||||
return os;
|
||||
}
|
||||
|
||||
friend const Tensor operator-(const Tensor& t) {
|
||||
return Tensor(-t.M);
|
||||
}
|
||||
|
||||
friend const Tensor operator/(const Tensor& t1, const Tensor& t2) {
|
||||
return Tensor(t1.M.mul(1 / t2.M));
|
||||
}
|
||||
|
||||
friend const Tensor operator*(const Tensor& t1, const Tensor& t2) {
|
||||
return Tensor(t1.M.mul(t2.M));
|
||||
}
|
||||
|
||||
friend const Tensor operator+(const Tensor& t1, const Tensor& t2) {
|
||||
return Tensor(t1.M + t2.M);
|
||||
}
|
||||
|
||||
friend const Tensor operator-(const Tensor& t1, const Tensor& t2) {
|
||||
return Tensor(t1.M - t2.M);
|
||||
}
|
||||
|
||||
friend const Tensor operator/(const Tensor& t1, const T& val) {
|
||||
return Tensor(t1.M / val);
|
||||
}
|
||||
|
||||
friend const Tensor operator*(const Tensor& t1, const T& val) {
|
||||
return Tensor(t1.M * val);
|
||||
}
|
||||
|
||||
friend const Tensor operator-(const Tensor& t1, const T& val) {
|
||||
return Tensor(t1.M - val);
|
||||
}
|
||||
|
||||
friend const Tensor operator*(const T& val, const Tensor& t1) {
|
||||
return Tensor(t1.M * val);
|
||||
}
|
||||
|
||||
static vector<int> sort_indexes(const vector<T>& v) {
|
||||
vector<int> idx(v.size());
|
||||
iota(idx.begin(), idx.end(), 0);
|
||||
stable_sort(idx.begin(), idx.end(), [&v](int i1, int i2) {return v[i1] < v[i2]; });
|
||||
return idx;
|
||||
}
|
||||
|
||||
~Tensor()
|
||||
{
|
||||
}
|
||||
};
|
|
@ -0,0 +1,593 @@
|
|||
// Copyright 2019 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.
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
//#include <android/log.h>
|
||||
|
||||
#include <memory>
|
||||
#include "Tensor.h"
|
||||
#include "absl/strings/str_cat.h"
|
||||
#include "mediapipe/framework/calculator_framework.h"
|
||||
#include "mediapipe/framework/calculator_options.pb.h"
|
||||
#include "mediapipe/framework/formats/image_format.pb.h"
|
||||
#include "mediapipe/framework/formats/image_frame.h"
|
||||
#include "mediapipe/framework/formats/image_frame_opencv.h"
|
||||
#include "mediapipe/framework/formats/video_stream_header.h"
|
||||
#include "mediapipe/framework/formats/landmark.pb.h"
|
||||
#include "mediapipe/framework/port/logging.h"
|
||||
#include "mediapipe/framework/port/opencv_core_inc.h"
|
||||
#include "mediapipe/framework/port/opencv_imgproc_inc.h"
|
||||
#include "mediapipe/framework/port/opencv_highgui_inc.h"
|
||||
#include "mediapipe/framework/port/status.h"
|
||||
#include "mediapipe/framework/port/logging.h"
|
||||
#include "mediapipe/framework/port/vector.h"
|
||||
#include "mediapipe/framework/port/file_helpers.h"
|
||||
#include "mediapipe/framework/deps/file_path.h"
|
||||
#include "mediapipe/util/resource_util.h"
|
||||
|
||||
namespace mediapipe
|
||||
{
|
||||
namespace
|
||||
{
|
||||
|
||||
constexpr char kImageFrameTag[] = "IMAGE";
|
||||
constexpr char kVectorTag[] = "VECTOR";
|
||||
constexpr char kLandmarksTag[] = "LANDMARKS";
|
||||
constexpr char kNormLandmarksTag[] = "NORM_LANDMARKS";
|
||||
|
||||
tuple<int, int> _normalized_to_pixel_coordinates(float normalized_x,
|
||||
float normalized_y, int image_width, int image_height)
|
||||
{
|
||||
// Converts normalized value pair to pixel coordinates
|
||||
int x_px = min<int>(floor(normalized_x * image_width), image_width - 1);
|
||||
int y_px = min<int>(floor(normalized_y * image_height), image_height - 1);
|
||||
|
||||
return {x_px, y_px};
|
||||
};
|
||||
|
||||
inline bool HasImageTag(mediapipe::CalculatorContext *cc) { return false; }
|
||||
|
||||
bool NormalizedtoPixelCoordinates(double normalized_x, double normalized_y, double normalized_z,
|
||||
int image_width, int image_height, double *x_px,
|
||||
double *y_px, double *z_px)
|
||||
{
|
||||
CHECK(x_px != nullptr);
|
||||
CHECK(y_px != nullptr);
|
||||
CHECK_GT(image_width, 0);
|
||||
CHECK_GT(image_height, 0);
|
||||
|
||||
if (normalized_x < 0 || normalized_x > 1.0 || normalized_y < 0 ||
|
||||
normalized_y > 1.0 || normalized_z < 0 ||
|
||||
normalized_z > 1.0)
|
||||
{
|
||||
VLOG(1) << "Normalized coordinates must be between 0.0 and 1.0";
|
||||
}
|
||||
|
||||
*x_px = static_cast<double>(normalized_x) * image_width;
|
||||
*y_px = static_cast<double>(normalized_y) * image_height;
|
||||
*z_px = static_cast<double>(normalized_z) * image_width;
|
||||
// 2280
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
template <class LandmarkType>
|
||||
bool IsLandmarkVisibleAndPresent(const LandmarkType &landmark,
|
||||
bool utilize_visibility,
|
||||
float visibility_threshold,
|
||||
bool utilize_presence,
|
||||
float presence_threshold)
|
||||
{
|
||||
if (utilize_visibility && landmark.has_visibility() &&
|
||||
landmark.visibility() < visibility_threshold)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (utilize_presence && landmark.has_presence() &&
|
||||
landmark.presence() < presence_threshold)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
class FaceProcessorCalculator : public CalculatorBase
|
||||
{
|
||||
public:
|
||||
FaceProcessorCalculator() = default;
|
||||
~FaceProcessorCalculator() override = default;
|
||||
|
||||
static absl::Status GetContract(CalculatorContract *cc);
|
||||
|
||||
// From Calculator.
|
||||
absl::Status Open(CalculatorContext *cc) override;
|
||||
absl::Status Process(CalculatorContext *cc) override;
|
||||
absl::Status Close(CalculatorContext *cc) override;
|
||||
|
||||
private:
|
||||
absl::Status CreateRenderTargetCpu(CalculatorContext *cc,
|
||||
unique_ptr<Mat> &image_mat,
|
||||
ImageFormat::Format *target_format);
|
||||
|
||||
absl::Status RenderToCpu(
|
||||
CalculatorContext *cc, const ImageFormat::Format &target_format,
|
||||
uchar *data_image, unique_ptr<Mat> &image_mat);
|
||||
|
||||
absl::Status SetData(CalculatorContext *cc);
|
||||
|
||||
absl::Status ProcessImage(CalculatorContext *cc,
|
||||
ImageFormat::Format &target_format);
|
||||
|
||||
static absl::StatusOr<string> ReadContentBlobFromFile(
|
||||
const string &unresolved_path)
|
||||
{
|
||||
ASSIGN_OR_RETURN(string resolved_path,
|
||||
mediapipe::PathToResourceAsFile(unresolved_path),
|
||||
_ << "Failed to resolve path! Path = " << unresolved_path);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// Indicates if image frame is available as input.
|
||||
bool image_frame_available_ = false;
|
||||
|
||||
unique_ptr<Mat> image_mat;
|
||||
vector<string> index_names;
|
||||
map<string, vector<int>> indexes;
|
||||
|
||||
map<string, Tensor<double>> masks;
|
||||
vector<vector<int>> _trianglesIndexes;
|
||||
Tensor<double> __facePts;
|
||||
|
||||
int image_width_;
|
||||
int image_height_;
|
||||
|
||||
Mat mat_image_;
|
||||
};
|
||||
|
||||
absl::Status FaceProcessorCalculator::GetContract(CalculatorContract *cc)
|
||||
{
|
||||
CHECK_GE(cc->Inputs().NumEntries(), 1);
|
||||
|
||||
if (cc->Inputs().HasTag(kImageFrameTag))
|
||||
{
|
||||
cc->Inputs().Tag(kImageFrameTag).Set<ImageFrame>();
|
||||
CHECK(cc->Outputs().HasTag(kImageFrameTag));
|
||||
}
|
||||
|
||||
RET_CHECK(cc->Inputs().HasTag(kLandmarksTag) ||
|
||||
cc->Inputs().HasTag(kNormLandmarksTag))
|
||||
<< "None of the input streams are provided.";
|
||||
RET_CHECK(!(cc->Inputs().HasTag(kLandmarksTag) &&
|
||||
cc->Inputs().HasTag(kNormLandmarksTag)))
|
||||
<< "Can only one type of landmark can be taken. Either absolute or "
|
||||
"normalized landmarks.";
|
||||
|
||||
if (cc->Inputs().HasTag(kLandmarksTag))
|
||||
{
|
||||
cc->Inputs().Tag(kLandmarksTag).Set<vector<LandmarkList>>();
|
||||
}
|
||||
if (cc->Inputs().HasTag(kNormLandmarksTag))
|
||||
{
|
||||
cc->Inputs().Tag(kNormLandmarksTag).Set<vector<NormalizedLandmarkList>>();
|
||||
}
|
||||
|
||||
if (cc->Outputs().HasTag(kImageFrameTag))
|
||||
{
|
||||
cc->Outputs().Tag(kImageFrameTag).Set<ImageFrame>();
|
||||
}
|
||||
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status FaceProcessorCalculator::Open(CalculatorContext *cc)
|
||||
{
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
|
||||
if (cc->Inputs().HasTag(kImageFrameTag) || HasImageTag(cc))
|
||||
{
|
||||
image_frame_available_ = true;
|
||||
}
|
||||
|
||||
// Set the output header based on the input header (if present).
|
||||
const char *tag = kImageFrameTag;
|
||||
if (image_frame_available_ && !cc->Inputs().Tag(tag).Header().IsEmpty())
|
||||
{
|
||||
const auto &input_header =
|
||||
cc->Inputs().Tag(tag).Header().Get<VideoHeader>();
|
||||
auto *output_video_header = new VideoHeader(input_header);
|
||||
cc->Outputs().Tag(tag).SetHeader(Adopt(output_video_header));
|
||||
}
|
||||
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status FaceProcessorCalculator::Process(CalculatorContext *cc)
|
||||
{
|
||||
if (cc->Inputs().HasTag(kImageFrameTag) &&
|
||||
cc->Inputs().Tag(kImageFrameTag).IsEmpty())
|
||||
{
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
// Initialize render target, drawn with OpenCV.
|
||||
ImageFormat::Format target_format;
|
||||
|
||||
MP_RETURN_IF_ERROR(CreateRenderTargetCpu(cc, image_mat, &target_format));
|
||||
|
||||
mat_image_ = *image_mat.get();
|
||||
image_width_ = image_mat->cols;
|
||||
image_height_ = image_mat->rows;
|
||||
|
||||
MP_RETURN_IF_ERROR(SetData(cc));
|
||||
|
||||
if (cc->Inputs().HasTag(kNormLandmarksTag) &&
|
||||
!cc->Inputs().Tag(kNormLandmarksTag).IsEmpty())
|
||||
{
|
||||
MP_RETURN_IF_ERROR(ProcessImage(cc, target_format));
|
||||
}
|
||||
|
||||
uchar *image_mat_ptr = image_mat->data;
|
||||
MP_RETURN_IF_ERROR(RenderToCpu(cc, target_format, image_mat_ptr, image_mat));
|
||||
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status FaceProcessorCalculator::Close(CalculatorContext *cc)
|
||||
{
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status FaceProcessorCalculator::RenderToCpu(
|
||||
CalculatorContext *cc, const ImageFormat::Format &target_format,
|
||||
uchar *data_image, unique_ptr<Mat> &image_mat)
|
||||
{
|
||||
|
||||
auto output_frame = absl::make_unique<ImageFrame>(
|
||||
target_format, mat_image_.cols, mat_image_.rows);
|
||||
|
||||
output_frame->CopyPixelData(target_format, mat_image_.cols, mat_image_.rows, data_image,
|
||||
ImageFrame::kDefaultAlignmentBoundary);
|
||||
|
||||
if (cc->Outputs().HasTag(kImageFrameTag))
|
||||
{
|
||||
cc->Outputs()
|
||||
.Tag(kImageFrameTag)
|
||||
.Add(output_frame.release(), cc->InputTimestamp());
|
||||
}
|
||||
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status FaceProcessorCalculator::CreateRenderTargetCpu(
|
||||
CalculatorContext *cc, unique_ptr<Mat> &image_mat,
|
||||
ImageFormat::Format *target_format)
|
||||
{
|
||||
if (image_frame_available_)
|
||||
{
|
||||
const auto &input_frame =
|
||||
cc->Inputs().Tag(kImageFrameTag).Get<ImageFrame>();
|
||||
|
||||
int target_mat_type;
|
||||
switch (input_frame.Format())
|
||||
{
|
||||
case ImageFormat::SRGBA:
|
||||
*target_format = ImageFormat::SRGBA;
|
||||
target_mat_type = CV_8UC4;
|
||||
break;
|
||||
case ImageFormat::SRGB:
|
||||
*target_format = ImageFormat::SRGB;
|
||||
target_mat_type = CV_8UC3;
|
||||
break;
|
||||
case ImageFormat::GRAY8:
|
||||
*target_format = ImageFormat::SRGB;
|
||||
target_mat_type = CV_8UC3;
|
||||
break;
|
||||
default:
|
||||
return absl::UnknownError("Unexpected image frame format.");
|
||||
break;
|
||||
}
|
||||
|
||||
image_mat = absl::make_unique<Mat>(
|
||||
input_frame.Height(), input_frame.Width(), target_mat_type);
|
||||
|
||||
auto input_mat = formats::MatView(&input_frame);
|
||||
|
||||
if (input_frame.Format() == ImageFormat::GRAY8)
|
||||
{
|
||||
Mat rgb_mat;
|
||||
cvtColor(input_mat, rgb_mat, CV_GRAY2RGBA);
|
||||
rgb_mat.copyTo(*image_mat);
|
||||
}
|
||||
else
|
||||
{
|
||||
input_mat.copyTo(*image_mat);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
image_mat = absl::make_unique<Mat>(
|
||||
1920, 1280, CV_8UC4,
|
||||
Scalar::all(255.0));
|
||||
*target_format = ImageFormat::SRGBA;
|
||||
}
|
||||
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status FaceProcessorCalculator::SetData(CalculatorContext *cc)
|
||||
{
|
||||
masks.clear();
|
||||
_trianglesIndexes.clear();
|
||||
|
||||
string filename = "mediapipe/graphs/deformation/config/triangles.txt";
|
||||
string content_blob;
|
||||
ASSIGN_OR_RETURN(content_blob,
|
||||
ReadContentBlobFromFile(filename),
|
||||
_ << "Failed to read texture blob from file!");
|
||||
|
||||
istringstream stream(content_blob);
|
||||
double points[854][3];
|
||||
vector<int> tmp;
|
||||
for (int i = 0; i < 854; ++i)
|
||||
{
|
||||
string line;
|
||||
tmp = {};
|
||||
for (int j = 0; j < 3; ++j)
|
||||
{
|
||||
stream >> points[i][j];
|
||||
tmp.push_back((int)points[i][j]);
|
||||
}
|
||||
_trianglesIndexes.push_back(tmp);
|
||||
}
|
||||
|
||||
filename = "./mediapipe/graphs/deformation/config/index_names.txt";
|
||||
ASSIGN_OR_RETURN(content_blob,
|
||||
ReadContentBlobFromFile(filename),
|
||||
_ << "Failed to read texture blob from file!");
|
||||
istringstream stream2(content_blob);
|
||||
|
||||
string line;
|
||||
vector<int> idxs;
|
||||
while (getline(stream2, line))
|
||||
{
|
||||
index_names.push_back(line);
|
||||
}
|
||||
stream2.clear();
|
||||
|
||||
for (int i = 0; i < index_names.size(); i++)
|
||||
{
|
||||
filename = "./mediapipe/graphs/deformation/config/" + index_names[i] + ".txt";
|
||||
|
||||
ASSIGN_OR_RETURN(content_blob,
|
||||
ReadContentBlobFromFile(filename),
|
||||
_ << "Failed to read texture blob from file!");
|
||||
stream2.str(content_blob);
|
||||
|
||||
while (getline(stream2, line))
|
||||
{
|
||||
idxs.push_back(stoi(line));
|
||||
}
|
||||
indexes[index_names[i]] = idxs;
|
||||
|
||||
idxs = {};
|
||||
stream2.clear();
|
||||
}
|
||||
|
||||
double **zero_arr;
|
||||
for (int i = 0; i < index_names.size(); i++)
|
||||
{
|
||||
zero_arr = (double **)new double *[478];
|
||||
for (int j = 0; j < 478; j++)
|
||||
{
|
||||
zero_arr[j] = (double *)new double[1];
|
||||
zero_arr[j][0] = 0.0;
|
||||
}
|
||||
for (int j = 0; j < indexes[index_names[i]].size(); j++)
|
||||
{
|
||||
zero_arr[indexes[index_names[i]][j]][0] = 1;
|
||||
}
|
||||
masks[index_names[i]] = Tensor<double>(zero_arr, 478, 1);
|
||||
}
|
||||
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status FaceProcessorCalculator::ProcessImage(CalculatorContext *cc,
|
||||
ImageFormat::Format &target_format)
|
||||
{
|
||||
double alfaNose = 0.7;
|
||||
double alfaLips = 0.2;
|
||||
double alfaCheekbones = 0.2;
|
||||
|
||||
if (cc->Inputs().HasTag(kNormLandmarksTag))
|
||||
{
|
||||
const vector<NormalizedLandmarkList> &landmarks =
|
||||
cc->Inputs().Tag(kNormLandmarksTag).Get<vector<NormalizedLandmarkList>>();
|
||||
|
||||
int n = 478;
|
||||
int m = 3;
|
||||
|
||||
double **_points = (double **)new double *[n];
|
||||
for (int i = 0; i < n; i++)
|
||||
_points[i] = (double *)new double[m];
|
||||
|
||||
for (int i = 0; i < landmarks[0].landmark_size(); ++i)
|
||||
{
|
||||
const NormalizedLandmark &landmark = landmarks[0].landmark(i);
|
||||
|
||||
if (!IsLandmarkVisibleAndPresent<NormalizedLandmark>(
|
||||
landmark, false,
|
||||
0.0, false,
|
||||
0.0))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const auto &point = landmark;
|
||||
|
||||
double x = -1;
|
||||
double y = -1;
|
||||
double z = -1;
|
||||
|
||||
CHECK(NormalizedtoPixelCoordinates(point.x(), point.y(), point.z(), image_width_,
|
||||
image_height_, &x, &y, &z));
|
||||
_points[i][0] = x;
|
||||
_points[i][1] = y;
|
||||
_points[i][2] = z;
|
||||
}
|
||||
__facePts = Tensor<double>(_points, n, m);
|
||||
}
|
||||
|
||||
cvtColor(mat_image_, mat_image_, COLOR_BGRA2RGB);
|
||||
Mat clone_image = mat_image_.clone();
|
||||
|
||||
Tensor<double> ___facePts = __facePts - 0;
|
||||
|
||||
Tensor<double> _X = __facePts.index(indexes["mediumNoseIndexes"]).index(Range::all(), Range(0, 1));
|
||||
Tensor<double> __YZ = __facePts.index(indexes["mediumNoseIndexes"]).index(Range::all(), Range(1, -1));
|
||||
Tensor<double> ___YZ = __YZ.concat(Tensor<double>(Mat::ones(9, 1, CV_64F)), 1);
|
||||
Tensor<double> _b = ___YZ.transpose().matmul(___YZ).inverse().matmul(___YZ.transpose()).matmul(_X);
|
||||
Tensor<double> _ort = Tensor<double>(Mat::ones(1, 1, CV_64F)).concat(-_b.index(Range(0, 2), Range::all()), 0);
|
||||
double _D = _b.at({2, 0}) / _ort.norm();
|
||||
_ort = _ort / _ort.norm();
|
||||
|
||||
Tensor<double> _mask;
|
||||
Tensor<double> _dsts;
|
||||
vector<string> _indexes;
|
||||
_indexes = {"cheekbonesIndexes", "noseAllIndexes", "additionalNoseIndexes1", "additionalNoseIndexes2", "additionalNoseIndexes3"};
|
||||
|
||||
vector<double> coeffs;
|
||||
coeffs = {alfaCheekbones * 0.2, alfaNose * 0.2, alfaNose * 0.1, alfaNose * 0.05, alfaNose * 0.025};
|
||||
|
||||
_mask = masks["faceOvalIndexes"];
|
||||
_dsts = _mask * (___facePts.matmul(_ort) - _D);
|
||||
___facePts = ___facePts + _dsts.matmul(_ort.transpose()) * 0.05;
|
||||
__facePts = __facePts + _dsts.matmul(_ort.transpose()) * 0.05;
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
_mask = masks[_indexes[i]];
|
||||
_dsts = _mask * (___facePts.matmul(_ort) - _D);
|
||||
___facePts = ___facePts - coeffs[i] * _dsts.matmul(_ort.transpose());
|
||||
}
|
||||
|
||||
_D = -1;
|
||||
Tensor<double> _lipsSupprotPoint = (___facePts.index(11) + ___facePts.index(16)) / 2;
|
||||
Tensor<double> _ABC = _lipsSupprotPoint.concat(___facePts.index(291), 0).concat(___facePts.index(61), 0).inverse().matmul(Tensor<double>(Mat::ones(3, 1, CV_64F))) * _D;
|
||||
_D = _D / _ABC.norm();
|
||||
_ort = _ABC / _ABC.norm();
|
||||
|
||||
_indexes = {"upperLipCnt", "lowerLipCnt", "widerUpperLipPts1", "widerLowerLipPts1"};
|
||||
coeffs = {alfaLips, alfaLips * 0.5, alfaLips * 0.5, alfaLips * 0.25};
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
_mask = masks[_indexes[i]];
|
||||
_dsts = _mask * (___facePts.matmul(_ort) - _D);
|
||||
___facePts = ___facePts + coeffs[i] * _dsts.matmul(_ort.transpose());
|
||||
}
|
||||
|
||||
Tensor<double> tmp_order = ___facePts.index(_trianglesIndexes);
|
||||
tmp_order = -tmp_order.index(Range::all(), 2) - tmp_order.index(Range::all(), 5) - tmp_order.index(Range::all(), 8);
|
||||
tmp_order = tmp_order.transpose();
|
||||
vector<double> __order = tmp_order.get_1d_data();
|
||||
vector<int> _order = tmp_order.sort_indexes(__order);
|
||||
|
||||
Tensor<double> _src = __facePts.index(_trianglesIndexes).index(_order);
|
||||
Tensor<double> _dst = ___facePts.index(_trianglesIndexes).index(_order);
|
||||
|
||||
Mat outImage = mat_image_.clone();
|
||||
|
||||
for (int i = 0; i < 854; ++i)
|
||||
{
|
||||
if (i == 246)
|
||||
{
|
||||
int pointer = 0;
|
||||
}
|
||||
|
||||
Tensor<double> __t1 = _src.index(vector<int>{i});
|
||||
Tensor<double> __t2 = _dst.index(vector<int>{i});
|
||||
|
||||
vector<Point> t1;
|
||||
vector<Point> t2;
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
t1.push_back(Point(
|
||||
(int)(__t1.at(vector<int>{0, 3 * i})),
|
||||
(int)(__t1.at(vector<int>{0, 3 * i + 1}))));
|
||||
t2.push_back(Point(
|
||||
(int)(__t2.at(vector<int>{0, 3 * i})),
|
||||
(int)(__t2.at(vector<int>{0, 3 * i + 1}))));
|
||||
}
|
||||
|
||||
Rect r1 = boundingRect(t1);
|
||||
Rect r2 = boundingRect(t2);
|
||||
Point2f srcTri[3];
|
||||
Point2f dstTri[3];
|
||||
vector<Point> t1Rect;
|
||||
vector<Point> t2Rect;
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
srcTri[i] = Point2f(t1[i].x - r1.x, t1[i].y - r1.y);
|
||||
dstTri[i] = Point2f(t2[i].x - r2.x, t2[i].y - r2.y);
|
||||
t1Rect.push_back(Point(t1[i].x - r1.x, t1[i].y - r1.y));
|
||||
t2Rect.push_back(Point(t2[i].x - r2.x, t2[i].y - r2.y));
|
||||
}
|
||||
|
||||
Mat _dst;
|
||||
Mat mask = Mat::zeros(r2.height, r2.width, CV_8U);
|
||||
fillConvexPoly(mask, t2Rect, Scalar(1.0, 1.0, 1.0), 16, 0);
|
||||
|
||||
if (r1.x + r1.width < clone_image.cols && r1.x >= 0 && r1.x + r1.width >= 0 && r1.y >= 0 && r1.y
|
||||
< clone_image.rows && r1.y + r1.height < clone_image.rows)
|
||||
{
|
||||
Mat imgRect = mat_image_(Range(r1.y, r1.y + r1.height), Range(r1.x, r1.x + r1.width));
|
||||
Mat warpMat = getAffineTransform(srcTri, dstTri);
|
||||
warpAffine(imgRect, _dst, warpMat, mask.size());
|
||||
|
||||
for (int i = r2.y; i < r2.y + r2.height; ++i)
|
||||
{
|
||||
for (int j = r2.x; j < r2.x + r2.width; ++j)
|
||||
{
|
||||
if ((int)mask.at<uchar>(i - r2.y, j - r2.x) > 0)
|
||||
{
|
||||
outImage.at<Vec3b>(i, j) = _dst.at<Vec3b>(i - r2.y, j - r2.x);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
cvtColor(outImage, *image_mat, COLOR_RGB2BGRA);
|
||||
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
REGISTER_CALCULATOR(FaceProcessorCalculator);
|
||||
} // namespace mediapipe
|
34
mediapipe/graphs/deformation/config/BUILD
Normal file
34
mediapipe/graphs/deformation/config/BUILD
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Copyright 2020 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.
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("//mediapipe/framework:encode_binary_proto.bzl", "encode_binary_proto")
|
||||
|
||||
encode_binary_proto(
|
||||
name = "triangles",
|
||||
input = "triangles.pbtxt",
|
||||
message_type = "mediapipe.face_geometry.Mesh3d",
|
||||
output = "triangles.binarypb",
|
||||
deps = [
|
||||
"//mediapipe/modules/face_geometry/protos:mesh_3d_proto",
|
||||
],
|
||||
)
|
||||
|
||||
exports_files(
|
||||
srcs = glob(["**"]),
|
||||
)
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
128
|
||||
2
|
||||
8
|
||||
266
|
||||
417
|
||||
36
|
||||
423
|
||||
193
|
||||
453
|
||||
326
|
||||
327
|
||||
328
|
||||
329
|
||||
203
|
||||
464
|
||||
350
|
||||
97
|
||||
98
|
||||
99
|
||||
100
|
||||
357
|
||||
233
|
||||
244
|
||||
121
|
|
@ -0,0 +1,24 @@
|
|||
391
|
||||
9
|
||||
393
|
||||
285
|
||||
413
|
||||
164
|
||||
165
|
||||
167
|
||||
425
|
||||
426
|
||||
55
|
||||
189
|
||||
452
|
||||
330
|
||||
205
|
||||
206
|
||||
463
|
||||
341
|
||||
349
|
||||
101
|
||||
232
|
||||
112
|
||||
243
|
||||
120
|
|
@ -0,0 +1,40 @@
|
|||
0
|
||||
256
|
||||
133
|
||||
267
|
||||
269
|
||||
151
|
||||
280
|
||||
26
|
||||
411
|
||||
155
|
||||
414
|
||||
37
|
||||
39
|
||||
295
|
||||
427
|
||||
50
|
||||
436
|
||||
441
|
||||
187
|
||||
190
|
||||
65
|
||||
322
|
||||
450
|
||||
451
|
||||
207
|
||||
336
|
||||
337
|
||||
216
|
||||
347
|
||||
92
|
||||
221
|
||||
348
|
||||
230
|
||||
231
|
||||
362
|
||||
107
|
||||
108
|
||||
118
|
||||
119
|
||||
382
|
26
mediapipe/graphs/deformation/config/cheekbonesIndexes.txt
Normal file
26
mediapipe/graphs/deformation/config/cheekbonesIndexes.txt
Normal file
|
@ -0,0 +1,26 @@
|
|||
135
|
||||
137
|
||||
138
|
||||
395
|
||||
394
|
||||
401
|
||||
147
|
||||
411
|
||||
416
|
||||
169
|
||||
170
|
||||
433
|
||||
177
|
||||
435
|
||||
434
|
||||
187
|
||||
192
|
||||
213
|
||||
214
|
||||
215
|
||||
352
|
||||
364
|
||||
366
|
||||
367
|
||||
376
|
||||
123
|
36
mediapipe/graphs/deformation/config/faceOvalIndexes.txt
Normal file
36
mediapipe/graphs/deformation/config/faceOvalIndexes.txt
Normal file
|
@ -0,0 +1,36 @@
|
|||
10
|
||||
21
|
||||
54
|
||||
58
|
||||
67
|
||||
93
|
||||
103
|
||||
109
|
||||
127
|
||||
132
|
||||
136
|
||||
148
|
||||
149
|
||||
150
|
||||
152
|
||||
162
|
||||
172
|
||||
176
|
||||
234
|
||||
251
|
||||
284
|
||||
288
|
||||
297
|
||||
323
|
||||
332
|
||||
338
|
||||
356
|
||||
361
|
||||
365
|
||||
377
|
||||
378
|
||||
379
|
||||
389
|
||||
397
|
||||
400
|
||||
454
|
12
mediapipe/graphs/deformation/config/index_names.txt
Normal file
12
mediapipe/graphs/deformation/config/index_names.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
mediumNoseIndexes
|
||||
mediumFaceIndexes
|
||||
noseAllIndexes
|
||||
cheekbonesIndexes
|
||||
additionalNoseIndexes1
|
||||
additionalNoseIndexes2
|
||||
additionalNoseIndexes3
|
||||
faceOvalIndexes
|
||||
upperLipCnt
|
||||
lowerLipCnt
|
||||
widerUpperLipPts1
|
||||
widerLowerLipPts1
|
7
mediapipe/graphs/deformation/config/lowerLipCnt.txt
Normal file
7
mediapipe/graphs/deformation/config/lowerLipCnt.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
91
|
||||
181
|
||||
84
|
||||
17
|
||||
314
|
||||
405
|
||||
321
|
28
mediapipe/graphs/deformation/config/mediumFaceIndexes.txt
Normal file
28
mediapipe/graphs/deformation/config/mediumFaceIndexes.txt
Normal file
|
@ -0,0 +1,28 @@
|
|||
0
|
||||
1
|
||||
2
|
||||
4
|
||||
5
|
||||
6
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
151
|
||||
152
|
||||
164
|
||||
168
|
||||
175
|
||||
195
|
||||
197
|
||||
199
|
||||
200
|
||||
94
|
|
@ -0,0 +1,9 @@
|
|||
1
|
||||
195
|
||||
4
|
||||
5
|
||||
6
|
||||
197
|
||||
168
|
||||
19
|
||||
94
|
95
mediapipe/graphs/deformation/config/noseAllIndexes.txt
Normal file
95
mediapipe/graphs/deformation/config/noseAllIndexes.txt
Normal file
|
@ -0,0 +1,95 @@
|
|||
1
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
19
|
||||
20
|
||||
44
|
||||
45
|
||||
47
|
||||
48
|
||||
49
|
||||
51
|
||||
59
|
||||
60
|
||||
64
|
||||
75
|
||||
79
|
||||
94
|
||||
102
|
||||
114
|
||||
115
|
||||
122
|
||||
125
|
||||
126
|
||||
129
|
||||
131
|
||||
134
|
||||
141
|
||||
142
|
||||
166
|
||||
168
|
||||
174
|
||||
188
|
||||
195
|
||||
196
|
||||
197
|
||||
198
|
||||
209
|
||||
217
|
||||
218
|
||||
219
|
||||
220
|
||||
235
|
||||
236
|
||||
237
|
||||
238
|
||||
239
|
||||
240
|
||||
241
|
||||
242
|
||||
245
|
||||
248
|
||||
250
|
||||
274
|
||||
275
|
||||
277
|
||||
278
|
||||
279
|
||||
281
|
||||
289
|
||||
290
|
||||
294
|
||||
305
|
||||
309
|
||||
331
|
||||
343
|
||||
344
|
||||
351
|
||||
354
|
||||
355
|
||||
358
|
||||
360
|
||||
363
|
||||
370
|
||||
371
|
||||
392
|
||||
399
|
||||
412
|
||||
419
|
||||
420
|
||||
429
|
||||
437
|
||||
438
|
||||
439
|
||||
440
|
||||
455
|
||||
456
|
||||
457
|
||||
458
|
||||
459
|
||||
460
|
||||
461
|
||||
462
|
||||
465
|
478
mediapipe/graphs/deformation/config/tmp.txt
Normal file
478
mediapipe/graphs/deformation/config/tmp.txt
Normal file
|
@ -0,0 +1,478 @@
|
|||
362.31481075286865 600.8182525634766 -49.94013011455536
|
||||
359.64590549468994 543.0130004882812 -87.40982294082642
|
||||
360.086088180542 561.5730667114258 -46.17353081703186
|
||||
347.2103476524353 485.1922607421875 -64.30929780006409
|
||||
359.8048210144043 525.0722122192383 -92.92720198631287
|
||||
360.4503107070923 501.8289566040039 -86.14297807216644
|
||||
362.4685335159302 444.8126220703125 -41.42429620027542
|
||||
245.9792947769165 443.63861083984375 28.838303983211517
|
||||
363.6971139907837 394.8170471191406 -30.798228979110718
|
||||
364.1529178619385 369.5340347290039 -34.45447951555252
|
||||
366.7464208602905 289.53128814697266 -16.76752656698227
|
||||
362.1213483810425 610.7015991210938 -47.918522357940674
|
||||
361.9111490249634 622.2106170654297 -42.000214755535126
|
||||
361.7901277542114 630.2610015869141 -33.034483194351196
|
||||
361.80956840515137 630.5062103271484 -31.02048486471176
|
||||
361.65876388549805 641.8568420410156 -31.974922120571136
|
||||
361.32380962371826 655.2098846435547 -34.1738560795784
|
||||
361.0052490234375 668.2077789306641 -29.830504059791565
|
||||
358.64492654800415 676.3850402832031 -11.20004117488861
|
||||
359.86140489578247 552.3215484619141 -79.14359271526337
|
||||
346.4217138290405 552.1380233764648 -56.163471937179565
|
||||
192.9905390739441 371.3102340698242 112.20251083374023
|
||||
292.0316004753113 460.60115814208984 8.2303536683321
|
||||
275.04276752471924 462.58548736572266 10.719646140933037
|
||||
259.49241399765015 460.65929412841797 16.608951687812805
|
||||
240.12107133865356 449.6390914916992 32.28025406599045
|
||||
306.7124676704407 454.4320297241211 9.515418112277985
|
||||
269.18585300445557 400.675048828125 3.427928164601326
|
||||
288.8427543640137 403.7632751464844 2.093831095844507
|
||||
250.83645343780518 403.60511779785156 10.545069873332977
|
||||
239.18262004852295 411.6160583496094 18.1980961561203
|
||||
228.3171844482422 460.1266860961914 41.43935680389404
|
||||
302.79680728912354 691.3064575195312 9.149758592247963
|
||||
241.1520266532898 437.7595520019531 35.078975558280945
|
||||
189.48997735977173 447.4779510498047 118.62715244293213
|
||||
212.72387266159058 445.54298400878906 59.737064838409424
|
||||
282.91693925857544 530.6702423095703 -5.825772061944008
|
||||
342.03819036483765 596.2926864624023 -46.076542139053345
|
||||
344.00843381881714 621.6756820678711 -38.56708645820618
|
||||
321.01934909820557 603.6526107788086 -35.2379634976387
|
||||
307.75672674179077 612.1319580078125 -23.22000414133072
|
||||
328.45593452453613 622.2881317138672 -31.554990112781525
|
||||
316.4400243759155 624.019889831543 -20.421039909124374
|
||||
292.482705116272 644.8335266113281 4.006892032921314
|
||||
346.5736126899719 542.3727035522461 -85.37296950817108
|
||||
344.0822696685791 525.3844833374023 -90.18237948417664
|
||||
217.00727462768555 391.1960983276367 27.05360770225525
|
||||
314.4440746307373 486.0729217529297 -9.935649186372757
|
||||
311.9938015937805 539.7780990600586 -43.17997097969055
|
||||
310.8665657043457 530.599479675293 -38.25033366680145
|
||||
237.0926856994629 528.7818908691406 18.765471875667572
|
||||
345.63275814056396 503.6951446533203 -80.07521510124207
|
||||
253.07697772979736 370.8142852783203 -4.48684886097908
|
||||
230.86107730865479 376.7497253417969 10.754622146487236
|
||||
205.6266188621521 339.0149688720703 78.1203943490982
|
||||
326.48303031921387 390.49964904785156 -23.940061926841736
|
||||
305.56124210357666 412.823486328125 5.849309116601944
|
||||
282.61058807373047 628.2186889648438 8.089985623955727
|
||||
217.4528431892395 606.013298034668 162.1191930770874
|
||||
324.4342088699341 549.4257736206055 -37.90909230709076
|
||||
336.75106287002563 554.6352386474609 -39.987490475177765
|
||||
293.8541293144226 627.0395278930664 4.047446697950363
|
||||
297.9695391654968 627.4363708496094 -1.4645572006702423
|
||||
223.25343132019043 364.15504455566406 18.954835832118988
|
||||
312.2819137573242 548.3728408813477 -34.18475389480591
|
||||
284.00705337524414 374.25506591796875 -16.747109591960907
|
||||
281.1100745201111 358.78501892089844 -20.09346440434456
|
||||
269.8329734802246 297.1759033203125 9.054293408989906
|
||||
213.61764907836914 353.2844543457031 44.04454082250595
|
||||
276.30271911621094 327.88902282714844 -6.657576039433479
|
||||
209.54910278320312 383.55751037597656 41.906957030296326
|
||||
200.42315483093262 379.8735046386719 74.44762945175171
|
||||
342.41307735443115 609.2689514160156 -44.42476004362106
|
||||
324.58361864089966 613.3655548095703 -34.433123767375946
|
||||
311.8226981163025 618.1516265869141 -23.389243483543396
|
||||
328.36570501327515 552.9110717773438 -34.33730721473694
|
||||
295.9403944015503 627.3085021972656 1.058464301750064
|
||||
302.7903914451599 633.2058334350586 -8.738560527563095
|
||||
300.23465394973755 627.6346206665039 -1.9429570063948631
|
||||
330.6955361366272 542.2183990478516 -60.3791481256485
|
||||
319.926381111145 627.951774597168 -17.149565666913986
|
||||
331.668963432312 628.3108901977539 -24.26801562309265
|
||||
345.7926392555237 629.2702865600586 -30.250057876110077
|
||||
337.8448462486267 674.9959564208984 -10.129471644759178
|
||||
339.70123529434204 665.8506774902344 -28.294233977794647
|
||||
341.120080947876 652.9856109619141 -31.669657230377197
|
||||
343.2656764984131 639.5659255981445 -29.17739689350128
|
||||
345.6427574157715 629.5268249511719 -28.149794340133667
|
||||
319.5728015899658 628.4269332885742 -15.51249548792839
|
||||
315.7986545562744 633.2476806640625 -17.23422959446907
|
||||
311.2205743789673 639.5831680297852 -19.361704140901566
|
||||
307.6517343521118 646.3972473144531 -16.121692210435867
|
||||
298.32361221313477 595.7241058349609 -16.49742141366005
|
||||
197.07026481628418 522.5712585449219 187.61728048324585
|
||||
360.03939628601074 556.6411209106445 -57.723058462142944
|
||||
310.6411099433899 628.126335144043 -7.598769888281822
|
||||
306.76589727401733 630.5442428588867 -8.854755163192749
|
||||
340.9685468673706 561.4918518066406 -40.77357888221741
|
||||
318.58154296875 559.0150451660156 -22.706395983695984
|
||||
339.0328288078308 558.0970001220703 -40.72387754917145
|
||||
297.1806049346924 496.8467330932617 -3.014509230852127
|
||||
271.3532495498657 508.8191604614258 4.138495959341526
|
||||
308.9188528060913 539.0650939941406 -28.855242133140564
|
||||
229.7728943824768 313.4063148498535 41.365743577480316
|
||||
237.28271484375 334.8050308227539 17.421178221702576
|
||||
247.82358169555664 355.85723876953125 -1.6578103601932526
|
||||
303.48783016204834 655.7356262207031 -2.8776374459266663
|
||||
320.89759826660156 365.4893493652344 -30.40818214416504
|
||||
317.74295568466187 328.6730194091797 -21.479719877243042
|
||||
314.16688442230225 290.34828186035156 -10.778319463133812
|
||||
246.95883750915527 456.8497085571289 24.94966149330139
|
||||
213.02721977233887 472.27821350097656 51.60349130630493
|
||||
316.6361689567566 448.2948684692383 11.210014969110489
|
||||
224.51123714447021 419.96166229248047 34.82187241315842
|
||||
325.7254457473755 473.91719818115234 -16.364332884550095
|
||||
320.2879858016968 531.8416595458984 -59.67542231082916
|
||||
200.17237901687622 482.4532699584961 71.37396275997162
|
||||
221.48051261901855 485.61683654785156 35.744640827178955
|
||||
240.50400495529175 492.3386001586914 18.90147864818573
|
||||
271.28535747528076 489.66487884521484 10.056736171245575
|
||||
294.8106050491333 482.0330047607422 4.697423055768013
|
||||
312.8950881958008 472.49622344970703 -0.738221537321806
|
||||
346.81421756744385 449.1241455078125 -34.28698629140854
|
||||
204.62121963500977 519.8909378051758 66.61324560642242
|
||||
213.83495092391968 416.9788360595703 43.828730285167694
|
||||
352.1424150466919 551.607666015625 -77.710622549057
|
||||
316.08299016952515 503.18206787109375 -17.371298521757126
|
||||
188.28613758087158 445.55076599121094 175.03106832504272
|
||||
326.122305393219 461.4849853515625 -3.944498486816883
|
||||
308.3635926246643 540.4094314575195 -12.52964437007904
|
||||
233.93686294555664 437.3786163330078 38.97653102874756
|
||||
320.04514932632446 520.8884429931641 -53.48777532577515
|
||||
204.8868227005005 563.2982635498047 179.70439910888672
|
||||
318.0916213989258 441.35467529296875 15.148012787103653
|
||||
332.17660903930664 510.15647888183594 -69.7168779373169
|
||||
246.40093803405762 649.1670989990234 71.32044732570648
|
||||
249.40900325775146 664.6739196777344 101.80629014968872
|
||||
194.89213943481445 521.3057327270508 127.27937936782837
|
||||
229.2852258682251 625.8639907836914 93.62288117408752
|
||||
194.3889570236206 411.54991149902344 101.41774535179138
|
||||
300.5897569656372 704.2718505859375 19.820925146341324
|
||||
354.11888122558594 555.8930587768555 -56.3017612695694
|
||||
301.9624900817871 516.7485809326172 -10.553073585033417
|
||||
201.8374729156494 448.94664764404297 77.33492016792297
|
||||
260.38565397262573 451.01245880126953 17.36278384923935
|
||||
274.47864532470703 452.89093017578125 12.385967820882797
|
||||
299.239296913147 636.0906982421875 -5.705782100558281
|
||||
211.2467908859253 554.1604995727539 71.35176479816437
|
||||
327.4084138870239 725.7848358154297 24.331189692020416
|
||||
286.07707500457764 701.6156768798828 57.26816654205322
|
||||
269.2962312698364 686.3684844970703 76.31482243537903
|
||||
365.2778148651123 330.47584533691406 -27.479083836078644
|
||||
358.84770154953003 729.9839019775391 18.132060170173645
|
||||
289.1335916519165 451.3136672973633 10.827817618846893
|
||||
303.04569482803345 447.21099853515625 12.386578023433685
|
||||
312.68999576568604 444.1571044921875 15.405343919992447
|
||||
205.10058403015137 413.8731002807617 61.52015447616577
|
||||
303.3820652961731 429.1310501098633 9.192320555448532
|
||||
288.88489723205566 424.5012664794922 7.256249114871025
|
||||
274.1650414466858 423.35071563720703 9.110438749194145
|
||||
259.4628667831421 425.9832000732422 14.47862595319748
|
||||
250.2515172958374 430.4640579223633 20.563799142837524
|
||||
187.92232275009155 404.9408721923828 147.70588159561157
|
||||
251.51052474975586 447.45338439941406 23.608345091342926
|
||||
359.7864532470703 576.8328094482422 -43.14598202705383
|
||||
312.0626163482666 584.9419784545898 -24.61238980293274
|
||||
324.0547513961792 545.9969329833984 -43.81172776222229
|
||||
339.08645153045654 578.1259536743164 -40.43156236410141
|
||||
363.23543071746826 420.7271957397461 -30.086140036582947
|
||||
264.0025806427002 671.0563659667969 54.207449555397034
|
||||
281.7091941833496 687.3118591308594 37.87458300590515
|
||||
325.7036876678467 717.67822265625 3.5573551431298256
|
||||
232.91792392730713 640.052490234375 133.60456466674805
|
||||
313.4801959991455 436.03153228759766 12.831948101520538
|
||||
335.8002305030823 477.6709747314453 -39.5541313290596
|
||||
358.56568336486816 721.3011169433594 -2.011377476155758
|
||||
304.51385021209717 715.4678344726562 37.6750186085701
|
||||
202.95018196105957 558.9566040039062 124.43295478820801
|
||||
331.45949363708496 628.7703323364258 -22.34838679432869
|
||||
327.7629590034485 636.6561126708984 -23.869176506996155
|
||||
324.14485216140747 646.7169189453125 -26.124992072582245
|
||||
321.60351276397705 658.1102752685547 -23.21021407842636
|
||||
318.0917501449585 666.5240478515625 -8.82074810564518
|
||||
306.7166304588318 625.5636215209961 -10.321009531617165
|
||||
302.3205542564392 622.8427505493164 -10.094233453273773
|
||||
298.712854385376 619.7249603271484 -9.787872210144997
|
||||
288.3246374130249 610.8903884887695 -4.832061566412449
|
||||
230.22202491760254 564.9159622192383 36.284818947315216
|
||||
336.4596891403198 460.1057815551758 -24.287088811397552
|
||||
328.8189768791199 425.0093078613281 2.1310108713805676
|
||||
319.7708559036255 428.3619689941406 9.346061423420906
|
||||
310.8956837654114 627.7709579467773 -8.471513763070107
|
||||
232.79664516448975 604.8004150390625 60.95910608768463
|
||||
342.1688461303711 422.27134704589844 -18.58388900756836
|
||||
309.9311399459839 678.4099578857422 1.6019318997859955
|
||||
361.1786699295044 482.5218963623047 -70.79273879528046
|
||||
346.76971435546875 468.0949401855469 -51.01327121257782
|
||||
361.77459239959717 464.4435501098633 -55.60548663139343
|
||||
324.7562026977539 505.9693908691406 -39.207214415073395
|
||||
358.36119174957275 707.8496551513672 -10.773193091154099
|
||||
358.4371304512024 691.1073303222656 -10.705491453409195
|
||||
332.7000045776367 688.8948822021484 -6.7887380719184875
|
||||
277.8965950012207 648.0897521972656 15.653365105390549
|
||||
295.393545627594 554.5903015136719 -7.615239322185516
|
||||
292.2783851623535 665.1010894775391 9.05498743057251
|
||||
260.0705909729004 551.2176132202148 2.3820671439170837
|
||||
281.56641483306885 572.2418594360352 -4.606827758252621
|
||||
250.0050973892212 579.2014312744141 15.266052782535553
|
||||
327.3827934265137 704.8444366455078 -5.169866345822811
|
||||
316.1485433578491 516.7336654663086 -27.182656824588776
|
||||
266.31940841674805 656.5741729736328 33.52453351020813
|
||||
284.52027797698975 674.3779754638672 23.33208829164505
|
||||
266.80147647857666 627.0775985717773 17.994222790002823
|
||||
218.27988624572754 582.8634643554688 76.66635274887085
|
||||
249.80828762054443 625.5910110473633 36.55672252178192
|
||||
213.114595413208 593.6250305175781 116.87825560569763
|
||||
271.6906929016113 596.0990905761719 3.441149778664112
|
||||
326.317720413208 490.1215362548828 -27.62029677629471
|
||||
325.59906005859375 539.2827987670898 -63.399245738983154
|
||||
317.07783222198486 545.1477432250977 -45.42772114276886
|
||||
331.3199973106384 527.3456192016602 -75.15479922294617
|
||||
314.9270439147949 406.2218475341797 -2.225418258458376
|
||||
286.793053150177 392.3470687866211 -2.8813794627785683
|
||||
262.07287073135376 389.1081237792969 0.5631764698773623
|
||||
242.1646785736084 393.15113067626953 9.229710549116135
|
||||
229.1750192642212 402.87853240966797 20.846603214740753
|
||||
224.53303813934326 440.9041213989258 46.56286954879761
|
||||
189.8299527168274 484.2190933227539 123.90522480010986
|
||||
235.57157278060913 468.4526824951172 32.08759367465973
|
||||
251.34508609771729 473.97212982177734 21.01878359913826
|
||||
272.71915912628174 474.7534942626953 12.821267545223236
|
||||
293.9277505874634 470.4969024658203 7.83361941576004
|
||||
310.88768005371094 463.1031799316406 6.670016795396805
|
||||
322.4747371673584 455.8022689819336 4.7100502252578735
|
||||
192.13680267333984 483.88782501220703 187.1008801460266
|
||||
317.98115730285645 550.5133056640625 -37.34726071357727
|
||||
335.155234336853 493.55438232421875 -52.37326383590698
|
||||
335.9710121154785 539.7782897949219 -76.81203961372375
|
||||
345.06670475006104 548.7778854370117 -70.86110830307007
|
||||
336.8111228942871 542.8650665283203 -68.8918787240982
|
||||
322.8489375114441 556.0922622680664 -32.045603692531586
|
||||
347.57999897003174 550.3982543945312 -75.349640250206
|
||||
349.6057105064392 554.798469543457 -56.22194945812225
|
||||
323.45998764038086 441.2953567504883 12.202259302139282
|
||||
331.4188313484192 444.6953582763672 2.0043303072452545
|
||||
335.8431887626648 446.3604736328125 -9.053357318043709
|
||||
245.0877285003662 434.12696838378906 27.005317211151123
|
||||
232.52679347991943 422.2683334350586 28.60065758228302
|
||||
375.129075050354 485.5686569213867 -66.13412797451019
|
||||
489.8169422149658 443.7993621826172 15.649998933076859
|
||||
374.1959238052368 552.6567459106445 -57.53134489059448
|
||||
549.8661518096924 376.85874938964844 93.96155834197998
|
||||
440.2923345565796 458.04664611816406 -0.3014412126503885
|
||||
457.0080757141113 461.1259460449219 0.5238388571888208
|
||||
473.02605628967285 460.9001159667969 4.890230633318424
|
||||
495.628023147583 449.5674133300781 18.310087770223618
|
||||
426.0021686553955 452.0965576171875 2.7239740267395973
|
||||
466.9395446777344 400.7162857055664 -7.452775910496712
|
||||
446.52535915374756 403.75301361083984 -6.610949859023094
|
||||
486.21758937835693 403.68438720703125 -1.9183234311640263
|
||||
498.62454414367676 411.7655563354492 4.756649918854237
|
||||
506.58478260040283 461.15882873535156 26.502676606178284
|
||||
416.82146072387695 693.8121032714844 3.1702547147870064
|
||||
496.17412090301514 437.4418640136719 21.256814897060394
|
||||
549.3464469909668 453.6427307128906 98.6981999874115
|
||||
524.5612049102783 445.5344772338867 43.08796048164368
|
||||
441.57936573028564 533.2194137573242 -14.471101015806198
|
||||
382.65531063079834 597.4103164672852 -48.406153321266174
|
||||
379.8743963241577 622.8031539916992 -40.8133989572525
|
||||
403.4557342529297 605.9185791015625 -40.07969945669174
|
||||
416.3720941543579 615.2373123168945 -29.67095285654068
|
||||
395.3726291656494 624.4565582275391 -35.8821764588356
|
||||
407.312707901001 626.9761276245117 -25.941161513328552
|
||||
429.1133165359497 647.1420288085938 -3.979477509856224
|
||||
372.91953563690186 542.8042221069336 -86.50143921375275
|
||||
375.26322841644287 525.7580184936523 -91.5913438796997
|
||||
522.051043510437 390.28438568115234 11.12120769917965
|
||||
411.86036109924316 487.31143951416016 -15.640982687473297
|
||||
409.8457860946655 541.0302352905273 -48.444803953170776
|
||||
411.71170234680176 531.7612838745117 -43.689598739147186
|
||||
489.60219383239746 533.1509399414062 4.472573474049568
|
||||
375.36510944366455 504.053955078125 -81.89855933189392
|
||||
483.0860137939453 369.4428253173828 -15.890099555253983
|
||||
506.9680166244507 375.4949951171875 -3.407749906182289
|
||||
535.6603574752808 343.8142395019531 61.62222862243652
|
||||
404.35669898986816 390.11817932128906 -27.821945250034332
|
||||
429.19429779052734 412.86109924316406 -1.2387271877378225
|
||||
439.73095893859863 630.7285308837891 -1.5582244656980038
|
||||
517.2312211990356 611.335334777832 145.1186978816986
|
||||
397.0336675643921 550.4440307617188 -41.68342173099518
|
||||
384.3327856063843 555.4219818115234 -41.896837055683136
|
||||
430.18645763397217 631.3722991943359 -4.207942374050617
|
||||
426.0752534866333 631.5671157836914 -8.771124556660652
|
||||
516.1490678787231 362.3528289794922 4.069492109119892
|
||||
409.93663787841797 549.6400833129883 -39.35904085636139
|
||||
449.89532947540283 373.4907531738281 -24.650874137878418
|
||||
452.7779960632324 357.8565216064453 -28.07433307170868
|
||||
467.0009994506836 299.6318054199219 -0.5581757007166743
|
||||
523.6217880249023 358.29761505126953 28.0683571100235
|
||||
456.60823345184326 330.89515686035156 -15.642706006765366
|
||||
531.0435247421265 382.22930908203125 25.11308580636978
|
||||
538.4967184066772 385.42991638183594 56.30295217037201
|
||||
381.85734272003174 610.4312133789062 -46.80420398712158
|
||||
399.549880027771 615.6716156005859 -39.0611869096756
|
||||
412.0954942703247 621.1643600463867 -29.384455382823944
|
||||
392.91014671325684 553.8689804077148 -37.45108902454376
|
||||
428.063006401062 631.5380859375 -6.604541391134262
|
||||
420.75469493865967 636.7933654785156 -15.22619515657425
|
||||
423.77503395080566 631.6289520263672 -9.005686417222023
|
||||
390.20763874053955 543.0792999267578 -63.937007188797
|
||||
403.6290693283081 630.7351684570312 -22.330348938703537
|
||||
391.8992328643799 630.2763366699219 -28.201560974121094
|
||||
377.955265045166 630.2646636962891 -32.497791945934296
|
||||
379.99460220336914 675.9234619140625 -12.158462852239609
|
||||
382.4532651901245 666.9402313232422 -30.5147784948349
|
||||
381.5766763687134 653.9708709716797 -34.037905633449554
|
||||
380.03790378570557 640.5079650878906 -31.568213403224945
|
||||
378.1312608718872 630.3887939453125 -30.430951416492462
|
||||
403.95132064819336 631.0291290283203 -20.634636282920837
|
||||
407.68070697784424 635.9734725952148 -22.271784245967865
|
||||
412.03386783599854 642.4954986572266 -24.572081565856934
|
||||
415.34568786621094 649.3869781494141 -21.70801743865013
|
||||
423.0186080932617 597.6608657836914 -23.924936950206757
|
||||
542.858247756958 529.2166137695312 169.14464950561523
|
||||
412.9946565628052 631.3167572021484 -13.893118500709534
|
||||
416.84532165527344 633.946418762207 -15.11006087064743
|
||||
379.8309659957886 562.1940994262695 -42.73179531097412
|
||||
403.6150360107422 560.328483581543 -26.81964933872223
|
||||
381.9331741333008 558.939094543457 -42.57615476846695
|
||||
429.0931034088135 498.6862564086914 -10.614701360464096
|
||||
454.7354507446289 511.7718505859375 -6.17903508245945
|
||||
414.0402889251709 540.428581237793 -34.470741748809814
|
||||
509.65288639068604 317.1898078918457 27.857261896133423
|
||||
498.0618381500244 339.1490936279297 4.3972546979784966
|
||||
489.1952705383301 354.1435241699219 -13.666276037693024
|
||||
416.7121124267578 657.8490447998047 -9.33106318116188
|
||||
410.217604637146 365.2154541015625 -34.52246278524399
|
||||
413.58139514923096 330.2250671386719 -26.18116021156311
|
||||
420.7748222351074 291.56354904174805 -15.680942237377167
|
||||
487.11220264434814 457.30411529541016 11.90019428730011
|
||||
522.3684883117676 474.2524719238281 35.08454114198685
|
||||
416.39119148254395 446.71112060546875 5.2111804112792015
|
||||
513.421196937561 419.6990966796875 19.548357725143433
|
||||
400.43140411376953 474.783935546875 -20.97128838300705
|
||||
400.6967496871948 532.8797149658203 -63.90847384929657
|
||||
533.5264778137207 488.26610565185547 52.815157771110535
|
||||
510.7516050338745 488.4153747558594 20.217141062021255
|
||||
488.8346529006958 495.30460357666016 5.44894952327013
|
||||
456.92164421081543 490.8591079711914 -0.35857056733220816
|
||||
433.9028835296631 481.6496276855469 -3.269107863306999
|
||||
416.31767749786377 471.9856643676758 -6.6906289011240005
|
||||
378.2948970794678 449.5512390136719 -36.269111931324005
|
||||
526.683669090271 525.6262969970703 48.04268717765808
|
||||
524.4007015228271 416.3843536376953 27.280404567718506
|
||||
367.53138542175293 551.911735534668 -78.59067678451538
|
||||
408.7814426422119 504.3170928955078 -22.77878075838089
|
||||
555.0616121292114 452.0101547241211 155.97532510757446
|
||||
403.1361436843872 461.4551544189453 -8.611655160784721
|
||||
415.44490814208984 541.8434143066406 -18.249017894268036
|
||||
503.7526273727417 436.89849853515625 24.546589851379395
|
||||
402.0468235015869 521.8133926391602 -57.816399335861206
|
||||
532.5650024414062 569.5538330078125 162.0654308795929
|
||||
416.1742973327637 440.01007080078125 8.98995392024517
|
||||
389.1408920288086 510.86524963378906 -72.86863446235657
|
||||
480.4836702346802 653.1622314453125 57.52188205718994
|
||||
479.2624282836914 668.9244079589844 89.09199714660645
|
||||
540.4804801940918 527.3695373535156 107.1337366104126
|
||||
499.9533748626709 630.0851440429688 77.29292213916779
|
||||
544.6455001831055 417.48207092285156 82.28857934474945
|
||||
419.3322229385376 706.9178771972656 13.273288160562515
|
||||
366.0675859451294 556.1402893066406 -56.881853342056274
|
||||
422.9339790344238 518.4252166748047 -17.242367416620255
|
||||
536.9172191619873 449.3646240234375 59.08366799354553
|
||||
473.0810308456421 451.0033416748047 5.877308696508408
|
||||
458.54156970977783 451.5306091308594 2.163227554410696
|
||||
424.2369747161865 639.8194122314453 -12.663331031799316
|
||||
519.0340089797974 559.5111465454102 53.35131525993347
|
||||
391.2917232513428 727.3930358886719 20.891675055027008
|
||||
437.550687789917 704.8687744140625 48.8024765253067
|
||||
456.8107080459595 690.1861572265625 65.88669955730438
|
||||
444.11866664886475 448.7945556640625 2.128894943743944
|
||||
430.5766439437866 444.57725524902344 4.955844841897488
|
||||
421.1917018890381 442.2102737426758 8.750274404883385
|
||||
534.3507957458496 412.5332260131836 43.76921206712723
|
||||
432.30600357055664 429.1683578491211 1.5175767615437508
|
||||
447.14394092559814 424.9408721923828 -1.7302481085062027
|
||||
462.11225509643555 424.2276382446289 -1.3385665509849787
|
||||
477.0910406112671 426.6614532470703 2.5095052644610405
|
||||
486.4478302001953 430.6407928466797 7.780308499932289
|
||||
555.3960514068604 411.0698699951172 128.79035353660583
|
||||
482.9979085922241 447.80887603759766 11.067120283842087
|
||||
409.1199588775635 586.3765716552734 -30.128961503505707
|
||||
397.227258682251 547.0495223999023 -47.53429055213928
|
||||
380.91050148010254 578.7846374511719 -42.74966686964035
|
||||
460.7864284515381 674.8594665527344 43.16956669092178
|
||||
440.7740592956543 690.6071472167969 29.093618094921112
|
||||
392.0944118499756 719.2385864257812 -0.10001176851801574
|
||||
498.66119384765625 644.6195983886719 118.40662121772766
|
||||
421.3210916519165 435.5072021484375 5.978861823678017
|
||||
388.3393621444702 478.3292007446289 -42.62728303670883
|
||||
416.32136821746826 718.0264282226562 31.367723643779755
|
||||
530.7446193695068 564.459342956543 105.10064363479614
|
||||
392.23315715789795 630.512580871582 -26.214196979999542
|
||||
395.560941696167 638.4785079956055 -27.860512733459473
|
||||
398.8153839111328 648.6321258544922 -30.361192524433136
|
||||
400.9631681442261 660.0777435302734 -27.593238651752472
|
||||
400.7044744491577 668.1196594238281 -13.446301370859146
|
||||
417.14242458343506 629.1056442260742 -16.865828186273575
|
||||
421.5265703201294 626.546745300293 -17.268246710300446
|
||||
425.33543586730957 623.4793090820312 -17.429639250040054
|
||||
433.3791446685791 613.1803512573242 -13.896046131849289
|
||||
496.71043395996094 569.5689010620117 21.088573336601257
|
||||
389.2374515533447 460.7672119140625 -27.562758028507233
|
||||
403.47744941711426 424.4717788696289 -1.895450558513403
|
||||
414.1584348678589 427.82482147216797 3.549591489136219
|
||||
412.82870292663574 631.1397552490234 -14.735534638166428
|
||||
494.7548246383667 609.0705871582031 45.80719470977783
|
||||
386.60545349121094 422.6103210449219 -21.048778742551804
|
||||
409.3497705459595 680.4081726074219 -3.6002641171216965
|
||||
376.8407106399536 468.47896575927734 -52.7133572101593
|
||||
398.5814094543457 506.9513702392578 -43.219455778598785
|
||||
384.8936891555786 689.9935913085938 -9.327406659722328
|
||||
444.5246887207031 651.2082672119141 6.435505226254463
|
||||
428.1888771057129 556.5470886230469 -14.717874974012375
|
||||
428.813681602478 667.7382659912109 1.8546424247324467
|
||||
464.16862964630127 554.7451400756836 -8.631420359015465
|
||||
441.45495414733887 574.9321746826172 -13.40932309627533
|
||||
474.7306966781616 583.2138061523438 2.6926674507558346
|
||||
390.04340171813965 706.3205718994141 -8.578235507011414
|
||||
407.80327320098877 517.7619934082031 -32.21008479595184
|
||||
457.4419069290161 660.2817535400391 23.080596327781677
|
||||
437.2658586502075 677.4289703369141 15.286377221345901
|
||||
456.34576320648193 630.5348968505859 6.904166266322136
|
||||
511.5388011932373 587.7153015136719 59.68905866146088
|
||||
475.2132797241211 629.59228515625 23.859423995018005
|
||||
518.8389587402344 598.4183883666992 98.38678479194641
|
||||
451.4426851272583 599.2813110351562 -6.91096767783165
|
||||
398.29662322998047 491.06029510498047 -31.948606967926025
|
||||
395.2072763442993 540.2492141723633 -67.25221753120422
|
||||
404.33438301086426 546.3447189331055 -49.92307662963867
|
||||
388.8867473602295 528.129768371582 -78.11590433120728
|
||||
418.3866262435913 406.26094818115234 -7.83122219145298
|
||||
447.628755569458 392.4750518798828 -11.032277047634125
|
||||
473.4980821609497 389.22035217285156 -10.253710225224495
|
||||
494.4223165512085 393.13838958740234 -3.7459462881088257
|
||||
508.447265625 402.79422760009766 6.417246758937836
|
||||
512.7858781814575 440.90904235839844 31.261489391326904
|
||||
547.2984409332275 490.5126190185547 103.35272312164307
|
||||
497.5730323791504 469.93946075439453 17.92179375886917
|
||||
479.5932197570801 475.38475036621094 8.673078417778015
|
||||
457.4919891357422 474.34764862060547 2.581671606749296
|
||||
436.7109203338623 468.65795135498047 -0.3157069184817374
|
||||
420.35940170288086 461.30104064941406 0.47410030849277973
|
||||
408.8504934310913 454.4709014892578 -0.39229159243404865
|
||||
550.1037740707397 490.5290222167969 167.97163367271423
|
||||
403.64546298980713 551.6719055175781 -41.71808123588562
|
||||
387.63726711273193 494.2497253417969 -55.56053280830383
|
||||
384.055552482605 540.538215637207 -79.20849680900574
|
||||
375.3244686126709 549.4364547729492 -72.22589671611786
|
||||
383.8312339782715 543.7438583374023 -71.36332511901855
|
||||
398.81486892700195 557.1538543701172 -35.70137947797775
|
||||
372.3822784423828 550.9265899658203 -76.46305739879608
|
||||
370.69892406463623 555.1999664306641 -57.17661201953888
|
||||
410.05074977874756 440.17982482910156 7.049205377697945
|
||||
399.94487285614014 443.82862091064453 -2.0457570254802704
|
||||
393.2704210281372 446.66893005371094 -12.368821799755096
|
||||
491.9056749343872 434.00867462158203 13.69398057460785
|
||||
505.40289402008057 422.0017623901367 14.507773518562317
|
||||
278.070273399353 437.74181365966797 16.967550963163376
|
||||
296.5090012550354 437.4724578857422 16.967550963163376
|
||||
278.02658557891846 420.81432342529297 16.967550963163376
|
||||
259.5726013183594 437.9621124267578 16.967550963163376
|
||||
278.0579137802124 454.41627502441406 16.967550963163376
|
||||
459.17272567749023 438.5255432128906 6.8281786143779755
|
||||
478.56732845306396 439.512939453125 6.8281786143779755
|
||||
459.9502229690552 422.17994689941406 6.8281786143779755
|
||||
439.78996753692627 437.5259017944336 6.8281786143779755
|
||||
458.3905506134033 454.89044189453125 6.8281786143779755
|
854
mediapipe/graphs/deformation/config/triangles.txt
Normal file
854
mediapipe/graphs/deformation/config/triangles.txt
Normal file
|
@ -0,0 +1,854 @@
|
|||
48 49 64
|
||||
259 260 444
|
||||
347 348 450
|
||||
391 423 426
|
||||
88 95 96
|
||||
309 457 459
|
||||
128 232 233
|
||||
28 56 157
|
||||
147 177 215
|
||||
22 26 154
|
||||
308 324 325
|
||||
282 283 293
|
||||
41 72 73
|
||||
202 204 210
|
||||
108 109 151
|
||||
33 130 247
|
||||
174 188 196
|
||||
171 175 199
|
||||
352 366 401
|
||||
7 25 33
|
||||
32 140 211
|
||||
345 366 447
|
||||
262 418 431
|
||||
287 410 432
|
||||
322 426 436
|
||||
271 272 311
|
||||
261 340 446
|
||||
326 391 393
|
||||
355 358 429
|
||||
67 69 108
|
||||
269 270 322
|
||||
55 65 107
|
||||
287 291 409
|
||||
394 395 431
|
||||
265 342 446
|
||||
26 112 155
|
||||
39 40 92
|
||||
97 165 167
|
||||
367 433 435
|
||||
92 186 216
|
||||
4 44 45
|
||||
122 188 196
|
||||
17 313 314
|
||||
279 358 429
|
||||
37 39 72
|
||||
294 455 460
|
||||
15 16 85
|
||||
13 38 82
|
||||
7 25 110
|
||||
250 290 392
|
||||
276 283 293
|
||||
6 168 351
|
||||
138 192 213
|
||||
411 425 427
|
||||
64 102 129
|
||||
285 413 441
|
||||
60 75 240
|
||||
318 402 403
|
||||
44 220 237
|
||||
1 19 44
|
||||
69 104 105
|
||||
63 68 71
|
||||
42 74 184
|
||||
199 200 208
|
||||
272 310 407
|
||||
285 295 441
|
||||
19 125 141
|
||||
345 352 366
|
||||
287 422 432
|
||||
138 213 215
|
||||
326 370 462
|
||||
60 99 240
|
||||
0 11 267
|
||||
50 123 187
|
||||
250 290 328
|
||||
62 76 77
|
||||
125 141 241
|
||||
28 157 158
|
||||
40 73 74
|
||||
270 303 304
|
||||
286 384 398
|
||||
249 255 339
|
||||
273 321 375
|
||||
29 223 224
|
||||
42 80 183
|
||||
252 256 451
|
||||
43 61 146
|
||||
256 341 382
|
||||
266 329 371
|
||||
114 174 188
|
||||
17 314 315
|
||||
282 283 443
|
||||
24 110 144
|
||||
26 231 232
|
||||
83 84 181
|
||||
259 443 444
|
||||
9 285 336
|
||||
250 309 392
|
||||
52 65 66
|
||||
413 414 463
|
||||
255 261 448
|
||||
277 355 437
|
||||
254 339 373
|
||||
260 466 467
|
||||
25 31 228
|
||||
424 430 431
|
||||
32 171 208
|
||||
341 362 382
|
||||
295 296 336
|
||||
40 92 186
|
||||
20 99 242
|
||||
111 116 123
|
||||
253 449 450
|
||||
187 192 214
|
||||
295 441 442
|
||||
46 70 156
|
||||
91 106 182
|
||||
48 115 219
|
||||
198 209 217
|
||||
29 30 160
|
||||
342 445 467
|
||||
9 336 337
|
||||
92 165 206
|
||||
341 362 463
|
||||
420 437 456
|
||||
369 395 431
|
||||
12 13 268
|
||||
46 113 225
|
||||
25 130 226
|
||||
202 212 214
|
||||
114 128 188
|
||||
342 446 467
|
||||
204 210 211
|
||||
85 86 179
|
||||
43 57 202
|
||||
291 306 375
|
||||
260 445 467
|
||||
251 284 298
|
||||
309 438 457
|
||||
3 196 236
|
||||
79 237 239
|
||||
292 306 307
|
||||
101 119 120
|
||||
88 178 179
|
||||
36 100 142
|
||||
28 56 221
|
||||
118 229 230
|
||||
101 118 119
|
||||
3 196 197
|
||||
40 74 185
|
||||
276 353 383
|
||||
363 420 456
|
||||
23 229 230
|
||||
113 225 247
|
||||
307 320 325
|
||||
1 4 274
|
||||
257 259 387
|
||||
20 60 99
|
||||
25 31 226
|
||||
86 87 178
|
||||
111 116 143
|
||||
62 183 191
|
||||
364 379 394
|
||||
41 42 81
|
||||
135 150 169
|
||||
285 413 417
|
||||
93 132 137
|
||||
327 358 423
|
||||
9 108 151
|
||||
50 101 205
|
||||
438 440 457
|
||||
422 424 430
|
||||
89 179 180
|
||||
34 127 139
|
||||
279 294 358
|
||||
346 448 449
|
||||
46 63 70
|
||||
47 100 126
|
||||
135 192 214
|
||||
344 360 440
|
||||
45 51 134
|
||||
195 248 281
|
||||
122 193 245
|
||||
21 68 71
|
||||
97 98 165
|
||||
175 377 396
|
||||
16 17 315
|
||||
369 395 400
|
||||
120 230 231
|
||||
3 195 197
|
||||
186 212 216
|
||||
32 194 201
|
||||
53 224 225
|
||||
200 421 428
|
||||
8 168 193
|
||||
35 113 226
|
||||
340 346 352
|
||||
257 386 387
|
||||
399 419 456
|
||||
277 329 355
|
||||
91 181 182
|
||||
294 327 460
|
||||
411 427 434
|
||||
111 117 123
|
||||
41 73 74
|
||||
58 132 177
|
||||
251 298 301
|
||||
134 198 236
|
||||
262 369 396
|
||||
106 182 194
|
||||
34 139 156
|
||||
254 448 449
|
||||
0 37 164
|
||||
349 451 452
|
||||
458 461 462
|
||||
194 204 211
|
||||
280 411 425
|
||||
266 371 423
|
||||
350 357 452
|
||||
28 158 159
|
||||
50 117 118
|
||||
6 197 419
|
||||
16 17 85
|
||||
64 235 240
|
||||
39 165 167
|
||||
252 256 381
|
||||
318 319 403
|
||||
129 142 203
|
||||
255 263 359
|
||||
270 322 410
|
||||
54 103 104
|
||||
279 331 358
|
||||
30 225 247
|
||||
116 143 227
|
||||
356 368 389
|
||||
271 272 304
|
||||
360 363 440
|
||||
259 260 387
|
||||
175 199 396
|
||||
273 287 291
|
||||
49 102 129
|
||||
252 380 381
|
||||
281 363 456
|
||||
457 459 461
|
||||
20 238 242
|
||||
46 113 124
|
||||
46 53 63
|
||||
420 429 437
|
||||
12 38 72
|
||||
18 200 201
|
||||
193 244 245
|
||||
293 298 301
|
||||
276 293 300
|
||||
21 54 68
|
||||
370 461 462
|
||||
52 66 105
|
||||
122 188 245
|
||||
44 125 237
|
||||
59 75 166
|
||||
38 41 81
|
||||
322 410 436
|
||||
379 394 395
|
||||
313 314 405
|
||||
399 437 456
|
||||
293 333 334
|
||||
261 346 448
|
||||
25 110 228
|
||||
26 154 155
|
||||
257 442 443
|
||||
427 432 436
|
||||
248 281 456
|
||||
292 307 325
|
||||
269 270 303
|
||||
0 164 267
|
||||
292 308 325
|
||||
329 330 349
|
||||
19 44 125
|
||||
35 111 226
|
||||
292 407 415
|
||||
18 313 421
|
||||
340 345 372
|
||||
266 330 425
|
||||
11 12 72
|
||||
8 9 285
|
||||
63 68 104
|
||||
148 171 175
|
||||
17 18 83
|
||||
200 201 208
|
||||
2 164 167
|
||||
314 404 405
|
||||
357 452 453
|
||||
19 274 354
|
||||
30 160 161
|
||||
13 268 312
|
||||
20 79 166
|
||||
39 92 165
|
||||
250 328 462
|
||||
277 350 357
|
||||
323 447 454
|
||||
140 148 171
|
||||
422 432 434
|
||||
359 446 467
|
||||
261 340 346
|
||||
425 426 436
|
||||
273 287 422
|
||||
266 423 426
|
||||
70 71 139
|
||||
37 164 167
|
||||
272 310 311
|
||||
22 23 145
|
||||
38 81 82
|
||||
135 169 214
|
||||
369 377 400
|
||||
15 16 315
|
||||
51 134 236
|
||||
341 463 464
|
||||
260 387 388
|
||||
202 210 214
|
||||
307 320 321
|
||||
53 223 224
|
||||
207 212 214
|
||||
453 464 465
|
||||
20 79 238
|
||||
418 424 431
|
||||
135 136 150
|
||||
169 210 211
|
||||
290 305 460
|
||||
92 206 216
|
||||
151 337 338
|
||||
238 241 242
|
||||
289 439 455
|
||||
198 217 236
|
||||
276 342 353
|
||||
282 295 296
|
||||
22 230 231
|
||||
316 402 403
|
||||
255 261 446
|
||||
320 404 405
|
||||
273 321 335
|
||||
30 161 247
|
||||
22 26 231
|
||||
86 178 179
|
||||
27 28 222
|
||||
60 75 166
|
||||
52 65 222
|
||||
63 70 71
|
||||
112 133 155
|
||||
6 196 197
|
||||
32 201 208
|
||||
123 137 177
|
||||
376 401 435
|
||||
76 77 146
|
||||
43 202 204
|
||||
47 100 121
|
||||
52 53 63
|
||||
329 355 371
|
||||
54 68 104
|
||||
38 41 72
|
||||
11 12 302
|
||||
348 349 450
|
||||
112 133 243
|
||||
291 408 409
|
||||
274 354 457
|
||||
75 235 240
|
||||
344 438 440
|
||||
22 23 230
|
||||
42 80 81
|
||||
322 391 426
|
||||
43 57 61
|
||||
258 384 385
|
||||
253 254 449
|
||||
280 346 347
|
||||
321 405 406
|
||||
34 143 156
|
||||
28 221 222
|
||||
126 129 209
|
||||
341 453 464
|
||||
25 33 130
|
||||
125 237 241
|
||||
116 123 137
|
||||
351 412 419
|
||||
319 320 404
|
||||
318 319 325
|
||||
164 267 393
|
||||
313 405 406
|
||||
14 15 316
|
||||
168 351 417
|
||||
9 107 108
|
||||
55 189 221
|
||||
260 444 445
|
||||
353 372 383
|
||||
34 227 234
|
||||
399 412 419
|
||||
265 353 372
|
||||
110 144 163
|
||||
0 11 37
|
||||
80 183 191
|
||||
64 98 240
|
||||
7 110 163
|
||||
132 137 177
|
||||
57 185 186
|
||||
249 255 263
|
||||
288 361 401
|
||||
36 101 205
|
||||
118 119 230
|
||||
358 371 423
|
||||
67 103 104
|
||||
65 66 107
|
||||
365 367 397
|
||||
189 193 244
|
||||
233 244 245
|
||||
323 366 447
|
||||
339 373 390
|
||||
327 328 460
|
||||
352 376 411
|
||||
34 143 227
|
||||
289 392 439
|
||||
267 269 302
|
||||
292 308 415
|
||||
114 174 217
|
||||
257 259 443
|
||||
271 303 304
|
||||
297 332 333
|
||||
97 141 242
|
||||
26 112 232
|
||||
112 232 233
|
||||
285 295 336
|
||||
12 268 302
|
||||
52 63 105
|
||||
278 279 360
|
||||
5 195 281
|
||||
264 372 447
|
||||
52 53 223
|
||||
34 127 234
|
||||
352 376 401
|
||||
286 414 441
|
||||
20 60 166
|
||||
254 339 448
|
||||
265 340 372
|
||||
284 298 333
|
||||
274 275 440
|
||||
50 187 205
|
||||
346 347 449
|
||||
43 91 146
|
||||
48 219 235
|
||||
77 90 96
|
||||
136 138 172
|
||||
282 293 334
|
||||
115 131 220
|
||||
276 342 445
|
||||
280 346 352
|
||||
327 391 423
|
||||
57 61 185
|
||||
11 267 302
|
||||
128 233 245
|
||||
49 131 209
|
||||
77 90 91
|
||||
133 173 190
|
||||
279 360 429
|
||||
18 83 201
|
||||
292 306 407
|
||||
413 414 441
|
||||
364 365 367
|
||||
2 94 141
|
||||
289 305 455
|
||||
9 55 107
|
||||
112 233 244
|
||||
237 239 241
|
||||
32 194 211
|
||||
36 203 206
|
||||
364 416 434
|
||||
283 444 445
|
||||
42 183 184
|
||||
362 414 463
|
||||
277 343 437
|
||||
264 356 454
|
||||
275 281 363
|
||||
135 136 138
|
||||
83 182 201
|
||||
278 279 294
|
||||
36 142 203
|
||||
9 151 337
|
||||
266 425 426
|
||||
335 406 418
|
||||
23 24 144
|
||||
24 110 228
|
||||
43 91 106
|
||||
278 294 455
|
||||
59 166 219
|
||||
89 90 96
|
||||
262 396 428
|
||||
300 368 383
|
||||
97 98 99
|
||||
44 45 220
|
||||
115 218 219
|
||||
286 398 414
|
||||
174 196 236
|
||||
321 335 406
|
||||
282 442 443
|
||||
310 407 415
|
||||
141 241 242
|
||||
112 243 244
|
||||
2 94 370
|
||||
47 114 128
|
||||
296 299 334
|
||||
330 348 349
|
||||
271 302 303
|
||||
394 430 434
|
||||
425 427 436
|
||||
238 239 241
|
||||
1 4 44
|
||||
130 226 247
|
||||
48 115 131
|
||||
88 89 96
|
||||
256 451 452
|
||||
48 64 235
|
||||
288 401 435
|
||||
17 84 85
|
||||
199 200 428
|
||||
11 37 72
|
||||
199 396 428
|
||||
2 97 141
|
||||
367 397 435
|
||||
378 395 400
|
||||
378 379 395
|
||||
252 253 374
|
||||
280 352 411
|
||||
10 109 151
|
||||
417 464 465
|
||||
46 124 156
|
||||
121 128 232
|
||||
376 411 433
|
||||
40 185 186
|
||||
319 320 325
|
||||
411 416 433
|
||||
340 345 352
|
||||
277 329 350
|
||||
117 118 229
|
||||
120 231 232
|
||||
97 99 242
|
||||
61 76 146
|
||||
269 391 393
|
||||
30 224 225
|
||||
64 98 129
|
||||
8 285 417
|
||||
268 271 311
|
||||
19 94 141
|
||||
56 157 173
|
||||
79 218 237
|
||||
264 356 368
|
||||
4 274 275
|
||||
187 192 213
|
||||
69 107 108
|
||||
367 416 433
|
||||
265 340 446
|
||||
392 438 439
|
||||
264 447 454
|
||||
189 190 221
|
||||
47 121 128
|
||||
354 457 461
|
||||
24 228 229
|
||||
255 339 448
|
||||
250 309 459
|
||||
47 126 217
|
||||
301 368 389
|
||||
297 299 337
|
||||
43 106 204
|
||||
361 366 401
|
||||
320 321 405
|
||||
100 101 120
|
||||
345 372 447
|
||||
39 72 73
|
||||
93 137 227
|
||||
19 94 370
|
||||
272 407 408
|
||||
2 97 167
|
||||
61 76 184
|
||||
148 152 175
|
||||
23 24 229
|
||||
83 181 182
|
||||
354 370 461
|
||||
360 363 420
|
||||
119 120 230
|
||||
343 357 412
|
||||
23 144 145
|
||||
283 443 444
|
||||
5 51 195
|
||||
299 333 334
|
||||
316 317 402
|
||||
127 139 162
|
||||
84 180 181
|
||||
90 91 181
|
||||
297 299 333
|
||||
122 168 193
|
||||
297 337 338
|
||||
62 76 183
|
||||
27 222 223
|
||||
18 200 421
|
||||
344 438 439
|
||||
369 377 396
|
||||
10 151 338
|
||||
410 432 436
|
||||
306 307 375
|
||||
22 153 154
|
||||
278 344 439
|
||||
293 300 301
|
||||
262 369 431
|
||||
52 222 223
|
||||
305 455 460
|
||||
131 198 209
|
||||
360 420 429
|
||||
35 111 143
|
||||
294 327 358
|
||||
48 49 131
|
||||
49 129 209
|
||||
35 124 143
|
||||
58 172 215
|
||||
161 246 247
|
||||
251 301 389
|
||||
256 341 452
|
||||
49 64 102
|
||||
50 117 123
|
||||
115 218 220
|
||||
147 213 215
|
||||
249 339 390
|
||||
252 450 451
|
||||
293 298 333
|
||||
256 381 382
|
||||
187 205 207
|
||||
280 330 425
|
||||
272 304 408
|
||||
306 407 408
|
||||
147 187 213
|
||||
276 283 445
|
||||
6 122 168
|
||||
326 327 391
|
||||
29 30 224
|
||||
71 139 162
|
||||
3 51 195
|
||||
126 209 217
|
||||
124 143 156
|
||||
260 388 466
|
||||
31 111 117
|
||||
289 290 305
|
||||
62 78 96
|
||||
315 403 404
|
||||
318 324 325
|
||||
205 206 216
|
||||
422 430 434
|
||||
8 55 193
|
||||
140 170 176
|
||||
275 363 440
|
||||
66 69 105
|
||||
291 306 408
|
||||
88 89 179
|
||||
323 361 366
|
||||
319 403 404
|
||||
364 365 379
|
||||
300 301 368
|
||||
289 290 392
|
||||
355 358 371
|
||||
98 99 240
|
||||
279 294 331
|
||||
326 327 328
|
||||
189 190 243
|
||||
263 466 467
|
||||
33 246 247
|
||||
315 316 403
|
||||
59 219 235
|
||||
268 311 312
|
||||
376 433 435
|
||||
182 194 201
|
||||
266 329 330
|
||||
268 271 302
|
||||
262 418 421
|
||||
138 172 215
|
||||
195 197 248
|
||||
258 286 441
|
||||
278 439 455
|
||||
278 344 360
|
||||
123 147 177
|
||||
357 412 465
|
||||
131 134 198
|
||||
351 412 465
|
||||
6 351 419
|
||||
189 243 244
|
||||
257 258 442
|
||||
169 210 214
|
||||
270 409 410
|
||||
274 440 457
|
||||
76 183 184
|
||||
37 39 167
|
||||
79 166 218
|
||||
84 85 180
|
||||
55 65 221
|
||||
113 226 247
|
||||
362 398 414
|
||||
257 258 386
|
||||
288 397 435
|
||||
296 299 336
|
||||
17 18 313
|
||||
3 51 236
|
||||
248 419 456
|
||||
343 399 437
|
||||
27 29 160
|
||||
258 385 386
|
||||
59 75 235
|
||||
116 137 227
|
||||
27 159 160
|
||||
133 190 243
|
||||
93 227 234
|
||||
282 296 334
|
||||
47 114 217
|
||||
57 202 212
|
||||
269 302 303
|
||||
250 458 459
|
||||
19 354 370
|
||||
2 164 393
|
||||
55 189 193
|
||||
27 28 159
|
||||
149 170 176
|
||||
4 45 51
|
||||
66 69 107
|
||||
343 399 412
|
||||
264 368 383
|
||||
411 416 434
|
||||
135 138 192
|
||||
252 253 450
|
||||
294 331 358
|
||||
357 453 465
|
||||
31 111 226
|
||||
265 342 353
|
||||
77 91 146
|
||||
263 359 467
|
||||
56 173 190
|
||||
287 409 410
|
||||
458 459 461
|
||||
250 458 462
|
||||
67 108 109
|
||||
62 77 96
|
||||
98 129 203
|
||||
85 179 180
|
||||
330 347 348
|
||||
50 101 118
|
||||
90 180 181
|
||||
171 199 208
|
||||
280 330 347
|
||||
79 238 239
|
||||
314 315 404
|
||||
63 104 105
|
||||
46 53 225
|
||||
123 147 187
|
||||
78 95 96
|
||||
351 417 465
|
||||
126 129 142
|
||||
174 217 236
|
||||
258 441 442
|
||||
341 452 453
|
||||
349 450 451
|
||||
14 316 317
|
||||
56 190 221
|
||||
4 275 281
|
||||
128 188 245
|
||||
41 42 74
|
||||
273 291 375
|
||||
218 220 237
|
||||
276 300 383
|
||||
8 168 417
|
||||
269 322 391
|
||||
1 19 274
|
||||
252 374 380
|
||||
347 449 450
|
||||
264 372 383
|
||||
427 432 434
|
||||
131 134 220
|
||||
152 175 377
|
||||
165 203 206
|
||||
258 286 384
|
||||
326 328 462
|
||||
70 139 156
|
||||
65 221 222
|
||||
329 349 350
|
||||
355 429 437
|
||||
304 408 409
|
||||
21 71 162
|
||||
205 207 216
|
||||
36 100 101
|
||||
273 335 424
|
||||
364 367 416
|
||||
413 463 464
|
||||
98 165 203
|
||||
4 5 51
|
||||
413 417 464
|
||||
61 184 185
|
||||
149 150 170
|
||||
100 120 121
|
||||
120 121 232
|
||||
299 336 337
|
||||
49 64 129
|
||||
364 394 434
|
||||
22 145 153
|
||||
150 169 170
|
||||
35 113 124
|
||||
39 40 73
|
||||
58 177 215
|
||||
166 218 219
|
||||
253 373 374
|
||||
74 184 185
|
||||
267 269 393
|
||||
273 422 424
|
||||
394 430 431
|
||||
17 83 84
|
||||
140 170 211
|
||||
277 343 357
|
||||
4 5 281
|
||||
14 15 86
|
||||
307 321 375
|
||||
36 205 206
|
||||
100 126 142
|
||||
2 326 393
|
||||
89 90 180
|
||||
27 29 223
|
||||
67 69 104
|
||||
62 78 191
|
||||
290 328 460
|
||||
262 421 428
|
||||
2 326 370
|
||||
187 207 214
|
||||
45 134 220
|
||||
253 254 373
|
||||
15 315 316
|
||||
12 13 38
|
||||
207 212 216
|
||||
406 418 421
|
||||
117 228 229
|
||||
106 194 204
|
||||
313 406 421
|
||||
282 295 442
|
||||
349 350 452
|
||||
6 122 196
|
||||
335 418 424
|
||||
140 148 176
|
||||
169 170 211
|
||||
255 359 446
|
||||
197 248 419
|
||||
309 392 438
|
||||
31 117 228
|
||||
284 332 333
|
||||
14 86 87
|
||||
270 304 409
|
||||
8 9 55
|
||||
32 140 171
|
||||
15 85 86
|
||||
57 186 212
|
7
mediapipe/graphs/deformation/config/upperLipCnt.txt
Normal file
7
mediapipe/graphs/deformation/config/upperLipCnt.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
40
|
||||
39
|
||||
37
|
||||
0
|
||||
267
|
||||
269
|
||||
270
|
|
@ -0,0 +1,9 @@
|
|||
106
|
||||
43
|
||||
335
|
||||
273
|
||||
18
|
||||
83
|
||||
182
|
||||
406
|
||||
313
|
|
@ -0,0 +1,9 @@
|
|||
322
|
||||
164
|
||||
165
|
||||
391
|
||||
167
|
||||
393
|
||||
186
|
||||
410
|
||||
92
|
48
mediapipe/graphs/deformation/deformation_cpu.pbtxt
Normal file
48
mediapipe/graphs/deformation/deformation_cpu.pbtxt
Normal file
|
@ -0,0 +1,48 @@
|
|||
# MediaPipe graph that performs face mesh with TensorFlow Lite on CPU.
|
||||
|
||||
# Input image. (ImageFrame)
|
||||
input_stream: "input_video"
|
||||
|
||||
# Output image with rendered results. (ImageFrame)
|
||||
output_stream: "output_video"
|
||||
|
||||
node {
|
||||
calculator: "FlowLimiterCalculator"
|
||||
input_stream: "input_video"
|
||||
input_stream: "FINISHED:output_video"
|
||||
input_stream_info: {
|
||||
tag_index: "FINISHED"
|
||||
back_edge: true
|
||||
}
|
||||
output_stream: "throttled_input_video"
|
||||
}
|
||||
|
||||
|
||||
# Defines side packets for further use in the graph.
|
||||
node {
|
||||
calculator: "ConstantSidePacketCalculator"
|
||||
output_side_packet: "PACKET:0:num_faces"
|
||||
output_side_packet: "PACKET:1:with_attention"
|
||||
node_options: {
|
||||
[type.googleapis.com/mediapipe.ConstantSidePacketCalculatorOptions]: {
|
||||
packet { int_value: 1 }
|
||||
packet { bool_value: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Subgraph that detects faces and corresponding landmarks.
|
||||
node {
|
||||
calculator: "FaceLandmarkFrontCpu"
|
||||
input_stream: "IMAGE:throttled_input_video"
|
||||
input_side_packet: "NUM_FACES:num_faces"
|
||||
input_side_packet: "WITH_ATTENTION:with_attention"
|
||||
output_stream: "LANDMARKS:multi_face_landmarks"
|
||||
}
|
||||
|
||||
node {
|
||||
calculator: "FaceProcessorCalculator"
|
||||
input_stream: "NORM_LANDMARKS:multi_face_landmarks"
|
||||
input_stream: "IMAGE:throttled_input_video"
|
||||
output_stream: "IMAGE:output_video"
|
||||
}
|
59
mediapipe/graphs/deformation/deformation_mobile.pbtxt
Normal file
59
mediapipe/graphs/deformation/deformation_mobile.pbtxt
Normal file
|
@ -0,0 +1,59 @@
|
|||
# MediaPipe graph that performs hair segmentation with TensorFlow Lite on GPU.
|
||||
# Used in the example in
|
||||
# mediapipie/examples/android/src/java/com/mediapipe/apps/hairsegmentationgpu.
|
||||
|
||||
# Images on GPU coming into and out of the graph.
|
||||
input_stream: "input_video"
|
||||
output_stream: "output_video"
|
||||
|
||||
|
||||
node {
|
||||
calculator: "FlowLimiterCalculator"
|
||||
input_stream: "input_video"
|
||||
input_stream: "FINISHED:output_video"
|
||||
input_stream_info: {
|
||||
tag_index: "FINISHED"
|
||||
back_edge: true
|
||||
}
|
||||
output_stream: "throttled_input_video"
|
||||
}
|
||||
|
||||
# Defines side packets for further use in the graph.
|
||||
node {
|
||||
calculator: "ConstantSidePacketCalculator"
|
||||
output_side_packet: "PACKET:with_attention"
|
||||
node_options: {
|
||||
[type.googleapis.com/mediapipe.ConstantSidePacketCalculatorOptions]: {
|
||||
packet { bool_value: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Defines side packets for further use in the graph.
|
||||
node {
|
||||
calculator: "GpuBufferToImageFrameCalculator"
|
||||
input_stream: "throttled_input_video"
|
||||
output_stream: "throttled_input_video_cpu"
|
||||
}
|
||||
|
||||
# Subgraph that detects faces and corresponding landmarks.
|
||||
node {
|
||||
calculator: "FaceLandmarkFrontGpu"
|
||||
input_stream: "IMAGE:throttled_input_video"
|
||||
input_side_packet: "WITH_ATTENTION:with_attention"
|
||||
output_stream: "LANDMARKS:multi_face_landmarks"
|
||||
}
|
||||
|
||||
node {
|
||||
calculator: "FaceProcessorCalculator"
|
||||
input_stream: "NORM_LANDMARKS:multi_face_landmarks"
|
||||
input_stream: "IMAGE:throttled_input_video_cpu"
|
||||
output_stream: "IMAGE:out_image_frame"
|
||||
}
|
||||
|
||||
# Defines side packets for further use in the graph.
|
||||
node {
|
||||
calculator: "ImageFrameToGpuBufferCalculator"
|
||||
input_stream: "out_image_frame"
|
||||
output_stream: "output_video"
|
||||
}
|
Loading…
Reference in New Issue
Block a user