85 lines
3.0 KiB
Protocol Buffer
85 lines
3.0 KiB
Protocol Buffer
// 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.
|
|
|
|
syntax = "proto2";
|
|
|
|
package mediapipe.face_geometry;
|
|
|
|
option java_package = "com.google.mediapipe.modules.facegeometry";
|
|
option java_outer_classname = "EnvironmentProto";
|
|
|
|
// Defines the (0, 0) origin point location of the environment.
|
|
//
|
|
// The variation in the origin point location can be traced back to the memory
|
|
// layout of the camera video frame buffers.
|
|
//
|
|
// Usually, the memory layout for most CPU (and also some GPU) camera video
|
|
// frame buffers results in having the (0, 0) origin point located in the
|
|
// Top Left corner.
|
|
//
|
|
// On the contrary, the memory layout for most GPU camera video frame buffers
|
|
// results in having the (0, 0) origin point located in the Bottom Left corner.
|
|
//
|
|
// Let's consider the following example:
|
|
//
|
|
// (A) ---------------+
|
|
// ___ |
|
|
// | (1) | | |
|
|
// | / \ | | |
|
|
// | |---|===|-| |
|
|
// | |---| | | |
|
|
// | / \ | | |
|
|
// | | | | | |
|
|
// | | (2) |=| | |
|
|
// | | | | | |
|
|
// | |_______| |_| |
|
|
// | |@| |@| | | |
|
|
// | ___________|_|_ |
|
|
// |
|
|
// (B) ---------------+
|
|
//
|
|
// On this example, (1) and (2) have the same X coordinate regardless of the
|
|
// origin point location. However, having the origin point located at (A)
|
|
// (Top Left corner) results in (1) having a smaller Y coordinate if compared to
|
|
// (2). Similarly, having the origin point located at (B) (Bottom Left corner)
|
|
// results in (1) having a greater Y coordinate if compared to (2).
|
|
//
|
|
// Providing the correct origin point location for your environment and making
|
|
// sure all the input landmarks are in-sync with this location is crucial
|
|
// for receiving the correct output face geometry and visual renders.
|
|
enum OriginPointLocation {
|
|
BOTTOM_LEFT_CORNER = 1;
|
|
TOP_LEFT_CORNER = 2;
|
|
}
|
|
|
|
// The perspective camera is defined through its vertical FOV angle and the
|
|
// Z-clipping planes. The aspect ratio is a runtime variable for the face
|
|
// geometry module and should be provided alongside the face landmarks in order
|
|
// to estimate the face geometry on a given frame.
|
|
//
|
|
// More info on Perspective Cameras:
|
|
// http://www.songho.ca/opengl/gl_projectionmatrix.html#perspective
|
|
message PerspectiveCamera {
|
|
// `0 < vertical_fov_degrees < 180`.
|
|
optional float vertical_fov_degrees = 1;
|
|
// `0 < near < far`.
|
|
optional float near = 2;
|
|
optional float far = 3;
|
|
}
|
|
|
|
message Environment {
|
|
optional OriginPointLocation origin_point_location = 1;
|
|
optional PerspectiveCamera perspective_camera = 2;
|
|
}
|