El servicio de reconocimiento óptico de caracteres (OCR) de Vertex AI en Google Distributed Cloud (GDC) aislado detecta texto en archivos PDF y TIFF con los siguientes dos métodos de la API:
BatchAnnotateFiles
: Detecta texto con solicitudes intercaladas.AsyncBatchAnnotateFiles
: Detecta texto con solicitudes sin conexión (asíncronas).
En esta página, se muestra cómo detectar texto en archivos con la API de OCR en Distributed Cloud.
Antes de comenzar
Antes de comenzar a usar la API de OCR, debes tener un proyecto con la API de OCR habilitada y las credenciales adecuadas. También puedes instalar bibliotecas cliente para ayudarte a realizar llamadas a la API. Para obtener más información, consulta Configura un proyecto de reconocimiento de caracteres.
Detecta texto con solicitudes intercaladas
El método BatchAnnotateFiles
detecta texto en un lote de archivos PDF o TIFF.
Envías directamente el archivo del que deseas detectar texto como contenido en la solicitud de la API. El sistema devuelve el texto detectado resultante en formato JSON en la respuesta de la API.
Debes especificar valores para los campos del cuerpo JSON de tu solicitud a la API. En la siguiente tabla, se incluye una descripción de los campos del cuerpo de la solicitud que debes proporcionar cuando usas el método de la API de BatchAnnotateFiles
para tus solicitudes de detección de texto:
Campos del cuerpo de la solicitud | Descripción del campo |
---|---|
content |
Son los archivos con texto que se detectará. Proporcionas la representación en Base64 (cadena ASCII) del contenido de tu archivo binario. |
mime_type |
Es el tipo de archivo fuente. Debes establecerlo en uno de los siguientes valores:
|
type |
Es el tipo de detección de texto que necesitas del archivo. Especifica una de las dos funciones de anotación:
|
language_hints |
Opcional. Lista de idiomas que se usarán para la detección de texto. El sistema interpreta un valor vacío para este campo como detección automática del idioma. No es necesario que configures el campo language_hints para los idiomas basados en el alfabeto latino.Si conoces el idioma del texto en el archivo, establecer una sugerencia mejora los resultados. |
pages |
Opcional. Es la cantidad de páginas del archivo que se procesarán para la detección de texto. La cantidad máxima de páginas que puedes especificar es cinco. Si no especificas la cantidad de páginas, el servicio procesará las primeras cinco páginas del archivo. |
Para obtener información sobre la representación completa en JSON, consulta AnnotateFileRequest
.
Cómo realizar una solicitud a la API intercalada
Realiza una solicitud a la API previamente entrenada de OCR con el método de la API de REST. De lo contrario, interactúa con la API previamente entrenada de OCR desde una secuencia de comandos de Python para detectar texto en archivos PDF o TIFF.
En los siguientes ejemplos, se muestra cómo detectar texto en un archivo con OCR:
REST
Sigue estos pasos para detectar texto en archivos con el método de la API de REST:
Guarda el siguiente archivo
request.json
para el cuerpo de tu solicitud:cat <<- EOF > request.json { "requests": [ { "input_config": { "content": BASE64_ENCODED_FILE, "mime_type": "application/pdf" }, "features": [ { "type": "FEATURE_TYPE" } ], "image_context": { "language_hints": [ "LANGUAGE_HINT_1", "LANGUAGE_HINT_2", ... ] }, "pages": [] } ] } EOF
Reemplaza lo siguiente:
BASE64_ENCODED_FILE
: Es la representación en Base64 (cadena ASCII) del contenido de tu archivo binario. Esta cadena comienza con caracteres que se parecen a/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
.FEATURE_TYPE
: Es el tipo de detección de texto que necesitas del archivo. Los valores permitidos sonTEXT_DETECTION
oDOCUMENT_TEXT_DETECTION
.LANGUAGE_HINT
: Son las etiquetas de idioma BCP 47 que se usarán como sugerencias de idioma para la detección de texto, comoen-t-i0-handwrit
. Este campo es opcional y el sistema interpreta un valor vacío como detección automática del idioma.
Realiza 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/files:annotate
Reemplaza lo siguiente:
TOKEN
: El token de autenticación que obtuvistePROJECT_ID
: el ID de tu proyectoENDPOINT
: Es el extremo de OCR que usas para tu organización. Para obtener más información, consulta el estado y los extremos del servicio.
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/files:annotate" | Select-Object -Expand Content
Reemplaza lo siguiente:
TOKEN
: El token de autenticación que obtuvisteENDPOINT
: Es el extremo de OCR que usas para tu organización. Para obtener más información, consulta el estado y los extremos del servicio.
Python
Sigue estos pasos para usar el servicio de OCR desde una secuencia de comandos de Python y detectar texto en un archivo:
Instala la versión más reciente de la biblioteca cliente de OCR.
Configura las variables de entorno necesarias en una secuencia de comandos de Python.
Agrega el siguiente código a la secuencia de comandos de Python que creaste:
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) input_config = {"content": "BASE64_ENCODED_FILE"} features = [{"type_": vision.Feature.Type.FEATURE_TYPE}] # Each requests element corresponds to a single file. To annotate more # files, create a request element for each file and add it to # the array of requests req = {"input_config": input_config, "features": features} metadata = [("x-goog-user-project", "projects/PROJECT_ID")] resp = vc.annotate_file(req,metadata=metadata) print(resp) if __name__=="__main__": creds = main() vision_func(creds)
Reemplaza lo siguiente:
ENDPOINT
: Es el extremo de OCR que usas para tu organización. Para obtener más información, consulta el estado y los extremos del servicio.BASE64_ENCODED_FILE
: Es la representación en Base64 (cadena ASCII) del contenido del archivo. Esta cadena comienza con caracteres que se parecen a/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
.FEATURE_TYPE
: Es el tipo de detección de texto que necesitas del archivo. Los valores permitidos sonTEXT_DETECTION
oDOCUMENT_TEXT_DETECTION
.PROJECT_ID
: el ID de tu proyecto
Guarda la secuencia de comandos de Python.
Ejecuta la secuencia de comandos de Python para detectar texto en el archivo:
python SCRIPT_NAME
Reemplaza
SCRIPT_NAME
por el nombre que le diste a tu secuencia de comandos de Python, comovision.py
.
Detecta texto con solicitudes sin conexión
El método AsyncBatchAnnotateFiles
detecta texto en un lote de archivos PDF o TIFF realizando una solicitud sin conexión (asíncrona). Los archivos pueden contener varias páginas y varias imágenes por página. Los archivos fuente deben estar en un bucket de almacenamiento de tu proyecto de Distributed Cloud. El sistema guarda el texto detectado resultante en formato JSON en un bucket de almacenamiento.
El servicio de OCR inicia el procesamiento sin conexión y devuelve el ID del proceso de larga duración que realiza la detección de texto en el archivo. Puedes usar el ID que se devolvió para hacer un seguimiento del estado del procesamiento sin conexión. Si hay demasiadas operaciones en curso, es posible que el procesamiento sin conexión no comience de inmediato.
Debes especificar valores para los campos del cuerpo JSON de tu solicitud a la API. En la siguiente tabla, se incluye una descripción de los campos del cuerpo de la solicitud que debes proporcionar cuando usas el método de la API de AsyncBatchAnnotateFiles
para tus solicitudes de detección de texto:
Campos del cuerpo de la solicitud | Descripción del campo |
---|---|
s3_source.uri |
Es la ruta de acceso URI a un archivo fuente válido (PDF o TIFF) en un bucket de almacenamiento de tu proyecto de Distributed Cloud. Este archivo contiene el texto que deseas detectar. El usuario o la cuenta de servicio que realiza la solicitud debe tener, como mínimo, privilegios de lectura en el archivo. |
mime_type |
Es el tipo de archivo fuente. Debes establecerlo en uno de los siguientes valores:
|
type |
Es el tipo de detección de texto que necesitas del archivo. Especifica una de las dos funciones de anotación:
|
s3_destination.uri |
Es la ruta de URI a un bucket de almacenamiento de tu proyecto de Distributed Cloud para guardar los archivos de salida. Esta ubicación es donde deseas almacenar los resultados de la detección. El usuario o la cuenta de servicio que realiza la solicitud debe tener permiso de escritura en el bucket. |
Almacena el archivo fuente en un bucket de almacenamiento
Antes de enviar una solicitud, debes asegurarte de que la cuenta de servicio de OCR tenga permisos de lectura para tu bucket de entrada y permisos de escritura para tu bucket de salida.
Los buckets de entrada y salida pueden ser diferentes y estar en diferentes espacios de nombres de proyectos. Te recomendamos que uses los mismos buckets de entrada y salida para evitar errores, como almacenar los resultados en buckets incorrectos.
Sigue estos pasos para almacenar en un bucket de almacenamiento el archivo del que deseas detectar texto:
- Configura la CLI de gcloud para el almacenamiento de objetos.
Crea un bucket de almacenamiento en el espacio de nombres de tu proyecto. Usa una clase de almacenamiento
Standard
.Puedes crear el bucket de almacenamiento implementando un recurso
Bucket
en el espacio de nombres del proyecto:apiVersion: object.gdc.goog/v1 kind: Bucket metadata: name: ocr-async-bucket namespace: PROJECT_NAMESPACE spec: description: bucket for async ocr storageClass: Standard bucketPolicy: lockingPolicy: defaultObjectRetentionDays: 90
Otorga permisos
read
ywrite
en el bucket a la cuenta de servicio (g-vai-ocr-sie-sa
) que usa el servicio de OCR.Puedes seguir estos pasos para crear el rol y la vinculación del rol con recursos personalizados:
Para crear el rol, implementa un recurso
Role
en el espacio de nombres del proyecto:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: ocr-async-reader-writer namespace: PROJECT_NAMESPACE rules: - apiGroups: - object.gdc.goog resources: - buckets verbs: - read-object - write-object
Implementa un recurso
RoleBinding
en el espacio de nombres del proyecto para crear la vinculación del rol:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: ocr-async-reader-writer-rolebinding namespace: PROJECT_NAMESPACE roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: ocr-async-reader-writer subjects: - kind: ServiceAccount name: g-vai-ocr-sie-sa namespace: g-vai-ocr-sie
Sube el archivo al bucket de almacenamiento que creaste. Para obtener más información, consulta Cómo subir y descargar objetos de almacenamiento en proyectos.
Realiza una solicitud a la API sin conexión
Realiza una solicitud a la API previamente entrenada de OCR con el método de la API de REST. De lo contrario, interactúa con la API previamente entrenada de OCR desde una secuencia de comandos de Python para detectar texto en archivos PDF o TIFF.
En los siguientes ejemplos, se muestra cómo detectar texto en un archivo con OCR:
REST
Sigue estos pasos para detectar texto en archivos con el método de la API de REST:
Guarda el siguiente archivo
request.json
para el cuerpo de tu solicitud:cat <<- EOF > request.json { "parent": PROJECT_ID, "requests":[ { "input_config": { "s3_source": { "uri": "SOURCE_FILE" }, "mime_type": "application/pdf" }, "features": [ { "type": "FEATURE_TYPE" } ], "output_config": { "s3_destination": { "uri": "DESTINATION_BUCKET" } } } ] } EOF
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoSOURCE_FILE
: Es la ruta de acceso al URI de un archivo fuente válido (PDF o TIFF) en un bucket de almacenamiento de tu proyecto de Distributed Cloud.FEATURE_TYPE
: Es el tipo de detección de texto que necesitas del archivo. Los valores permitidos sonTEXT_DETECTION
oDOCUMENT_TEXT_DETECTION
.DESTINATION_BUCKET
: Es la ruta de acceso al URI de un bucket de almacenamiento de tu proyecto de Distributed Cloud en el que se guardarán los archivos de salida.
Realiza 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/files:asyncBatchAnnotate
Reemplaza lo siguiente:
TOKEN
: El token de autenticación que obtuvistePROJECT_ID
: el ID de tu proyectoENDPOINT
: Es el extremo de OCR que usas para tu organización. Para obtener más información, consulta el estado y los extremos del servicio.
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/files:asyncBatchAnnotate" | Select-Object -Expand Content
Reemplaza lo siguiente:
TOKEN
: El token de autenticación que obtuvisteENDPOINT
: Es el extremo de OCR que usas para tu organización. Para obtener más información, consulta el estado y los extremos del servicio.
Python
Sigue estos pasos para usar el servicio de OCR desde una secuencia de comandos de Python y detectar texto en un archivo:
Instala la versión más reciente de la biblioteca cliente de OCR.
Configura las variables de entorno necesarias en una secuencia de comandos de Python.
Agrega el siguiente código a la secuencia de comandos de Python que creaste:
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_func_async(creds): vc = vision_client(creds) features = [{"type_": vision.Feature.Type.FEATURE_TYPE}] input_config = {"s3_source":{"uri":SOURCE_FILE},"mime_type": "application/pdf"} output_config = {"s3_destination": {"uri": DESTINATION_BUKET}} req = {"input_config": input_config, "output_config": output_config, "features":features} reqs = {"requests":[req],"parent":PROJECT_ID} metadata = [("x-goog-user-project", "projects/PROJECT_ID")] operation = vc.async_batch_annotate_files(request=reqs, metadata=metadata) lro = operation.operation resp = operation.result() 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 if __name__=="__main__": creds = main() vision_func_async(creds)
Reemplaza lo siguiente:
ENDPOINT
: Es el extremo de OCR que usas para tu organización. Para obtener más información, consulta el estado y los extremos del servicio.FEATURE_TYPE
: Es el tipo de detección de texto que necesitas del archivo. Los valores permitidos sonTEXT_DETECTION
oDOCUMENT_TEXT_DETECTION
.SOURCE_FILE
: Es la ruta de acceso al URI de un archivo fuente válido (PDF o TIFF) en un bucket de almacenamiento de tu proyecto de Distributed Cloud.DESTINATION_BUCKET
: Es la ruta de acceso al URI de un bucket de almacenamiento de tu proyecto de Distributed Cloud en el que se guardarán los archivos de salida.PROJECT_ID
: el ID de tu proyecto
Guarda la secuencia de comandos de Python.
Ejecuta la secuencia de comandos de Python para detectar texto en el archivo:
python SCRIPT_NAME
Reemplaza
SCRIPT_NAME
por el nombre que le diste a tu secuencia de comandos de Python, comovision.py
.
Puedes usar el nombre de la operación que devolvió el método AsyncBatchAnnotateFiles
para verificar el estado de la operación.
Obtén el estado de la operación
El método get
devuelve el estado más reciente de una operación de larga duración, como la solicitud sin conexión para la detección de texto. Usa este método para verificar el estado de la operación, como en el siguiente ejemplo:
curl -X GET "http://ENDPOINT/v1/OPERATION_NAME"
Reemplaza OPERATION_NAME
por el nombre de la operación que devolvió el método AsyncBatchAnnotateFiles
cuando realizaste la solicitud sin conexión.
Mostrar lista de operaciones
El método list
devuelve una lista de las operaciones que coinciden con un filtro especificado en la solicitud. El método puede devolver operaciones de un proyecto específico. Para llamar al método list, especifica el ID de tu proyecto y el endpoint de OCR, como en el siguiente ejemplo:
curl -X GET "http://ENDPOINT/v1/PROJECT_ID?page_size=10"