Detectar texto en imágenes

El servicio de reconocimiento óptico de caracteres (OCR) de Vertex AI en Google Distributed Cloud (GDC) air-gapped detecta texto en imágenes mediante el método de la API BatchAnnotateImages. El servicio admite archivos JPEG y PNG para imágenes.

En esta página se muestra cómo detectar texto en imágenes mediante la API OCR en Distributed Cloud.

Antes de empezar

Antes de empezar a usar la API OCR, debes tener un proyecto con la API OCR habilitada y las credenciales adecuadas. También puedes instalar bibliotecas de cliente para ayudarte a hacer llamadas a la API. Para obtener más información, consulta Configurar un proyecto de reconocimiento de caracteres.

Detectar texto de archivos JPEG y PNG

El método BatchAnnotateImages detecta texto de un lote de archivos JPEG o PNG. Envías directamente el archivo del que quieres detectar el texto como contenido en la solicitud de la API. El sistema devuelve el texto detectado en formato JSON en la respuesta de la API.

Debe especificar valores para los campos del cuerpo JSON de su solicitud de API. En la siguiente tabla se describen los campos del cuerpo de la solicitud que debe proporcionar al usar el método de la API BatchAnnotateImages para sus solicitudes de detección de texto:

Campos del cuerpo de la solicitud Descripción del campo
content Las imágenes con el texto que quieres detectar. Proporciona la representación en Base64 (cadena ASCII) de los datos de imagen binarios.
type El tipo de detección de texto que necesitas de la imagen.

Especifica una de las dos funciones de anotación:
  • TEXT_DETECTION detecta y extrae texto de cualquier imagen. La respuesta JSON incluye la cadena extraída, las palabras individuales y sus cuadros delimitadores.
  • DOCUMENT_TEXT_DETECTION también extrae texto de una imagen, pero el servicio optimiza la respuesta para texto y documentos densos. El archivo JSON incluye información sobre páginas, bloques, párrafos, palabras y saltos.
Para obtener más información sobre estas funciones de anotación, consulta el artículo Funciones de reconocimiento óptico de caracteres.
language_hints Opcional. Lista de idiomas que se van a usar para la detección de texto.

El sistema interpreta un valor vacío en este campo como detección automática del idioma.

No es necesario que defina el campo language_hints para los idiomas basados en el alfabeto latino.

Si sabes el idioma del texto de la imagen, puedes mejorar los resultados si lo indicas.

Para obtener información sobre la representación JSON completa, consulta AnnotateImageRequest.

Enviar una solicitud a la API

Envía una solicitud a la API preentrenada de OCR mediante el método de la API REST. De lo contrario, interactúa con la API preentrenada de OCR desde una secuencia de comandos de Python para detectar texto en archivos JPEG o PNG.

En los siguientes ejemplos se muestra cómo detectar texto en una imagen mediante OCR:

REST

Sigue estos pasos para detectar texto en imágenes mediante el método de la API REST:

  1. Guarda el siguiente archivo request.json para el cuerpo de la solicitud:

    cat <<- EOF > request.json
    {
      "requests": [
        {
          "image": {
            "content": BASE64_ENCODED_IMAGE
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "image_context": {
            "language_hints": [
              "LANGUAGE_HINT_1",
              "LANGUAGE_HINT_2",
              ...
            ]
          }
        }
      ]
    }
    EOF
    

    Haz los cambios siguientes:

    • BASE64_ENCODED_IMAGE: la representación en Base64 (cadena ASCII) de los datos de imagen binarios. Esta cadena empieza por caracteres similares a /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==.
    • FEATURE_TYPE: el tipo de detección de texto que necesitas de la imagen. Los valores permitidos son TEXT_DETECTION y DOCUMENT_TEXT_DETECTION.
    • LANGUAGE_HINT: las etiquetas de idioma BCP 47 que se van a usar como sugerencias de idioma para la detección de texto, como en-t-i0-handwrit. Este campo es opcional y el sistema interpreta un valor vacío como detección automática del idioma.
  2. Obtener un token de autenticación

  3. Haz la solicitud:

    curl

    curl -X POST \
      -H "Authorization: Bearer TOKEN" \
      -H "x-goog-user-project: projects/PROJECT_ID" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      https://ENDPOINT/v1/images:annotate
    

    Haz los cambios siguientes:

    PowerShell

    $headers = @{
      "Authorization" = "Bearer TOKEN"
      "x-goog-user-project" = "projects/PROJECT_ID"
    }
    
    Invoke-WebRequest
      -Method POST
      -Headers $headers
      -ContentType: "application/json; charset=utf-8"
      -InFile request.json
      -Uri "ENDPOINT/v1/images:annotate" | Select-Object -Expand Content
    

    Haz los cambios siguientes:

Python

Sigue estos pasos para usar el servicio de OCR desde una secuencia de comandos de Python para detectar texto en una imagen:

  1. Instala la versión más reciente de la biblioteca de cliente de OCR.

  2. Define las variables de entorno necesarias en una secuencia de comandos de Python.

  3. Autentica tu solicitud a la API.

  4. Añade el siguiente código a la secuencia de comandos de Python que has creado:

    from google.cloud import vision
    import google.auth
    from google.auth.transport import requests
    from google.api_core.client_options import ClientOptions
    
    audience = "https://ENDPOINT:443"
    api_endpoint="ENDPOINT:443"
    
    def vision_client(creds):
      opts = ClientOptions(api_endpoint=api_endpoint)
      return vision.ImageAnnotatorClient(credentials=creds, client_options=opts)
    
    def main():
      creds = None
      try:
        creds, project_id = google.auth.default()
        creds = creds.with_gdch_audience(audience)
        req = requests.Request()
        creds.refresh(req)
        print("Got token: ")
        print(creds.token)
      except Exception as e:
        print("Caught exception" + str(e))
        raise e
      return creds
    
    def vision_func(creds):
      vc = vision_client(creds)
      image = {"content": "BASE64_ENCODED_IMAGE"}
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      # Each requests element corresponds to a single image. To annotate more
      # images, create a request element for each image and add it to
      # the array of requests
      req = {"image": image, "features": features}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      resp = vc.annotate_image(req,metadata=metadata)
    
      print(resp)
    
    if __name__=="__main__":
      creds = main()
      vision_func(creds)
    

    Haz los cambios siguientes:

    • ENDPOINT: el endpoint de OCR que usas en tu organización. Para obtener más información, consulta el estado del servicio y los endpoints.
    • BASE64_ENCODED_IMAGE: la representación en Base64 (cadena ASCII) de los datos de imagen binarios. Esta cadena empieza por caracteres similares a /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==.
    • FEATURE_TYPE: el tipo de detección de texto que necesitas de la imagen. Los valores permitidos son TEXT_DETECTION y DOCUMENT_TEXT_DETECTION.
    • PROJECT_ID: tu ID de proyecto.
  5. Guarda la secuencia de comandos de Python.

  6. Ejecuta la secuencia de comandos de Python para detectar texto en la imagen:

    python SCRIPT_NAME
    

    Sustituye SCRIPT_NAME por el nombre que le hayas dado a tu script de Python, como vision.py.