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