# Cloud Document AI API . projects . documents

## Instance Methods

LRO endpoint to batch process many documents. The output is written

Processes a single document.

### Method Details

`batchProcess(parent, body=None, x__xgafv=None)`

    LRO endpoint to batch process many documents. The output is written
    to Cloud Storage as JSON in the [Document] format.

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

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

    If no location is specified, a region will be chosen automatically. (required)
      body: object, The request body.
        The object takes the form of:

    { # Request to batch process documents as an asynchronous operation. The output
          # is written to Cloud Storage as JSON in the [Document] format.
        "requests": [ # Required. Individual requests for each document.
          { # Request to process one document.
              "ocrParams": { # Parameters to control Optical Character Recognition (OCR) behavior. # Controls OCR behavior. If not specified, the system will decide reasonable
                  # defaults.
                "languageHints": [ # List of languages to use for OCR. 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). Document processing returns an
                    # error if one or more of the specified languages is not one of the
                    # supported languages.
                  "A String",
                ],
              },
              "tableExtractionParams": { # Parameters to control table extraction behavior. # Controls table extraction behavior. If not specified, the system will
                  # decide reasonable defaults.
                "tableBoundHints": [ # Optional. Table bounding box hints that can be provided to complex cases
                    # which our algorithm cannot locate the table(s) in.
                  { # A hint for a table bounding box on the page for table parsing.
                    "pageNumber": 42, # Optional. Page number for multi-paged inputs this hint applies to. If not
                        # provided, this hint will apply to all pages by default. This value is
                        # 1-based.
                    "boundingBox": { # A bounding polygon for the detected image annotation. # Bounding box hint for a table on this page. The coordinates must be
                        # normalized to [0,1] and the bounding box must be an axis-aligned rectangle.
                      "normalizedVertices": [ # 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.
                          "x": 3.14, # X coordinate.
                          "y": 3.14, # Y coordinate.
                        },
                      ],
                      "vertices": [ # 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.
                          "x": 42, # X coordinate.
                          "y": 42, # Y coordinate.
                        },
                      ],
                    },
                  },
                ],
                "headerHints": [ # Optional. Reserved for future use.
                  "A String",
                ],
                "modelVersion": "A String", # Model version of the table extraction system. Default is "builtin/stable".
                    # Specify "builtin/latest" for the latest model.
                "enabled": True or False, # Whether to enable table extraction.
              },
              "automlParams": { # Parameters to control AutoML model prediction behavior. # Controls AutoML model prediction behavior. AutoMlParams cannot be used
                  # together with other Params.
                "model": "A String", # Resource name of the AutoML model.
                    #
                    # Format: `projects/{project-id}/locations/{location-id}/models/{model-id}`.
              },
              "inputConfig": { # The desired input location and metadata. # Required. Information about the input file.
                "gcsSource": { # The Google Cloud Storage location where the input file will be read from. # The Google Cloud Storage location to read the input from. This must be a
                    # single file.
                  "uri": "A String",
                },
                "contents": "A String", # Content in bytes, represented as a stream of bytes.
                    # Note: As with all `bytes` fields, proto buffer messages use a pure binary
                    # representation, whereas JSON representations use base64.
                    #
                    # This field only works for synchronous ProcessDocument method.
                "mimeType": "A String", # Required. Mimetype of the input. Current supported mimetypes are application/pdf,
                    # image/tiff, and image/gif.
                    # In addition, application/json type is supported for requests with
                    # ProcessDocumentRequest.automl_params field set. The JSON file needs to
                    # be in Document format.
              },
              "formExtractionParams": { # Parameters to control form extraction behavior. # Controls form extraction behavior. If not specified, the system will
                  # decide reasonable defaults.
                "modelVersion": "A String", # Model version of the form extraction system. Default is
                    # "builtin/stable". Specify "builtin/latest" for the latest model.
                    # For custom form models, specify: “custom/{model_name}". Model name
                    # format is "bucket_name/path/to/modeldir" corresponding to
                    # "gs://bucket_name/path/to/modeldir" where annotated examples are stored.
                "enabled": True or False, # Whether to enable form extraction.
                "keyValuePairHints": [ # Reserved for future use.
                  { # Reserved for future use.
                    "valueTypes": [ # Type of the value. This is case-insensitive, and could be one of:
                        # ADDRESS, LOCATION, ORGANIZATION, PERSON, PHONE_NUMBER,
                        # ID, NUMBER, EMAIL, PRICE, TERMS, DATE, NAME. Types not in this list will
                        # be ignored.
                      "A String",
                    ],
                    "key": "A String", # The key text for the hint.
                  },
                ],
              },
              "documentType": "A String", # Specifies a known document type for deeper structure detection. Valid
                  # values are currently "general" and "invoice". If not provided, "general"\
                  # is used as default. If any other value is given, the request is rejected.
              "parent": "A String", # Target project and location to make a call.
                  #
                  # Format: `projects/{project-id}/locations/{location-id}`.
                  #
                  # If no location is specified, a region will be chosen automatically.
                  # This field is only populated when used in ProcessDocument method.
              "outputConfig": { # The desired output location and metadata. # The desired output location. This field is only needed in
                  # BatchProcessDocumentsRequest.
                "pagesPerShard": 42, # The max number of pages to include into each output Document shard JSON 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 parsed pages will be
                    # produced. If `pages_per_shard` = 20, then 5 Document shard JSON files each
                    # containing 20 parsed pages will be written under the prefix
                    # OutputConfig.gcs_destination.uri and suffix pages-x-to-y.json where
                    # x and y are 1-indexed page numbers.
                    #
                    # Example GCS outputs with 157 pages and pages_per_shard = 50:
                    #
                    # <prefix>pages-001-to-050.json
                    # <prefix>pages-051-to-100.json
                    # <prefix>pages-101-to-150.json
                    # <prefix>pages-151-to-157.json
                "gcsDestination": { # The Google Cloud Storage location where the output file will be written to. # The Google Cloud Storage location to write the output to.
                  "uri": "A String",
                },
              },
              "entityExtractionParams": { # Parameters to control entity extraction behavior. # Controls entity extraction behavior. If not specified, the system will
                  # decide reasonable defaults.
                "enabled": True or False, # Whether to enable entity extraction.
                "modelVersion": "A String", # Model version of the entity extraction. Default is
                    # "builtin/stable". Specify "builtin/latest" for the latest model.
              },
            },
        ],
      }

      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.
        "metadata": { # 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.
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
        "name": "A String", # 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}`.
        "error": { # 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).
          "message": "A String", # 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.
          "details": [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
          ],
          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
        },
        "response": { # 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`.
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
        "done": 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.
      }

`process(parent, body=None, x__xgafv=None)`

    Processes a single document.

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

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

    If no location is specified, a region will be chosen automatically.
    This field is only populated when used in ProcessDocument method. (required)
      body: object, The request body.
        The object takes the form of:

    { # Request to process one document.
        "ocrParams": { # Parameters to control Optical Character Recognition (OCR) behavior. # Controls OCR behavior. If not specified, the system will decide reasonable
            # defaults.
          "languageHints": [ # List of languages to use for OCR. 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). Document processing returns an
              # error if one or more of the specified languages is not one of the
              # supported languages.
            "A String",
          ],
        },
        "tableExtractionParams": { # Parameters to control table extraction behavior. # Controls table extraction behavior. If not specified, the system will
            # decide reasonable defaults.
          "tableBoundHints": [ # Optional. Table bounding box hints that can be provided to complex cases
              # which our algorithm cannot locate the table(s) in.
            { # A hint for a table bounding box on the page for table parsing.
              "pageNumber": 42, # Optional. Page number for multi-paged inputs this hint applies to. If not
                  # provided, this hint will apply to all pages by default. This value is
                  # 1-based.
              "boundingBox": { # A bounding polygon for the detected image annotation. # Bounding box hint for a table on this page. The coordinates must be
                  # normalized to [0,1] and the bounding box must be an axis-aligned rectangle.
                "normalizedVertices": [ # 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.
                    "x": 3.14, # X coordinate.
                    "y": 3.14, # Y coordinate.
                  },
                ],
                "vertices": [ # 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.
                    "x": 42, # X coordinate.
                    "y": 42, # Y coordinate.
                  },
                ],
              },
            },
          ],
          "headerHints": [ # Optional. Reserved for future use.
            "A String",
          ],
          "modelVersion": "A String", # Model version of the table extraction system. Default is "builtin/stable".
              # Specify "builtin/latest" for the latest model.
          "enabled": True or False, # Whether to enable table extraction.
        },
        "automlParams": { # Parameters to control AutoML model prediction behavior. # Controls AutoML model prediction behavior. AutoMlParams cannot be used
            # together with other Params.
          "model": "A String", # Resource name of the AutoML model.
              #
              # Format: `projects/{project-id}/locations/{location-id}/models/{model-id}`.
        },
        "inputConfig": { # The desired input location and metadata. # Required. Information about the input file.
          "gcsSource": { # The Google Cloud Storage location where the input file will be read from. # The Google Cloud Storage location to read the input from. This must be a
              # single file.
            "uri": "A String",
          },
          "contents": "A String", # Content in bytes, represented as a stream of bytes.
              # Note: As with all `bytes` fields, proto buffer messages use a pure binary
              # representation, whereas JSON representations use base64.
              #
              # This field only works for synchronous ProcessDocument method.
          "mimeType": "A String", # Required. Mimetype of the input. Current supported mimetypes are application/pdf,
              # image/tiff, and image/gif.
              # In addition, application/json type is supported for requests with
              # ProcessDocumentRequest.automl_params field set. The JSON file needs to
              # be in Document format.
        },
        "formExtractionParams": { # Parameters to control form extraction behavior. # Controls form extraction behavior. If not specified, the system will
            # decide reasonable defaults.
          "modelVersion": "A String", # Model version of the form extraction system. Default is
              # "builtin/stable". Specify "builtin/latest" for the latest model.
              # For custom form models, specify: “custom/{model_name}". Model name
              # format is "bucket_name/path/to/modeldir" corresponding to
              # "gs://bucket_name/path/to/modeldir" where annotated examples are stored.
          "enabled": True or False, # Whether to enable form extraction.
          "keyValuePairHints": [ # Reserved for future use.
            { # Reserved for future use.
              "valueTypes": [ # Type of the value. This is case-insensitive, and could be one of:
                  # ADDRESS, LOCATION, ORGANIZATION, PERSON, PHONE_NUMBER,
                  # ID, NUMBER, EMAIL, PRICE, TERMS, DATE, NAME. Types not in this list will
                  # be ignored.
                "A String",
              ],
              "key": "A String", # The key text for the hint.
            },
          ],
        },
        "documentType": "A String", # Specifies a known document type for deeper structure detection. Valid
            # values are currently "general" and "invoice". If not provided, "general"\
            # is used as default. If any other value is given, the request is rejected.
        "parent": "A String", # Target project and location to make a call.
            #
            # Format: `projects/{project-id}/locations/{location-id}`.
            #
            # If no location is specified, a region will be chosen automatically.
            # This field is only populated when used in ProcessDocument method.
        "outputConfig": { # The desired output location and metadata. # The desired output location. This field is only needed in
            # BatchProcessDocumentsRequest.
          "pagesPerShard": 42, # The max number of pages to include into each output Document shard JSON 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 parsed pages will be
              # produced. If `pages_per_shard` = 20, then 5 Document shard JSON files each
              # containing 20 parsed pages will be written under the prefix
              # OutputConfig.gcs_destination.uri and suffix pages-x-to-y.json where
              # x and y are 1-indexed page numbers.
              #
              # Example GCS outputs with 157 pages and pages_per_shard = 50:
              #
              # <prefix>pages-001-to-050.json
              # <prefix>pages-051-to-100.json
              # <prefix>pages-101-to-150.json
              # <prefix>pages-151-to-157.json
          "gcsDestination": { # The Google Cloud Storage location where the output file will be written to. # The Google Cloud Storage location to write the output to.
            "uri": "A String",
          },
        },
        "entityExtractionParams": { # Parameters to control entity extraction behavior. # Controls entity extraction behavior. If not specified, the system will
            # decide reasonable defaults.
          "enabled": True or False, # Whether to enable entity extraction.
          "modelVersion": "A String", # Model version of the entity extraction. Default is
              # "builtin/stable". Specify "builtin/latest" for the latest model.
        },
      }

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

    Returns:
      An object of the form:

        { # Document represents the canonical document resource in Document Understanding
          # AI.
          # It is an interchange format that provides insights into documents and allows
          # for collaboration between users and Document Understanding AI to iterate and
          # optimize for quality.
        "content": "A String", # Inline document content, represented as a stream of bytes.
            # Note: As with all `bytes` fields, protobuffers use a pure binary
            # representation, whereas JSON representations use base64.
        "labels": [ # Labels for this document.
          { # Label attaches schema information and/or other metadata to segments within
              # a Document. Multiple Labels on a single field can denote either
              # different labels, different instances of the same label created at
              # different times, or some combination of both.
            "automlModel": "A String", # Label is generated AutoML model. This field stores the full resource
                # name of the AutoML model.
                #
                # Format:
                # `projects/{project-id}/locations/{location-id}/models/{model-id}`
            "confidence": 3.14, # Confidence score between 0 and 1 for label assignment.
            "name": "A String", # Name of the label.
                #
                # When the label is generated from AutoML Text Classification model, this
                # field represents the name of the category.
          },
        ],
        "uri": "A String", # Currently supports 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.
        "error": { # The `Status` type defines a logical error model that is suitable for # Any error that occurred while processing this document.
            # 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).
          "message": "A String", # 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.
          "details": [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
          ],
          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
        },
        "pages": [ # Visual page layout for the Document.
          { # A page in a Document.
            "dimension": { # Dimension for the page. # Physical dimension of the page.
              "width": 3.14, # Page width.
              "height": 3.14, # Page height.
              "unit": "A String", # Dimension unit.
            },
            "detectedLanguages": [ # A list of detected languages together with confidence.
              { # Detected language for a structural component.
                "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                    # information, see
                    # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                "confidence": 3.14, # Confidence of detected language. Range [0, 1].
              },
            ],
            "tables": [ # A list of visually detected tables on the page.
              { # A table representation similar to HTML table structure.
                "layout": { # Visual element describing a layout unit on a page. # Layout for Table.
                  "orientation": "A String", # Detected orientation for the Layout.
                  "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                    "normalizedVertices": [ # 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.
                        "x": 3.14, # X coordinate.
                        "y": 3.14, # Y coordinate.
                      },
                    ],
                    "vertices": [ # 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.
                        "x": 42, # X coordinate.
                        "y": 42, # Y coordinate.
                      },
                    ],
                  },
                  "confidence": 3.14, # Confidence of the current Layout within context of the object this
                      # layout is for. e.g. confidence can be for a single token, a table,
                      # a visual element, etc. depending on context. Range [0, 1].
                  "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                    "textSegments": [ # The text segments from the Document.text.
                      { # A text segment in the Document.text. The indices may be out of bounds
                          # which indicate that the text extends into another document shard for
                          # large sharded documents. See ShardInfo.text_offset
                        "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                        "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                            # Document.text.
                      },
                    ],
                  },
                },
                "detectedLanguages": [ # A list of detected languages together with confidence.
                  { # Detected language for a structural component.
                    "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
                "bodyRows": [ # Body rows of the table.
                  { # A row of table cells.
                    "cells": [ # Cells that make up this row.
                      { # A cell representation inside the table.
                        "detectedLanguages": [ # A list of detected languages together with confidence.
                          { # Detected language for a structural component.
                            "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                                # information, see
                                # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                            "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                          },
                        ],
                        "rowSpan": 42, # How many rows this cell spans.
                        "layout": { # Visual element describing a layout unit on a page. # Layout for TableCell.
                          "orientation": "A String", # Detected orientation for the Layout.
                          "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                            "normalizedVertices": [ # 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.
                                "x": 3.14, # X coordinate.
                                "y": 3.14, # Y coordinate.
                              },
                            ],
                            "vertices": [ # 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.
                                "x": 42, # X coordinate.
                                "y": 42, # Y coordinate.
                              },
                            ],
                          },
                          "confidence": 3.14, # Confidence of the current Layout within context of the object this
                              # layout is for. e.g. confidence can be for a single token, a table,
                              # a visual element, etc. depending on context. Range [0, 1].
                          "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                            "textSegments": [ # The text segments from the Document.text.
                              { # A text segment in the Document.text. The indices may be out of bounds
                                  # which indicate that the text extends into another document shard for
                                  # large sharded documents. See ShardInfo.text_offset
                                "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                                "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                                    # Document.text.
                              },
                            ],
                          },
                        },
                        "colSpan": 42, # How many columns this cell spans.
                      },
                    ],
                  },
                ],
                "headerRows": [ # Header rows of the table.
                  { # A row of table cells.
                    "cells": [ # Cells that make up this row.
                      { # A cell representation inside the table.
                        "detectedLanguages": [ # A list of detected languages together with confidence.
                          { # Detected language for a structural component.
                            "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                                # information, see
                                # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                            "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                          },
                        ],
                        "rowSpan": 42, # How many rows this cell spans.
                        "layout": { # Visual element describing a layout unit on a page. # Layout for TableCell.
                          "orientation": "A String", # Detected orientation for the Layout.
                          "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                            "normalizedVertices": [ # 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.
                                "x": 3.14, # X coordinate.
                                "y": 3.14, # Y coordinate.
                              },
                            ],
                            "vertices": [ # 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.
                                "x": 42, # X coordinate.
                                "y": 42, # Y coordinate.
                              },
                            ],
                          },
                          "confidence": 3.14, # Confidence of the current Layout within context of the object this
                              # layout is for. e.g. confidence can be for a single token, a table,
                              # a visual element, etc. depending on context. Range [0, 1].
                          "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                            "textSegments": [ # The text segments from the Document.text.
                              { # A text segment in the Document.text. The indices may be out of bounds
                                  # which indicate that the text extends into another document shard for
                                  # large sharded documents. See ShardInfo.text_offset
                                "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                                "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                                    # Document.text.
                              },
                            ],
                          },
                        },
                        "colSpan": 42, # How many columns this cell spans.
                      },
                    ],
                  },
                ],
              },
            ],
            "layout": { # Visual element describing a layout unit on a page. # Layout for the page.
              "orientation": "A String", # Detected orientation for the Layout.
              "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                "normalizedVertices": [ # 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.
                    "x": 3.14, # X coordinate.
                    "y": 3.14, # Y coordinate.
                  },
                ],
                "vertices": [ # 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.
                    "x": 42, # X coordinate.
                    "y": 42, # Y coordinate.
                  },
                ],
              },
              "confidence": 3.14, # Confidence of the current Layout within context of the object this
                  # layout is for. e.g. confidence can be for a single token, a table,
                  # a visual element, etc. depending on context. Range [0, 1].
              "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                "textSegments": [ # The text segments from the Document.text.
                  { # A text segment in the Document.text. The indices may be out of bounds
                      # which indicate that the text extends into another document shard for
                      # large sharded documents. See ShardInfo.text_offset
                    "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                    "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                        # Document.text.
                  },
                ],
              },
            },
            "lines": [ # A list of visually detected text lines on the page.
                # A collection of tokens that a human would perceive as a line.
              { # A collection of tokens that a human would perceive as a line.
                  # Does not cross column boundaries, can be horizontal, vertical, etc.
                "layout": { # Visual element describing a layout unit on a page. # Layout for Line.
                  "orientation": "A String", # Detected orientation for the Layout.
                  "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                    "normalizedVertices": [ # 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.
                        "x": 3.14, # X coordinate.
                        "y": 3.14, # Y coordinate.
                      },
                    ],
                    "vertices": [ # 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.
                        "x": 42, # X coordinate.
                        "y": 42, # Y coordinate.
                      },
                    ],
                  },
                  "confidence": 3.14, # Confidence of the current Layout within context of the object this
                      # layout is for. e.g. confidence can be for a single token, a table,
                      # a visual element, etc. depending on context. Range [0, 1].
                  "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                    "textSegments": [ # The text segments from the Document.text.
                      { # A text segment in the Document.text. The indices may be out of bounds
                          # which indicate that the text extends into another document shard for
                          # large sharded documents. See ShardInfo.text_offset
                        "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                        "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                            # Document.text.
                      },
                    ],
                  },
                },
                "detectedLanguages": [ # A list of detected languages together with confidence.
                  { # Detected language for a structural component.
                    "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
              },
            ],
            "paragraphs": [ # A list of visually detected text paragraphs on the page.
                # A collection of lines that a human would perceive as a paragraph.
              { # A collection of lines that a human would perceive as a paragraph.
                "detectedLanguages": [ # A list of detected languages together with confidence.
                  { # Detected language for a structural component.
                    "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
                "layout": { # Visual element describing a layout unit on a page. # Layout for Paragraph.
                  "orientation": "A String", # Detected orientation for the Layout.
                  "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                    "normalizedVertices": [ # 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.
                        "x": 3.14, # X coordinate.
                        "y": 3.14, # Y coordinate.
                      },
                    ],
                    "vertices": [ # 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.
                        "x": 42, # X coordinate.
                        "y": 42, # Y coordinate.
                      },
                    ],
                  },
                  "confidence": 3.14, # Confidence of the current Layout within context of the object this
                      # layout is for. e.g. confidence can be for a single token, a table,
                      # a visual element, etc. depending on context. Range [0, 1].
                  "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                    "textSegments": [ # The text segments from the Document.text.
                      { # A text segment in the Document.text. The indices may be out of bounds
                          # which indicate that the text extends into another document shard for
                          # large sharded documents. See ShardInfo.text_offset
                        "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                        "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                            # Document.text.
                      },
                    ],
                  },
                },
              },
            ],
            "formFields": [ # A list of visually detected form fields on the page.
              { # A form field detected on the page.
                "valueType": "A String", # If the value is non-textual, this field represents the type. Current
                    # valid values are:
                    # - blank (this indicates the field_value is normal text)
                    # - "unfilled_checkbox"
                    # - "filled_checkbox"
                "fieldName": { # Visual element describing a layout unit on a page. # Layout for the FormField name. e.g. `Address`, `Email`,
                    # `Grand total`, `Phone number`, etc.
                  "orientation": "A String", # Detected orientation for the Layout.
                  "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                    "normalizedVertices": [ # 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.
                        "x": 3.14, # X coordinate.
                        "y": 3.14, # Y coordinate.
                      },
                    ],
                    "vertices": [ # 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.
                        "x": 42, # X coordinate.
                        "y": 42, # Y coordinate.
                      },
                    ],
                  },
                  "confidence": 3.14, # Confidence of the current Layout within context of the object this
                      # layout is for. e.g. confidence can be for a single token, a table,
                      # a visual element, etc. depending on context. Range [0, 1].
                  "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                    "textSegments": [ # The text segments from the Document.text.
                      { # A text segment in the Document.text. The indices may be out of bounds
                          # which indicate that the text extends into another document shard for
                          # large sharded documents. See ShardInfo.text_offset
                        "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                        "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                            # Document.text.
                      },
                    ],
                  },
                },
                "nameDetectedLanguages": [ # A list of detected languages for name together with confidence.
                  { # Detected language for a structural component.
                    "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
                "valueDetectedLanguages": [ # A list of detected languages for value together with confidence.
                  { # Detected language for a structural component.
                    "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
                "fieldValue": { # Visual element describing a layout unit on a page. # Layout for the FormField value.
                  "orientation": "A String", # Detected orientation for the Layout.
                  "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                    "normalizedVertices": [ # 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.
                        "x": 3.14, # X coordinate.
                        "y": 3.14, # Y coordinate.
                      },
                    ],
                    "vertices": [ # 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.
                        "x": 42, # X coordinate.
                        "y": 42, # Y coordinate.
                      },
                    ],
                  },
                  "confidence": 3.14, # Confidence of the current Layout within context of the object this
                      # layout is for. e.g. confidence can be for a single token, a table,
                      # a visual element, etc. depending on context. Range [0, 1].
                  "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                    "textSegments": [ # The text segments from the Document.text.
                      { # A text segment in the Document.text. The indices may be out of bounds
                          # which indicate that the text extends into another document shard for
                          # large sharded documents. See ShardInfo.text_offset
                        "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                        "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                            # Document.text.
                      },
                    ],
                  },
                },
              },
            ],
            "blocks": [ # A list of visually detected text blocks on the page.
                # A block has a set of lines (collected into paragraphs) that have a common
                # line-spacing and orientation.
              { # A block has a set of lines (collected into paragraphs) that have a
                  # common line-spacing and orientation.
                "layout": { # Visual element describing a layout unit on a page. # Layout for Block.
                  "orientation": "A String", # Detected orientation for the Layout.
                  "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                    "normalizedVertices": [ # 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.
                        "x": 3.14, # X coordinate.
                        "y": 3.14, # Y coordinate.
                      },
                    ],
                    "vertices": [ # 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.
                        "x": 42, # X coordinate.
                        "y": 42, # Y coordinate.
                      },
                    ],
                  },
                  "confidence": 3.14, # Confidence of the current Layout within context of the object this
                      # layout is for. e.g. confidence can be for a single token, a table,
                      # a visual element, etc. depending on context. Range [0, 1].
                  "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                    "textSegments": [ # The text segments from the Document.text.
                      { # A text segment in the Document.text. The indices may be out of bounds
                          # which indicate that the text extends into another document shard for
                          # large sharded documents. See ShardInfo.text_offset
                        "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                        "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                            # Document.text.
                      },
                    ],
                  },
                },
                "detectedLanguages": [ # A list of detected languages together with confidence.
                  { # Detected language for a structural component.
                    "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
              },
            ],
            "tokens": [ # A list of visually detected tokens on the page.
              { # A detected token.
                "detectedBreak": { # Detected break at the end of a Token. # Detected break at the end of a Token.
                  "type": "A String", # Detected break type.
                },
                "detectedLanguages": [ # A list of detected languages together with confidence.
                  { # Detected language for a structural component.
                    "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
                "layout": { # Visual element describing a layout unit on a page. # Layout for Token.
                  "orientation": "A String", # Detected orientation for the Layout.
                  "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                    "normalizedVertices": [ # 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.
                        "x": 3.14, # X coordinate.
                        "y": 3.14, # Y coordinate.
                      },
                    ],
                    "vertices": [ # 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.
                        "x": 42, # X coordinate.
                        "y": 42, # Y coordinate.
                      },
                    ],
                  },
                  "confidence": 3.14, # Confidence of the current Layout within context of the object this
                      # layout is for. e.g. confidence can be for a single token, a table,
                      # a visual element, etc. depending on context. Range [0, 1].
                  "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                    "textSegments": [ # The text segments from the Document.text.
                      { # A text segment in the Document.text. The indices may be out of bounds
                          # which indicate that the text extends into another document shard for
                          # large sharded documents. See ShardInfo.text_offset
                        "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                        "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                            # Document.text.
                      },
                    ],
                  },
                },
              },
            ],
            "pageNumber": 42, # 1-based index for current Page in a parent Document.
                # Useful when a page is taken out of a Document for individual
                # processing.
            "visualElements": [ # A list of detected non-text visual elements e.g. checkbox,
                # signature etc. on the page.
              { # Detected non-text visual elements e.g. checkbox, signature etc. on the
                  # page.
                "detectedLanguages": [ # A list of detected languages together with confidence.
                  { # Detected language for a structural component.
                    "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                        # information, see
                        # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
                    "confidence": 3.14, # Confidence of detected language. Range [0, 1].
                  },
                ],
                "type": "A String", # Type of the VisualElement.
                "layout": { # Visual element describing a layout unit on a page. # Layout for VisualElement.
                  "orientation": "A String", # Detected orientation for the Layout.
                  "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon for the Layout.
                    "normalizedVertices": [ # 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.
                        "x": 3.14, # X coordinate.
                        "y": 3.14, # Y coordinate.
                      },
                    ],
                    "vertices": [ # 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.
                        "x": 42, # X coordinate.
                        "y": 42, # Y coordinate.
                      },
                    ],
                  },
                  "confidence": 3.14, # Confidence of the current Layout within context of the object this
                      # layout is for. e.g. confidence can be for a single token, a table,
                      # a visual element, etc. depending on context. Range [0, 1].
                  "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
                    "textSegments": [ # The text segments from the Document.text.
                      { # A text segment in the Document.text. The indices may be out of bounds
                          # which indicate that the text extends into another document shard for
                          # large sharded documents. See ShardInfo.text_offset
                        "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                        "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                            # Document.text.
                      },
                    ],
                  },
                },
              },
            ],
          },
        ],
        "text": "A String", # UTF-8 encoded text in reading order from the document.
        "mimeType": "A String", # An IANA published MIME type (also referred to as media type). For more
            # information, see
            # https://www.iana.org/assignments/media-types/media-types.xhtml.
        "entityRelations": [ # Relationship among Document.entities.
          { # Relationship between Entities.
            "objectId": "A String", # Object entity id.
            "relation": "A String", # Relationship description.
            "subjectId": "A String", # Subject entity id.
          },
        ],
        "translations": [ # A list of translations on Document.text. For document shards,
            # translations in this list may cross shard boundaries.
          { # A translation of the text segment.
            "textAnchor": { # Text reference indexing into the Document.text. # Provenance of the translation.
                # Text anchor indexing into the Document.text.
              "textSegments": [ # The text segments from the Document.text.
                { # A text segment in the Document.text. The indices may be out of bounds
                    # which indicate that the text extends into another document shard for
                    # large sharded documents. See ShardInfo.text_offset
                  "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                  "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                      # Document.text.
                },
              ],
            },
            "languageCode": "A String", # The BCP-47 language code, such as "en-US" or "sr-Latn". For more
                # information, see
                # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
            "translatedText": "A String", # Text translated into the target language.
          },
        ],
        "shardInfo": { # For a large document, sharding may be performed to produce several # Information about the sharding if this document is sharded part of a larger
            # document. If the document is not sharded, this message is not specified.
            # document shards. Each document shard contains this field to detail which
            # shard it is.
          "shardIndex": "A String", # The 0-based index of this shard.
          "textOffset": "A String", # The index of the first character in Document.text in the overall
              # document global text.
          "shardCount": "A String", # Total number of shards.
        },
        "textStyles": [ # Styles for the Document.text.
          { # Annotation for common text style attributes. This adheres to CSS
              # conventions as much as possible.
            "fontWeight": "A String", # Font weight. Possible values are normal, bold, bolder, and lighter.
                # https://www.w3schools.com/cssref/pr_font_weight.asp
            "textAnchor": { # Text reference indexing into the Document.text. # Text anchor indexing into the Document.text.
              "textSegments": [ # The text segments from the Document.text.
                { # A text segment in the Document.text. The indices may be out of bounds
                    # which indicate that the text extends into another document shard for
                    # large sharded documents. See ShardInfo.text_offset
                  "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                  "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                      # Document.text.
                },
              ],
            },
            "textDecoration": "A String", # Text decoration. Follows CSS standard.
                # <text-decoration-line> <text-decoration-color> <text-decoration-style>
                # https://www.w3schools.com/cssref/pr_text_text-decoration.asp
            "color": { # Represents a color in the RGBA color space. This representation is designed # Text 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 "java.awt.Color" in Java; it
                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
                # method in iOS; and, with just a little work, it can be easily formatted into
                # a CSS "rgba()" 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.
                #
                # Note: when color equality needs to be decided, implementations, unless
                # documented otherwise, will treat two colors to be equal if all their red,
                # green, blue and alpha values each differ by at most 1e-5.
                #
                # 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:&red green:&green blue:&blue alpha:&alpha]) {
                #            return nil;
                #          }
                #          Color* result = [[Color alloc] init];
                #          [result setRed:red];
                #          [result setGreen:green];
                #          [result setBlue:blue];
                #          if (alpha <= 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 (!('alpha' in rgb_color)) {
                #           return rgbToCssColor_(red, green, blue);
                #        }
                #
                #        var alphaFrac = rgb_color.alpha.value || 0.0;
                #        var rgbParams = [red, green, blue].join(',');
                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
                #     };
                #
                #     var rgbToCssColor_ = function(red, green, blue) {
                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
                #       var hexString = rgbNumber.toString(16);
                #       var missingZeros = 6 - hexString.length;
                #       var resultBuilder = ['#'];
                #       for (var i = 0; i < missingZeros; i++) {
                #          resultBuilder.push('0');
                #       }
                #       resultBuilder.push(hexString);
                #       return resultBuilder.join('');
                #     };
                #
                #     // ...
              "alpha": 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).
              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
            },
            "fontSize": { # Font size with unit. # Font size.
              "size": 3.14, # Font size for the text.
              "unit": "A String", # Unit for the font size. Follows CSS naming (in, px, pt, etc.).
            },
            "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # Text background 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 "java.awt.Color" in Java; it
                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
                # method in iOS; and, with just a little work, it can be easily formatted into
                # a CSS "rgba()" 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.
                #
                # Note: when color equality needs to be decided, implementations, unless
                # documented otherwise, will treat two colors to be equal if all their red,
                # green, blue and alpha values each differ by at most 1e-5.
                #
                # 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:&red green:&green blue:&blue alpha:&alpha]) {
                #            return nil;
                #          }
                #          Color* result = [[Color alloc] init];
                #          [result setRed:red];
                #          [result setGreen:green];
                #          [result setBlue:blue];
                #          if (alpha <= 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 (!('alpha' in rgb_color)) {
                #           return rgbToCssColor_(red, green, blue);
                #        }
                #
                #        var alphaFrac = rgb_color.alpha.value || 0.0;
                #        var rgbParams = [red, green, blue].join(',');
                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
                #     };
                #
                #     var rgbToCssColor_ = function(red, green, blue) {
                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
                #       var hexString = rgbNumber.toString(16);
                #       var missingZeros = 6 - hexString.length;
                #       var resultBuilder = ['#'];
                #       for (var i = 0; i < missingZeros; i++) {
                #          resultBuilder.push('0');
                #       }
                #       resultBuilder.push(hexString);
                #       return resultBuilder.join('');
                #     };
                #
                #     // ...
              "alpha": 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).
              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
            },
            "textStyle": "A String", # Text style. Possible values are normal, italic, and oblique.
                # https://www.w3schools.com/cssref/pr_font_font-style.asp
          },
        ],
        "entities": [ # A list of entities detected on Document.text. For document shards,
            # entities in this list may cross shard boundaries.
          { # A phrase in the text that is a known entity type, such as a person, an
              # organization, or location.
            "textAnchor": { # Text reference indexing into the Document.text. # Provenance of the entity.
                # Text anchor indexing into the Document.text.
              "textSegments": [ # The text segments from the Document.text.
                { # A text segment in the Document.text. The indices may be out of bounds
                    # which indicate that the text extends into another document shard for
                    # large sharded documents. See ShardInfo.text_offset
                  "startIndex": "A String", # TextSegment start UTF-8 char index in the Document.text.
                  "endIndex": "A String", # TextSegment half open end UTF-8 char index in the
                      # Document.text.
                },
              ],
            },
            "mentionId": "A String", # Deprecated.  Use `id` field instead.
            "type": "A String", # Entity type from a schema e.g. `Address`.
            "confidence": 3.14, # Optional. Confidence of detected Schema entity. Range [0, 1].
            "mentionText": "A String", # Text value in the document e.g. `1600 Amphitheatre Pkwy`.
          },
        ],
      }