O serviço de reconhecimento ótico de carateres (OCR) do Vertex AI no Google Distributed Cloud (GDC) isolado deteta texto em ficheiros PDF e TIFF através dos dois métodos de API seguintes:
BatchAnnotateFiles
: detetar texto com pedidos inline.AsyncBatchAnnotateFiles
: detetar texto com pedidos offline (assíncronos).
Esta página mostra como detetar texto em ficheiros através da API OCR na Distributed Cloud.
Antes de começar
Antes de poder começar a usar a API OCR, tem de ter um projeto com a API OCR ativada e as credenciais adequadas. Também pode instalar bibliotecas cliente para ajudar a fazer chamadas para a API. Para mais informações, consulte o artigo Configure um projeto de reconhecimento de carateres.
Detete texto com pedidos inline
O método BatchAnnotateFiles
deteta texto a partir de um lote de ficheiros PDF ou TIFF.
Envia o ficheiro a partir do qual quer detetar texto diretamente como conteúdo no pedido da API. O sistema devolve o texto detetado resultante no formato JSON na resposta da API.
Tem de especificar valores para os campos no corpo JSON do seu pedido API. A tabela seguinte contém uma descrição dos campos do corpo do pedido que tem de fornecer quando usa o método da API BatchAnnotateFiles
para os seus pedidos de deteção de texto:
Campos do corpo do pedido | Descrição do campo |
---|---|
content |
Os ficheiros com texto a detetar. Fornece a representação Base64 (string ASCII) do conteúdo do ficheiro binário. |
mime_type |
O tipo de ficheiro de origem. Tem de defini-lo para um dos seguintes valores:
|
type |
O tipo de deteção de texto de que precisa no ficheiro. Especifique uma das duas funcionalidades de anotação:
|
language_hints |
Opcional. Lista de idiomas a usar para a deteção de texto. O sistema interpreta um valor vazio para este campo como deteção automática de idioma. Não tem de definir o campo language_hints para idiomas baseados no alfabeto latino.Se souber o idioma do texto no ficheiro, a definição de uma sugestão melhora os resultados. |
pages |
Opcional. O número de páginas do ficheiro a processar para deteção de texto. O número máximo de páginas que pode especificar é cinco. Se não especificar o número de páginas, o serviço processa as primeiras cinco páginas do ficheiro. |
Para obter informações sobre a representação JSON completa, consulte
AnnotateFileRequest
.
Faça um pedido de API inline
Faça um pedido à API pré-preparada de OCR através do método da API REST. Em alternativa, interaja com a API pré-preparada de OCR a partir de um script Python para detetar texto em ficheiros PDF ou TIFF.
Os exemplos seguintes mostram como detetar texto num ficheiro através de OCR:
REST
Siga estes passos para detetar texto em ficheiros através do método da API REST:
Guarde o seguinte ficheiro
request.json
para o corpo do pedido: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
Substitua o seguinte:
BASE64_ENCODED_FILE
: a representação Base64 (string ASCII) do conteúdo do seu ficheiro binário. Esta string começa com carateres semelhantes a/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
.FEATURE_TYPE
: o tipo de deteção de texto de que precisa no ficheiro. Os valores permitidos sãoTEXT_DETECTION
ouDOCUMENT_TEXT_DETECTION
.LANGUAGE_HINT
: as etiquetas de idioma BCP 47 a usar como sugestões de idioma para a deteção de texto, comoen-t-i0-handwrit
. Este campo é opcional e o sistema interpreta um valor vazio como deteção automática do idioma.
Faça o pedido:
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
Substitua o seguinte:
TOKEN
: o token de autenticação que obteve.PROJECT_ID
: o ID do seu projeto.ENDPOINT
: o ponto final de OCR que usa para a sua organização. Para mais informações, consulte o estado do serviço e os pontos finais.
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
Substitua o seguinte:
TOKEN
: o token de autenticação que obteve.ENDPOINT
: o ponto final de OCR que usa para a sua organização. Para mais informações, consulte o estado do serviço e os pontos finais.
Python
Siga estes passos para usar o serviço de OCR a partir de um script Python para detetar texto num ficheiro:
Defina as variáveis de ambiente necessárias num script Python.
Adicione o seguinte código ao script Python que criou:
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)
Substitua o seguinte:
ENDPOINT
: o ponto final de OCR que usa para a sua organização. Para mais informações, veja o estado do serviço e os pontos finais.BASE64_ENCODED_FILE
: a representação Base64 (string ASCII) do conteúdo do ficheiro. Esta string começa com carateres semelhantes a/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
.FEATURE_TYPE
: o tipo de deteção de texto de que precisa no ficheiro. Os valores permitidos sãoTEXT_DETECTION
ouDOCUMENT_TEXT_DETECTION
.PROJECT_ID
: o ID do seu projeto.
Guarde o script Python.
Execute o script Python para detetar texto no ficheiro:
python SCRIPT_NAME
Substitua
SCRIPT_NAME
pelo nome que deu ao seu script Python, comovision.py
.
Detete texto com pedidos offline
O método AsyncBatchAnnotateFiles
deteta texto a partir de um lote de ficheiros PDF ou TIFF
através de um pedido offline (assíncrono). Os ficheiros podem conter várias páginas e várias imagens por página. Os ficheiros de origem têm de estar num contentor de armazenamento do seu projeto do Distributed Cloud. O sistema guarda o texto detetado resultante num contentor de armazenamento no formato JSON.
O serviço de OCR inicia o processamento offline e devolve o ID do processo de longa duração que realiza a deteção de texto no ficheiro. Pode usar o ID devolvido para acompanhar o estado do processamento offline. Se existirem demasiadas operações em curso, o processamento offline pode não ser iniciado imediatamente.
Tem de especificar valores para os campos no corpo JSON do seu pedido API. A tabela seguinte contém uma descrição dos campos do corpo do pedido que tem de fornecer quando usa o método da API AsyncBatchAnnotateFiles
para os seus pedidos de deteção de texto:
Campos do corpo do pedido | Descrição do campo |
---|---|
gcs_source.uri |
O caminho URI para um ficheiro de origem válido (PDF ou TIFF) num contentor de armazenamento do seu projeto do Distributed Cloud. Este ficheiro contém o texto que quer detetar. O utilizador ou a conta de serviço que faz o pedido tem de ter, pelo menos, privilégios de leitura para o ficheiro. |
mime_type |
O tipo de ficheiro de origem. Tem de defini-lo para um dos seguintes valores:
|
type |
O tipo de deteção de texto de que precisa no ficheiro. Especifique uma das duas funcionalidades de anotação:
|
gcs_destination.uri |
O caminho do URI para um contentor de armazenamento do seu projeto do Distributed Cloud para guardar os ficheiros de saída. Esta localização é onde quer armazenar os resultados da deteção. O utilizador ou a conta de serviço que faz o pedido tem de ter autorização de escrita no contentor. |
Armazene o ficheiro de origem num contentor de armazenamento
Antes de enviar um pedido, tem de garantir que a conta de serviço de OCR tem autorizações de leitura para o seu contentor de entrada e autorizações de escrita para o seu contentor de saída.
Os contentores de entrada e saída podem ser diferentes e estar em espaços de nomes de projetos diferentes. Recomendamos que use os mesmos contentores de entrada e saída para evitar erros, como o armazenamento dos resultados em contentores erróneos.
Siga estes passos para armazenar o ficheiro a partir do qual quer detetar texto num contentor de armazenamento:
- Configure a CLI gcloud para o armazenamento de objetos.
Crie um contentor de armazenamento no namespace do seu projeto. Use uma
Standard
classe de armazenamento.Pode criar o contentor de armazenamento implementando um recurso
Bucket
no espaço de nomes do projeto: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
Conceda autorizações
read
ewrite
no contentor à conta de serviço (g-vai-ocr-sie-sa
) usada pelo serviço de OCR.Pode seguir estes passos para criar a função e a associação de funções através de recursos personalizados:
Crie a função implementando um recurso
Role
no espaço de nomes do projeto: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
Crie a associação de funções implementando um recurso
RoleBinding
no espaço de nomes do projeto: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
Carregue o ficheiro para o contentor de armazenamento que criou. Para mais informações, consulte o artigo Carregue e transfira objetos de armazenamento em projetos.
Faça um pedido de API offline
Faça um pedido à API pré-preparada de OCR através do método da API REST. Em alternativa, interaja com a API pré-preparada de OCR a partir de um script Python para detetar texto em ficheiros PDF ou TIFF.
Os exemplos seguintes mostram como detetar texto num ficheiro através de OCR:
REST
Siga estes passos para detetar texto em ficheiros através do método da API REST:
Guarde o seguinte ficheiro
request.json
para o corpo do pedido:cat <<- EOF > request.json { "parent": PROJECT_ID, "requests":[ { "input_config": { "gcs_source": { "uri": "SOURCE_FILE" }, "mime_type": "application/pdf" }, "features": [ { "type": "FEATURE_TYPE" } ], "output_config": { "gcs_destination": { "uri": "DESTINATION_BUCKET" } } } ] } EOF
Substitua o seguinte:
PROJECT_ID
: o ID do seu projeto.SOURCE_FILE
: o caminho do URI para um ficheiro de origem válido (PDF ou TIFF) num contentor de armazenamento do seu projeto do Distributed Cloud.FEATURE_TYPE
: o tipo de deteção de texto de que precisa no ficheiro. Os valores permitidos sãoTEXT_DETECTION
ouDOCUMENT_TEXT_DETECTION
.DESTINATION_BUCKET
: o caminho do URI para um contentor de armazenamento do seu projeto do Distributed Cloud para guardar os ficheiros de saída.
Faça o pedido:
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
Substitua o seguinte:
TOKEN
: o token de autenticação que obteve.PROJECT_ID
: o ID do seu projeto.ENDPOINT
: o ponto final de OCR que usa para a sua organização. Para mais informações, consulte o estado do serviço e os pontos finais.
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
Substitua o seguinte:
TOKEN
: o token de autenticação que obteve.ENDPOINT
: o ponto final de OCR que usa para a sua organização. Para mais informações, consulte o estado do serviço e os pontos finais.
Python
Siga estes passos para usar o serviço de OCR a partir de um script Python para detetar texto num ficheiro:
Defina as variáveis de ambiente necessárias num script Python.
Adicione o seguinte código ao script Python que criou:
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 = {"gcs_source":{"uri":SOURCE_FILE},"mime_type": "application/pdf"} output_config = {"gcs_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)
Substitua o seguinte:
ENDPOINT
: o ponto final de OCR que usa para a sua organização. Para mais informações, veja o estado do serviço e os pontos finais.FEATURE_TYPE
: o tipo de deteção de texto de que precisa no ficheiro. Os valores permitidos sãoTEXT_DETECTION
ouDOCUMENT_TEXT_DETECTION
.SOURCE_FILE
: o caminho do URI para um ficheiro de origem válido (PDF ou TIFF) num contentor de armazenamento do seu projeto do Distributed Cloud.DESTINATION_BUCKET
: o caminho do URI para um contentor de armazenamento do seu projeto do Distributed Cloud para guardar os ficheiros de saída.PROJECT_ID
: o ID do seu projeto.
Guarde o script Python.
Execute o script Python para detetar texto no ficheiro:
python SCRIPT_NAME
Substitua
SCRIPT_NAME
pelo nome que deu ao seu script Python, comovision.py
.
Pode usar o nome da operação devolvido pelo método AsyncBatchAnnotateFiles
para verificar o estado da operação.
Obtenha o estado da operação
O método get
devolve o estado mais recente de uma operação de execução prolongada, como o pedido offline de deteção de texto. Use este método para verificar o estado da operação, como no exemplo seguinte:
curl -X GET "http://ENDPOINT/v1/OPERATION_NAME"
Substitua OPERATION_NAME
pelo nome da operação que o método AsyncBatchAnnotateFiles
devolveu quando fez o pedido offline.
Apresentar operações
O método list
devolve uma lista das operações que correspondem a um filtro especificado no pedido. O método pode devolver operações de um projeto específico. Para chamar o método list, especifique o ID do projeto e o ponto final da OCR, como no exemplo seguinte:
curl -X GET "http://ENDPOINT/v1/projects/PROJECT_ID/operations?page_size=10"