<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="vision_v1p2beta1.html">Cloud Vision API</a> . <a href="vision_v1p2beta1.projects.html">projects</a> . <a href="vision_v1p2beta1.projects.images.html">images</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#annotate">annotate(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Run image detection and annotation for a batch of images.</p>
<p class="toc_element">
  <code><a href="#asyncBatchAnnotate">asyncBatchAnnotate(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Run asynchronous image detection and annotation for a list of images.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="annotate">annotate(parent, body=None, x__xgafv=None)</code>
  <pre>Run image detection and annotation for a batch of images.

Args:
  parent: string, Optional. Target project and location to make a call.

Format: `projects/{project-id}/locations/{location-id}`.

If no parent is specified, a region will be chosen automatically.

Supported location-ids:
    `us`: USA country only,
    `asia`: East asia areas, like Japan, Taiwan,
    `eu`: The European Union.

Example: `projects/project-A/locations/eu`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Multiple image annotation requests are batched into a single service call.
    &quot;requests&quot;: [ # Required. Individual image annotation requests for this batch.
      { # Request for performing Google Cloud Vision API tasks over a user-provided
          # image, with user-requested features, and with context information.
        &quot;image&quot;: { # Client image to perform Google Cloud Vision API tasks over. # The image to be processed.
          &quot;content&quot;: &quot;A String&quot;, # Image content, represented as a stream of bytes.
              # Note: As with all `bytes` fields, protobuffers use a pure binary
              # representation, whereas JSON representations use base64.
          &quot;source&quot;: { # External image source (Google Cloud Storage or web URL image location). # Google Cloud Storage image location, or publicly-accessible image
              # URL. If both `content` and `source` are provided for an image, `content`
              # takes precedence and is used to perform the image annotation request.
            &quot;gcsImageUri&quot;: &quot;A String&quot;, # **Use `image_uri` instead.**
                #
                # The Google Cloud Storage  URI of the form
                # `gs://bucket_name/object_name`. Object versioning is not supported. See
                # [Google Cloud Storage Request
                # URIs](https://cloud.google.com/storage/docs/reference-uris) for more info.
            &quot;imageUri&quot;: &quot;A String&quot;, # The URI of the source image. Can be either:
                #
                # 1. A Google Cloud Storage URI of the form
                #    `gs://bucket_name/object_name`. Object versioning is not supported. See
                #    [Google Cloud Storage Request
                #    URIs](https://cloud.google.com/storage/docs/reference-uris) for more
                #    info.
                #
                # 2. A publicly-accessible image HTTP/HTTPS URL. When fetching images from
                #    HTTP/HTTPS URLs, Google cannot guarantee that the request will be
                #    completed. Your request may fail if the specified host denies the
                #    request (e.g. due to request throttling or DOS prevention), or if Google
                #    throttles requests to the site for abuse prevention. You should not
                #    depend on externally-hosted images for production applications.
                #
                # When both `gcs_image_uri` and `image_uri` are specified, `image_uri` takes
                # precedence.
          },
        },
        &quot;features&quot;: [ # Requested features.
          { # The type of Google Cloud Vision API detection to perform, and the maximum
              # number of results to return for that type. Multiple `Feature` objects can
              # be specified in the `features` list.
            &quot;type&quot;: &quot;A String&quot;, # The feature type.
            &quot;maxResults&quot;: 42, # Maximum number of results of this type. Does not apply to
                # `TEXT_DETECTION`, `DOCUMENT_TEXT_DETECTION`, or `CROP_HINTS`.
            &quot;model&quot;: &quot;A String&quot;, # Model to use for the feature.
                # Supported values: &quot;builtin/stable&quot; (the default if unset) and
                # &quot;builtin/latest&quot;.
          },
        ],
        &quot;imageContext&quot;: { # Image context and/or feature-specific parameters. # Additional context that may accompany the image.
          &quot;cropHintsParams&quot;: { # Parameters for crop hints annotation request. # Parameters for crop hints annotation request.
            &quot;aspectRatios&quot;: [ # Aspect ratios in floats, representing the ratio of the width to the height
                # of the image. For example, if the desired aspect ratio is 4/3, the
                # corresponding float value should be 1.33333.  If not specified, the
                # best possible crop is returned. The number of provided aspect ratios is
                # limited to a maximum of 16; any aspect ratios provided after the 16th are
                # ignored.
              3.14,
            ],
          },
          &quot;productSearchParams&quot;: { # Parameters for a product search request. # Parameters for product search.
            &quot;productCategories&quot;: [ # The list of product categories to search in. Currently, we only consider
                # the first category, and either &quot;homegoods-v2&quot;, &quot;apparel-v2&quot;, &quot;toys-v2&quot;,
                # &quot;packagedgoods-v1&quot;, or &quot;general-v1&quot; should be specified. The legacy
                # categories &quot;homegoods&quot;, &quot;apparel&quot;, and &quot;toys&quot; are still supported but will
                # be deprecated. For new products, please use &quot;homegoods-v2&quot;, &quot;apparel-v2&quot;,
                # or &quot;toys-v2&quot; for better product search accuracy. It is recommended to
                # migrate existing products to these categories as well.
              &quot;A String&quot;,
            ],
            &quot;filter&quot;: &quot;A String&quot;, # The filtering expression. This can be used to restrict search results based
                # on Product labels. We currently support an AND of OR of key-value
                # expressions, where each expression within an OR must have the same key. An
                # &#x27;=&#x27; should be used to connect the key and value.
                #
                # For example, &quot;(color = red OR color = blue) AND brand = Google&quot; is
                # acceptable, but &quot;(color = red OR brand = Google)&quot; is not acceptable.
                # &quot;color: red&quot; is not acceptable because it uses a &#x27;:&#x27; instead of an &#x27;=&#x27;.
            &quot;productSet&quot;: &quot;A String&quot;, # The resource name of a ProductSet to be searched for similar images.
                #
                # Format is:
                # `projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.
            &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # The bounding polygon around the area of interest in the image.
                # If it is not specified, system discretion will be applied.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
          },
          &quot;languageHints&quot;: [ # List of languages to use for TEXT_DETECTION. In most cases, an empty value
              # yields the best results since it enables automatic language detection. For
              # languages based on the Latin alphabet, setting `language_hints` is not
              # needed. In rare cases, when the language of the text in the image is known,
              # setting a hint will help get better results (although it will be a
              # significant hindrance if the hint is wrong). Text detection returns an
              # error if one or more of the specified languages is not one of the
              # [supported languages](https://cloud.google.com/vision/docs/languages).
            &quot;A String&quot;,
          ],
          &quot;webDetectionParams&quot;: { # Parameters for web detection request. # Parameters for web detection.
            &quot;includeGeoResults&quot;: True or False, # Whether to include results derived from the geo information in the image.
          },
          &quot;latLongRect&quot;: { # Rectangle determined by min and max `LatLng` pairs. # Not used.
            &quot;maxLatLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # Max lat/long pair.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                # standard&lt;/a&gt;. Values must be within normalized ranges.
              &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
            &quot;minLatLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # Min lat/long pair.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                # standard&lt;/a&gt;. Values must be within normalized ranges.
              &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
        },
      },
    ],
    &quot;parent&quot;: &quot;A String&quot;, # Optional. Target project and location to make a call.
        # 
        # Format: `projects/{project-id}/locations/{location-id}`.
        # 
        # If no parent is specified, a region will be chosen automatically.
        # 
        # Supported location-ids:
        #     `us`: USA country only,
        #     `asia`: East asia areas, like Japan, Taiwan,
        #     `eu`: The European Union.
        # 
        # Example: `projects/project-A/locations/eu`.
  }

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

Returns:
  An object of the form:

    { # Response to a batch image annotation request.
    &quot;responses&quot;: [ # Individual responses to image annotation requests within the batch.
      { # Response to an image annotation request.
        &quot;localizedObjectAnnotations&quot;: [ # If present, localized object detection has completed successfully.
            # This will be sorted descending by confidence score.
          { # Set of detected objects with bounding boxes.
            &quot;name&quot;: &quot;A String&quot;, # Object name, expressed in its `language_code` language.
            &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # Image region to which this object belongs. This must be populated.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
            &quot;score&quot;: 3.14, # Score of the result. Range [0, 1].
            &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more
                # information, see
                # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
            &quot;mid&quot;: &quot;A String&quot;, # Object ID that should align with EntityAnnotation mid.
          },
        ],
        &quot;productSearchResults&quot;: { # Results for a product search request. # If present, product search has completed successfully.
          &quot;results&quot;: [ # List of results, one for each product match.
            { # Information about a product.
              &quot;image&quot;: &quot;A String&quot;, # The resource name of the image from the product that is the closest match
                  # to the query.
              &quot;product&quot;: { # A Product contains ReferenceImages. # The Product.
                &quot;productLabels&quot;: [ # Key-value pairs that can be attached to a product. At query time,
                    # constraints can be specified based on the product_labels.
                    #
                    # Note that integer values can be provided as strings, e.g. &quot;1199&quot;. Only
                    # strings with integer values can match a range-based restriction which is
                    # to be supported soon.
                    #
                    # Multiple values can be assigned to the same key. One product may have up to
                    # 500 product_labels.
                    #
                    # Notice that the total number of distinct product_labels over all products
                    # in one ProductSet cannot exceed 1M, otherwise the product search pipeline
                    # will refuse to work for that ProductSet.
                  { # A product label represented as a key-value pair.
                    &quot;value&quot;: &quot;A String&quot;, # The value of the label attached to the product. Cannot be empty and
                        # cannot exceed 128 bytes.
                    &quot;key&quot;: &quot;A String&quot;, # The key of the label attached to the product. Cannot be empty and cannot
                        # exceed 128 bytes.
                  },
                ],
                &quot;name&quot;: &quot;A String&quot;, # The resource name of the product.
                    #
                    # Format is:
                    # `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
                    #
                    # This field is ignored when creating a product.
                &quot;displayName&quot;: &quot;A String&quot;, # The user-provided name for this Product. Must not be empty. Must be at most
                    # 4096 characters long.
                &quot;description&quot;: &quot;A String&quot;, # User-provided metadata to be stored with this product. Must be at most 4096
                    # characters long.
                &quot;productCategory&quot;: &quot;A String&quot;, # Immutable. The category for the product identified by the reference image. This should
                    # be either &quot;homegoods-v2&quot;, &quot;apparel-v2&quot;, or &quot;toys-v2&quot;. The legacy categories
                    # &quot;homegoods&quot;, &quot;apparel&quot;, and &quot;toys&quot; are still supported, but these should
                    # not be used for new products.
              },
              &quot;score&quot;: 3.14, # A confidence level on the match, ranging from 0 (no confidence) to
                  # 1 (full confidence).
            },
          ],
          &quot;indexTime&quot;: &quot;A String&quot;, # Timestamp of the index which provided these results. Products added to the
              # product set and products removed from the product set after this time are
              # not reflected in the current results.
          &quot;productGroupedResults&quot;: [ # List of results grouped by products detected in the query image. Each entry
              # corresponds to one bounding polygon in the query image, and contains the
              # matching products specific to that region. There may be duplicate product
              # matches in the union of all the per-product results.
            { # Information about the products similar to a single product in a query
                # image.
              &quot;objectAnnotations&quot;: [ # List of generic predictions for the object in the bounding box.
                { # Prediction for what the object in the bounding box is.
                  &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more
                      # information, see
                      # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                  &quot;mid&quot;: &quot;A String&quot;, # Object ID that should align with EntityAnnotation mid.
                  &quot;name&quot;: &quot;A String&quot;, # Object name, expressed in its `language_code` language.
                  &quot;score&quot;: 3.14, # Score of the result. Range [0, 1].
                },
              ],
              &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # The bounding polygon around the product detected in the query image.
                &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                  { # A vertex represents a 2D point in the image.
                      # NOTE: the normalized vertex coordinates are relative to the original image
                      # and range from 0 to 1.
                    &quot;x&quot;: 3.14, # X coordinate.
                    &quot;y&quot;: 3.14, # Y coordinate.
                  },
                ],
                &quot;vertices&quot;: [ # The bounding polygon vertices.
                  { # A vertex represents a 2D point in the image.
                      # NOTE: the vertex coordinates are in the same scale as the original image.
                    &quot;y&quot;: 42, # Y coordinate.
                    &quot;x&quot;: 42, # X coordinate.
                  },
                ],
              },
              &quot;results&quot;: [ # List of results, one for each product match.
                { # Information about a product.
                  &quot;image&quot;: &quot;A String&quot;, # The resource name of the image from the product that is the closest match
                      # to the query.
                  &quot;product&quot;: { # A Product contains ReferenceImages. # The Product.
                    &quot;productLabels&quot;: [ # Key-value pairs that can be attached to a product. At query time,
                        # constraints can be specified based on the product_labels.
                        #
                        # Note that integer values can be provided as strings, e.g. &quot;1199&quot;. Only
                        # strings with integer values can match a range-based restriction which is
                        # to be supported soon.
                        #
                        # Multiple values can be assigned to the same key. One product may have up to
                        # 500 product_labels.
                        #
                        # Notice that the total number of distinct product_labels over all products
                        # in one ProductSet cannot exceed 1M, otherwise the product search pipeline
                        # will refuse to work for that ProductSet.
                      { # A product label represented as a key-value pair.
                        &quot;value&quot;: &quot;A String&quot;, # The value of the label attached to the product. Cannot be empty and
                            # cannot exceed 128 bytes.
                        &quot;key&quot;: &quot;A String&quot;, # The key of the label attached to the product. Cannot be empty and cannot
                            # exceed 128 bytes.
                      },
                    ],
                    &quot;name&quot;: &quot;A String&quot;, # The resource name of the product.
                        #
                        # Format is:
                        # `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
                        #
                        # This field is ignored when creating a product.
                    &quot;displayName&quot;: &quot;A String&quot;, # The user-provided name for this Product. Must not be empty. Must be at most
                        # 4096 characters long.
                    &quot;description&quot;: &quot;A String&quot;, # User-provided metadata to be stored with this product. Must be at most 4096
                        # characters long.
                    &quot;productCategory&quot;: &quot;A String&quot;, # Immutable. The category for the product identified by the reference image. This should
                        # be either &quot;homegoods-v2&quot;, &quot;apparel-v2&quot;, or &quot;toys-v2&quot;. The legacy categories
                        # &quot;homegoods&quot;, &quot;apparel&quot;, and &quot;toys&quot; are still supported, but these should
                        # not be used for new products.
                  },
                  &quot;score&quot;: 3.14, # A confidence level on the match, ranging from 0 (no confidence) to
                      # 1 (full confidence).
                },
              ],
            },
          ],
        },
        &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # If set, represents the error message for the operation.
            # Note that filled-in image annotations are guaranteed to be
            # correct, even when `error` is set.
            # 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).
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &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;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;fullTextAnnotation&quot;: { # TextAnnotation contains a structured representation of OCR extracted text. # If present, text (OCR) detection or document (OCR) text detection has
            # completed successfully.
            # This annotation provides the structural hierarchy for the OCR detected
            # text.
            # The hierarchy of an OCR extracted text structure is like this:
            #     TextAnnotation -&gt; Page -&gt; Block -&gt; Paragraph -&gt; Word -&gt; Symbol
            # Each structural component, starting from Page, may further have their own
            # properties. Properties describe detected languages, breaks etc.. Please refer
            # to the TextAnnotation.TextProperty message definition below for more
            # detail.
          &quot;text&quot;: &quot;A String&quot;, # UTF-8 text detected on the pages.
          &quot;pages&quot;: [ # List of pages detected by OCR.
            { # Detected page from OCR.
              &quot;width&quot;: 42, # Page width. For PDFs the unit is points. For images (including
                  # TIFFs) the unit is pixels.
              &quot;blocks&quot;: [ # List of blocks of text, images etc on this page.
                { # Logical element on the page.
                  &quot;property&quot;: { # Additional information detected on the structural component. # Additional information detected for the block.
                    &quot;detectedLanguages&quot;: [ # A list of detected languages together with confidence.
                      { # Detected language for a structural component.
                        &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more
                            # information, see
                            # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                        &quot;confidence&quot;: 3.14, # Confidence of detected language. Range [0, 1].
                      },
                    ],
                    &quot;detectedBreak&quot;: { # Detected start or end of a structural component. # Detected start or end of a text segment.
                      &quot;type&quot;: &quot;A String&quot;, # Detected break type.
                      &quot;isPrefix&quot;: True or False, # True if break prepends the element.
                    },
                  },
                  &quot;blockType&quot;: &quot;A String&quot;, # Detected block type (text, image etc) for this block.
                  &quot;boundingBox&quot;: { # A bounding polygon for the detected image annotation. # The bounding box for the block.
                      # The vertices are in the order of top-left, top-right, bottom-right,
                      # bottom-left. When a rotation of the bounding box is detected the rotation
                      # is represented as around the top-left corner as defined when the text is
                      # read in the &#x27;natural&#x27; orientation.
                      # For example:
                      #
                      # * when the text is horizontal it might look like:
                      #
                      #         0----1
                      #         |    |
                      #         3----2
                      #
                      # * when it&#x27;s rotated 180 degrees around the top-left corner it becomes:
                      #
                      #         2----3
                      #         |    |
                      #         1----0
                      #
                      #   and the vertex order will still be (0, 1, 2, 3).
                    &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                      { # A vertex represents a 2D point in the image.
                          # NOTE: the normalized vertex coordinates are relative to the original image
                          # and range from 0 to 1.
                        &quot;x&quot;: 3.14, # X coordinate.
                        &quot;y&quot;: 3.14, # Y coordinate.
                      },
                    ],
                    &quot;vertices&quot;: [ # The bounding polygon vertices.
                      { # A vertex represents a 2D point in the image.
                          # NOTE: the vertex coordinates are in the same scale as the original image.
                        &quot;y&quot;: 42, # Y coordinate.
                        &quot;x&quot;: 42, # X coordinate.
                      },
                    ],
                  },
                  &quot;confidence&quot;: 3.14, # Confidence of the OCR results on the block. Range [0, 1].
                  &quot;paragraphs&quot;: [ # List of paragraphs in this block (if this blocks is of type text).
                    { # Structural unit of text representing a number of words in certain order.
                      &quot;boundingBox&quot;: { # A bounding polygon for the detected image annotation. # The bounding box for the paragraph.
                          # The vertices are in the order of top-left, top-right, bottom-right,
                          # bottom-left. When a rotation of the bounding box is detected the rotation
                          # is represented as around the top-left corner as defined when the text is
                          # read in the &#x27;natural&#x27; orientation.
                          # For example:
                          #   * when the text is horizontal it might look like:
                          #      0----1
                          #      |    |
                          #      3----2
                          #   * when it&#x27;s rotated 180 degrees around the top-left corner it becomes:
                          #      2----3
                          #      |    |
                          #      1----0
                          #   and the vertex order will still be (0, 1, 2, 3).
                        &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                          { # A vertex represents a 2D point in the image.
                              # NOTE: the normalized vertex coordinates are relative to the original image
                              # and range from 0 to 1.
                            &quot;x&quot;: 3.14, # X coordinate.
                            &quot;y&quot;: 3.14, # Y coordinate.
                          },
                        ],
                        &quot;vertices&quot;: [ # The bounding polygon vertices.
                          { # A vertex represents a 2D point in the image.
                              # NOTE: the vertex coordinates are in the same scale as the original image.
                            &quot;y&quot;: 42, # Y coordinate.
                            &quot;x&quot;: 42, # X coordinate.
                          },
                        ],
                      },
                      &quot;confidence&quot;: 3.14, # Confidence of the OCR results for the paragraph. Range [0, 1].
                      &quot;words&quot;: [ # List of all words in this paragraph.
                        { # A word representation.
                          &quot;boundingBox&quot;: { # A bounding polygon for the detected image annotation. # The bounding box for the word.
                              # The vertices are in the order of top-left, top-right, bottom-right,
                              # bottom-left. When a rotation of the bounding box is detected the rotation
                              # is represented as around the top-left corner as defined when the text is
                              # read in the &#x27;natural&#x27; orientation.
                              # For example:
                              #   * when the text is horizontal it might look like:
                              #      0----1
                              #      |    |
                              #      3----2
                              #   * when it&#x27;s rotated 180 degrees around the top-left corner it becomes:
                              #      2----3
                              #      |    |
                              #      1----0
                              #   and the vertex order will still be (0, 1, 2, 3).
                            &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                              { # A vertex represents a 2D point in the image.
                                  # NOTE: the normalized vertex coordinates are relative to the original image
                                  # and range from 0 to 1.
                                &quot;x&quot;: 3.14, # X coordinate.
                                &quot;y&quot;: 3.14, # Y coordinate.
                              },
                            ],
                            &quot;vertices&quot;: [ # The bounding polygon vertices.
                              { # A vertex represents a 2D point in the image.
                                  # NOTE: the vertex coordinates are in the same scale as the original image.
                                &quot;y&quot;: 42, # Y coordinate.
                                &quot;x&quot;: 42, # X coordinate.
                              },
                            ],
                          },
                          &quot;confidence&quot;: 3.14, # Confidence of the OCR results for the word. Range [0, 1].
                          &quot;symbols&quot;: [ # List of symbols in the word.
                              # The order of the symbols follows the natural reading order.
                            { # A single symbol representation.
                              &quot;text&quot;: &quot;A String&quot;, # The actual UTF-8 representation of the symbol.
                              &quot;property&quot;: { # Additional information detected on the structural component. # Additional information detected for the symbol.
                                &quot;detectedLanguages&quot;: [ # A list of detected languages together with confidence.
                                  { # Detected language for a structural component.
                                    &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more
                                        # information, see
                                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                                    &quot;confidence&quot;: 3.14, # Confidence of detected language. Range [0, 1].
                                  },
                                ],
                                &quot;detectedBreak&quot;: { # Detected start or end of a structural component. # Detected start or end of a text segment.
                                  &quot;type&quot;: &quot;A String&quot;, # Detected break type.
                                  &quot;isPrefix&quot;: True or False, # True if break prepends the element.
                                },
                              },
                              &quot;boundingBox&quot;: { # A bounding polygon for the detected image annotation. # The bounding box for the symbol.
                                  # The vertices are in the order of top-left, top-right, bottom-right,
                                  # bottom-left. When a rotation of the bounding box is detected the rotation
                                  # is represented as around the top-left corner as defined when the text is
                                  # read in the &#x27;natural&#x27; orientation.
                                  # For example:
                                  #   * when the text is horizontal it might look like:
                                  #      0----1
                                  #      |    |
                                  #      3----2
                                  #   * when it&#x27;s rotated 180 degrees around the top-left corner it becomes:
                                  #      2----3
                                  #      |    |
                                  #      1----0
                                  #   and the vertex order will still be (0, 1, 2, 3).
                                &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                                  { # A vertex represents a 2D point in the image.
                                      # NOTE: the normalized vertex coordinates are relative to the original image
                                      # and range from 0 to 1.
                                    &quot;x&quot;: 3.14, # X coordinate.
                                    &quot;y&quot;: 3.14, # Y coordinate.
                                  },
                                ],
                                &quot;vertices&quot;: [ # The bounding polygon vertices.
                                  { # A vertex represents a 2D point in the image.
                                      # NOTE: the vertex coordinates are in the same scale as the original image.
                                    &quot;y&quot;: 42, # Y coordinate.
                                    &quot;x&quot;: 42, # X coordinate.
                                  },
                                ],
                              },
                              &quot;confidence&quot;: 3.14, # Confidence of the OCR results for the symbol. Range [0, 1].
                            },
                          ],
                          &quot;property&quot;: { # Additional information detected on the structural component. # Additional information detected for the word.
                            &quot;detectedLanguages&quot;: [ # A list of detected languages together with confidence.
                              { # Detected language for a structural component.
                                &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more
                                    # information, see
                                    # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                                &quot;confidence&quot;: 3.14, # Confidence of detected language. Range [0, 1].
                              },
                            ],
                            &quot;detectedBreak&quot;: { # Detected start or end of a structural component. # Detected start or end of a text segment.
                              &quot;type&quot;: &quot;A String&quot;, # Detected break type.
                              &quot;isPrefix&quot;: True or False, # True if break prepends the element.
                            },
                          },
                        },
                      ],
                      &quot;property&quot;: { # Additional information detected on the structural component. # Additional information detected for the paragraph.
                        &quot;detectedLanguages&quot;: [ # A list of detected languages together with confidence.
                          { # Detected language for a structural component.
                            &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more
                                # information, see
                                # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                            &quot;confidence&quot;: 3.14, # Confidence of detected language. Range [0, 1].
                          },
                        ],
                        &quot;detectedBreak&quot;: { # Detected start or end of a structural component. # Detected start or end of a text segment.
                          &quot;type&quot;: &quot;A String&quot;, # Detected break type.
                          &quot;isPrefix&quot;: True or False, # True if break prepends the element.
                        },
                      },
                    },
                  ],
                },
              ],
              &quot;property&quot;: { # Additional information detected on the structural component. # Additional information detected on the page.
                &quot;detectedLanguages&quot;: [ # A list of detected languages together with confidence.
                  { # Detected language for a structural component.
                    &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    &quot;confidence&quot;: 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
                &quot;detectedBreak&quot;: { # Detected start or end of a structural component. # Detected start or end of a text segment.
                  &quot;type&quot;: &quot;A String&quot;, # Detected break type.
                  &quot;isPrefix&quot;: True or False, # True if break prepends the element.
                },
              },
              &quot;confidence&quot;: 3.14, # Confidence of the OCR results on the page. Range [0, 1].
              &quot;height&quot;: 42, # Page height. For PDFs the unit is points. For images (including
                  # TIFFs) the unit is pixels.
            },
          ],
        },
        &quot;textAnnotations&quot;: [ # If present, text (OCR) detection has completed successfully.
          { # Set of detected entity features.
            &quot;locale&quot;: &quot;A String&quot;, # The language code for the locale in which the entity textual
                # `description` is expressed.
            &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # Image region to which this entity belongs. Not produced
                # for `LABEL_DETECTION` features.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
            &quot;description&quot;: &quot;A String&quot;, # Entity textual description, expressed in its `locale` language.
            &quot;topicality&quot;: 3.14, # The relevancy of the ICA (Image Content Annotation) label to the
                # image. For example, the relevancy of &quot;tower&quot; is likely higher to an image
                # containing the detected &quot;Eiffel Tower&quot; than to an image containing a
                # detected distant towering building, even though the confidence that
                # there is a tower in each image may be the same. Range [0, 1].
            &quot;properties&quot;: [ # Some entities may have optional user-supplied `Property` (name/value)
                # fields, such a score or string that qualifies the entity.
              { # A `Property` consists of a user-supplied name/value pair.
                &quot;value&quot;: &quot;A String&quot;, # Value of the property.
                &quot;uint64Value&quot;: &quot;A String&quot;, # Value of numeric properties.
                &quot;name&quot;: &quot;A String&quot;, # Name of the property.
              },
            ],
            &quot;score&quot;: 3.14, # Overall score of the result. Range [0, 1].
            &quot;locations&quot;: [ # The location information for the detected entity. Multiple
                # `LocationInfo` elements can be present because one location may
                # indicate the location of the scene in the image, and another location
                # may indicate the location of the place where the image was taken.
                # Location information is usually present for landmarks.
              { # Detected entity location information.
                &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # lat/long location coordinates.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                    # standard&lt;/a&gt;. Values must be within normalized ranges.
                  &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
            ],
            &quot;mid&quot;: &quot;A String&quot;, # Opaque entity ID. Some IDs may be available in
                # [Google Knowledge Graph Search
                # API](https://developers.google.com/knowledge-graph/).
            &quot;confidence&quot;: 3.14, # **Deprecated. Use `score` instead.**
                # The accuracy of the entity detection in an image.
                # For example, for an image in which the &quot;Eiffel Tower&quot; entity is detected,
                # this field represents the confidence that there is a tower in the query
                # image. Range [0, 1].
          },
        ],
        &quot;imagePropertiesAnnotation&quot;: { # Stores image properties, such as dominant colors. # If present, image properties were extracted successfully.
          &quot;dominantColors&quot;: { # Set of dominant colors and their corresponding scores. # If present, dominant colors completed successfully.
            &quot;colors&quot;: [ # RGB color values with their score and pixel fraction.
              { # Color information consists of RGB channels, score, and the fraction of
                  # the image that the color occupies in the image.
                &quot;pixelFraction&quot;: 3.14, # The fraction of pixels the color occupies in the image.
                    # Value in range [0, 1].
                &quot;color&quot;: { # Represents a color in the RGBA color space. This representation is designed # RGB components of the color.
                    # for simplicity of conversion to/from color representations in various
                    # languages over compactness; for example, the fields of this representation
                    # can be trivially provided to the constructor of &quot;java.awt.Color&quot; in Java; it
                    # can also be trivially provided to UIColor&#x27;s &quot;+colorWithRed:green:blue:alpha&quot;
                    # method in iOS; and, with just a little work, it can be easily formatted into
                    # a CSS &quot;rgba()&quot; string in JavaScript, as well.
                    #
                    # Note: this proto does not carry information about the absolute color space
                    # that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB,
                    # DCI-P3, BT.2020, etc.). By default, applications SHOULD assume the sRGB color
                    # space.
                    #
                    # Example (Java):
                    #
                    #      import com.google.type.Color;
                    #
                    #      // ...
                    #      public static java.awt.Color fromProto(Color protocolor) {
                    #        float alpha = protocolor.hasAlpha()
                    #            ? protocolor.getAlpha().getValue()
                    #            : 1.0;
                    #
                    #        return new java.awt.Color(
                    #            protocolor.getRed(),
                    #            protocolor.getGreen(),
                    #            protocolor.getBlue(),
                    #            alpha);
                    #      }
                    #
                    #      public static Color toProto(java.awt.Color color) {
                    #        float red = (float) color.getRed();
                    #        float green = (float) color.getGreen();
                    #        float blue = (float) color.getBlue();
                    #        float denominator = 255.0;
                    #        Color.Builder resultBuilder =
                    #            Color
                    #                .newBuilder()
                    #                .setRed(red / denominator)
                    #                .setGreen(green / denominator)
                    #                .setBlue(blue / denominator);
                    #        int alpha = color.getAlpha();
                    #        if (alpha != 255) {
                    #          result.setAlpha(
                    #              FloatValue
                    #                  .newBuilder()
                    #                  .setValue(((float) alpha) / denominator)
                    #                  .build());
                    #        }
                    #        return resultBuilder.build();
                    #      }
                    #      // ...
                    #
                    # Example (iOS / Obj-C):
                    #
                    #      // ...
                    #      static UIColor* fromProto(Color* protocolor) {
                    #         float red = [protocolor red];
                    #         float green = [protocolor green];
                    #         float blue = [protocolor blue];
                    #         FloatValue* alpha_wrapper = [protocolor alpha];
                    #         float alpha = 1.0;
                    #         if (alpha_wrapper != nil) {
                    #           alpha = [alpha_wrapper value];
                    #         }
                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
                    #      }
                    #
                    #      static Color* toProto(UIColor* color) {
                    #          CGFloat red, green, blue, alpha;
                    #          if (![color getRed:&amp;red green:&amp;green blue:&amp;blue alpha:&amp;alpha]) {
                    #            return nil;
                    #          }
                    #          Color* result = [[Color alloc] init];
                    #          [result setRed:red];
                    #          [result setGreen:green];
                    #          [result setBlue:blue];
                    #          if (alpha &lt;= 0.9999) {
                    #            [result setAlpha:floatWrapperWithValue(alpha)];
                    #          }
                    #          [result autorelease];
                    #          return result;
                    #     }
                    #     // ...
                    #
                    #  Example (JavaScript):
                    #
                    #     // ...
                    #
                    #     var protoToCssColor = function(rgb_color) {
                    #        var redFrac = rgb_color.red || 0.0;
                    #        var greenFrac = rgb_color.green || 0.0;
                    #        var blueFrac = rgb_color.blue || 0.0;
                    #        var red = Math.floor(redFrac * 255);
                    #        var green = Math.floor(greenFrac * 255);
                    #        var blue = Math.floor(blueFrac * 255);
                    #
                    #        if (!(&#x27;alpha&#x27; in rgb_color)) {
                    #           return rgbToCssColor_(red, green, blue);
                    #        }
                    #
                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
                    #        var rgbParams = [red, green, blue].join(&#x27;,&#x27;);
                    #        return [&#x27;rgba(&#x27;, rgbParams, &#x27;,&#x27;, alphaFrac, &#x27;)&#x27;].join(&#x27;&#x27;);
                    #     };
                    #
                    #     var rgbToCssColor_ = function(red, green, blue) {
                    #       var rgbNumber = new Number((red &lt;&lt; 16) | (green &lt;&lt; 8) | blue);
                    #       var hexString = rgbNumber.toString(16);
                    #       var missingZeros = 6 - hexString.length;
                    #       var resultBuilder = [&#x27;#&#x27;];
                    #       for (var i = 0; i &lt; missingZeros; i++) {
                    #          resultBuilder.push(&#x27;0&#x27;);
                    #       }
                    #       resultBuilder.push(hexString);
                    #       return resultBuilder.join(&#x27;&#x27;);
                    #     };
                    #
                    #     // ...
                  &quot;green&quot;: 3.14, # The amount of green in the color as a value in the interval [0, 1].
                  &quot;blue&quot;: 3.14, # The amount of blue in the color as a value in the interval [0, 1].
                  &quot;alpha&quot;: 3.14, # The fraction of this color that should be applied to the pixel. That is,
                      # the final pixel color is defined by the equation:
                      #
                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
                      #
                      # This means that a value of 1.0 corresponds to a solid color, whereas
                      # a value of 0.0 corresponds to a completely transparent color. This
                      # uses a wrapper message rather than a simple float scalar so that it is
                      # possible to distinguish between a default value and the value being unset.
                      # If omitted, this color object is to be rendered as a solid color
                      # (as if the alpha value had been explicitly given with a value of 1.0).
                  &quot;red&quot;: 3.14, # The amount of red in the color as a value in the interval [0, 1].
                },
                &quot;score&quot;: 3.14, # Image-specific score for this color. Value in range [0, 1].
              },
            ],
          },
        },
        &quot;logoAnnotations&quot;: [ # If present, logo detection has completed successfully.
          { # Set of detected entity features.
            &quot;locale&quot;: &quot;A String&quot;, # The language code for the locale in which the entity textual
                # `description` is expressed.
            &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # Image region to which this entity belongs. Not produced
                # for `LABEL_DETECTION` features.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
            &quot;description&quot;: &quot;A String&quot;, # Entity textual description, expressed in its `locale` language.
            &quot;topicality&quot;: 3.14, # The relevancy of the ICA (Image Content Annotation) label to the
                # image. For example, the relevancy of &quot;tower&quot; is likely higher to an image
                # containing the detected &quot;Eiffel Tower&quot; than to an image containing a
                # detected distant towering building, even though the confidence that
                # there is a tower in each image may be the same. Range [0, 1].
            &quot;properties&quot;: [ # Some entities may have optional user-supplied `Property` (name/value)
                # fields, such a score or string that qualifies the entity.
              { # A `Property` consists of a user-supplied name/value pair.
                &quot;value&quot;: &quot;A String&quot;, # Value of the property.
                &quot;uint64Value&quot;: &quot;A String&quot;, # Value of numeric properties.
                &quot;name&quot;: &quot;A String&quot;, # Name of the property.
              },
            ],
            &quot;score&quot;: 3.14, # Overall score of the result. Range [0, 1].
            &quot;locations&quot;: [ # The location information for the detected entity. Multiple
                # `LocationInfo` elements can be present because one location may
                # indicate the location of the scene in the image, and another location
                # may indicate the location of the place where the image was taken.
                # Location information is usually present for landmarks.
              { # Detected entity location information.
                &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # lat/long location coordinates.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                    # standard&lt;/a&gt;. Values must be within normalized ranges.
                  &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
            ],
            &quot;mid&quot;: &quot;A String&quot;, # Opaque entity ID. Some IDs may be available in
                # [Google Knowledge Graph Search
                # API](https://developers.google.com/knowledge-graph/).
            &quot;confidence&quot;: 3.14, # **Deprecated. Use `score` instead.**
                # The accuracy of the entity detection in an image.
                # For example, for an image in which the &quot;Eiffel Tower&quot; entity is detected,
                # this field represents the confidence that there is a tower in the query
                # image. Range [0, 1].
          },
        ],
        &quot;context&quot;: { # If an image was produced from a file (e.g. a PDF), this message gives # If present, contextual information is needed to understand where this image
            # comes from.
            # information about the source of that image.
          &quot;uri&quot;: &quot;A String&quot;, # The URI of the file used to produce the image.
          &quot;pageNumber&quot;: 42, # If the file was a PDF or TIFF, this field gives the page number within
              # the file used to produce the image.
        },
        &quot;webDetection&quot;: { # Relevant information for the image from the Internet. # If present, web detection has completed successfully.
          &quot;visuallySimilarImages&quot;: [ # The visually similar image results.
            { # Metadata for online images.
              &quot;score&quot;: 3.14, # (Deprecated) Overall relevancy score for the image.
              &quot;url&quot;: &quot;A String&quot;, # The result image URL.
            },
          ],
          &quot;bestGuessLabels&quot;: [ # The service&#x27;s best guess as to the topic of the request image.
              # Inferred from similar images on the open web.
            { # Label to provide extra metadata for the web detection.
              &quot;label&quot;: &quot;A String&quot;, # Label for extra metadata.
              &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code for `label`, such as &quot;en-US&quot; or &quot;sr-Latn&quot;.
                  # For more information, see
                  # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
            },
          ],
          &quot;fullMatchingImages&quot;: [ # Fully matching images from the Internet.
              # Can include resized copies of the query image.
            { # Metadata for online images.
              &quot;score&quot;: 3.14, # (Deprecated) Overall relevancy score for the image.
              &quot;url&quot;: &quot;A String&quot;, # The result image URL.
            },
          ],
          &quot;webEntities&quot;: [ # Deduced entities from similar images on the Internet.
            { # Entity deduced from similar images on the Internet.
              &quot;entityId&quot;: &quot;A String&quot;, # Opaque entity ID.
              &quot;description&quot;: &quot;A String&quot;, # Canonical description of the entity, in English.
              &quot;score&quot;: 3.14, # Overall relevancy score for the entity.
                  # Not normalized and not comparable across different image queries.
            },
          ],
          &quot;pagesWithMatchingImages&quot;: [ # Web pages containing the matching images from the Internet.
            { # Metadata for web pages.
              &quot;score&quot;: 3.14, # (Deprecated) Overall relevancy score for the web page.
              &quot;partialMatchingImages&quot;: [ # Partial matching images on the page.
                  # Those images are similar enough to share some key-point features. For
                  # example an original image will likely have partial matching for its
                  # crops.
                { # Metadata for online images.
                  &quot;score&quot;: 3.14, # (Deprecated) Overall relevancy score for the image.
                  &quot;url&quot;: &quot;A String&quot;, # The result image URL.
                },
              ],
              &quot;url&quot;: &quot;A String&quot;, # The result web page URL.
              &quot;pageTitle&quot;: &quot;A String&quot;, # Title for the web page, may contain HTML markups.
              &quot;fullMatchingImages&quot;: [ # Fully matching images on the page.
                  # Can include resized copies of the query image.
                { # Metadata for online images.
                  &quot;score&quot;: 3.14, # (Deprecated) Overall relevancy score for the image.
                  &quot;url&quot;: &quot;A String&quot;, # The result image URL.
                },
              ],
            },
          ],
          &quot;partialMatchingImages&quot;: [ # Partial matching images from the Internet.
              # Those images are similar enough to share some key-point features. For
              # example an original image will likely have partial matching for its crops.
            { # Metadata for online images.
              &quot;score&quot;: 3.14, # (Deprecated) Overall relevancy score for the image.
              &quot;url&quot;: &quot;A String&quot;, # The result image URL.
            },
          ],
        },
        &quot;safeSearchAnnotation&quot;: { # Set of features pertaining to the image, computed by computer vision # If present, safe-search annotation has completed successfully.
            # methods over safe-search verticals (for example, adult, spoof, medical,
            # violence).
          &quot;adult&quot;: &quot;A String&quot;, # Represents the adult content likelihood for the image. Adult content may
              # contain elements such as nudity, pornographic images or cartoons, or
              # sexual activities.
          &quot;spoof&quot;: &quot;A String&quot;, # Spoof likelihood. The likelihood that an modification
              # was made to the image&#x27;s canonical version to make it appear
              # funny or offensive.
          &quot;medical&quot;: &quot;A String&quot;, # Likelihood that this is a medical image.
          &quot;racy&quot;: &quot;A String&quot;, # Likelihood that the request image contains racy content. Racy content may
              # include (but is not limited to) skimpy or sheer clothing, strategically
              # covered nudity, lewd or provocative poses, or close-ups of sensitive
              # body areas.
          &quot;violence&quot;: &quot;A String&quot;, # Likelihood that this image contains violent content.
        },
        &quot;landmarkAnnotations&quot;: [ # If present, landmark detection has completed successfully.
          { # Set of detected entity features.
            &quot;locale&quot;: &quot;A String&quot;, # The language code for the locale in which the entity textual
                # `description` is expressed.
            &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # Image region to which this entity belongs. Not produced
                # for `LABEL_DETECTION` features.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
            &quot;description&quot;: &quot;A String&quot;, # Entity textual description, expressed in its `locale` language.
            &quot;topicality&quot;: 3.14, # The relevancy of the ICA (Image Content Annotation) label to the
                # image. For example, the relevancy of &quot;tower&quot; is likely higher to an image
                # containing the detected &quot;Eiffel Tower&quot; than to an image containing a
                # detected distant towering building, even though the confidence that
                # there is a tower in each image may be the same. Range [0, 1].
            &quot;properties&quot;: [ # Some entities may have optional user-supplied `Property` (name/value)
                # fields, such a score or string that qualifies the entity.
              { # A `Property` consists of a user-supplied name/value pair.
                &quot;value&quot;: &quot;A String&quot;, # Value of the property.
                &quot;uint64Value&quot;: &quot;A String&quot;, # Value of numeric properties.
                &quot;name&quot;: &quot;A String&quot;, # Name of the property.
              },
            ],
            &quot;score&quot;: 3.14, # Overall score of the result. Range [0, 1].
            &quot;locations&quot;: [ # The location information for the detected entity. Multiple
                # `LocationInfo` elements can be present because one location may
                # indicate the location of the scene in the image, and another location
                # may indicate the location of the place where the image was taken.
                # Location information is usually present for landmarks.
              { # Detected entity location information.
                &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # lat/long location coordinates.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                    # standard&lt;/a&gt;. Values must be within normalized ranges.
                  &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
            ],
            &quot;mid&quot;: &quot;A String&quot;, # Opaque entity ID. Some IDs may be available in
                # [Google Knowledge Graph Search
                # API](https://developers.google.com/knowledge-graph/).
            &quot;confidence&quot;: 3.14, # **Deprecated. Use `score` instead.**
                # The accuracy of the entity detection in an image.
                # For example, for an image in which the &quot;Eiffel Tower&quot; entity is detected,
                # this field represents the confidence that there is a tower in the query
                # image. Range [0, 1].
          },
        ],
        &quot;faceAnnotations&quot;: [ # If present, face detection has completed successfully.
          { # A face annotation object contains the results of face detection.
            &quot;underExposedLikelihood&quot;: &quot;A String&quot;, # Under-exposed likelihood.
            &quot;panAngle&quot;: 3.14, # Yaw angle, which indicates the leftward/rightward angle that the face is
                # pointing relative to the vertical plane perpendicular to the image. Range
                # [-180,180].
            &quot;detectionConfidence&quot;: 3.14, # Detection confidence. Range [0, 1].
            &quot;blurredLikelihood&quot;: &quot;A String&quot;, # Blurred likelihood.
            &quot;headwearLikelihood&quot;: &quot;A String&quot;, # Headwear likelihood.
            &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # The bounding polygon around the face. The coordinates of the bounding box
                # are in the original image&#x27;s scale.
                # The bounding box is computed to &quot;frame&quot; the face in accordance with human
                # expectations. It is based on the landmarker results.
                # Note that one or more x and/or y coordinates may not be generated in the
                # `BoundingPoly` (the polygon will be unbounded) if only a partial face
                # appears in the image to be annotated.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
            &quot;rollAngle&quot;: 3.14, # Roll angle, which indicates the amount of clockwise/anti-clockwise rotation
                # of the face relative to the image vertical about the axis perpendicular to
                # the face. Range [-180,180].
            &quot;sorrowLikelihood&quot;: &quot;A String&quot;, # Sorrow likelihood.
            &quot;tiltAngle&quot;: 3.14, # Pitch angle, which indicates the upwards/downwards angle that the face is
                # pointing relative to the image&#x27;s horizontal plane. Range [-180,180].
            &quot;fdBoundingPoly&quot;: { # A bounding polygon for the detected image annotation. # The `fd_bounding_poly` bounding polygon is tighter than the
                # `boundingPoly`, and encloses only the skin part of the face. Typically, it
                # is used to eliminate the face from any image analysis that detects the
                # &quot;amount of skin&quot; visible in an image. It is not based on the
                # landmarker results, only on the initial face detection, hence
                # the &lt;code&gt;fd&lt;/code&gt; (face detection) prefix.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
            &quot;angerLikelihood&quot;: &quot;A String&quot;, # Anger likelihood.
            &quot;landmarks&quot;: [ # Detected face landmarks.
              { # A face-specific landmark (for example, a face feature).
                &quot;type&quot;: &quot;A String&quot;, # Face landmark type.
                &quot;position&quot;: { # A 3D position in the image, used primarily for Face detection landmarks. # Face landmark position.
                    # A valid Position must have both x and y coordinates.
                    # The position coordinates are in the same scale as the original image.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;z&quot;: 3.14, # Z coordinate (or depth).
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              },
            ],
            &quot;surpriseLikelihood&quot;: &quot;A String&quot;, # Surprise likelihood.
            &quot;landmarkingConfidence&quot;: 3.14, # Face landmarking confidence. Range [0, 1].
            &quot;joyLikelihood&quot;: &quot;A String&quot;, # Joy likelihood.
          },
        ],
        &quot;cropHintsAnnotation&quot;: { # Set of crop hints that are used to generate new crops when serving images. # If present, crop hints have completed successfully.
          &quot;cropHints&quot;: [ # Crop hint results.
            { # Single crop hint that is used to generate a new crop when serving an image.
              &quot;confidence&quot;: 3.14, # Confidence of this being a salient region.  Range [0, 1].
              &quot;importanceFraction&quot;: 3.14, # Fraction of importance of this salient region with respect to the original
                  # image.
              &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # The bounding polygon for the crop region. The coordinates of the bounding
                  # box are in the original image&#x27;s scale.
                &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                  { # A vertex represents a 2D point in the image.
                      # NOTE: the normalized vertex coordinates are relative to the original image
                      # and range from 0 to 1.
                    &quot;x&quot;: 3.14, # X coordinate.
                    &quot;y&quot;: 3.14, # Y coordinate.
                  },
                ],
                &quot;vertices&quot;: [ # The bounding polygon vertices.
                  { # A vertex represents a 2D point in the image.
                      # NOTE: the vertex coordinates are in the same scale as the original image.
                    &quot;y&quot;: 42, # Y coordinate.
                    &quot;x&quot;: 42, # X coordinate.
                  },
                ],
              },
            },
          ],
        },
        &quot;labelAnnotations&quot;: [ # If present, label detection has completed successfully.
          { # Set of detected entity features.
            &quot;locale&quot;: &quot;A String&quot;, # The language code for the locale in which the entity textual
                # `description` is expressed.
            &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # Image region to which this entity belongs. Not produced
                # for `LABEL_DETECTION` features.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
            &quot;description&quot;: &quot;A String&quot;, # Entity textual description, expressed in its `locale` language.
            &quot;topicality&quot;: 3.14, # The relevancy of the ICA (Image Content Annotation) label to the
                # image. For example, the relevancy of &quot;tower&quot; is likely higher to an image
                # containing the detected &quot;Eiffel Tower&quot; than to an image containing a
                # detected distant towering building, even though the confidence that
                # there is a tower in each image may be the same. Range [0, 1].
            &quot;properties&quot;: [ # Some entities may have optional user-supplied `Property` (name/value)
                # fields, such a score or string that qualifies the entity.
              { # A `Property` consists of a user-supplied name/value pair.
                &quot;value&quot;: &quot;A String&quot;, # Value of the property.
                &quot;uint64Value&quot;: &quot;A String&quot;, # Value of numeric properties.
                &quot;name&quot;: &quot;A String&quot;, # Name of the property.
              },
            ],
            &quot;score&quot;: 3.14, # Overall score of the result. Range [0, 1].
            &quot;locations&quot;: [ # The location information for the detected entity. Multiple
                # `LocationInfo` elements can be present because one location may
                # indicate the location of the scene in the image, and another location
                # may indicate the location of the place where the image was taken.
                # Location information is usually present for landmarks.
              { # Detected entity location information.
                &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # lat/long location coordinates.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                    # standard&lt;/a&gt;. Values must be within normalized ranges.
                  &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
            ],
            &quot;mid&quot;: &quot;A String&quot;, # Opaque entity ID. Some IDs may be available in
                # [Google Knowledge Graph Search
                # API](https://developers.google.com/knowledge-graph/).
            &quot;confidence&quot;: 3.14, # **Deprecated. Use `score` instead.**
                # The accuracy of the entity detection in an image.
                # For example, for an image in which the &quot;Eiffel Tower&quot; entity is detected,
                # this field represents the confidence that there is a tower in the query
                # image. Range [0, 1].
          },
        ],
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="asyncBatchAnnotate">asyncBatchAnnotate(parent, body=None, x__xgafv=None)</code>
  <pre>Run asynchronous image detection and annotation for a list of images.

Progress and results can be retrieved through the
`google.longrunning.Operations` interface.
`Operation.metadata` contains `OperationMetadata` (metadata).
`Operation.response` contains `AsyncBatchAnnotateImagesResponse` (results).

This service will write image annotation outputs to json files in customer
GCS bucket, each json file containing BatchAnnotateImagesResponse proto.

Args:
  parent: string, Optional. Target project and location to make a call.

Format: `projects/{project-id}/locations/{location-id}`.

If no parent is specified, a region will be chosen automatically.

Supported location-ids:
    `us`: USA country only,
    `asia`: East asia areas, like Japan, Taiwan,
    `eu`: The European Union.

Example: `projects/project-A/locations/eu`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for async image annotation for a list of images.
    &quot;parent&quot;: &quot;A String&quot;, # Optional. Target project and location to make a call.
        # 
        # Format: `projects/{project-id}/locations/{location-id}`.
        # 
        # If no parent is specified, a region will be chosen automatically.
        # 
        # Supported location-ids:
        #     `us`: USA country only,
        #     `asia`: East asia areas, like Japan, Taiwan,
        #     `eu`: The European Union.
        # 
        # Example: `projects/project-A/locations/eu`.
    &quot;outputConfig&quot;: { # The desired output location and metadata. # Required. The desired output location and metadata (e.g. format).
      &quot;gcsDestination&quot;: { # The Google Cloud Storage location where the output will be written to. # The Google Cloud Storage location to write the output(s) to.
        &quot;uri&quot;: &quot;A String&quot;, # Google Cloud Storage URI prefix where the results will be stored. Results
            # will be in JSON format and preceded by its corresponding input URI prefix.
            # This field can either represent a gcs file prefix or gcs directory. In
            # either case, the uri should be unique because in order to get all of the
            # output files, you will need to do a wildcard gcs search on the uri prefix
            # you provide.
            #
            # Examples:
            #
            # *    File Prefix: gs://bucket-name/here/filenameprefix   The output files
            # will be created in gs://bucket-name/here/ and the names of the
            # output files will begin with &quot;filenameprefix&quot;.
            #
            # *    Directory Prefix: gs://bucket-name/some/location/   The output files
            # will be created in gs://bucket-name/some/location/ and the names of the
            # output files could be anything because there was no filename prefix
            # specified.
            #
            # If multiple outputs, each response is still AnnotateFileResponse, each of
            # which contains some subset of the full list of AnnotateImageResponse.
            # Multiple outputs can happen if, for example, the output JSON is too large
            # and overflows into multiple sharded files.
      },
      &quot;batchSize&quot;: 42, # The max number of response protos to put into each output JSON file on
          # Google Cloud Storage.
          # The valid range is [1, 100]. If not specified, the default value is 20.
          #
          # For example, for one pdf file with 100 pages, 100 response protos will
          # be generated. If `batch_size` = 20, then 5 json files each
          # containing 20 response protos will be written under the prefix
          # `gcs_destination`.`uri`.
          #
          # Currently, batch_size only applies to GcsDestination, with potential future
          # support for other output configurations.
    },
    &quot;requests&quot;: [ # Required. Individual image annotation requests for this batch.
      { # Request for performing Google Cloud Vision API tasks over a user-provided
          # image, with user-requested features, and with context information.
        &quot;image&quot;: { # Client image to perform Google Cloud Vision API tasks over. # The image to be processed.
          &quot;content&quot;: &quot;A String&quot;, # Image content, represented as a stream of bytes.
              # Note: As with all `bytes` fields, protobuffers use a pure binary
              # representation, whereas JSON representations use base64.
          &quot;source&quot;: { # External image source (Google Cloud Storage or web URL image location). # Google Cloud Storage image location, or publicly-accessible image
              # URL. If both `content` and `source` are provided for an image, `content`
              # takes precedence and is used to perform the image annotation request.
            &quot;gcsImageUri&quot;: &quot;A String&quot;, # **Use `image_uri` instead.**
                #
                # The Google Cloud Storage  URI of the form
                # `gs://bucket_name/object_name`. Object versioning is not supported. See
                # [Google Cloud Storage Request
                # URIs](https://cloud.google.com/storage/docs/reference-uris) for more info.
            &quot;imageUri&quot;: &quot;A String&quot;, # The URI of the source image. Can be either:
                #
                # 1. A Google Cloud Storage URI of the form
                #    `gs://bucket_name/object_name`. Object versioning is not supported. See
                #    [Google Cloud Storage Request
                #    URIs](https://cloud.google.com/storage/docs/reference-uris) for more
                #    info.
                #
                # 2. A publicly-accessible image HTTP/HTTPS URL. When fetching images from
                #    HTTP/HTTPS URLs, Google cannot guarantee that the request will be
                #    completed. Your request may fail if the specified host denies the
                #    request (e.g. due to request throttling or DOS prevention), or if Google
                #    throttles requests to the site for abuse prevention. You should not
                #    depend on externally-hosted images for production applications.
                #
                # When both `gcs_image_uri` and `image_uri` are specified, `image_uri` takes
                # precedence.
          },
        },
        &quot;features&quot;: [ # Requested features.
          { # The type of Google Cloud Vision API detection to perform, and the maximum
              # number of results to return for that type. Multiple `Feature` objects can
              # be specified in the `features` list.
            &quot;type&quot;: &quot;A String&quot;, # The feature type.
            &quot;maxResults&quot;: 42, # Maximum number of results of this type. Does not apply to
                # `TEXT_DETECTION`, `DOCUMENT_TEXT_DETECTION`, or `CROP_HINTS`.
            &quot;model&quot;: &quot;A String&quot;, # Model to use for the feature.
                # Supported values: &quot;builtin/stable&quot; (the default if unset) and
                # &quot;builtin/latest&quot;.
          },
        ],
        &quot;imageContext&quot;: { # Image context and/or feature-specific parameters. # Additional context that may accompany the image.
          &quot;cropHintsParams&quot;: { # Parameters for crop hints annotation request. # Parameters for crop hints annotation request.
            &quot;aspectRatios&quot;: [ # Aspect ratios in floats, representing the ratio of the width to the height
                # of the image. For example, if the desired aspect ratio is 4/3, the
                # corresponding float value should be 1.33333.  If not specified, the
                # best possible crop is returned. The number of provided aspect ratios is
                # limited to a maximum of 16; any aspect ratios provided after the 16th are
                # ignored.
              3.14,
            ],
          },
          &quot;productSearchParams&quot;: { # Parameters for a product search request. # Parameters for product search.
            &quot;productCategories&quot;: [ # The list of product categories to search in. Currently, we only consider
                # the first category, and either &quot;homegoods-v2&quot;, &quot;apparel-v2&quot;, &quot;toys-v2&quot;,
                # &quot;packagedgoods-v1&quot;, or &quot;general-v1&quot; should be specified. The legacy
                # categories &quot;homegoods&quot;, &quot;apparel&quot;, and &quot;toys&quot; are still supported but will
                # be deprecated. For new products, please use &quot;homegoods-v2&quot;, &quot;apparel-v2&quot;,
                # or &quot;toys-v2&quot; for better product search accuracy. It is recommended to
                # migrate existing products to these categories as well.
              &quot;A String&quot;,
            ],
            &quot;filter&quot;: &quot;A String&quot;, # The filtering expression. This can be used to restrict search results based
                # on Product labels. We currently support an AND of OR of key-value
                # expressions, where each expression within an OR must have the same key. An
                # &#x27;=&#x27; should be used to connect the key and value.
                #
                # For example, &quot;(color = red OR color = blue) AND brand = Google&quot; is
                # acceptable, but &quot;(color = red OR brand = Google)&quot; is not acceptable.
                # &quot;color: red&quot; is not acceptable because it uses a &#x27;:&#x27; instead of an &#x27;=&#x27;.
            &quot;productSet&quot;: &quot;A String&quot;, # The resource name of a ProductSet to be searched for similar images.
                #
                # Format is:
                # `projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.
            &quot;boundingPoly&quot;: { # A bounding polygon for the detected image annotation. # The bounding polygon around the area of interest in the image.
                # If it is not specified, system discretion will be applied.
              &quot;normalizedVertices&quot;: [ # The bounding polygon normalized vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the normalized vertex coordinates are relative to the original image
                    # and range from 0 to 1.
                  &quot;x&quot;: 3.14, # X coordinate.
                  &quot;y&quot;: 3.14, # Y coordinate.
                },
              ],
              &quot;vertices&quot;: [ # The bounding polygon vertices.
                { # A vertex represents a 2D point in the image.
                    # NOTE: the vertex coordinates are in the same scale as the original image.
                  &quot;y&quot;: 42, # Y coordinate.
                  &quot;x&quot;: 42, # X coordinate.
                },
              ],
            },
          },
          &quot;languageHints&quot;: [ # List of languages to use for TEXT_DETECTION. In most cases, an empty value
              # yields the best results since it enables automatic language detection. For
              # languages based on the Latin alphabet, setting `language_hints` is not
              # needed. In rare cases, when the language of the text in the image is known,
              # setting a hint will help get better results (although it will be a
              # significant hindrance if the hint is wrong). Text detection returns an
              # error if one or more of the specified languages is not one of the
              # [supported languages](https://cloud.google.com/vision/docs/languages).
            &quot;A String&quot;,
          ],
          &quot;webDetectionParams&quot;: { # Parameters for web detection request. # Parameters for web detection.
            &quot;includeGeoResults&quot;: True or False, # Whether to include results derived from the geo information in the image.
          },
          &quot;latLongRect&quot;: { # Rectangle determined by min and max `LatLng` pairs. # Not used.
            &quot;maxLatLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # Max lat/long pair.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                # standard&lt;/a&gt;. Values must be within normalized ranges.
              &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
            &quot;minLatLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # Min lat/long pair.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                # standard&lt;/a&gt;. Values must be within normalized ranges.
              &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
        },
      },
    ],
  }

  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;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # 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).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &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;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;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;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;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.
    },
    &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}`.
  }</pre>
</div>

</body></html>