Use a Document AI para processar seus formulários escritos à mão de maneira inteligente (Python)

c65b9ae04aa1853.png

O que é a Document AI?

A API Document AI é uma solução de compreensão de documentos que usa dados não estruturados, como documentos, e-mails e assim, e facilita a compreensão, a análise e o consumo dos dados. A API fornece estrutura por meio da classificação do conteúdo, extração de entidades, pesquisa avançada e muito mais.

Neste tutorial, você usará a API Document AI com o Python. O tutorial demonstra como analisar um formulário médico simples.

O que você aprenderá

  • Como ativar a API Document AI
  • Como autenticar solicitações de API
  • Como instalar a biblioteca de cliente para Python
  • Como analisar dados de um formulário digitalizado

Pré-requisitos

  • Um projeto do Google Cloud
  • Um navegador, como o Chrome ou o Firefox
  • Conhecimento sobre o Python 3

Pesquisa

Como você usará este tutorial?

Apenas leitura Leitura e exercícios

Como você classificaria sua experiência com o Python?

Iniciante Intermediário Proficiente

Como você classificaria sua experiência de uso dos serviços do Google Cloud?

Iniciante Intermediário Proficiente

Configuração de ambiente personalizada

  1. Faça login no Console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma se você ainda não tiver uma conta do Gmail ou do G Suite.

Lembre-se do ID do projeto, um nome exclusivo em todos os projetos do Google Cloud. (seu nome acima já foi escolhido e não funcionará para você). Você precisará fornecer esse ID posteriormente como PROJECT_ID.

  1. Em seguida, é necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.

Siga todas as instruções na seção "Limpeza". Na seção, você aprende a encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de avaliação gratuita de US$ 300.

Iniciar Cloud Shell

O Google Cloud pode operar remotamente o Google Cloud no seu laptop, mas este codelab usa o Google Cloud Shell, um ambiente de linha de comando em execução na nuvem.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud ShellH7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Se você nunca tiver iniciado o Cloud Shell, verá uma tela intermediária (abaixo da dobra) com a descrição do que ele é. Se esse for o caso, clique em Continuar e você não o verá novamente. Esta é uma tela única:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

O Cloud Shell oferece acesso de terminal a uma máquina virtual hospedada na nuvem. A máquina virtual inclui todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Praticamente todo o seu trabalho neste codelab pode ser feito em um navegador ou no seu Chromebook.

Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto já estará configurado com seu ID do projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar que você está autenticado:
gcloud auth list

Resposta ao comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*      <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, faça a configuração usando este comando:

gcloud config set project <PROJECT_ID>

Resposta ao comando

Updated property [core/project].

Antes de começar a usar a Document AI, você precisa ativar a API. Abra o Console do Cloud no navegador.

  1. Clique em Menu de navegação > APIs e serviços > Biblioteca. API Search
  2. Pesquise por "API Document AI" e clique em Ativar para usar a API no seu projeto do Google Cloud

Primeiro, você precisa criar uma instância do processador Form Parser para usar no Document AI Platform para este tutorial.

  1. No console, navegue até a Visão geral do Document AI Platform.
  2. Clique em Criar processador e selecione Form ParserProcessadores
  3. Especifique um nome de processador e selecione sua região na lista.
  4. Clique em Criar para criar seu processador.
  5. Copie o ID do processador. Você precisará usá-la em seu código mais tarde.

(Opcional) É possível testar o processador no console fazendo upload de um documento. Clique em Fazer upload do documento e selecione um formulário para analisar. É possível fazer o download e usar este formulário de exemplo se você não tiver um disponível.

Formulário de integridade

A resposta será parecida com esta: Formulário analisado

Para fazer solicitações à API Document AI, você precisa usar uma conta de serviço. Uma conta de serviço pertence ao seu projeto. Ela é usada pela biblioteca Python do cliente do Google para fazer solicitações de API. Como qualquer outra conta de usuário, uma conta de serviço é representada por um endereço de e-mail. Nesta seção, você usará o SDK do Cloud para criar uma conta de serviço e, em seguida, criará as credenciais necessárias para realizar a autenticação.

Primeiro, defina uma variável de ambiente com o PROJECT_ID que você usará em todo este codelab:

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

Em seguida, crie uma nova conta de serviço para acessar a API Document AI usando:

gcloud iam service-accounts create my-docai-sa \
  --display-name "my-docai-service-account"

Em seguida, crie credenciais que seu código Python use para fazer login como a nova conta de serviço. Crie e salve essas credenciais como um arquivo JSON "~/key.json" usando o seguinte comando:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account  my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Por fim, defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS, que é usada pela biblioteca para encontrar suas credenciais. Para saber mais sobre essa autenticação de formulário, consulte o guia. A variável de ambiente deve ser definida para o caminho completo do arquivo JSON de credenciais que você criou. Para isso, use:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"

Temos um exemplo de formulário para usar no Google Cloud Storage. Use o seguinte comando para fazer o download dele para seu diretório de trabalho.

gsutil cp gs://cloud-samples-data/documentai/form.pdf .

Confirme se o arquivo foi salvo no Cloudshell usando o comando abaixo:

ls -ltr form.pdf

Instale a biblioteca de cliente:

pip3 install --upgrade google-cloud-documentai
pip3 install --upgrade google-cloud-storage

Você verá algo como:

...
Installing collected packages: google-cloud-documentai
Successfully installed google-cloud-documentai-0.3.0
.
.
Installing collected packages: google-cloud-storage
Successfully installed google-cloud-storage-1.35.0

Agora você já pode usar a API Document AI.

Inicie o Python interativo

Neste tutorial, você usará um interpretador interativo chamado IPython. Inicie uma sessão executando ipython no Cloud Shell. Este comando executa o interpretador de Python em uma sessão interativa.

ipython

Você verá algo como:

Python 3.7.3 (default, Jul 25 2020, 13:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Nesta etapa, você fará uma chamada de documento de processo usando o endpoint síncrono. Para o processamento de grandes quantidades de documentos de uma vez, você também pode usar a API assíncrona. Para saber mais sobre o uso das APIs do analisador de formulário, leia o guia aqui.

Copie o seguinte código na sua sessão do iPython:

project_id= 'YOUR_PROJECT_ID'
location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'
processor_id = 'YOUR_PROCESSOR_ID' # Create processor in Cloud Console
file_path = 'form.pdf' # The local file in your current working directory

from google.cloud import documentai_v1beta3 as documentai
from google.cloud import storage

def process_document(
    project_id=project_id, location=location, processor_id=processor_id,  file_path=file_path
):

    # Instantiates a client
    client = documentai.DocumentProcessorServiceClient()

    # The full resource name of the processor, e.g.:
    # projects/project-id/locations/location/processor/processor-id
    # You must create new processors in the Cloud Console first
    name = f"projects/{project_id}/locations/{location}/processors/{processor_id}"

    with open(file_path, "rb") as image:
        image_content = image.read()

    # Read the file into memory
    document = {"content": image_content, "mime_type": "application/pdf"}

    # Configure the process request
    request = {"name": name, "document": document}

    # Use the Document AI client to process the sample form
    result = client.process_document(request=request)

    document = result.document
    document_text = document.text
    print("Document processing complete.")
    print("Text: {}".format(document_text))

Execute o código agora para ver o texto extraído e impresso no console. Nas próximas etapas, você extrairá dados estruturados que podem ser armazenados com mais facilidade em bancos de dados ou usados em outros aplicativos.

Como chamar a função:

process_document()

Agora, extraia os pares de chave-valor do formulário e as pontuações de confiança correspondentes. O objeto de resposta Document contém uma lista de páginas do documento de entrada. Cada objeto page contém uma lista de campos de formulário e os locais deles no texto.

O código a seguir itera em cada página e extrai e imprime cada chave, valor e pontuação de confiança.

Na parte inferior da função processDocument(), cole o código abaixo:

    document_pages = document.pages

    for page in document_pages:
        print("Page Number:{}".format(page.page_number))
        for form_field in page.form_fields:
            fieldName=get_text(form_field.field_name,document)
            nameConfidence = round(form_field.field_name.confidence,4)
            fieldValue = get_text(form_field.field_value,document)
            valueConfidence = round(form_field.field_value.confidence,4)
            print(fieldName+fieldValue +"  (Confidence Scores: "+str(nameConfidence)+", "+str(valueConfidence)+")")

def get_text(doc_element: dict, document: dict):
    """
    Document AI identifies form fields by their offsets
    in document text. This function converts offsets
    to text snippets.
    """
    response = ""
    # If a text segment spans several lines, it will
    # be stored in different text segments.
    for segment in doc_element.text_anchor.text_segments:
        start_index = (
            int(segment.start_index)
            if segment in doc_element.text_anchor.text_segments
            else 0
        )
        end_index = int(segment.end_index)
        response += document.text[start_index:end_index]
    return response

Agora execute seu código. Chame a função:

process_document()

Você verá a seguinte resposta se estiver usando nosso documento de amostra:

Document processing complete.
Page Number:1
Marital Status: Single  (Confidence Scores: 1.0000, 1.0000)
DOB: 09/04/1986 (Confidence Scores: 0.9999, 0.9999)
City: Towalo  (Confidence Scores: 0.9996, 0.9996)
Address: 24 Barney Lane  (Confidence Scores: 0.9994, 0.9994)
Referred By: None (Confidence Scores: 0.9968, 0.9968)
Phone #:  (906) 917-3486 (Confidence Scores: 0.9961, 0.9961)
State: NJ  (Confidence Scores: 0.9960, 0.9960)
Emergency Contact Phone: (906) 334-8926 (Confidence Scores: 0.9924, 0.9924)
Name: Sally Walker (Confidence Scores: 0.9922, 0.9922)

Parabéns! Você usou a API Document AI para extrair dados de um formulário escrito à mão. Incentivamos você a fazer experiências com outras imagens de formulário

Limpeza

Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud, siga estas etapas:

  • No Console do Cloud, acesse a página Gerenciar recursos:
  • Na lista de projetos, selecione o projeto e clique em "Excluir".
  • Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Saiba mais

Licença

Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.