2019-06-17 01:03:25 +02:00
|
|
|
// 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/color.proto";
|
|
|
|
|
|
|
|
// A RenderData is a collection of multiple RenderAnnotations. For example, a
|
|
|
|
// face can be rendered using a group of annotations: a bounding box around the
|
|
|
|
// face (rectangle) and annotations for various face parts such as eyes, nose
|
|
|
|
// etc (2D points).
|
|
|
|
message RenderData {
|
|
|
|
repeated RenderAnnotation render_annotations = 1;
|
|
|
|
|
|
|
|
// An optional string that uniquely identifies this class of annotations.
|
|
|
|
optional string scene_class = 2;
|
|
|
|
|
|
|
|
// An optional viewport to which this set of annotations are intended to be
|
|
|
|
// rendered. If left unset, the annotations are meant to render overtop of the
|
|
|
|
// existing camera feed in the "main" viewport. If set, the annotations are to
|
|
|
|
// be rendered in a separate viewport.
|
|
|
|
optional RenderViewport scene_viewport = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
message RenderAnnotation {
|
|
|
|
message Rectangle {
|
|
|
|
// Left and top refer to the x and y coordinates of the top-left corner
|
|
|
|
// of rectangle, whereas right and bottom refer to the x and y coordinates
|
|
|
|
// of the bottom-right corner of rectangle.
|
|
|
|
optional double left = 1;
|
|
|
|
optional double top = 2;
|
|
|
|
optional double right = 3;
|
|
|
|
optional double bottom = 4;
|
|
|
|
optional bool normalized = 5 [default = false];
|
2019-08-17 03:49:25 +02:00
|
|
|
optional double rotation = 6; // Rotation in radians.
|
2019-06-17 01:03:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
message FilledRectangle {
|
|
|
|
optional Rectangle rectangle = 1;
|
|
|
|
|
|
|
|
// Color to fill in the rectangle.
|
|
|
|
optional Color fill_color = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message RoundedRectangle {
|
|
|
|
// A rounded rectangle is specified by a rectangle and a corner radius to
|
|
|
|
// round each corner by. A corner radius of 0 implies a standard non-rounded
|
|
|
|
// rectangle (i.e. sharp edges) but as the radius increases proportionally
|
|
|
|
// to the width and height of the overall rectangle size, the corners
|
|
|
|
// increasingly round.
|
|
|
|
optional Rectangle rectangle = 1;
|
|
|
|
|
|
|
|
// The radius of the round corners.
|
|
|
|
optional int32 corner_radius = 2 [default = 0];
|
|
|
|
|
|
|
|
// Use one of the following:
|
|
|
|
// -1: a filled line (FILLED)
|
|
|
|
// 4: a 4-connected line (LINE_4)
|
|
|
|
// 8: a 8-connected line (LINE_8)
|
|
|
|
// 16: an antialiased line (LINE_AA).
|
|
|
|
optional int32 line_type = 3 [default = 4];
|
|
|
|
}
|
|
|
|
|
|
|
|
message FilledRoundedRectangle {
|
|
|
|
optional RoundedRectangle rounded_rectangle = 1;
|
|
|
|
|
|
|
|
// Color to fill in the rounded rectangle.
|
|
|
|
optional Color fill_color = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message Oval {
|
|
|
|
// An oval is specified by the rectangle that encloses the oval. For
|
|
|
|
// example, a circle with center at (x,y) and radius r can be specified as a
|
|
|
|
// Rectangle with left = x - r, right = y - r, and width = height = 2 * r.
|
|
|
|
optional Rectangle rectangle = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message FilledOval {
|
|
|
|
optional Oval oval = 1;
|
|
|
|
|
|
|
|
// Color to fill in the oval.
|
|
|
|
optional Color fill_color = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message Point {
|
|
|
|
optional double x = 1;
|
|
|
|
optional double y = 2;
|
|
|
|
optional bool normalized = 3 [default = false];
|
|
|
|
}
|
|
|
|
|
|
|
|
message Line {
|
|
|
|
optional double x_start = 1;
|
|
|
|
optional double y_start = 2;
|
|
|
|
optional double x_end = 3;
|
|
|
|
optional double y_end = 4;
|
|
|
|
optional bool normalized = 5 [default = false];
|
|
|
|
enum LineType {
|
|
|
|
UNKNOWN = 0;
|
|
|
|
SOLID = 1;
|
|
|
|
DASHED = 2;
|
|
|
|
}
|
|
|
|
optional LineType line_type = 6 [default = SOLID];
|
|
|
|
}
|
|
|
|
|
2019-08-17 03:49:25 +02:00
|
|
|
message GradientLine {
|
|
|
|
optional double x_start = 1;
|
|
|
|
optional double y_start = 2;
|
|
|
|
optional double x_end = 3;
|
|
|
|
optional double y_end = 4;
|
|
|
|
optional bool normalized = 5 [default = false];
|
|
|
|
// Linearly interpolate between color1 and color2 along the line.
|
|
|
|
optional Color color1 = 6;
|
|
|
|
optional Color color2 = 7;
|
|
|
|
}
|
|
|
|
|
2019-06-17 01:03:25 +02:00
|
|
|
message Arrow {
|
|
|
|
// The arrow head will be drawn at (x_end, y_end).
|
|
|
|
optional double x_start = 1;
|
|
|
|
optional double y_start = 2;
|
|
|
|
optional double x_end = 3;
|
|
|
|
optional double y_end = 4;
|
|
|
|
optional bool normalized = 5 [default = false];
|
|
|
|
}
|
|
|
|
|
|
|
|
message Text {
|
|
|
|
optional string display_text = 1;
|
|
|
|
|
|
|
|
// The location to render the text. Left and baseline refer to the x and y
|
|
|
|
// coordinates of the start location of text respectively.
|
|
|
|
optional double left = 2;
|
|
|
|
optional double baseline = 3;
|
|
|
|
|
|
|
|
// The height of the text from top to baseline. When normalized=true, font
|
|
|
|
// height is specified wrt the image height.
|
|
|
|
optional double font_height = 4 [default = 8];
|
|
|
|
|
|
|
|
optional bool normalized = 5 [default = false];
|
|
|
|
|
|
|
|
// Specifies the font for the text. Font must be one of the following from
|
|
|
|
// OpenCV:
|
|
|
|
// cv::FONT_HERSHEY_SIMPLEX (0)
|
|
|
|
// cv::FONT_HERSHEY_PLAIN (1)
|
|
|
|
// cv::FONT_HERSHEY_DUPLEX (2)
|
|
|
|
// cv::FONT_HERSHEY_COMPLEX (3)
|
|
|
|
// cv::FONT_HERSHEY_TRIPLEX (4)
|
|
|
|
// cv::FONT_HERSHEY_COMPLEX_SMALL (5)
|
|
|
|
// cv::FONT_HERSHEY_SCRIPT_SIMPLEX (6)
|
|
|
|
// cv::FONT_HERSHEY_SCRIPT_COMPLEX (7)
|
|
|
|
optional int32 font_face = 6 [default = 0];
|
|
|
|
}
|
|
|
|
|
|
|
|
// The RenderAnnotation can be one of the below formats.
|
|
|
|
oneof data {
|
|
|
|
Rectangle rectangle = 1;
|
|
|
|
FilledRectangle filled_rectangle = 2;
|
|
|
|
Oval oval = 3;
|
|
|
|
FilledOval filled_oval = 4;
|
|
|
|
Point point = 5;
|
|
|
|
Line line = 6;
|
|
|
|
Arrow arrow = 7;
|
|
|
|
Text text = 8;
|
|
|
|
RoundedRectangle rounded_rectangle = 9;
|
|
|
|
FilledRoundedRectangle filled_rounded_rectangle = 10;
|
2019-08-17 03:49:25 +02:00
|
|
|
GradientLine gradient_line = 14;
|
2019-06-17 01:03:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Thickness for drawing the annotation.
|
|
|
|
optional double thickness = 11 [default = 1.0];
|
|
|
|
|
|
|
|
// Color for drawing the annotation. For FilledRectangle and FilledOval, this
|
|
|
|
// color is used only for drawing the boundary.
|
|
|
|
optional Color color = 12;
|
|
|
|
|
|
|
|
// A hint regarding what this annotation is for. Should be unique across all
|
|
|
|
// annotation types.
|
|
|
|
optional string scene_tag = 13;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Represents a destination viewport to render annotations into, when specified
|
|
|
|
// in RenderData.
|
|
|
|
message RenderViewport {
|
|
|
|
// A unique identifier for this viewport.
|
|
|
|
optional string id = 1;
|
|
|
|
|
|
|
|
// The width and height of this viewport in absolute pixels.
|
|
|
|
// Normalized coordinates on annotations destined for this viewport as
|
|
|
|
// normalized relative to these absolute pixel dimensions.
|
|
|
|
// Camera feeds destined for this viewport will be rescaled to match these
|
|
|
|
// dimensions.
|
|
|
|
// Note: It is not expected that mid-stream resizing should be possible --
|
|
|
|
// the visualizer is epxected to use the first dimensions it sees for a given
|
|
|
|
// viewport and ignore any ignore subsequent changes.
|
|
|
|
optional int32 width_px = 2;
|
|
|
|
optional int32 height_px = 3;
|
|
|
|
|
|
|
|
// Set to true if this viewport should render its annotations overtop of a
|
|
|
|
// (rescaled to width/height) copy of the camera feed.
|
|
|
|
optional bool compose_on_video = 4;
|
|
|
|
}
|