:py:mod:`airflow.providers.google.cloud.operators.video_intelligence`
=====================================================================

.. py:module:: airflow.providers.google.cloud.operators.video_intelligence

.. autoapi-nested-parse::

   This module contains Google Cloud Vision operators.



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.operators.video_intelligence.CloudVideoIntelligenceDetectVideoLabelsOperator
   airflow.providers.google.cloud.operators.video_intelligence.CloudVideoIntelligenceDetectVideoExplicitContentOperator
   airflow.providers.google.cloud.operators.video_intelligence.CloudVideoIntelligenceDetectVideoShotsOperator




.. py:class:: CloudVideoIntelligenceDetectVideoLabelsOperator(*, input_uri, input_content = None, output_uri = None, video_context = None, location = None, retry = DEFAULT, timeout = None, gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Performs video annotation, annotating video labels.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudVideoIntelligenceDetectVideoLabelsOperator`.

   :param input_uri: Input video location. Currently, only Google Cloud Storage URIs are supported,
       which must be specified in the following format: ``gs://bucket-id/object-id``.
   :param input_content: The video data bytes.
       If unset, the input video(s) should be specified via ``input_uri``.
       If set, ``input_uri`` should be unset.
   :param output_uri: Optional, location where the output (in JSON format) should be stored. Currently, only
       Google Cloud Storage URIs are supported, which must be specified in the following format:
       ``gs://bucket-id/object-id``.
   :param video_context: Optional, Additional video context and/or feature-specific parameters.
   :param location: Optional, cloud region where annotation should take place. Supported cloud regions:
       us-east1, us-west1, europe-west1, asia-east1. If no region is specified, a region will be determined
       based on video file location.
   :param retry: Retry object used to determine when/if to retry requests.
       If None is specified, requests will not be retried.
   :param timeout: Optional, The amount of time, in seconds, to wait for the request to complete.
       Note that if retry is specified, the timeout applies to each individual attempt.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to ``google_cloud_default``.
   :param impersonation_chain: Optional service account to impersonate using short-term
       credentials, or chained list of accounts required to get the access_token
       of the last account in the list, which will be impersonated in the request.
       If set as a string, the account must grant the originating account
       the Service Account Token Creator IAM role.
       If set as a sequence, the identities from the list must grant
       Service Account Token Creator IAM role to the directly preceding identity, with first
       account from the list granting this role to the originating account (templated).

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['input_uri', 'output_uri', 'gcp_conn_id', 'impersonation_chain']

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudVideoIntelligenceDetectVideoExplicitContentOperator(*, input_uri, output_uri = None, input_content = None, video_context = None, location = None, retry = DEFAULT, timeout = None, gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Performs video annotation, annotating explicit content.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudVideoIntelligenceDetectVideoExplicitContentOperator`

   :param input_uri: Input video location. Currently, only Google Cloud Storage URIs are supported,
       which must be specified in the following format: ``gs://bucket-id/object-id``.
   :param input_content: The video data bytes.
       If unset, the input video(s) should be specified via ``input_uri``.
       If set, ``input_uri`` should be unset.
   :param output_uri: Optional, location where the output (in JSON format) should be stored. Currently, only
       Google Cloud Storage URIs are supported, which must be specified in the following format:
       ``gs://bucket-id/object-id``.
   :param video_context: Optional, Additional video context and/or feature-specific parameters.
   :param location: Optional, cloud region where annotation should take place. Supported cloud regions:
       us-east1, us-west1, europe-west1, asia-east1. If no region is specified, a region will be determined
       based on video file location.
   :param retry: Retry object used to determine when/if to retry requests.
       If None is specified, requests will not be retried.
   :param timeout: Optional, The amount of time, in seconds, to wait for the request to complete.
       Note that if retry is specified, the timeout applies to each individual attempt.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud
       Defaults to ``google_cloud_default``.
   :param impersonation_chain: Optional service account to impersonate using short-term
       credentials, or chained list of accounts required to get the access_token
       of the last account in the list, which will be impersonated in the request.
       If set as a string, the account must grant the originating account
       the Service Account Token Creator IAM role.
       If set as a sequence, the identities from the list must grant
       Service Account Token Creator IAM role to the directly preceding identity, with first
       account from the list granting this role to the originating account (templated).

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['input_uri', 'output_uri', 'gcp_conn_id', 'impersonation_chain']

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



.. py:class:: CloudVideoIntelligenceDetectVideoShotsOperator(*, input_uri, output_uri = None, input_content = None, video_context = None, location = None, retry = DEFAULT, timeout = None, gcp_conn_id = 'google_cloud_default', impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Performs video annotation, annotating video shots.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:CloudVideoIntelligenceDetectVideoShotsOperator`

   :param input_uri: Input video location. Currently, only Google Cloud Storage URIs are supported,
       which must be specified in the following format: ``gs://bucket-id/object-id``.
   :param input_content: The video data bytes.
       If unset, the input video(s) should be specified via ``input_uri``.
       If set, ``input_uri`` should be unset.
   :param output_uri: Optional, location where the output (in JSON format) should be stored. Currently, only
       Google Cloud Storage URIs are supported, which must be specified in the following format:
       ``gs://bucket-id/object-id``.
   :param video_context: Optional, Additional video context and/or feature-specific parameters.
   :param location: Optional, cloud region where annotation should take place. Supported cloud regions:
       us-east1, us-west1, europe-west1, asia-east1. If no region is specified, a region will be determined
       based on video file location.
   :param retry: Retry object used to determine when/if to retry requests.
       If None is specified, requests will not be retried.
   :param timeout: Optional, The amount of time, in seconds, to wait for the request to complete.
       Note that if retry is specified, the timeout applies to each individual attempt.
   :param gcp_conn_id: Optional, The connection ID used to connect to Google Cloud.
       Defaults to ``google_cloud_default``.
   :param impersonation_chain: Optional service account to impersonate using short-term
       credentials, or chained list of accounts required to get the access_token
       of the last account in the list, which will be impersonated in the request.
       If set as a string, the account must grant the originating account
       the Service Account Token Creator IAM role.
       If set as a sequence, the identities from the list must grant
       Service Account Token Creator IAM role to the directly preceding identity, with first
       account from the list granting this role to the originating account (templated).

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['input_uri', 'output_uri', 'gcp_conn_id', 'impersonation_chain']

      

   .. py:method:: execute(self, context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



