Detete texto em ficheiros (PDF/TIFF)

A API Vision pode detetar e transcrever texto de ficheiros PDF e TIFF armazenados no Cloud Storage.

A deteção de texto de documentos PDF e TIFF tem de ser pedida através da função files:asyncBatchAnnotate, que executa um pedido offline (assíncrono) e fornece o respetivo estado através dos recursos operations.

A saída de um pedido PDF/TIFF é escrita num ficheiro JSON criado no contentor do Cloud Storage especificado.

Limitações

A API Vision aceita ficheiros PDF/TIFF com até 2000 páginas. Os ficheiros maiores vão devolver um erro.

Autenticação

As chaves API não são suportadas para pedidos files:asyncBatchAnnotate. Consulte o artigo Usar uma conta de serviço para ver instruções sobre a autenticação com uma conta de serviço.

A conta usada para a autenticação tem de ter acesso ao contentor do Cloud Storage que especificar para a saída (roles/editor ou roles/storage.objectCreator ou superior).

Pode usar uma chave da API para consultar o estado da operação. Consulte as instruções em Usar uma chave da API.

Pedidos de deteção de texto em documentos

Atualmente, a deteção de documentos PDF/TIFF só está disponível para ficheiros armazenados em contentores do Cloud Storage. Os ficheiros JSON de resposta são guardados de forma semelhante num contentor do Cloud Storage.

Página PDF do censo dos EUA de 2010
gs://cloud-samples-data/vision/pdf_tiff/census2010.pdf, Fonte: United States Census Bureau.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • CLOUD_STORAGE_BUCKET: Um contentor/diretório do Cloud Storage para guardar os ficheiros de saída, expresso no seguinte formato:
    • gs://bucket/directory/
    O utilizador que faz o pedido tem de ter autorização de escrita no contentor.
  • CLOUD_STORAGE_FILE_URI: o caminho para um ficheiro (PDF/TIFF) válido num contentor do Cloud Storage. Tem de ter, pelo menos, privilégios de leitura para o ficheiro. Exemplo:
    • gs://cloud-samples-data/vision/pdf_tiff/census2010.pdf
  • FEATURE_TYPE: um tipo de funcionalidade válido. Para pedidos files:asyncBatchAnnotate, pode usar os seguintes tipos de funcionalidades:
    • DOCUMENT_TEXT_DETECTION
    • TEXT_DETECTION
  • PROJECT_ID: o ID do seu Google Cloud projeto.

Considerações específicas do campo:

  • inputConfig: substitui o campo image usado noutros pedidos da API Vision. Contém dois campos secundários:
    • gcsSource.uri: o URI do Google Cloud Storage do ficheiro PDF ou TIFF (acessível ao utilizador ou à conta de serviço que está a fazer o pedido).
    • mimeType: um dos tipos de ficheiros aceites: application/pdf ou image/tiff.
  • outputConfig: especifica os detalhes da saída. Contém dois campos filho:
    • gcsDestination.uri – um URI do Google Cloud Storage válido. O contentor tem de ser gravável pelo utilizador ou pela conta de serviço que está a fazer o pedido. O nome do ficheiro é output-x-to-y, em que x e y representam os números de páginas PDF/TIFF incluídos nesse ficheiro de saída. Se o ficheiro existir, o respetivo conteúdo é substituído.
    • batchSize - especifica quantas páginas de saída devem ser incluídas em cada ficheiro JSON de saída.

Método HTTP e URL:

POST https://vision.googleapis.com/v1/files:asyncBatchAnnotate

Corpo JSON do pedido:

{
  "requests":[
    {
      "inputConfig": {
        "gcsSource": {
          "uri": "CLOUD_STORAGE_FILE_URI"
        },
        "mimeType": "application/pdf"
      },
      "features": [
        {
          "type": "FEATURE_TYPE"
        }
      ],
      "outputConfig": {
        "gcsDestination": {
          "uri": "CLOUD_STORAGE_BUCKET"
        },
        "batchSize": 1
      }
    }
  ]
}

Para enviar o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://vision.googleapis.com/v1/files:asyncBatchAnnotate"

PowerShell

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/files:asyncBatchAnnotate" | Select-Object -Expand Content
Resposta:

Um pedido asyncBatchAnnotate bem-sucedido devolve uma resposta com um único campo de nome:

{
  "name": "projects/usable-auth-library/operations/1efec2285bd442df"
}

Este nome representa uma operação de longa duração com um ID associado (por exemplo, 1efec2285bd442df), que pode ser consultado através da API v1.operations.

Para obter a resposta de anotação do Vision, envie um pedido GET para o ponto final v1.operations, transmitindo o ID da operação no URL:

GET https://vision.googleapis.com/v1/operations/operation-id

Por exemplo:

curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/projects/project-id/locations/location-id/operations/1efec2285bd442df

Se a operação estiver em curso:

{
  "name": "operations/1efec2285bd442df",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.OperationMetadata",
    "state": "RUNNING",
    "createTime": "2019-05-15T21:10:08.401917049Z",
    "updateTime": "2019-05-15T21:10:33.700763554Z"
  }
}

Quando a operação estiver concluída, o state é apresentado como DONE e os seus resultados são escritos no ficheiro do Google Cloud Storage que especificou:

{
  "name": "operations/1efec2285bd442df",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.OperationMetadata",
    "state": "DONE",
    "createTime": "2019-05-15T20:56:30.622473785Z",
    "updateTime": "2019-05-15T20:56:41.666379749Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.AsyncBatchAnnotateFilesResponse",
    "responses": [
      {
        "outputConfig": {
          "gcsDestination": {
            "uri": "gs://your-bucket-name/folder/"
          },
          "batchSize": 1
        }
      }
    ]
  }
}

O JSON no seu ficheiro de saída é semelhante ao de um [pedido de deteção de texto de documento](/vision/docs/ocr) de uma imagem, com a adição de um campo context que mostra a localização do PDF ou TIFF especificado e o número de páginas no ficheiro:

output-1-to-1.json

Go

Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Go Vision.

Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


// detectAsyncDocumentURI performs Optical Character Recognition (OCR) on a
// PDF file stored in GCS.
func detectAsyncDocumentURI(w io.Writer, gcsSourceURI, gcsDestinationURI string) error {
	ctx := context.Background()

	client, err := vision.NewImageAnnotatorClient(ctx)
	if err != nil {
		return err
	}

	request := &visionpb.AsyncBatchAnnotateFilesRequest{
		Requests: []*visionpb.AsyncAnnotateFileRequest{
			{
				Features: []*visionpb.Feature{
					{
						Type: visionpb.Feature_DOCUMENT_TEXT_DETECTION,
					},
				},
				InputConfig: &visionpb.InputConfig{
					GcsSource: &visionpb.GcsSource{Uri: gcsSourceURI},
					// Supported MimeTypes are: "application/pdf" and "image/tiff".
					MimeType: "application/pdf",
				},
				OutputConfig: &visionpb.OutputConfig{
					GcsDestination: &visionpb.GcsDestination{Uri: gcsDestinationURI},
					// How many pages should be grouped into each json output file.
					BatchSize: 2,
				},
			},
		},
	}

	operation, err := client.AsyncBatchAnnotateFiles(ctx, request)
	if err != nil {
		return err
	}

	fmt.Fprintf(w, "Waiting for the operation to finish.")

	resp, err := operation.Wait(ctx)
	if err != nil {
		return err
	}

	fmt.Fprintf(w, "%v", resp)

	return nil
}

Java

Antes de experimentar este exemplo, siga as instruções de configuração do Java no guia de início rápido da API Vision com as bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Vision Java.

/**
 * Performs document text OCR with PDF/TIFF as source files on Google Cloud Storage.
 *
 * @param gcsSourcePath The path to the remote file on Google Cloud Storage to detect document
 *     text on.
 * @param gcsDestinationPath The path to the remote file on Google Cloud Storage to store the
 *     results on.
 * @throws Exception on errors while closing the client.
 */
public static void detectDocumentsGcs(String gcsSourcePath, String gcsDestinationPath)
    throws Exception {

  // Initialize client that will be used to send requests. This client only needs to be created
  // once, and can be reused for multiple requests. After completing all of your requests, call
  // the "close" method on the client to safely clean up any remaining background resources.
  try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
    List<AsyncAnnotateFileRequest> requests = new ArrayList<>();

    // Set the GCS source path for the remote file.
    GcsSource gcsSource = GcsSource.newBuilder().setUri(gcsSourcePath).build();

    // Create the configuration with the specified MIME (Multipurpose Internet Mail Extensions)
    // types
    InputConfig inputConfig =
        InputConfig.newBuilder()
            .setMimeType(
                "application/pdf") // Supported MimeTypes: "application/pdf", "image/tiff"
            .setGcsSource(gcsSource)
            .build();

    // Set the GCS destination path for where to save the results.
    GcsDestination gcsDestination =
        GcsDestination.newBuilder().setUri(gcsDestinationPath).build();

    // Create the configuration for the System.output with the batch size.
    // The batch size sets how many pages should be grouped into each json System.output file.
    OutputConfig outputConfig =
        OutputConfig.newBuilder().setBatchSize(2).setGcsDestination(gcsDestination).build();

    // Select the Feature required by the vision API
    Feature feature = Feature.newBuilder().setType(Feature.Type.DOCUMENT_TEXT_DETECTION).build();

    // Build the OCR request
    AsyncAnnotateFileRequest request =
        AsyncAnnotateFileRequest.newBuilder()
            .addFeatures(feature)
            .setInputConfig(inputConfig)
            .setOutputConfig(outputConfig)
            .build();

    requests.add(request);

    // Perform the OCR request
    OperationFuture<AsyncBatchAnnotateFilesResponse, OperationMetadata> response =
        client.asyncBatchAnnotateFilesAsync(requests);

    System.out.println("Waiting for the operation to finish.");

    // Wait for the request to finish. (The result is not used, since the API saves the result to
    // the specified location on GCS.)
    List<AsyncAnnotateFileResponse> result =
        response.get(180, TimeUnit.SECONDS).getResponsesList();

    // Once the request has completed and the System.output has been
    // written to GCS, we can list all the System.output files.
    Storage storage = StorageOptions.getDefaultInstance().getService();

    // Get the destination location from the gcsDestinationPath
    Pattern pattern = Pattern.compile("gs://([^/]+)/(.+)");
    Matcher matcher = pattern.matcher(gcsDestinationPath);

    if (matcher.find()) {
      String bucketName = matcher.group(1);
      String prefix = matcher.group(2);

      // Get the list of objects with the given prefix from the GCS bucket
      Bucket bucket = storage.get(bucketName);
      com.google.api.gax.paging.Page<Blob> pageList = bucket.list(BlobListOption.prefix(prefix));

      Blob firstOutputFile = null;

      // List objects with the given prefix.
      System.out.println("Output files:");
      for (Blob blob : pageList.iterateAll()) {
        System.out.println(blob.getName());

        // Process the first System.output file from GCS.
        // Since we specified batch size = 2, the first response contains
        // the first two pages of the input file.
        if (firstOutputFile == null) {
          firstOutputFile = blob;
        }
      }

      // Get the contents of the file and convert the JSON contents to an AnnotateFileResponse
      // object. If the Blob is small read all its content in one request
      // (Note: the file is a .json file)
      // Storage guide: https://cloud.google.com/storage/docs/downloading-objects
      String jsonContents = new String(firstOutputFile.getContent());
      Builder builder = AnnotateFileResponse.newBuilder();
      JsonFormat.parser().merge(jsonContents, builder);

      // Build the AnnotateFileResponse object
      AnnotateFileResponse annotateFileResponse = builder.build();

      // Parse through the object to get the actual response for the first page of the input file.
      AnnotateImageResponse annotateImageResponse = annotateFileResponse.getResponses(0);

      // Here we print the full text from the first page.
      // The response contains more information:
      // annotation/pages/blocks/paragraphs/words/symbols
      // including confidence score and bounding boxes
      System.out.format("%nText: %s%n", annotateImageResponse.getFullTextAnnotation().getText());
    } else {
      System.out.println("No MATCH");
    }
  }
}

Node.js

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Node.js Vision.

Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


// Imports the Google Cloud client libraries
const vision = require('@google-cloud/vision').v1;

// Creates a client
const client = new vision.ImageAnnotatorClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// Bucket where the file resides
// const bucketName = 'my-bucket';
// Path to PDF file within bucket
// const fileName = 'path/to/document.pdf';
// The folder to store the results
// const outputPrefix = 'results'

const gcsSourceUri = `gs://${bucketName}/${fileName}`;
const gcsDestinationUri = `gs://${bucketName}/${outputPrefix}/`;

const inputConfig = {
  // Supported mime_types are: 'application/pdf' and 'image/tiff'
  mimeType: 'application/pdf',
  gcsSource: {
    uri: gcsSourceUri,
  },
};
const outputConfig = {
  gcsDestination: {
    uri: gcsDestinationUri,
  },
};
const features = [{type: 'DOCUMENT_TEXT_DETECTION'}];
const request = {
  requests: [
    {
      inputConfig: inputConfig,
      features: features,
      outputConfig: outputConfig,
    },
  ],
};

const [operation] = await client.asyncBatchAnnotateFiles(request);
const [filesResponse] = await operation.promise();
const destinationUri =
  filesResponse.responses[0].outputConfig.gcsDestination.uri;
console.log('Json saved to: ' + destinationUri);

Python

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Python Vision.

Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

def async_detect_document(gcs_source_uri, gcs_destination_uri):
    """OCR with PDF/TIFF as source files on GCS"""
    import json
    import re
    from google.cloud import vision
    from google.cloud import storage

    # Supported mime_types are: 'application/pdf' and 'image/tiff'
    mime_type = "application/pdf"

    # How many pages should be grouped into each json output file.
    batch_size = 2

    client = vision.ImageAnnotatorClient()

    feature = vision.Feature(type_=vision.Feature.Type.DOCUMENT_TEXT_DETECTION)

    gcs_source = vision.GcsSource(uri=gcs_source_uri)
    input_config = vision.InputConfig(gcs_source=gcs_source, mime_type=mime_type)

    gcs_destination = vision.GcsDestination(uri=gcs_destination_uri)
    output_config = vision.OutputConfig(
        gcs_destination=gcs_destination, batch_size=batch_size
    )

    async_request = vision.AsyncAnnotateFileRequest(
        features=[feature], input_config=input_config, output_config=output_config
    )

    operation = client.async_batch_annotate_files(requests=[async_request])

    print("Waiting for the operation to finish.")
    operation.result(timeout=420)

    # Once the request has completed and the output has been
    # written to GCS, we can list all the output files.
    storage_client = storage.Client()

    match = re.match(r"gs://([^/]+)/(.+)", gcs_destination_uri)
    bucket_name = match.group(1)
    prefix = match.group(2)

    bucket = storage_client.get_bucket(bucket_name)

    # List objects with the given prefix, filtering out folders.
    blob_list = [
        blob
        for blob in list(bucket.list_blobs(prefix=prefix))
        if not blob.name.endswith("/")
    ]
    print("Output files:")
    for blob in blob_list:
        print(blob.name)

    # Process the first output file from GCS.
    # Since we specified batch_size=2, the first response contains
    # the first two pages of the input file.
    output = blob_list[0]

    json_string = output.download_as_bytes().decode("utf-8")
    response = json.loads(json_string)

    # The actual response for the first page of the input file.
    first_page_response = response["responses"][0]
    annotation = first_page_response["fullTextAnnotation"]

    # Here we print the full text from the first page.
    # The response contains more information:
    # annotation/pages/blocks/paragraphs/words/symbols
    # including confidence scores and bounding boxes
    print("Full text:\n")
    print(annotation["text"])

gcloud

O comando gcloud que usa depende do tipo de ficheiro.

  • Para realizar a deteção de texto em PDF, use o comando gcloud ml vision detect-text-pdf conforme mostrado no exemplo seguinte:

    gcloud ml vision detect-text-pdf gs://my_bucket/input_file  gs://my_bucket/out_put_prefix
    
  • Para realizar a deteção de texto TIFF, use o comando gcloud ml vision detect-text-tiff, conforme mostrado no exemplo seguinte:

    gcloud ml vision detect-text-tiff gs://my_bucket/input_file  gs://my_bucket/out_put_prefix
    

Idiomas adicionais

C#: Siga as instruções de configuração do C# na página das bibliotecas cliente e, em seguida, visite a documentação de referência do Vision para .NET.

PHP: Siga as instruções de configuração do PHP na página das bibliotecas cliente e, em seguida, visite a documentação de referência do Vision para PHP.

Ruby: Siga as instruções de configuração do Ruby na página das bibliotecas cliente e, em seguida, visite a documentação de referência do Vision para Ruby.

Suporte multirregional

Agora, pode especificar o armazenamento de dados e o tratamento de OCR ao nível do continente. As seguintes regiões são atualmente suportadas:

  • us: apenas no país EUA
  • eu: A União Europeia

Localizações

O Cloud Vision oferece-lhe algum controlo sobre onde os recursos do seu projeto são armazenados e processados. Em particular, pode configurar o Cloud Vision para armazenar e processar os seus dados apenas na União Europeia.

Por predefinição, o Cloud Vision armazena e processa recursos numa localização global, o que significa que o Cloud Vision não garante que os seus recursos permaneçam numa localização ou região específica. Se escolher a localização União Europeia, a Google armazena os seus dados e processa-os apenas na União Europeia. Pode aceder aos dados, bem como os seus utilizadores, a partir de qualquer localização.

Definir a localização através da API

A API Vision suporta um ponto final da API global (vision.googleapis.com) e também dois pontos finais baseados em regiões: um ponto final da União Europeia (eu-vision.googleapis.com) e um ponto final dos Estados Unidos (us-vision.googleapis.com). Use estes pontos finais para o processamento específico da região. Por exemplo, para armazenar e tratar os seus dados apenas na União Europeia, use o URI eu-vision.googleapis.com em vez de vision.googleapis.com para as suas chamadas da API REST:

  • https://eu-vision.googleapis.com/v1/projects/PROJECT_ID/locations/eu/images:annotate
  • https://eu-vision.googleapis.com/v1/projects/PROJECT_ID/locations/eu/images:asyncBatchAnnotate
  • https://eu-vision.googleapis.com/v1/projects/PROJECT_ID/locations/eu/files:annotate
  • https://eu-vision.googleapis.com/v1/projects/PROJECT_ID/locations/eu/files:asyncBatchAnnotate

Para armazenar e processar os seus dados apenas nos Estados Unidos, use o ponto final dos EUA (us-vision.googleapis.com) com os métodos anteriores.

Definir a localização através das bibliotecas de cliente

As bibliotecas cliente da API Vision acedem ao ponto final da API global (vision.googleapis.com) por predefinição. Para armazenar e processar os seus dados apenas na União Europeia, tem de definir explicitamente o ponto final (eu-vision.googleapis.com). Os seguintes exemplos de código mostram como configurar esta definição.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • REGION_ID: um dos identificadores de localização regionais válidos:
    • us: apenas no país EUA
    • eu: A União Europeia
  • CLOUD_STORAGE_IMAGE_URI: o caminho para um ficheiro de imagem válido num contentor do Cloud Storage. Tem de ter, pelo menos, privilégios de leitura para o ficheiro. Exemplo:
    • gs://cloud-samples-data/vision/pdf_tiff/census2010.pdf
  • CLOUD_STORAGE_BUCKET: Um contentor/diretório do Cloud Storage para guardar os ficheiros de saída, expresso no seguinte formato:
    • gs://bucket/directory/
    O utilizador que faz o pedido tem de ter autorização de escrita no contentor.
  • FEATURE_TYPE: um tipo de funcionalidade válido. Para pedidos files:asyncBatchAnnotate, pode usar os seguintes tipos de funcionalidades:
    • DOCUMENT_TEXT_DETECTION
    • TEXT_DETECTION
  • PROJECT_ID: o ID do seu Google Cloud projeto.

Considerações específicas do campo:

  • inputConfig: substitui o campo image usado noutros pedidos da API Vision. Contém dois campos secundários:
    • gcsSource.uri: o URI do Google Cloud Storage do ficheiro PDF ou TIFF (acessível ao utilizador ou à conta de serviço que está a fazer o pedido).
    • mimeType: um dos tipos de ficheiros aceites: application/pdf ou image/tiff.
  • outputConfig: especifica os detalhes da saída. Contém dois campos filho:
    • gcsDestination.uri – um URI do Google Cloud Storage válido. O contentor tem de ser gravável pelo utilizador ou pela conta de serviço que está a fazer o pedido. O nome do ficheiro é output-x-to-y, em que x e y representam os números de páginas PDF/TIFF incluídos nesse ficheiro de saída. Se o ficheiro existir, o respetivo conteúdo é substituído.
    • batchSize - especifica quantas páginas de saída devem ser incluídas em cada ficheiro JSON de saída.

Método HTTP e URL:

POST https://REGION_ID-vision.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/files:asyncBatchAnnotate

Corpo JSON do pedido:

{
  "requests":[
    {
      "inputConfig": {
        "gcsSource": {
          "uri": "CLOUD_STORAGE_IMAGE_URI"
        },
        "mimeType": "application/pdf"
      },
      "features": [
        {
          "type": "FEATURE_TYPE"
        }
      ],
      "outputConfig": {
        "gcsDestination": {
          "uri": "CLOUD_STORAGE_BUCKET"
        },
        "batchSize": 1
      }
    }
  ]
}

Para enviar o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://REGION_ID-vision.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/files:asyncBatchAnnotate"

PowerShell

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://REGION_ID-vision.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/files:asyncBatchAnnotate" | Select-Object -Expand Content
Resposta:

Um pedido asyncBatchAnnotate bem-sucedido devolve uma resposta com um único campo de nome:

{
  "name": "projects/usable-auth-library/operations/1efec2285bd442df"
}

Este nome representa uma operação de longa duração com um ID associado (por exemplo, 1efec2285bd442df), que pode ser consultado através da API v1.operations.

Para obter a resposta de anotação do Vision, envie um pedido GET para o ponto final v1.operations, transmitindo o ID da operação no URL:

GET https://vision.googleapis.com/v1/operations/operation-id

Por exemplo:

curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/projects/project-id/locations/location-id/operations/1efec2285bd442df

Se a operação estiver em curso:

{
  "name": "operations/1efec2285bd442df",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.OperationMetadata",
    "state": "RUNNING",
    "createTime": "2019-05-15T21:10:08.401917049Z",
    "updateTime": "2019-05-15T21:10:33.700763554Z"
  }
}

Quando a operação estiver concluída, o state é apresentado como DONE e os seus resultados são escritos no ficheiro do Google Cloud Storage que especificou:

{
  "name": "operations/1efec2285bd442df",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.OperationMetadata",
    "state": "DONE",
    "createTime": "2019-05-15T20:56:30.622473785Z",
    "updateTime": "2019-05-15T20:56:41.666379749Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.AsyncBatchAnnotateFilesResponse",
    "responses": [
      {
        "outputConfig": {
          "gcsDestination": {
            "uri": "gs://your-bucket-name/folder/"
          },
          "batchSize": 1
        }
      }
    ]
  }
}

O JSON no ficheiro de saída é semelhante ao de uma resposta de deteção de texto em documentos de uma imagem se tiver usado a funcionalidade DOCUMENT_TEXT_DETECTION ou a resposta de deteção de texto se tiver usado a funcionalidade TEXT_DETECTION. O resultado terá um campo context adicional que mostra a localização do PDF ou TIFF especificado e o número de páginas no ficheiro:

output-1-to-1.json

Go

Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Go Vision.

Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

import (
	"context"
	"fmt"

	vision "cloud.google.com/go/vision/apiv1"
	"google.golang.org/api/option"
)

// setEndpoint changes your endpoint.
func setEndpoint(endpoint string) error {
	// endpoint := "eu-vision.googleapis.com:443"

	ctx := context.Background()
	client, err := vision.NewImageAnnotatorClient(ctx, option.WithEndpoint(endpoint))
	if err != nil {
		return fmt.Errorf("NewImageAnnotatorClient: %w", err)
	}
	defer client.Close()

	return nil
}

Java

Antes de experimentar este exemplo, siga as instruções de configuração do Java no guia de início rápido da API Vision com as bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Vision Java.

ImageAnnotatorSettings settings =
    ImageAnnotatorSettings.newBuilder().setEndpoint("eu-vision.googleapis.com:443").build();

// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests. After completing all of your requests, call
// the "close" method on the client to safely clean up any remaining background resources.
ImageAnnotatorClient client = ImageAnnotatorClient.create(settings);

Node.js

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Node.js Vision.

Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

// Imports the Google Cloud client library
const vision = require('@google-cloud/vision');

async function setEndpoint() {
  // Specifies the location of the api endpoint
  const clientOptions = {apiEndpoint: 'eu-vision.googleapis.com'};

  // Creates a client
  const client = new vision.ImageAnnotatorClient(clientOptions);

  // Performs text detection on the image file
  const [result] = await client.textDetection('./resources/wakeupcat.jpg');
  const labels = result.textAnnotations;
  console.log('Text:');
  labels.forEach(label => console.log(label.description));
}
setEndpoint();

Python

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Python Vision.

Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

from google.cloud import vision

client_options = {"api_endpoint": "eu-vision.googleapis.com"}

client = vision.ImageAnnotatorClient(client_options=client_options)

Experimente

Se está a usar o Google Cloud pela primeira vez, crie uma conta para avaliar o desempenho da Cloud Vision API em cenários do mundo real. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.

Experimente a Cloud Vision API gratuitamente