<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="videointelligence_v1beta2.html">Cloud Video Intelligence API</a> . <a href="videointelligence_v1beta2.videos.html">videos</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#annotate">annotate(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Performs asynchronous video annotation. Progress and results can be retrieved through the `google.longrunning.Operations` interface. `Operation.metadata` contains `AnnotateVideoProgress` (progress). `Operation.response` contains `AnnotateVideoResponse` (results).</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="annotate">annotate(body=None, x__xgafv=None)</code>
  <pre>Performs asynchronous video annotation. Progress and results can be retrieved through the `google.longrunning.Operations` interface. `Operation.metadata` contains `AnnotateVideoProgress` (progress). `Operation.response` contains `AnnotateVideoResponse` (results).

Args:
  body: object, The request body.
    The object takes the form of:

{ # Video annotation request.
  &quot;features&quot;: [ # Required. Requested video annotation features.
    &quot;A String&quot;,
  ],
  &quot;inputContent&quot;: &quot;A String&quot;, # The video data bytes. If unset, the input video(s) should be specified via the `input_uri`. If set, `input_uri` must be unset.
  &quot;inputUri&quot;: &quot;A String&quot;, # Input video location. Currently, only [Cloud Storage](https://cloud.google.com/storage/) URIs are supported. URIs must be specified in the following format: `gs://bucket-id/object-id` (other URI formats return google.rpc.Code.INVALID_ARGUMENT). For more information, see [Request URIs](https://cloud.google.com/storage/docs/request-endpoints). To identify multiple videos, a video URI may include wildcards in the `object-id`. Supported wildcards: &#x27;*&#x27; to match 0 or more characters; &#x27;?&#x27; to match 1 character. If unset, the input video should be embedded in the request as `input_content`. If set, `input_content` must be unset.
  &quot;locationId&quot;: &quot;A String&quot;, # Optional. Cloud region where annotation should take place. Supported cloud regions are: `us-east1`, `us-west1`, `europe-west1`, `asia-east1`. If no region is specified, the region will be determined based on video file location.
  &quot;outputUri&quot;: &quot;A String&quot;, # Optional. Location where the output (in JSON format) should be stored. Currently, only [Cloud Storage](https://cloud.google.com/storage/) URIs are supported. These must be specified in the following format: `gs://bucket-id/object-id` (other URI formats return google.rpc.Code.INVALID_ARGUMENT). For more information, see [Request URIs](https://cloud.google.com/storage/docs/request-endpoints).
  &quot;videoContext&quot;: { # Video context and/or feature-specific parameters. # Additional video context and/or feature-specific parameters.
    &quot;explicitContentDetectionConfig&quot;: { # Config for EXPLICIT_CONTENT_DETECTION. # Config for EXPLICIT_CONTENT_DETECTION.
      &quot;model&quot;: &quot;A String&quot;, # Model to use for explicit content detection. Supported values: &quot;builtin/stable&quot; (the default if unset) and &quot;builtin/latest&quot;.
    },
    &quot;faceDetectionConfig&quot;: { # Config for FACE_DETECTION. # Config for FACE_DETECTION.
      &quot;includeAttributes&quot;: True or False, # Whether to enable face attributes detection, such as glasses, dark_glasses, mouth_open etc. Ignored if &#x27;include_bounding_boxes&#x27; is set to false.
      &quot;includeBoundingBoxes&quot;: True or False, # Whether bounding boxes are included in the face annotation output.
      &quot;model&quot;: &quot;A String&quot;, # Model to use for face detection. Supported values: &quot;builtin/stable&quot; (the default if unset) and &quot;builtin/latest&quot;.
    },
    &quot;labelDetectionConfig&quot;: { # Config for LABEL_DETECTION. # Config for LABEL_DETECTION.
      &quot;frameConfidenceThreshold&quot;: 3.14, # The confidence threshold we perform filtering on the labels from frame-level detection. If not set, it is set to 0.4 by default. The valid range for this threshold is [0.1, 0.9]. Any value set outside of this range will be clipped. Note: For best results, follow the default threshold. We will update the default threshold everytime when we release a new model.
      &quot;labelDetectionMode&quot;: &quot;A String&quot;, # What labels should be detected with LABEL_DETECTION, in addition to video-level labels or segment-level labels. If unspecified, defaults to `SHOT_MODE`.
      &quot;model&quot;: &quot;A String&quot;, # Model to use for label detection. Supported values: &quot;builtin/stable&quot; (the default if unset) and &quot;builtin/latest&quot;.
      &quot;stationaryCamera&quot;: True or False, # Whether the video has been shot from a stationary (i.e., non-moving) camera. When set to true, might improve detection accuracy for moving objects. Should be used with `SHOT_AND_FRAME_MODE` enabled.
      &quot;videoConfidenceThreshold&quot;: 3.14, # The confidence threshold we perform filtering on the labels from video-level and shot-level detections. If not set, it&#x27;s set to 0.3 by default. The valid range for this threshold is [0.1, 0.9]. Any value set outside of this range will be clipped. Note: For best results, follow the default threshold. We will update the default threshold everytime when we release a new model.
    },
    &quot;objectTrackingConfig&quot;: { # Config for OBJECT_TRACKING. # Config for OBJECT_TRACKING.
      &quot;model&quot;: &quot;A String&quot;, # Model to use for object tracking. Supported values: &quot;builtin/stable&quot; (the default if unset) and &quot;builtin/latest&quot;.
    },
    &quot;personDetectionConfig&quot;: { # Config for PERSON_DETECTION. # Config for PERSON_DETECTION.
      &quot;includeAttributes&quot;: True or False, # Whether to enable person attributes detection, such as cloth color (black, blue, etc), type (coat, dress, etc), pattern (plain, floral, etc), hair, etc. Ignored if &#x27;include_bounding_boxes&#x27; is set to false.
      &quot;includeBoundingBoxes&quot;: True or False, # Whether bounding boxes are included in the person detection annotation output.
      &quot;includePoseLandmarks&quot;: True or False, # Whether to enable pose landmarks detection. Ignored if &#x27;include_bounding_boxes&#x27; is set to false.
    },
    &quot;segments&quot;: [ # Video segments to annotate. The segments may overlap and are not required to be contiguous or span the whole video. If unspecified, each video is treated as a single segment.
      { # Video segment.
        &quot;endTimeOffset&quot;: &quot;A String&quot;, # Time-offset, relative to the beginning of the video, corresponding to the end of the segment (inclusive).
        &quot;startTimeOffset&quot;: &quot;A String&quot;, # Time-offset, relative to the beginning of the video, corresponding to the start of the segment (inclusive).
      },
    ],
    &quot;shotChangeDetectionConfig&quot;: { # Config for SHOT_CHANGE_DETECTION. # Config for SHOT_CHANGE_DETECTION.
      &quot;model&quot;: &quot;A String&quot;, # Model to use for shot change detection. Supported values: &quot;builtin/stable&quot; (the default if unset), &quot;builtin/latest&quot;, and &quot;builtin/legacy&quot;.
    },
    &quot;speechTranscriptionConfig&quot;: { # Config for SPEECH_TRANSCRIPTION. # Config for SPEECH_TRANSCRIPTION.
      &quot;audioTracks&quot;: [ # Optional. For file formats, such as MXF or MKV, supporting multiple audio tracks, specify up to two tracks. Default: track 0.
        42,
      ],
      &quot;diarizationSpeakerCount&quot;: 42, # Optional. If set, specifies the estimated number of speakers in the conversation. If not set, defaults to &#x27;2&#x27;. Ignored unless enable_speaker_diarization is set to true.
      &quot;enableAutomaticPunctuation&quot;: True or False, # Optional. If &#x27;true&#x27;, adds punctuation to recognition result hypotheses. This feature is only available in select languages. Setting this for requests in other languages has no effect at all. The default &#x27;false&#x27; value does not add punctuation to result hypotheses. NOTE: &quot;This is currently offered as an experimental service, complimentary to all users. In the future this may be exclusively available as a premium feature.&quot;
      &quot;enableSpeakerDiarization&quot;: True or False, # Optional. If &#x27;true&#x27;, enables speaker detection for each recognized word in the top alternative of the recognition result using a speaker_tag provided in the WordInfo. Note: When this is true, we send all the words from the beginning of the audio for the top alternative in every consecutive response. This is done in order to improve our speaker tags as our models learn to identify the speakers in the conversation over time.
      &quot;enableWordConfidence&quot;: True or False, # Optional. If `true`, the top result includes a list of words and the confidence for those words. If `false`, no word-level confidence information is returned. The default is `false`.
      &quot;filterProfanity&quot;: True or False, # Optional. If set to `true`, the server will attempt to filter out profanities, replacing all but the initial character in each filtered word with asterisks, e.g. &quot;f***&quot;. If set to `false` or omitted, profanities won&#x27;t be filtered out.
      &quot;languageCode&quot;: &quot;A String&quot;, # Required. *Required* The language of the supplied audio as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. Example: &quot;en-US&quot;. See [Language Support](https://cloud.google.com/speech/docs/languages) for a list of the currently supported language codes.
      &quot;maxAlternatives&quot;: 42, # Optional. Maximum number of recognition hypotheses to be returned. Specifically, the maximum number of `SpeechRecognitionAlternative` messages within each `SpeechTranscription`. The server may return fewer than `max_alternatives`. Valid values are `0`-`30`. A value of `0` or `1` will return a maximum of one. If omitted, will return a maximum of one.
      &quot;speechContexts&quot;: [ # Optional. A means to provide context to assist the speech recognition.
        { # Provides &quot;hints&quot; to the speech recognizer to favor specific words and phrases in the results.
          &quot;phrases&quot;: [ # Optional. A list of strings containing words and phrases &quot;hints&quot; so that the speech recognition is more likely to recognize them. This can be used to improve the accuracy for specific words and phrases, for example, if specific commands are typically spoken by the user. This can also be used to add additional words to the vocabulary of the recognizer. See [usage limits](https://cloud.google.com/speech/limits#content).
            &quot;A String&quot;,
          ],
        },
      ],
    },
    &quot;textDetectionConfig&quot;: { # Config for TEXT_DETECTION. # Config for TEXT_DETECTION.
      &quot;languageHints&quot;: [ # Language hint can be specified if the language to be detected is known a priori. It can increase the accuracy of the detection. Language hint must be language code in BCP-47 format. Automatic language detection is performed if no hint is provided.
        &quot;A String&quot;,
      ],
      &quot;model&quot;: &quot;A String&quot;, # Model to use for text detection. Supported values: &quot;builtin/stable&quot; (the default if unset) and &quot;builtin/latest&quot;.
    },
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

</body></html>