// 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; }