 .. Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you 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.



Google Cloud Vision Operators
=============================

Prerequisite Tasks
------------------

.. include:: /operators/_partials/prerequisite_tasks.rst

.. _howto/operator:CloudVisionAddProductToProductSetOperator:

CloudVisionAddProductToProductSetOperator
-----------------------------------------

Creates a new :code:`ReferenceImage` resource.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionAddProductToProductSetOperator`

Using the operator
""""""""""""""""""

We are using the :class:`~google.cloud.vision_v1.types.Product`,
:class:`~google.cloud.vision_v1.types.ProductSet` and :class:`~google.api_core.retry.Retry` objects from
Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_product_set_import]
      :end-before: [END howto_operator_vision_product_set_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_product_import]
      :end-before: [END howto_operator_vision_product_import]


If ``product_set_id`` and ``product_id`` was generated by the API it can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_add_product_to_product_set]
      :end-before: [END howto_operator_vision_add_product_to_product_set]

Otherwise it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_add_product_to_product_set_2]
      :end-before: [END howto_operator_vision_add_product_to_product_set_2]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_add_product_to_product_set_template_fields]
    :end-before: [END vision_add_product_to_product_set_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Add Product To Product Set documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.add_product_to_product_set>`_.


.. _howto/operator:CloudVisionImageAnnotateOperator:

CloudVisionImageAnnotateOperator
--------------------------------

Run image detection and annotation for an image.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionImageAnnotateOperator`

Using the operator
""""""""""""""""""

We are using the :class:`~google.cloud.vision.enums` and :class:`~google.api_core.retry.Retry` objects from
Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :start-after: [START howto_operator_vision_enums_import]
      :end-before: [END howto_operator_vision_enums_import]


.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_annotate_image]
      :end-before: [END howto_operator_vision_annotate_image]

The result can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_annotate_image_result]
      :end-before: [END howto_operator_vision_annotate_image_result]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_annotate_image_template_fields]
    :end-before: [END vision_annotate_image_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Annotate Image documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ImageAnnotatorClient.annotate_image>`_.

.. _howto/operator:CloudVisionCreateProductOperator:

CloudVisionCreateProductOperator
--------------------------------

Creates and returns a new product resource.

Possible errors regarding the :code:`Product` object provided:

- Returns INVALID_ARGUMENT if ``display_name`` is missing or longer than 4096 characters.
- Returns INVALID_ARGUMENT if ``description`` is longer than 4096 characters.
- Returns INVALID_ARGUMENT if ``product_category`` is missing or invalid.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionCreateProductOperator`

Using the operator
""""""""""""""""""

We are using the ``Product`` and :class:`~google.api_core.retry.Retry` objects from Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_product_import]
    :end-before: [END howto_operator_vision_product_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_retry_import]
    :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_product]
    :end-before: [END howto_operator_vision_product]

The ``product_id`` argument can be omitted (it will be generated by the API):

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_create]
    :end-before: [END howto_operator_vision_product_create]

Or it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_create_2]
    :end-before: [END howto_operator_vision_product_create_2]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_product_create_template_fields]
    :end-before: [END vision_product_create_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Product create documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.create_product>`_.

.. _howto/operator:CloudVisionDeleteProductOperator:

CloudVisionDeleteProductOperator
--------------------------------

Permanently deletes a product and its reference images.

Metadata of the product and all its images will be deleted right away, but search queries
against :code:`ProductSets` containing the product may still work until all related
caches are refreshed.

Possible errors:

- Returns NOT_FOUND if the product does not exist.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionDeleteProductOperator`

Using the operator
""""""""""""""""""

If ``product_id`` was generated by the API it can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_delete]
    :end-before: [END howto_operator_vision_product_delete]

Otherwise it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_delete_2]
    :end-before: [END howto_operator_vision_product_delete_2]

Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_product_delete_template_fields]
    :end-before: [END vision_product_delete_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Product delete documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.delete_product>`_.

.. _howto/operator:CloudVisionGetProductOperator:

CloudVisionGetProductOperator
-----------------------------

Gets information associated with a :code:`Product`.

Possible errors:

- Returns NOT_FOUND if the ``Product`` does not exist.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionGetProductOperator`

Using the operator
""""""""""""""""""

If ``product_id`` was generated by the API it can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_get]
    :end-before: [END howto_operator_vision_product_get]

Otherwise it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_get_2]
    :end-before: [END howto_operator_vision_product_get_2]

Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_product_get_template_fields]
    :end-before: [END vision_product_get_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Product get documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.get_product>`_.

.. _howto/operator:CloudVisionCreateProductSetOperator:

CloudVisionProductSetCreateOperator
-----------------------------------

Creates a new :code:`ProductSet` resource.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionCreateProductSetOperator`

Using the operator
""""""""""""""""""

We are using the ``ProductSet`` and :class:`~google.api_core.retry.Retry` objects from Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_product_set_import]
    :end-before: [END howto_operator_vision_product_set_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_retry_import]
    :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_product_set]
    :end-before: [END howto_operator_vision_product_set]

The ``product_set_id`` argument can be omitted (it will be generated by the API):

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_set_create]
    :end-before: [END howto_operator_vision_product_set_create]

Or it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_set_create_2]
    :end-before: [END howto_operator_vision_product_set_create_2]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_productset_create_template_fields]
    :end-before: [END vision_productset_create_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision ProductSet create documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.create_product_set>`_.

.. _howto/operator:CloudVisionDeleteProductSetOperator:

CloudVisionDeleteProductSetOperator
-----------------------------------

Permanently deletes a :code:`ProductSet`. :code:`Products` and :code:`ReferenceImages` in
the :code:`ProductSet` are not deleted. The actual image files are not deleted from
Google Cloud Storage.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionDeleteProductSetOperator`

Using the operator
""""""""""""""""""

If ``product_set_id`` was generated by the API it can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_set_delete]
    :end-before: [END howto_operator_vision_product_set_delete]

Otherwise it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_set_delete_2]
    :end-before: [END howto_operator_vision_product_set_delete_2]

Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_productset_delete_template_fields]
    :end-before: [END vision_productset_delete_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision ProductSet delete documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.delete_product_set>`_.

.. _howto/operator:CloudVisionGetProductSetOperator:

CloudVisionGetProductSetOperator
--------------------------------

Gets information associated with a :code:`ProductSet`.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionGetProductSetOperator`

Using the operator
""""""""""""""""""

If ``product_set_id`` was generated by the API it can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_set_get]
    :end-before: [END howto_operator_vision_product_set_get]

Otherwise it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_set_get_2]
    :end-before: [END howto_operator_vision_product_set_get_2]

Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_productset_get_template_fields]
    :end-before: [END vision_productset_get_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision ProductSet get documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.get_product_set>`_.

.. _howto/operator:CloudVisionUpdateProductSetOperator:

CloudVisionUpdateProductSetOperator
-----------------------------------

Makes changes to a :code:`ProductSet` resource. Only :code:`display_name` can be updated
currently.

.. note:: To locate the ``ProductSet`` resource, its ``name`` in the form
  ``projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`` is necessary.

You can provide the ``name`` directly as an attribute of the ``product_set`` object.
However, you can leave it blank and provide ``location`` and ``product_set_id`` instead (and
optionally ``project_id`` - if not present, the connection default will be used) and the
``name`` will be created by the operator itself.

This mechanism exists for your convenience, to allow leaving the ``project_id`` empty and
having Airflow use the connection default ``project_id``.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionUpdateProductSetOperator`

Using the operator
""""""""""""""""""

We are using the ``ProductSet`` object from the Google Cloud Vision library:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_product_set_import]
    :end-before: [END howto_operator_vision_product_set_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_product_set]
    :end-before: [END howto_operator_vision_product_set]

Initialization of the task:

If ``product_set_id`` was generated by the API it can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_set_update]
    :end-before: [END howto_operator_vision_product_set_update]

Otherwise it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_set_update_2]
    :end-before: [END howto_operator_vision_product_set_update_2]

Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_productset_update_template_fields]
    :end-before: [END vision_productset_update_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision ProductSet update documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.update_product_set>`_.

.. _howto/operator:CloudVisionUpdateProductOperator:

CloudVisionUpdateProductOperator
--------------------------------

Makes changes to a :code:`Product` resource. Only the :code:`display_name`,
:code:`description`, and :code:`labels` fields can be updated right now.
If labels are updated, the change will not be reflected in queries until the next index
time.

.. note:: To locate the ``Product`` resource, its ``name`` in the form
  ``projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`` is necessary.

You can provide the ``name`` directly as an attribute of the ``product`` object. However, you
can leave it blank and provide ``location`` and ``product_id`` instead (and optionally
``project_id`` - if not present, the connection default will be used) and the ``name`` will
be created by the operator itself.

This mechanism exists for your convenience, to allow leaving the ``project_id`` empty and
having Airflow use the connection default ``project_id``.

Possible errors:

- Returns NOT_FOUND if the ``Product`` does not exist.
- Returns INVALID_ARGUMENT if ``display_name`` is present in ``update_mask`` but is missing
  from the request or longer than 4096 characters.
- Returns INVALID_ARGUMENT if ``description`` is present in ``update_mask`` but is longer than
  4096 characters.
- Returns INVALID_ARGUMENT if ``product_category`` is present in ``update_mask``.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionUpdateProductOperator`

Using the operator
""""""""""""""""""

We are using the ``Product`` object from the Google Cloud Vision library:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_product_import]
    :end-before: [END howto_operator_vision_product_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :start-after: [START howto_operator_vision_product]
    :end-before: [END howto_operator_vision_product]

If ``product_id`` was generated by the API it can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_update]
    :end-before: [END howto_operator_vision_product_update]

Otherwise it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_vision_product_update_2]
    :end-before: [END howto_operator_vision_product_update_2]

Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_product_update_template_fields]
    :end-before: [END vision_product_update_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Product update documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.update_product>`_.

.. _howto/operator:CloudVisionCreateReferenceImageOperator:

CloudVisionCreateReferenceImageOperator
---------------------------------------

Creates a new :code:`ReferenceImage` resource.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionCreateReferenceImageOperator`

Using the operator
""""""""""""""""""

We are using the :class:`~google.cloud.vision_v1.types.ReferenceImage` and :class:`~google.api_core.retry.Retry` objects from Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_reference_image_import]
      :end-before: [END howto_operator_vision_reference_image_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_reference_image]
      :end-before: [END howto_operator_vision_reference_image]

The ``product_set_id`` argument can be omitted (it will be generated by the API):

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_reference_image_create]
      :end-before: [END howto_operator_vision_reference_image_create]

Or it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_reference_image_create_2]
      :end-before: [END howto_operator_vision_reference_image_create_2]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_reference_image_create_template_fields]
    :end-before: [END vision_reference_image_create_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision ReferenceImage delete documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.create_reference_image>`_.

.. _howto/operator:CloudVisionDeleteReferenceImageOperator:

CloudVisionDeleteReferenceImageOperator
---------------------------------------

Deletes a :code:`ReferenceImage` resource.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionDeleteReferenceImageOperator`

Using the operator
""""""""""""""""""

We are using the :class:`~google.cloud.vision_v1.types.ReferenceImage` and :class:`~google.api_core.retry.Retry` objects from Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_reference_image_import]
      :end-before: [END howto_operator_vision_reference_image_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_reference_image]
      :end-before: [END howto_operator_vision_reference_image]

The ``product_set_id`` argument can be omitted (it will be generated by the API):

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_reference_image_delete]
      :end-before: [END howto_operator_vision_reference_image_delete]

Or it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_reference_image_delete_2]
      :end-before: [END howto_operator_vision_reference_image_delete_2]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_reference_image_create_template_fields]
    :end-before: [END vision_reference_image_create_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision ReferenceImage create documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.delete_reference_image>`_.

.. _howto/operator:CloudVisionRemoveProductFromProductSetOperator:

CloudVisionRemoveProductFromProductSetOperator
----------------------------------------------

Creates a new :code:`ReferenceImage` resource.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionRemoveProductFromProductSetOperator`

Using the operator
""""""""""""""""""

We are using the :class:`~google.cloud.vision_v1.types.Product`,
:class:`~google.cloud.vision_v1.types.ProductSet` and :class:`~google.api_core.retry.Retry` objects from
Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_product_set_import]
      :end-before: [END howto_operator_vision_product_set_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :start-after: [START howto_operator_vision_product_import]
      :end-before: [END howto_operator_vision_product_import]


If ``product_set_id`` and ``product_id`` was generated by the API it can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_autogenerated.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_remove_product_from_product_set]
      :end-before: [END howto_operator_vision_remove_product_from_product_set]

Otherwise it can be specified explicitly:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_explicit.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_remove_product_from_product_set_2]
      :end-before: [END howto_operator_vision_remove_product_from_product_set_2]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_remove_product_from_product_set_template_fields]
    :end-before: [END vision_remove_product_from_product_set_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Remove Product From Product Set documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ProductSearchClient.remove_product_from_product_set>`_.


.. _howto/operator:CloudVisionDetectTextOperator:

CloudVisionDetectTextOperator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Run text detection for an image.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionDetectTextOperator`


Using the operator
""""""""""""""""""

We are using the :class:`~google.api_core.retry.Retry` objects from
Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_detect_text]
      :end-before: [END howto_operator_vision_detect_text]

The result can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_detect_text_result]
      :end-before: [END howto_operator_vision_detect_text_result]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_detect_text_set_template_fields]
    :end-before: [END vision_detect_text_set_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Text Detection documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ImageAnnotatorClient.text_detection>`_.

.. _howto/operator:CloudVisionTextDetectOperator:

CloudVisionTextDetectOperator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Run document text detection for an image.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionTextDetectOperator`


Using the operator
""""""""""""""""""

We are using the :class:`~google.api_core.retry.Retry` objects from
Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_document_detect_text]
      :end-before: [END howto_operator_vision_document_detect_text]

The result can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_document_detect_text_result]
      :end-before: [END howto_operator_vision_document_detect_text_result]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_document_detect_text_set_template_fields]
    :end-before: [END vision_document_detect_text_set_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Document Text Detection documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ImageAnnotatorClient.document_text_detection>`_.

.. _howto/operator:CloudVisionDetectImageLabelsOperator:

CloudVisionDetectImageLabelsOperator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Run image label detection for an image.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionDetectImageLabelsOperator`



Using the operator
""""""""""""""""""

We are using the :class:`~google.api_core.retry.Retry` objects from
Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_detect_labels]
      :end-before: [END howto_operator_vision_detect_labels]

The result can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_detect_labels_result]
      :end-before: [END howto_operator_vision_detect_labels_result]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_detect_labels_template_fields]
    :end-before: [END vision_detect_labels_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Label Detection documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ImageAnnotatorClient.label_detection>`_.

.. _howto/operator:CloudVisionDetectImageSafeSearchOperator:

CloudVisionDetectImageSafeSearchOperator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Run image label detection for an image.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.vision.CloudVisionDetectImageSafeSearchOperator`


Using the operator
""""""""""""""""""

We are using the :class:`~google.api_core.retry.Retry` objects from
Google libraries:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :start-after: [START howto_operator_vision_retry_import]
      :end-before: [END howto_operator_vision_retry_import]

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_detect_safe_search]
      :end-before: [END howto_operator_vision_detect_safe_search]

The result can be extracted from XCOM:

.. exampleinclude:: /../../google/tests/system/google/cloud/vision/example_vision_annotate_image.py
      :language: python
      :dedent: 4
      :start-after: [START howto_operator_vision_detect_safe_search_result]
      :end-before: [END howto_operator_vision_detect_safe_search_result]


Templating
""""""""""

.. literalinclude:: /../../google/src/airflow/providers/google/cloud/operators/vision.py
    :language: python
    :dedent: 4
    :start-after: [START vision_detect_safe_search_template_fields]
    :end-before: [END vision_detect_safe_search_template_fields]

More information
""""""""""""""""

See `Google Cloud Vision Safe Search Detection documentation
<https://googleapis.github.io/google-cloud-python/latest/vision/gapic/v1/api.html#google.cloud.vision_v1.ImageAnnotatorClient.safe_search_detection>`_.

Reference
---------

For further information, look at:

* `Client Library Documentation <https://googleapis.github.io/google-cloud-python/latest/vision/index.html>`__
* `Product Documentation <https://cloud.google.com/vision/docs/>`__
