// 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/util/tracking/motion_estimation.proto";
import "mediapipe/util/tracking/motion_saliency.proto";
import "mediapipe/util/tracking/region_flow_computation.proto";
// Settings for MotionAnalysis. This class computes sparse, locally consistent
// flow (referred to as region flow), camera motions, and foreground saliency
// (i.e. likely foreground objects moving different from the background).
// Next tag: 16
message MotionAnalysisOptions {
// Pre-configured policies for MotionAnalysis.
// For general use, it is recommended to select an appropiate policy
// instead of customizing flow and motion options by hand.
// Policies are being kept up to date with appropiate settings.
enum AnalysisPolicy {
// Default legacy options. Effectivley no op.
ANALYSIS_POLICY_LEGACY = 0;
// Use for video.
ANALYSIS_POLICY_VIDEO = 1;
// Use for video on mobile.
ANALYSIS_POLICY_VIDEO_MOBILE = 2;
// Use if applied to camera stream on mobile, e.g.
// low latency and high throughput.
// ASSUMES DOWNSAMPLED INPUT, e.g. from GPU.
ANALYSIS_POLICY_CAMERA_MOBILE = 3;
// Use for sped up video / hyperlapse when adding frames with seeds
// and rejection transforms. Mostly ups temporal consistency weights
// and relaxes stability constraints.
// Only recommended to be used as second pass after initial MotionAnalysis
// and FrameSelection.
ANALYSIS_POLICY_HYPERLAPSE = 4;
}
optional AnalysisPolicy analysis_policy = 14
[default = ANALYSIS_POLICY_LEGACY];
// Options for the actual motion stabilization
// (in order of object usage).
optional RegionFlowComputationOptions flow_options = 1;
optional MotionEstimationOptions motion_options = 2;
optional MotionSaliencyOptions saliency_options = 3;
// Clip-size used for (parallelized) motion estimation.
optional int32 estimation_clip_size = 4 [default = 16];
// If set, camera motion is subtracted from features before output.
// Effectively outputs, residual motion w.r.t. background.
optional bool subtract_camera_motion_from_features = 5 [default = false];
// If flow_options().tracking_options().tracking_policy() equals
// POLICY_MULTI_FRAME, this flag indicates which RegionFlowFeatureList to use.
// Specifically, for frame C, we use the motion from C to C - 1 - track_index.
optional int32 track_index = 6 [default = 0];
// If set, compute motion saliency (regions of moving foreground).
optional bool compute_motion_saliency = 7 [default = false];
// Selects saliency inliers (only saliency locations with sufficient
// spatial and temporal support are kept).
// Only applied when compute_motion_saliency is set.
optional bool select_saliency_inliers = 8 [default = true];
// Performs spatio-temporal filtering of extracted foreground saliency. If
// used with above selection of saliency inliers, filtering is performed
// *after* inlier selection.
// Only applied when compute_motion_saliency is set.
optional bool filter_saliency = 9 [default = true];
// If set, irls weights of motion estimation are spatio-temporally smoothed
// after model estimation.
optional bool post_irls_smoothing = 10 [default = false];
// If a rejection_transform is passed to AddFrameGeneric, features that
// do not agree with the transform within below threshold are removed.
optional float rejection_transform_threshold = 13 [default = 20.0];
// Adapts visualization for rendered_results when passed to GetResults.
message VisualizationOptions {
// Visualizes tracked region flow features, colored w.r.t. fitting error.
optional bool visualize_region_flow_features = 1 [default = true];
// Visualizes salient points. Only applicable is compute_motion_saliency is
// set to true.
optional bool visualize_salient_points = 2 [default = false];
// Line thickness of ellipse when rendering salient points.
optional int32 line_thickness = 5 [default = 4];
// Instead of green burn in uses jet coloring to indicate magnitude of
// foreground motion.
optional bool foreground_jet_coloring = 3 [default = false];
// If set, only keeps masks of pixels that is used for blur analysis, rest
// is set to zero.
optional bool visualize_blur_analysis_region = 4 [default = false];
optional bool visualize_stats = 6 [default = true];
// Only long feature tracks with specified minimum length are rendered.
// Set to zero to consider all tracks.
optional int32 min_long_feature_track = 7 [default = 0];
// Only the last N points of a long feature track are rendered. Set to zero
// to render all points.
optional int32 max_long_feature_points = 8 [default = 0];
}
optional VisualizationOptions visualization_options = 11;
// Describes how to compute foreground from features.
message ForegroundOptions {
// Indicates the *inverse* registration error (i.e. the irls weight)
// that is deemed a complete inlier.
// Weights in the interval [0, foreground_threshold] (corresponding to
// pixel errors in the interval [1 / foreground_threshold, inf])
// are mappend to 1 - [0, 1], i.e. foreground threshold is mapped to zero
// with weights below the threshold being assigned values > 0.
// Therefore, larger values will increase amount of detected foreground
// as well as noise.
optional float foreground_threshold = 1 [default = 0.5];
// By using foreground_gamma < 1.0 you can increase resolution of small
// foreground motion at the expense of the resolution of large foreground
// motions.
optional float foreground_gamma = 2 [default = 1.0];
// Threshold is scaled by coverage, i.e. for frames with large registration
// error less forground is visualized.
optional bool threshold_coverage_scaling = 3 [default = true];
}
optional ForegroundOptions foreground_options = 12;
}