// 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. syntax = "proto2"; package mediapipe; import "mediapipe/framework/calculator.proto"; import "mediapipe/util/tracking/motion_analysis.proto"; // Next tag: 10 message MotionAnalysisCalculatorOptions { extend CalculatorOptions { optional MotionAnalysisCalculatorOptions ext = 270698255; } optional mediapipe.MotionAnalysisOptions analysis_options = 1; // Determines how optional input SELECTION (if present) is used to compute // the final camera motion. enum SelectionAnalysis { // Recompute camera motion for selected frame neighbors. ANALYSIS_RECOMPUTE = 1; // Use composited camera motion and region flow from SELECTION input. No // tracking or re-computation is performed. // Note that in this case only CAMERA, FLOW and VIDEO_OUT tags are // supported as output. NO_ANALYSIS_USE_SELECTION = 2; // Recompute camera motion for selected frame neighbors using // features supplied by SELECTION input. No feature tracking is performed. ANALYSIS_FROM_FEATURES = 3; // Recomputes camera motion for selected frame neighbors but seeds // initial transform with camera motion from SELECTION input. ANALYSIS_WITH_SEED = 4; } optional SelectionAnalysis selection_analysis = 4 [default = ANALYSIS_WITH_SEED]; // If activated when SELECTION input is activated, will replace the computed // camera motion (for any of the ANALYSIS_* case above) with the one supplied // by the frame selection, in case the frame selection one is more stable. // For example, if recomputed camera motion is unstable but the one from // the selection result is stable, will use the stable result instead. optional bool hybrid_selection_camera = 5 [default = false]; // Determines how optional input META is used to compute the final camera // motion. enum MetaAnalysis { // Uses metadata supplied motions as is. META_ANALYSIS_USE_META = 1; // Seeds visual tracking from metadata motions - estimates visual residual // motion and combines with metadata. META_ANALYSIS_HYBRID = 2; } optional MetaAnalysis meta_analysis = 8 [default = META_ANALYSIS_USE_META]; // Determines number of homography models per frame stored in the CSV file // or the homography metadata in META. // For values > 1, MixtureHomographies are created. optional int32 meta_models_per_frame = 6 [default = 1]; // Used for META_ANALYSIS_HYBRID. Rejects features which flow deviates // domain_ratio * image diagonal size from the ground truth metadata motion. optional float meta_outlier_domain_ratio = 9 [default = 0.0015]; // If true, the MotionAnalysisCalculator will skip all processing and emit no // packets on any output. This is useful for quickly creating different // versions of a MediaPipe graph without changing its structure, assuming that // downstream calculators can handle missing input packets. // TODO: Remove this hack. See b/36485206 for more details. optional bool bypass_mode = 7 [default = false]; } // Taken from // java/com/google/android/libraries/microvideo/proto/microvideo.proto to // satisfy leakr requirements // TODO: Remove and use above proto. message HomographyData { // For each frame, there are 12 homography matrices stored. Each matrix is // 3x3 (9 elements). This field will contain 12 x 3 x 3 float values. The // first row of the first homography matrix will be followed by the second row // of the first homography matrix, followed by third row of first homography // matrix, followed by the first row of the second homography matrix, etc. repeated float motion_homography_data = 1 [packed = true]; // Vector containing histogram counts for individual patches in the frame. repeated uint32 histogram_count_data = 2 [packed = true]; // The width of the frame at the time metadata was sampled. optional int32 frame_width = 3; // The height of the frame at the time metadata was sampled. optional int32 frame_height = 4; }