Sử dụng AI tài liệu để xử lý biểu mẫu viết tay (Node.js) một cách thông minh

1. Tổng quan

AI Tài liệu là gì?

API Document AI là một giải pháp phân tích tài liệu, sử dụng dữ liệu phi cấu trúc, chẳng hạn như tài liệu, email, v.v., đồng thời giúp việc hiểu, phân tích và sử dụng dữ liệu trở nên dễ dàng hơn. API này cung cấp cấu trúc thông qua tính năng phân loại nội dung, trích xuất thực thể, tìm kiếm nâng cao, v.v.

Trong hướng dẫn này, bạn sẽ tập trung vào việc sử dụng API AI tài liệu với Node.js. Hướng dẫn này minh hoạ cách phân tích cú pháp một biểu mẫu nhập thông tin y tế đơn giản.

Kiến thức bạn sẽ học được

  • Cách bật API Document AI
  • Cách xác thực yêu cầu API
  • Cách cài đặt thư viện ứng dụng cho Node.js
  • Cách phân tích cú pháp dữ liệu trong một biểu mẫu đã quét

Bạn cần có

  • Một dự án trong Google Cloud
  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Có kiến thức về Node.js

Khảo sát

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ có thể đọc Đọc và hoàn thành bài tập

Bạn đánh giá trải nghiệm của bạn với Node.js như thế nào?

Người mới tập Trung cấp Thành thạo

Bạn đánh giá thế nào về trải nghiệm sử dụng các dịch vụ của Google Cloud?

Người mới tập Trung cấp Thành thạo

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. (Nếu chưa có tài khoản Gmail hoặc G Suite, bạn phải tạo một tài khoản.)

Ghi nhớ mã dự án, tên duy nhất của tất cả dự án trên Google Cloud. (Rất tiếc, tên của bạn ở trên đã được sử dụng và sẽ không có hiệu lực cho bạn!). Sau này, bạn phải cung cấp mã nhận dạng này bằng tên PROJECT_ID.

  1. Tiếp theo, bạn phải bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.

Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" . Phần này sẽ tư vấn cho bạn cách tắt các tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Khởi động Cloud Shell

Mặc dù Google Cloud, bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng lớp học lập trình này sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Đám mây.

Kích hoạt Cloud Shell

  1. Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuyFP1RzVad_4nCa0Zszrz5LtwQZZ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Nếu trước đây chưa từng khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian (dưới màn hình đầu tiên) mô tả về nó. Nếu trường hợp đó xảy ra, hãy nhấp vào Tiếp tục (và bạn sẽ không thấy thông báo đó nữa). Màn hình một lần đó sẽ có dạng như sau:

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

Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Cloud Shell cung cấp cho bạn quyền truy cập thiết bị đầu cuối vào máy ảo được lưu trữ trên đám mây. Máy ảo này bao gồm tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Trong lớp học lập trình này, đa số mọi người đều có thể thực hiện chỉ bằng một trình duyệt hoặc Chromebook.

Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành mã dự án.

  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list

Kết quả lệnh

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

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

Kết quả lệnh

[core]
project = <PROJECT_ID>

Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Kết quả lệnh

Updated property [core/project].

3. Bật Cloud Document AI API

Bạn phải bật API thì mới có thể bắt đầu sử dụng Document AI. Mở Cloud Console trong trình duyệt.

  1. Nhấp vào Trình đơn điều hướng ↗ > API và Dịch vụ > Thư viện. API Tìm kiếm
  2. Tìm "Document AI API" (API AI của tài liệu), rồi nhấp vào Bật để sử dụng API trong dự án Google Cloud

4. Tạo và kiểm thử bộ xử lý

Trước tiên, bạn phải tạo một thực thể của trình xử lý Trình phân tích cú pháp biểu mẫu để dùng trong Nền tảng AI của tài liệu cho hướng dẫn này.

  1. Trong bảng điều khiển, hãy chuyển đến phần Tổng quan về nền tảng AI cho tài liệu
  2. Nhấp vào Tạo trình xử lý rồi chọn Trình phân tích cú pháp biểu mẫuBộ xử lý
  3. Chỉ định tên đơn vị xử lý rồi chọn khu vực của bạn trong danh sách.
  4. Nhấp vào Tạo để tạo bộ xử lý
  5. Sao chép mã nhận dạng đơn vị xử lý. Bạn phải sử dụng mã này sau này.

(Không bắt buộc) Bạn có thể kiểm tra bộ xử lý của mình trong bảng điều khiển bằng cách tải một tài liệu lên. Nhấp vào Tải tài liệu lên và chọn một biểu mẫu để phân tích cú pháp. Bạn có thể tải xuống và sử dụng biểu mẫu mẫu này nếu không có sẵn biểu mẫu để sử dụng.

Biểu mẫu sức khoẻ

Kết quả của bạn sẽ có dạng như sau: Dạng được phân tích cú pháp

5. Xác thực các yêu cầu API

Để gửi yêu cầu đến API Document AI, bạn phải sử dụng Tài khoản dịch vụ. Tài khoản dịch vụ thuộc về dự án của bạn và được thư viện Node.js của ứng dụng Google sử dụng để tạo các yêu cầu API. Giống như mọi tài khoản người dùng khác, tài khoản dịch vụ được đại diện bằng địa chỉ email. Trong phần này, bạn sẽ sử dụng Cloud SDK để tạo một tài khoản dịch vụ, sau đó tạo thông tin xác thực mà bạn cần dùng để xác thực là tài khoản dịch vụ.

Trước tiên, hãy đặt một biến môi trường bằng PROJECT_ID mà bạn sẽ sử dụng trong suốt lớp học lập trình này:

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

Tiếp theo, hãy tạo một tài khoản dịch vụ mới để truy cập vào API Document AI bằng cách sử dụng:

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

Tiếp theo, hãy tạo thông tin đăng nhập mà mã Node.js sử dụng để đăng nhập làm tài khoản dịch vụ mới. Tạo các thông tin đăng nhập này và lưu dưới dạng tệp JSON "~/key.json" bằng cách dùng lệnh sau:

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

Cuối cùng, hãy đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS. Biến này được thư viện sử dụng để tìm thông tin đăng nhập của bạn. Để đọc thêm về quy trình xác thực biểu mẫu này, hãy xem hướng dẫn. Bạn phải đặt biến môi trường thành đường dẫn đầy đủ của tệp JSON chứa thông tin đăng nhập mà bạn đã tạo bằng cách sử dụng:

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

6. Tải Biểu mẫu mẫu xuống

Chúng tôi có một biểu mẫu mẫu để sử dụng được lưu trữ trong bộ chứa mẫu Google Cloud Storage công khai của chúng tôi. Sử dụng lệnh sau để tải tệp xuống thư mục đang làm việc của bạn.

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

Xác nhận tệp đã được tải xuống Cloudshell bằng lệnh dưới đây:

ls -ltr form.pdf

7. Cài đặt Thư viện ứng dụng

Tiếp theo, hãy thiết lập mã trong thư mục đang làm việc của bạn.

Khởi chạy gói Node.js mới:

npm init

Cài đặt Thư viện ứng dụng AI của tài liệu:

npm install @google-cloud/documentai

8. Đưa ra yêu cầu tài liệu quy trình đồng bộ

Ở bước này, bạn thực hiện lệnh gọi xử lý tài liệu bằng điểm cuối đồng bộ. Để xử lý số lượng lớn tài liệu cùng một lúc, bạn cũng có thể sử dụng API không đồng bộ. Để tìm hiểu thêm về cách sử dụng API Trình phân tích cú pháp biểu mẫu, hãy đọc hướng dẫn tại đây.

Tạo tệp index.js rồi dán mã sau. Điền thông tin của đơn vị xử lý vào các biến thích hợp.

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;
});

Chạy mã ngay và bạn sẽ thấy văn bản sau được in trong bảng điều khiển của mình.

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

Trong các bước tiếp theo, bạn sẽ trích xuất dữ liệu có cấu trúc có thể dễ dàng lưu trữ trong cơ sở dữ liệu hoặc dùng trong các ứng dụng khác.

9. Trích xuất cặp khoá/giá trị biểu mẫu

Giờ đây, bạn có thể trích xuất các cặp khoá-giá trị từ biểu mẫu và điểm tin cậy tương ứng của chúng. Đối tượng phản hồi Document (Tài liệu) chứa danh sách các trang trong tài liệu đầu vào. Mỗi đối tượng page chứa một danh sách các trường biểu mẫu và vị trí của các trường đó trong văn bản.

Mã sau đây sẽ lặp lại qua từng trang và trích xuất từng khoá, giá trị và điểm tin cậy.

Thêm hàm sau vào mã của bạn.

/**
 * 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;
}

Thêm lệnh gọi vào hàm extractFormData() từ bên trong hàm chính rồi in đối tượng kết quả dưới dạng bảng.

/**
 * 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);
}

Bây giờ, hãy chạy mã của bạn. Bạn sẽ thấy kết quả sau đây nếu sử dụng tài liệu mẫu của chúng ta:

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. Xin chúc mừng!

Xin chúc mừng! Bạn đã sử dụng thành công API Document AI để trích xuất dữ liệu từ một biểu mẫu viết tay. Bạn nên thử nghiệm với các hình ảnh biểu mẫu khác.

Dọn dẹp

Để tránh bị tính phí vào tài khoản Google Cloud của bạn cho các tài nguyên được sử dụng trong hướng dẫn này:

  • Trong Cloud Console, hãy chuyển đến trang Quản lý tài nguyên.
  • Trong danh sách dự án, hãy chọn dự án rồi nhấp vào Xoá.
  • Trong hộp thoại, nhập ID dự án rồi nhấp vào Tắt để xoá dự án.

Tìm hiểu thêm

Giấy phép

Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.