Menggunakan Document AI untuk Memproses Secara Cerdas Formulir Tulis Tangan (Node.js)

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

  • Project Google Cloud
  • Browser, seperti Chrome atau Firefox
  • Mengetahui Node.js

Survei

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman Anda dengan Node.js?

Pemula Menengah Mahir

Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?

Pemula Menengah Mahir

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. 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.

  1. 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

  1. Dari Cloud Console, klik Aktifkan Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

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:

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

Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

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.

  1. 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.

  1. Klik Menu navigasi ☰ > API & Layanan > Library. Telusuri API
  2. 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.

  1. Di console, buka Ringkasan Document AI Platform
  2. Klik Buat Prosesor dan pilih Form ParserProsesor
  3. Tentukan nama prosesor dan pilih region Anda dari daftar.
  4. Klik Buat untuk membuat prosesor
  5. 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.

Formulir Kesehatan

Output Anda akan terlihat seperti ini: Formulir yang Diuraikan

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

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.