xref: /aosp_15_r20/external/googleapis/google/cloud/visionai/v1/lva.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC
2*d5c09012SAndroid Build Coastguard Worker//
3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*d5c09012SAndroid Build Coastguard Worker//
7*d5c09012SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*d5c09012SAndroid Build Coastguard Worker//
9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*d5c09012SAndroid Build Coastguard Worker// limitations under the License.
14*d5c09012SAndroid Build Coastguard Worker
15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3";
16*d5c09012SAndroid Build Coastguard Worker
17*d5c09012SAndroid Build Coastguard Workerpackage google.cloud.visionai.v1;
18*d5c09012SAndroid Build Coastguard Worker
19*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.VisionAI.V1";
20*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/visionai/apiv1/visionaipb;visionaipb";
21*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true;
22*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "LvaProto";
23*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.cloud.visionai.v1";
24*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\VisionAI\\V1";
25*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::VisionAI::V1";
26*d5c09012SAndroid Build Coastguard Worker
27*d5c09012SAndroid Build Coastguard Worker// RunMode represents the mode to launch the Process on.
28*d5c09012SAndroid Build Coastguard Workerenum RunMode {
29*d5c09012SAndroid Build Coastguard Worker  // Mode is unspecified.
30*d5c09012SAndroid Build Coastguard Worker  RUN_MODE_UNSPECIFIED = 0;
31*d5c09012SAndroid Build Coastguard Worker
32*d5c09012SAndroid Build Coastguard Worker  // Live mode. Meaning the Process is launched to handle live video
33*d5c09012SAndroid Build Coastguard Worker  // source, and possible packet drops are expected.
34*d5c09012SAndroid Build Coastguard Worker  LIVE = 1;
35*d5c09012SAndroid Build Coastguard Worker
36*d5c09012SAndroid Build Coastguard Worker  // Submission mode. Meaning the Process is launched to handle bounded video
37*d5c09012SAndroid Build Coastguard Worker  // files, with no packet drop. Completion status is tracked.
38*d5c09012SAndroid Build Coastguard Worker  SUBMISSION = 2;
39*d5c09012SAndroid Build Coastguard Worker}
40*d5c09012SAndroid Build Coastguard Worker
41*d5c09012SAndroid Build Coastguard Worker// Defines the interface of an Operator.
42*d5c09012SAndroid Build Coastguard Worker//
43*d5c09012SAndroid Build Coastguard Worker// Arguments to an operator are input/output streams that are getting
44*d5c09012SAndroid Build Coastguard Worker// processesed/returned while attributes are fixed configuration parameters.
45*d5c09012SAndroid Build Coastguard Workermessage OperatorDefinition {
46*d5c09012SAndroid Build Coastguard Worker  // Defines an argument to an operator.
47*d5c09012SAndroid Build Coastguard Worker  //
48*d5c09012SAndroid Build Coastguard Worker  // Used for both inputs and outputs.
49*d5c09012SAndroid Build Coastguard Worker  message ArgumentDefinition {
50*d5c09012SAndroid Build Coastguard Worker    // The name of the argument.
51*d5c09012SAndroid Build Coastguard Worker    //
52*d5c09012SAndroid Build Coastguard Worker    // Tentatively [a-z]([_a-z0-9]*[a-z0-9])?, e.g., video, audio,
53*d5c09012SAndroid Build Coastguard Worker    // high_fps_frame.
54*d5c09012SAndroid Build Coastguard Worker    string argument = 1;
55*d5c09012SAndroid Build Coastguard Worker
56*d5c09012SAndroid Build Coastguard Worker    // The data type of the argument.
57*d5c09012SAndroid Build Coastguard Worker    //
58*d5c09012SAndroid Build Coastguard Worker    // This should match the textual representation of a stream/Packet type.
59*d5c09012SAndroid Build Coastguard Worker    string type = 2;
60*d5c09012SAndroid Build Coastguard Worker  }
61*d5c09012SAndroid Build Coastguard Worker
62*d5c09012SAndroid Build Coastguard Worker  // Defines an attribute of an operator.
63*d5c09012SAndroid Build Coastguard Worker  message AttributeDefinition {
64*d5c09012SAndroid Build Coastguard Worker    // The name of the attribute.
65*d5c09012SAndroid Build Coastguard Worker    //
66*d5c09012SAndroid Build Coastguard Worker    // Tentatively [a-z]([_a-z0-9]*[a-z0-9])?, e.g., max_frames_per_video,
67*d5c09012SAndroid Build Coastguard Worker    // resize_height.
68*d5c09012SAndroid Build Coastguard Worker    string attribute = 1;
69*d5c09012SAndroid Build Coastguard Worker
70*d5c09012SAndroid Build Coastguard Worker    // The type of this attribute.
71*d5c09012SAndroid Build Coastguard Worker    //
72*d5c09012SAndroid Build Coastguard Worker    // See attribute_value.proto for possibilities.
73*d5c09012SAndroid Build Coastguard Worker    string type = 2;
74*d5c09012SAndroid Build Coastguard Worker
75*d5c09012SAndroid Build Coastguard Worker    // The default value for the attribute.
76*d5c09012SAndroid Build Coastguard Worker    AttributeValue default_value = 3;
77*d5c09012SAndroid Build Coastguard Worker  }
78*d5c09012SAndroid Build Coastguard Worker
79*d5c09012SAndroid Build Coastguard Worker  // The name of this operator.
80*d5c09012SAndroid Build Coastguard Worker  //
81*d5c09012SAndroid Build Coastguard Worker  // Tentatively [A-Z][a-zA-Z0-9]*, e.g., BboxCounter, PetDetector,
82*d5c09012SAndroid Build Coastguard Worker  // PetDetector1.
83*d5c09012SAndroid Build Coastguard Worker  string operator = 1;
84*d5c09012SAndroid Build Coastguard Worker
85*d5c09012SAndroid Build Coastguard Worker  // Declares input arguments.
86*d5c09012SAndroid Build Coastguard Worker  repeated ArgumentDefinition input_args = 2;
87*d5c09012SAndroid Build Coastguard Worker
88*d5c09012SAndroid Build Coastguard Worker  // Declares output arguments.
89*d5c09012SAndroid Build Coastguard Worker  repeated ArgumentDefinition output_args = 3;
90*d5c09012SAndroid Build Coastguard Worker
91*d5c09012SAndroid Build Coastguard Worker  // Declares the attributes.
92*d5c09012SAndroid Build Coastguard Worker  repeated AttributeDefinition attributes = 4;
93*d5c09012SAndroid Build Coastguard Worker
94*d5c09012SAndroid Build Coastguard Worker  // The resources for running the operator.
95*d5c09012SAndroid Build Coastguard Worker  ResourceSpecification resources = 5;
96*d5c09012SAndroid Build Coastguard Worker
97*d5c09012SAndroid Build Coastguard Worker  // Short description of the operator.
98*d5c09012SAndroid Build Coastguard Worker  string short_description = 6;
99*d5c09012SAndroid Build Coastguard Worker
100*d5c09012SAndroid Build Coastguard Worker  // Full description of the operator.
101*d5c09012SAndroid Build Coastguard Worker  string description = 7;
102*d5c09012SAndroid Build Coastguard Worker}
103*d5c09012SAndroid Build Coastguard Worker
104*d5c09012SAndroid Build Coastguard Worker// ResourceSpec collects a set of resources that can
105*d5c09012SAndroid Build Coastguard Worker// be used to specify requests and requirements.
106*d5c09012SAndroid Build Coastguard Worker//
107*d5c09012SAndroid Build Coastguard Worker// Note: Highly experimental as this can be runtime dependent.
108*d5c09012SAndroid Build Coastguard Worker// Can use the "extras" field to experiment first before trying
109*d5c09012SAndroid Build Coastguard Worker// to abstract it.
110*d5c09012SAndroid Build Coastguard Workermessage ResourceSpecification {
111*d5c09012SAndroid Build Coastguard Worker  // CPU specification.
112*d5c09012SAndroid Build Coastguard Worker  //
113*d5c09012SAndroid Build Coastguard Worker  // Examples:
114*d5c09012SAndroid Build Coastguard Worker  // "100m", "0.5", "1", "2", ... correspond to
115*d5c09012SAndroid Build Coastguard Worker  // 0.1, half, 1, or 2 cpus.
116*d5c09012SAndroid Build Coastguard Worker  //
117*d5c09012SAndroid Build Coastguard Worker  // Leave empty to let the system decide.
118*d5c09012SAndroid Build Coastguard Worker  //
119*d5c09012SAndroid Build Coastguard Worker  // Note that this does *not* determine the cpu vender/make,
120*d5c09012SAndroid Build Coastguard Worker  // or its underlying clock speed and specific SIMD features.
121*d5c09012SAndroid Build Coastguard Worker  // It is only the amount time it requires in timeslicing.
122*d5c09012SAndroid Build Coastguard Worker  string cpu = 1;
123*d5c09012SAndroid Build Coastguard Worker
124*d5c09012SAndroid Build Coastguard Worker  // CPU limit.
125*d5c09012SAndroid Build Coastguard Worker  //
126*d5c09012SAndroid Build Coastguard Worker  // Examples:
127*d5c09012SAndroid Build Coastguard Worker  // "100m", "0.5", "1", "2", ... correspond to
128*d5c09012SAndroid Build Coastguard Worker  // 0.1, half, 1, or 2 cpus.
129*d5c09012SAndroid Build Coastguard Worker  //
130*d5c09012SAndroid Build Coastguard Worker  // Leave empty to indicate no limit.
131*d5c09012SAndroid Build Coastguard Worker  string cpu_limits = 5;
132*d5c09012SAndroid Build Coastguard Worker
133*d5c09012SAndroid Build Coastguard Worker  // Memory specification (in bytes).
134*d5c09012SAndroid Build Coastguard Worker  //
135*d5c09012SAndroid Build Coastguard Worker  // Examples:
136*d5c09012SAndroid Build Coastguard Worker  // "128974848", "129e6", "129M", "123Mi", ... correspond to
137*d5c09012SAndroid Build Coastguard Worker  // 128974848 bytes, 129000000 bytes, 129 mebibytes, 123 megabytes.
138*d5c09012SAndroid Build Coastguard Worker  //
139*d5c09012SAndroid Build Coastguard Worker  // Leave empty to let the system decide.
140*d5c09012SAndroid Build Coastguard Worker  string memory = 2;
141*d5c09012SAndroid Build Coastguard Worker
142*d5c09012SAndroid Build Coastguard Worker  // Memory usage limits.
143*d5c09012SAndroid Build Coastguard Worker  //
144*d5c09012SAndroid Build Coastguard Worker  // Examples:
145*d5c09012SAndroid Build Coastguard Worker  // "128974848", "129e6", "129M", "123Mi", ... correspond to
146*d5c09012SAndroid Build Coastguard Worker  // 128974848 bytes, 129000000 bytes, 129 mebibytes, 123 megabytes.
147*d5c09012SAndroid Build Coastguard Worker  //
148*d5c09012SAndroid Build Coastguard Worker  // Leave empty to indicate no limit.
149*d5c09012SAndroid Build Coastguard Worker  string memory_limits = 6;
150*d5c09012SAndroid Build Coastguard Worker
151*d5c09012SAndroid Build Coastguard Worker  // Number of gpus.
152*d5c09012SAndroid Build Coastguard Worker  int32 gpus = 3;
153*d5c09012SAndroid Build Coastguard Worker
154*d5c09012SAndroid Build Coastguard Worker  // The maximum latency that this operator may use to process an element.
155*d5c09012SAndroid Build Coastguard Worker  //
156*d5c09012SAndroid Build Coastguard Worker  // If non positive, then a system default will be used.
157*d5c09012SAndroid Build Coastguard Worker  // Operator developers should arrange for the system compute resources to be
158*d5c09012SAndroid Build Coastguard Worker  // aligned with this latency budget; e.g. if you want a ML model to produce
159*d5c09012SAndroid Build Coastguard Worker  // results within 500ms, then you should make sure you request enough
160*d5c09012SAndroid Build Coastguard Worker  // cpu/gpu/memory to achieve that.
161*d5c09012SAndroid Build Coastguard Worker  int32 latency_budget_ms = 4;
162*d5c09012SAndroid Build Coastguard Worker}
163*d5c09012SAndroid Build Coastguard Worker
164*d5c09012SAndroid Build Coastguard Worker// Represents an actual value of an operator attribute.
165*d5c09012SAndroid Build Coastguard Workermessage AttributeValue {
166*d5c09012SAndroid Build Coastguard Worker  // Attribute value.
167*d5c09012SAndroid Build Coastguard Worker  oneof value {
168*d5c09012SAndroid Build Coastguard Worker    // int.
169*d5c09012SAndroid Build Coastguard Worker    int64 i = 1;
170*d5c09012SAndroid Build Coastguard Worker
171*d5c09012SAndroid Build Coastguard Worker    // float.
172*d5c09012SAndroid Build Coastguard Worker    float f = 2;
173*d5c09012SAndroid Build Coastguard Worker
174*d5c09012SAndroid Build Coastguard Worker    // bool.
175*d5c09012SAndroid Build Coastguard Worker    bool b = 3;
176*d5c09012SAndroid Build Coastguard Worker
177*d5c09012SAndroid Build Coastguard Worker    // string.
178*d5c09012SAndroid Build Coastguard Worker    bytes s = 4;
179*d5c09012SAndroid Build Coastguard Worker  }
180*d5c09012SAndroid Build Coastguard Worker}
181*d5c09012SAndroid Build Coastguard Worker
182*d5c09012SAndroid Build Coastguard Worker// Defines an Analyzer.
183*d5c09012SAndroid Build Coastguard Worker//
184*d5c09012SAndroid Build Coastguard Worker// An analyzer processes data from its input streams using the logic defined in
185*d5c09012SAndroid Build Coastguard Worker// the Operator that it represents. Of course, it produces data for the output
186*d5c09012SAndroid Build Coastguard Worker// streams declared in the Operator.
187*d5c09012SAndroid Build Coastguard Workermessage AnalyzerDefinition {
188*d5c09012SAndroid Build Coastguard Worker  // The inputs to this analyzer.
189*d5c09012SAndroid Build Coastguard Worker  //
190*d5c09012SAndroid Build Coastguard Worker  // We accept input name references of the following form:
191*d5c09012SAndroid Build Coastguard Worker  // <analyzer-name>:<output-argument-name>
192*d5c09012SAndroid Build Coastguard Worker  //
193*d5c09012SAndroid Build Coastguard Worker  // Example:
194*d5c09012SAndroid Build Coastguard Worker  //
195*d5c09012SAndroid Build Coastguard Worker  // Suppose you had an operator named "SomeOp" that has 2 output
196*d5c09012SAndroid Build Coastguard Worker  // arguments, the first of which is named "foo" and the second of which is
197*d5c09012SAndroid Build Coastguard Worker  // named "bar", and an operator named "MyOp" that accepts 2 inputs.
198*d5c09012SAndroid Build Coastguard Worker  //
199*d5c09012SAndroid Build Coastguard Worker  // Also suppose that there is an analyzer named "some-analyzer" that is
200*d5c09012SAndroid Build Coastguard Worker  // running "SomeOp" and another analyzer named "my-analyzer" running "MyOp".
201*d5c09012SAndroid Build Coastguard Worker  //
202*d5c09012SAndroid Build Coastguard Worker  // To indicate that "my-analyzer" is to consume "some-analyzer"'s "foo"
203*d5c09012SAndroid Build Coastguard Worker  // output as its first input and "some-analyzer"'s "bar" output as its
204*d5c09012SAndroid Build Coastguard Worker  // second input, you can set this field to the following:
205*d5c09012SAndroid Build Coastguard Worker  // input = ["some-analyzer:foo", "some-analyzer:bar"]
206*d5c09012SAndroid Build Coastguard Worker  message StreamInput {
207*d5c09012SAndroid Build Coastguard Worker    // The name of the stream input (as discussed above).
208*d5c09012SAndroid Build Coastguard Worker    string input = 1;
209*d5c09012SAndroid Build Coastguard Worker  }
210*d5c09012SAndroid Build Coastguard Worker
211*d5c09012SAndroid Build Coastguard Worker  // Options available for debugging purposes only.
212*d5c09012SAndroid Build Coastguard Worker  message DebugOptions {
213*d5c09012SAndroid Build Coastguard Worker    // Environment variables.
214*d5c09012SAndroid Build Coastguard Worker    map<string, string> environment_variables = 1;
215*d5c09012SAndroid Build Coastguard Worker  }
216*d5c09012SAndroid Build Coastguard Worker
217*d5c09012SAndroid Build Coastguard Worker  // Option related to the operator.
218*d5c09012SAndroid Build Coastguard Worker  message OperatorOption {
219*d5c09012SAndroid Build Coastguard Worker    // Tag of the operator.
220*d5c09012SAndroid Build Coastguard Worker    string tag = 1;
221*d5c09012SAndroid Build Coastguard Worker
222*d5c09012SAndroid Build Coastguard Worker    // Registry of the operator. e.g. public, dev.
223*d5c09012SAndroid Build Coastguard Worker    string registry = 2;
224*d5c09012SAndroid Build Coastguard Worker  }
225*d5c09012SAndroid Build Coastguard Worker
226*d5c09012SAndroid Build Coastguard Worker  // The name of this analyzer.
227*d5c09012SAndroid Build Coastguard Worker  //
228*d5c09012SAndroid Build Coastguard Worker  // Tentatively [a-z][a-z0-9]*(_[a-z0-9]+)*.
229*d5c09012SAndroid Build Coastguard Worker  string analyzer = 1;
230*d5c09012SAndroid Build Coastguard Worker
231*d5c09012SAndroid Build Coastguard Worker  // The name of the operator that this analyzer runs.
232*d5c09012SAndroid Build Coastguard Worker  //
233*d5c09012SAndroid Build Coastguard Worker  // Must match the name of a supported operator.
234*d5c09012SAndroid Build Coastguard Worker  string operator = 2;
235*d5c09012SAndroid Build Coastguard Worker
236*d5c09012SAndroid Build Coastguard Worker  // Input streams.
237*d5c09012SAndroid Build Coastguard Worker  repeated StreamInput inputs = 3;
238*d5c09012SAndroid Build Coastguard Worker
239*d5c09012SAndroid Build Coastguard Worker  // The attribute values that this analyzer applies to the operator.
240*d5c09012SAndroid Build Coastguard Worker  //
241*d5c09012SAndroid Build Coastguard Worker  // Supply a mapping between the attribute names and the actual value you wish
242*d5c09012SAndroid Build Coastguard Worker  // to apply. If an attribute name is omitted, then it will take a
243*d5c09012SAndroid Build Coastguard Worker  // preconfigured default value.
244*d5c09012SAndroid Build Coastguard Worker  map<string, AttributeValue> attrs = 4;
245*d5c09012SAndroid Build Coastguard Worker
246*d5c09012SAndroid Build Coastguard Worker  // Debug options.
247*d5c09012SAndroid Build Coastguard Worker  DebugOptions debug_options = 5;
248*d5c09012SAndroid Build Coastguard Worker
249*d5c09012SAndroid Build Coastguard Worker  // Operator option.
250*d5c09012SAndroid Build Coastguard Worker  OperatorOption operator_option = 6;
251*d5c09012SAndroid Build Coastguard Worker}
252*d5c09012SAndroid Build Coastguard Worker
253*d5c09012SAndroid Build Coastguard Worker// Defines a full analysis.
254*d5c09012SAndroid Build Coastguard Worker//
255*d5c09012SAndroid Build Coastguard Worker// This is a description of the overall live analytics pipeline.
256*d5c09012SAndroid Build Coastguard Worker// You may think of this as an edge list representation of a multigraph.
257*d5c09012SAndroid Build Coastguard Worker//
258*d5c09012SAndroid Build Coastguard Worker// This may be directly authored by a human in protobuf textformat, or it may be
259*d5c09012SAndroid Build Coastguard Worker// generated by a programming API (perhaps Python or JavaScript depending on
260*d5c09012SAndroid Build Coastguard Worker// context).
261*d5c09012SAndroid Build Coastguard Workermessage AnalysisDefinition {
262*d5c09012SAndroid Build Coastguard Worker  // Analyzer definitions.
263*d5c09012SAndroid Build Coastguard Worker  repeated AnalyzerDefinition analyzers = 1;
264*d5c09012SAndroid Build Coastguard Worker}
265*d5c09012SAndroid Build Coastguard Worker
266*d5c09012SAndroid Build Coastguard Worker// Message describing the status of the Process.
267*d5c09012SAndroid Build Coastguard Workermessage RunStatus {
268*d5c09012SAndroid Build Coastguard Worker  // State represents the running status of the Process.
269*d5c09012SAndroid Build Coastguard Worker  enum State {
270*d5c09012SAndroid Build Coastguard Worker    // State is unspecified.
271*d5c09012SAndroid Build Coastguard Worker    STATE_UNSPECIFIED = 0;
272*d5c09012SAndroid Build Coastguard Worker
273*d5c09012SAndroid Build Coastguard Worker    // INITIALIZING means the Process is scheduled but yet ready to handle
274*d5c09012SAndroid Build Coastguard Worker    // real traffic.
275*d5c09012SAndroid Build Coastguard Worker    INITIALIZING = 1;
276*d5c09012SAndroid Build Coastguard Worker
277*d5c09012SAndroid Build Coastguard Worker    // RUNNING means the Process is up running and handling traffic.
278*d5c09012SAndroid Build Coastguard Worker    RUNNING = 2;
279*d5c09012SAndroid Build Coastguard Worker
280*d5c09012SAndroid Build Coastguard Worker    // COMPLETED means the Process has completed the processing, especially
281*d5c09012SAndroid Build Coastguard Worker    // for non-streaming use case.
282*d5c09012SAndroid Build Coastguard Worker    COMPLETED = 3;
283*d5c09012SAndroid Build Coastguard Worker
284*d5c09012SAndroid Build Coastguard Worker    // FAILED means the Process failed to complete the processing.
285*d5c09012SAndroid Build Coastguard Worker    FAILED = 4;
286*d5c09012SAndroid Build Coastguard Worker
287*d5c09012SAndroid Build Coastguard Worker    // PENDING means the Process is created but yet to be scheduled.
288*d5c09012SAndroid Build Coastguard Worker    PENDING = 5;
289*d5c09012SAndroid Build Coastguard Worker  }
290*d5c09012SAndroid Build Coastguard Worker
291*d5c09012SAndroid Build Coastguard Worker  // The state of the Process.
292*d5c09012SAndroid Build Coastguard Worker  State state = 1;
293*d5c09012SAndroid Build Coastguard Worker
294*d5c09012SAndroid Build Coastguard Worker  // The reason of becoming the state.
295*d5c09012SAndroid Build Coastguard Worker  string reason = 2;
296*d5c09012SAndroid Build Coastguard Worker}
297