1. Aspectos gerais
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, o foco será usar a API Document AI com Node.js. 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 Node.js
- Como analisar dados de um formulário digitalizado
Pré-requisitos
Pesquisa
Como você vai usar este tutorial?
Como você classificaria sua experiência com o Node.js?
Como você classificaria sua experiência de uso dos serviços do Google Cloud?
2. Configuração e requisitos
Configuração de ambiente autoguiada
- 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
.
- Em seguida, é necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
Siga todas as instruções da 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 US$ 300 de avaliação sem custos.
Inicie o Cloud Shell
Embora o Google Cloud possa ser operado remotamente em seu laptop, neste codelab vamos usar o Google Cloud Shell, um ambiente de linha de comando executado no Google Cloud.
Ativar o Cloud Shell
- No Console do Cloud, clique em Ativar o Cloud Shell.
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:
Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.
O Cloud Shell oferece acesso de terminal a uma máquina virtual hospedada na nuvem. A máquina virtual tem 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.
- 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, configure-o usando este comando:
gcloud config set project <PROJECT_ID>
Resposta ao comando
Updated property [core/project].
3. Ativar a API Document AI do Cloud
Antes de começar a usar a Document AI, você precisa ativar a API. Abra o Console do Cloud no navegador.
- Clique em Menu de navegação > APIs e serviços > Biblioteca.
- Pesquise por "API Document AI" e clique em Ativar para usar a API no seu projeto do Google Cloud
4. Crie e teste um processador
Primeiro, você precisa criar uma instância do processador Form Parser para usar no Document AI Platform para este tutorial.
- No console, navegue até a Visão geral do Document AI Platform.
- Clique em Criar processador e selecione Form Parser
- Especifique um nome de processador e selecione sua região na lista.
- Clique em Criar para criar seu processador.
- 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.
A resposta será parecida com esta:
5. Autentique as solicitações de API
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 cliente do Google Node.js 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 o código Node.js usará 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"
6. Faça o download do formulário de amostra
Temos um formulário de amostra para usar armazenado no nosso bucket público de amostras do 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
7. Instalar a biblioteca de cliente
Em seguida, configure o código no diretório de trabalho.
Inicialize um novo pacote Node.js:
npm init
Instale a biblioteca de cliente da Document AI:
npm install @google-cloud/documentai
8. Faça uma solicitação de documento de processo síncrono
Nesta etapa, você vai fazer 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.
Crie um arquivo index.js
e cole o seguinte código. Preencha as variáveis aplicáveis com as informações do processador.
const { DocumentProcessorServiceClient } = require('@google-cloud/documentai').v1;
const fs = require('fs');
/**
* Runs the sample document through Document AI to get key/value pairs and
* confidence scores.
*/
async function processDocument(projectId, location, processorId, filePath, mimeType) {
// Instantiates a client
const documentaiClient = new 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
const resourceName = documentaiClient.processorPath(projectId, location, processorId);
// Read the file into memory.
const imageFile = fs.readFileSync(filePath);
// Convert the image data to a Buffer and base64 encode it.
const encodedImage = Buffer.from(imageFile).toString('base64');
// Load Binary Data into Document AI RawDocument Object
const rawDocument = {
content: encodedImage,
mimeType: mimeType,
};
// Configure ProcessRequest Object
const request = {
name: resourceName,
rawDocument: rawDocument
};
// Use the Document AI client to process the sample form
const [result] = await documentaiClient.processDocument(request);
return result.document;
}
/**
* Run the codelab.
*/
async function main() {
const projectId = 'YOUR_PROJECT_ID';
const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
const processorId = 'YOUR_PROCESSOR_ID'; // Should be a Hexadecimal string
// Supported File Types
// https://cloud.google.com/document-ai/docs/processors-list#processor_form-parser
filePath = 'form.pdf'; // The local file in your current working directory
mimeType = 'application/pdf';
const document = await processDocument(projectId, location, processorId, filePath, mimeType);
console.log("Document Processing Complete");
// Print the document text as one big string
console.log(`Text: ${document.text}`);
}
main(...process.argv.slice(2)).catch(err => {
console.error(err);
process.exitCode = 1;
});
Execute o código agora e você verá o texto a seguir no console.
Text: FakeDoc M.D. HEALTH INTAKE FORM Please fill out the questionnaire carefully. The information you provide will be used to complete your health profile and will be kept confidential. Name: Date: Sally Walker DOB: 09/04/1986 Address: 24 Barney Lane City: Towalo State: NJ Zip: 07082 Email: Sally, waller@cmail.com Phone #: (906) 917-3486 Gender: Marital Status: Single Occupation: Software Engineer Referred By: None Emergency Contact: Eva Walker Emergency Contact Phone: (906) 334-8926 Describe your medical concerns (symptoms, diagnoses, etc): Runny nose, mucas in throat, weakness, aches, chills, tired Are you currently taking any medication? (If yes, please describe): Vyvanse (25mg) daily for attention
Nas próximas etapas, você extrairá dados estruturados que podem ser armazenados com mais facilidade em bancos de dados ou usados em outros aplicativos.
9. Extraia os pares de chave-valor do formulário
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 cada chave, valor e pontuação de confiança.
Adicione a seguinte função ao código.
/**
* Extract form data and confidence from processed document.
*/
function extractFormData(document) {
// Extract shards from the text field
function getText(textAnchor, document) {
if (!textAnchor.textSegments || textAnchor.textSegments.length === 0) {
return '';
}
// First shard in document doesn't have startIndex property
const startIndex = textAnchor.textSegments[0].startIndex || 0;
const endIndex = textAnchor.textSegments[0].endIndex;
return document.text.substring(startIndex, endIndex);
}
var formData = [];
const pages = document.pages;
pages.forEach((page) => {
const formFields = page.formFields;
formFields.forEach((field) => {
// Get the extracted field names and remove extra space from text
const fieldName = getText(field.fieldName.textAnchor, document);
// Confidence - How "sure" the API is that the text is correct
const nameConfidence = field.fieldName.confidence.toFixed(4);
const fieldValue = getText(field.fieldValue.textAnchor, document);
const valueConfidence = field.fieldValue.confidence.toFixed(4);
formData.push({
fieldName: fieldName,
fieldValue: fieldValue,
nameConfidence: nameConfidence,
valueConfidence: valueConfidence
});
});
});
return formData;
}
Adicione uma chamada para a função extractFormData()
de dentro da função principal e mostre o objeto resultante como uma tabela.
/**
* Run the codelab.
*/
async function main() {
const projectId = 'YOUR_PROJECT_ID';
const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
const processorId = 'YOUR_PROCESSOR_ID'; // Should be a Hexadecimal string
// Supported File Types
// https://cloud.google.com/document-ai/docs/processors-list#processor_form-parser
filePath = 'form.pdf'; // The local file in your current working directory
mimeType = 'application/pdf';
const document = await processDocument(projectId, location, processorId, filePath, mimeType);
const formData = extractFormData(document);
console.log('\nThe following form key/value pairs were detected:');
console.table(formData);
}
Agora, execute o código. Você vai ver a resposta a seguir se estiver usando o documento de amostra:
The following form key/value pairs were detected: ┌─────────┬────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────┬────────────────┬─────────────────┐ │ (index) │ fieldName │ fieldValue │ nameConfidence │ valueConfidence │ ├─────────┼────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────┼────────────────┼─────────────────┤ │ 0 │ 'Marital Status: ' │ 'Single ' │ '1.0000' │ '1.0000' │ │ 1 │ 'DOB: ' │ '09/04/1986\n' │ '0.9999' │ '0.9999' │ │ 2 │ 'City: ' │ 'Towalo ' │ '0.9996' │ '0.9996' │ │ 3 │ 'Address: ' │ '24 Barney Lane ' │ '0.9994' │ '0.9994' │ │ 4 │ 'Referred By: ' │ 'None\n' │ '0.9968' │ '0.9968' │ │ 5 │ 'Phone #: ' │ '(906) 917-3486\n' │ '0.9961' │ '0.9961' │ │ 6 │ 'State: ' │ 'NJ ' │ '0.9960' │ '0.9960' │ │ 7 │ 'Emergency Contact Phone: ' │ '(906) 334-8926\n' │ '0.9925' │ '0.9925' │ │ 8 │ 'Name:\n' │ 'Sally\nWalker\n' │ '0.9922' │ '0.9922' │ │ 9 │ 'Occupation: ' │ 'Software Engineer\n' │ '0.9914' │ '0.9914' │ │ 10 │ 'Zip: ' │ '07082\n' │ '0.9904' │ '0.9904' │ │ 11 │ 'Email: ' │ 'Sally, waller@cmail.com ' │ '0.9681' │ '0.9681' │ │ 12 │ 'Emergency Contact: ' │ 'Eva Walker ' │ '0.9430' │ '0.9430' │ │ 13 │ 'Describe your medical concerns (symptoms, diagnoses, etc):\n' │ 'Runny nose, mucas in throat, weakness,\naches, chills, tired\n' │ '0.7817' │ '0.7817' │ └─────────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────┴────────────────┴─────────────────┘
10. Parabéns!
Parabéns! Você usou a API Document AI para extrair dados de um formulário escrito à mão. Teste 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
- O futuro dos documentos — Playlist do YouTube (em inglês)
- Documentação da Document AI
- Referência da biblioteca de cliente Node.js da Document AI
- Amostras de Node.js da Document AI