1. Omówienie
Co to jest Document AI?
Interfejs API Document AI to rozwiązanie do rozumienia dokumentów, które przyjmuje nieuporządkowane dane, takie jak dokumenty czy e-maile, oraz ułatwia ich analizowanie, analizowanie i wykorzystywanie. Zapewnia on strukturę dzięki klasyfikacji treści, wyodrębnianiu encji, wyszukiwaniu zaawansowanym i innym funkcjom.
Z tego samouczka dowiesz się, jak używać interfejsu Document AI API w środowisku Node.js. Samouczek pokazuje, jak przeanalizować prosty formularz sanitarny.
Czego się nauczysz
- Jak włączyć interfejs Document AI API
- Jak uwierzytelniać żądania do interfejsu API
- Jak zainstalować bibliotekę klienta dla środowiska Node.js
- Analizowanie danych ze zeskanowanego formularza
Czego potrzebujesz
Ankieta
Jak wykorzystasz ten samouczek?
Jak oceniasz korzystanie z Node.js?
Jak oceniasz korzystanie z usług Google Cloud?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć.
Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud. (Twoja nazwa jest już zajęta i nie będzie Ci odpowiadać). Musisz podać ten identyfikator później jako PROJECT_ID
.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.
Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” . W tej sekcji znajdziesz informacje na temat wyłączania zasobów, aby nie naliczać opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Uruchamianie Cloud Shell
Z Google Cloud możesz korzystać zdalnie z laptopa, ale to ćwiczenie w programowaniu wykorzystuje Google Cloud Shell – środowisko wiersza poleceń działające w Cloud.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.
Jeśli dopiero zaczynasz korzystać z Cloud Shell, wyświetli się ekran pośredni (w części strony widocznej po przewinięciu) z opisem tej funkcji. W takim przypadku kliknij Dalej (nie zobaczysz go więcej). Tak wygląda ten jednorazowy ekran:
Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Cloud Shell zapewnia dostęp do terminala maszyny wirtualnej hostowanej w chmurze. Maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość czynności z tego ćwiczenia z programowania można wykonać w przeglądarce lub na Chromebooku.
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się informacja, że użytkownik jest już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu.
- Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
Dane wyjściowe polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Dane wyjściowe polecenia
[core] project = <PROJECT_ID>
Jeśli tak nie jest, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Dane wyjściowe polecenia
Updated property [core/project].
3. Włączanie interfejsu Cloud Document AI API
Zanim zaczniesz korzystać z Document AI, musisz włączyć interfejs API. Otwórz konsolę Cloud w przeglądarce.
- Kliknij Menu nawigacyjne OK > Interfejsy API Usługi > Biblioteka.
- Wyszukaj „Document AI API”, a następnie kliknij Włącz, aby używać interfejsu API w projekcie Google Cloud.
4. Utwórz i przetestuj procesor
Musisz najpierw utworzyć instancję procesora parsera formularzy do użycia na platformie Document AI w tym samouczku.
- W konsoli przejdź do omówienia Document AI Platform.
- Kliknij Create Processor (Utwórz procesor) i wybierz Form Parser.
- Podaj nazwę procesora i wybierz region z listy.
- Kliknij Utwórz, aby utworzyć procesor.
- Skopiuj identyfikator podmiotu przetwarzającego. Będzie trzeba użyć go później w kodzie.
(Opcjonalnie) Możesz przetestować procesor w konsoli, przesyłając dokument. Kliknij Prześlij dokument i wybierz formularz do przeanalizowania. Jeśli nie masz jeszcze odpowiedniego formularza, możesz go pobrać i wykorzystać.
Dane wyjściowe powinny wyglądać tak:
5. Uwierzytelnianie żądań do interfejsu API
Aby wysyłać żądania do interfejsu Document AI API, musisz używać konta usługi. Konto usługi należy do Twojego projektu i jest używane przez bibliotekę klienta Google Node.js do wysyłania żądań do interfejsu API. Tak jak każde inne konto użytkownika, konto usługi jest reprezentowane przez adres e-mail. W tej sekcji utworzysz konto usługi za pomocą pakietu Cloud SDK, a następnie utworzysz dane logowania, których użyjesz do uwierzytelnienia jako konto usługi.
Najpierw ustaw zmienną środowiskową za pomocą parametru PROJECT_ID
, którego będziesz używać podczas tego ćwiczenia z programowania:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Następnie utwórz nowe konto usługi z dostępem do interfejsu Document AI API, używając polecenia:
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
Następnie utwórz dane logowania, których Twój kod w Node.js będzie używać do logowania się na Twoje nowe konto usługi. Utwórz te dane i zapisz je w pliku JSON „~/key.json”. za pomocą tego polecenia:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Ostatnim krokiem jest utworzenie zmiennej środowiskowej GOOGLE_APPLICATION_CREDENTIALS, która będzie używana przez biblioteka do wyszukiwania Twoich danych logowania. Więcej informacji o uwierzytelnianiu za pomocą formularza znajdziesz w przewodniku. Zmienna środowiskowa powinna zawierać pełną ścieżkę do utworzonego przez Ciebie pliku JSON z danymi logowania za pomocą polecenia:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. Pobierz przykładowy formularz
Udostępniamy przykładowy formularz do użycia w naszym publicznym zasobniku próbek w Google Cloud Storage. Użyj tego polecenia, aby pobrać go do katalogu roboczego.
gsutil cp gs://cloud-samples-data/documentai/form.pdf .
Sprawdź, czy plik został pobrany do Cloud Shell, używając tego polecenia:
ls -ltr form.pdf
7. Instalowanie biblioteki klienta
Następnie skonfiguruj kod w katalogu roboczym.
Zainicjuj nowy pakiet Node.js:
npm init
Zainstaluj bibliotekę klienta Document AI:
npm install @google-cloud/documentai
8. Wykonywanie żądania dokumentu dotyczącego procesu synchronicznego
W tym kroku wykonasz wywołanie dokumentu procesu za pomocą synchronicznego punktu końcowego. Do przetwarzania dużej liczby dokumentów jednocześnie możesz użyć asynchronicznego interfejsu API. Więcej informacji o korzystaniu z interfejsów Form Parser API znajdziesz w tym przewodniku.
Utwórz plik index.js
i wklej ten kod. W odpowiednich zmiennych wpisz informacje o procesorze.
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;
});
Uruchom ten kod teraz. W konsoli powinien się pojawić poniższy tekst.
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
W następnych krokach wyodrębnisz uporządkowane dane, które można łatwiej przechowywać w bazach danych lub używać ich w innych aplikacjach.
9. Wyodrębnianie par klucz-wartość formularza
Teraz możesz wyodrębnić pary klucz-wartość z formularza i odpowiadające im wskaźniki ufności. Obiekt odpowiedzi Document zawiera listę stron z dokumentu wejściowego. Każdy obiekt page
zawiera listę pól formularza i ich lokalizacji w tekście.
Następujący kod wykona iterację na każdej stronie i wyodrębnia każdy klucz, wartość oraz wskaźnik ufności.
Dodaj do kodu poniższą funkcję.
/**
* 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;
}
Dodaj wywołanie do funkcji extractFormData()
z poziomu funkcji głównej i wydrukuj powstały obiekt w formie tabeli.
/**
* 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);
}
Teraz uruchom kod. Jeśli korzystasz z przykładowego dokumentu, dane wyjściowe powinny wyglądać tak:
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. Gratulacje!
Gratulujemy! Udało Ci się użyć interfejsu Document AI API do wyodrębniania danych z odręcznego formularza. Zachęcamy do eksperymentowania z innymi obrazami formularza.
Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku:
- W konsoli Cloud otwórz stronę Zarządzanie zasobami.
- Na liście projektów wybierz swój projekt i kliknij Usuń.
- W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
Więcej informacji
- Przyszłość dokumentów – playlista w YouTube
- Dokumentacja Document AI
- Dokumentacja biblioteki klienta Document AI Node.js
- Przykłady Document AI Node.js