<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_v1.html">Cloud Video Intelligence API</a> . <a href="videointelligence_v1.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) and &quot;builtin/latest&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>