1. Ringkasan
Apa itu Document AI?
Document AI API adalah solusi pemahaman dokumen yang mengambil data tidak terstruktur, seperti dokumen, email, dan sebagainya, serta memudahkan data untuk dipahami, dianalisis, dan digunakan. API ini menyediakan struktur melalui klasifikasi konten, ekstraksi entitas, penelusuran lanjutan, dan lainnya.
Dalam tutorial ini, Anda akan berfokus pada penggunaan Document AI API dengan Node.js. Tutorial ini menunjukkan cara menguraikan formulir asupan medis sederhana.
Yang akan Anda pelajari
- Cara mengaktifkan Document AI API
- Cara mengautentikasi permintaan API
- Cara menginstal library klien untuk Node.js
- Cara mengurai data dari formulir yang dipindai
Yang akan Anda perlukan
Survei
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman Anda dengan Node.js?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. (Jika belum memiliki akun Gmail atau G Suite, Anda harus membuatnya.)
Ingat Project ID, nama unik di semua project Google Cloud. (Maaf, nama Anda di atas telah digunakan dan tidak akan berfungsi untuk Anda). Anda harus memberikan ID ini nanti sebagai PROJECT_ID
.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Pastikan untuk mengikuti petunjuk di bagian "Membersihkan". Bagian ini memberi tahu Anda cara mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis seharga $300 USD.
Mulai Cloud Shell
Saat menggunakan Google Cloud, Anda dapat mengoperasikannya dari jarak jauh menggunakan laptop, codelab ini menggunakan Google Cloud Shell, lingkungan command line yang dijalankan di Cloud.
Aktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell .
Jika belum pernah memulai Cloud Shell, Anda akan melihat layar perantara (di paruh bawah) yang menjelaskan apa itu Cloud Shell. Jika demikian, klik Lanjutkan (dan Anda tidak akan pernah melihatnya lagi). Berikut tampilan layar sekali-tampil tersebut:
Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
Cloud Shell memberi Anda akses terminal ke mesin virtual yang dihosting di cloud. Mesin virtual ini mencakup semua alat pengembangan yang akan Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan hanya dengan browser atau Chromebook.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Mengaktifkan Cloud Document AI API
Sebelum dapat mulai menggunakan Document AI, Anda harus mengaktifkan API. Buka Cloud Console di browser Anda.
- Klik Menu navigasi ☰ > API & Layanan > Library.
- Telusuri "Document AI API", lalu klik Aktifkan untuk menggunakan API di project Google Cloud Anda
4. Membuat dan Menguji Prosesor
Pertama-tama, Anda harus membuat instance prosesor Form Parser untuk digunakan di Document AI Platform untuk tutorial ini.
- Di console, buka Ringkasan Document AI Platform
- Klik Buat Prosesor dan pilih Form Parser
- Tentukan nama prosesor dan pilih region Anda dari daftar.
- Klik Buat untuk membuat prosesor
- Salin ID prosesor Anda. Anda harus menggunakan ini dalam kode nanti.
(Opsional) Anda dapat menguji prosesor di console dengan mengupload dokumen. Klik Upload Dokumen dan pilih formulir untuk diuraikan. Anda dapat mendownload dan menggunakan formulir contoh ini jika belum memiliki formulir untuk digunakan.
Output Anda akan terlihat seperti ini:
5. Melakukan Autentikasi permintaan API
Untuk membuat permintaan ke Document AI API, Anda harus menggunakan Akun Layanan. Akun Layanan merupakan milik project Anda dan digunakan oleh library Node.js Klien Google untuk membuat permintaan API. Seperti akun pengguna lainnya, akun layanan diwakili oleh alamat email. Di bagian ini, Anda akan menggunakan Cloud SDK untuk membuat akun layanan, lalu membuat kredensial yang diperlukan untuk melakukan autentikasi sebagai akun layanan.
Pertama, tetapkan variabel lingkungan dengan PROJECT_ID
yang akan Anda gunakan di seluruh codelab ini:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Selanjutnya, buat akun layanan baru untuk mengakses Document AI API menggunakan:
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
Selanjutnya, buat kredensial yang digunakan kode Node.js untuk login sebagai akun layanan baru. Buat kredensial ini dan simpan sebagai file JSON "~/key.json" dengan menggunakan perintah berikut:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Terakhir, tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS, yang digunakan oleh library untuk menemukan kredensial Anda. Untuk membaca selengkapnya tentang autentikasi formulir ini, lihat panduan. Variabel lingkungan harus ditetapkan ke jalur lengkap file JSON kredensial yang Anda buat menggunakan:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. Mendownload Formulir Contoh
Kami memiliki formulir contoh untuk digunakan dan disimpan di bucket contoh Google Cloud Storage publik kami. Gunakan perintah berikut untuk mendownloadnya ke direktori kerja Anda.
gsutil cp gs://cloud-samples-data/documentai/form.pdf .
Konfirmasikan bahwa file telah didownload ke cloudshell menggunakan perintah berikut:
ls -ltr form.pdf
7. Menginstal Library Klien
Selanjutnya, siapkan kode Anda di direktori kerja Anda.
Lakukan inisialisasi paket Node.js baru:
npm init
Instal library klien Document AI:
npm install @google-cloud/documentai
8. Membuat Permintaan Dokumen Proses Sinkron
Pada langkah ini, Anda akan membuat panggilan dokumen proses menggunakan endpoint sinkron. Untuk memproses dokumen dalam jumlah besar sekaligus, Anda juga dapat menggunakan API asinkron. Untuk mempelajari lebih lanjut tentang penggunaan Form Parser API, baca panduan di sini.
Buat file index.js
dan tempel kode berikut. Isi variabel yang berlaku dengan informasi prosesor Anda.
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;
});
Jalankan kode Anda sekarang dan Anda akan melihat teks berikut yang dicetak di konsol Anda.
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
Pada langkah berikutnya, Anda mengekstrak data terstruktur yang dapat lebih mudah disimpan di database atau digunakan di aplikasi lain.
9. Mengekstrak Key-Value Pair Formulir
Sekarang Anda dapat mengekstrak key-value pair dari formulir dan skor keyakinannya yang sesuai. Objek respons Dokumen berisi daftar halaman dari dokumen input. Setiap objek page
berisi daftar kolom formulir dan lokasinya di teks.
Kode berikut melakukan iterasi di seluruh halaman dan mengekstrak setiap kunci, nilai, dan skor keyakinan.
Tambahkan fungsi berikut ke kode Anda.
/**
* 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;
}
Tambahkan panggilan ke fungsi extractFormData()
dari dalam fungsi utama dan cetak objek yang dihasilkan sebagai tabel.
/**
* 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);
}
Sekarang jalankan kode Anda. Anda akan melihat output berikut jika menggunakan dokumen contoh kami:
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. Selamat!
Selamat, Anda telah berhasil menggunakan Document AI API untuk mengekstrak data dari formulir tulisan tangan. Sebaiknya Anda bereksperimen dengan gambar formulir lainnya.
Pembersihan
Agar tidak menimbulkan tagihan ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini:
- Di Cloud Console, buka halaman Mengelola resource.
- Dalam daftar project, pilih project Anda lalu klik Hapus.
- Pada dialog, ketik project ID, lalu klik Matikan untuk menghapus project.
Pelajari Lebih Lanjut
- Masa Depan Dokumen - Playlist YouTube
- Dokumentasi Document AI
- Referensi Library Klien Node.js Document AI
- Contoh Node.js Document AI