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

Document AI là gì?

API Document AI là một giải pháp hiểu tài liệu, lấy dữ liệu không có cấu trúc (chẳng hạn như tài liệu, email, v.v.) và giúp dữ liệu dễ hiểu, dễ phân tích và dễ sử dụng hơn. API này cung cấp cấu trúc thông qua việc 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 Document AI API 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 Document AI API
  • Cách xác thực cá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 từ biểu mẫu được quét

Bạn cần có

  • Một dự án trên 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

Bản khảo sát

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

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

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

Người mới bắt đầu Trung cấp Thành thạo

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

Người mới bắt đầu 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 tốc độ của riêng bạn

  1. Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một 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, một tên riêng biệt cho tất cả các dự án trên Google Cloud. (Tên của bạn ở trên đã được sử dụng và sẽ không hoạt động, xin lỗi!). Sau này, bạn phải cung cấp mã nhận dạng này dưới dạng 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 các 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 hướng dẫn bạn cách tắt các tài nguyên để không phải thanh toán ngoài phạm vi 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í trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù 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-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Nếu chưa từng khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian (bên dưới phần hiển thị đầu tiên) mô tả về Cloud Shell. Nếu vậy, hãy nhấp vào Tiếp tục (và bạn sẽ không bao giờ thấy màn hình này nữa). Sau đây là giao diện của màn hình xuất hiện một lần:

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

Quá trình cung cấp và kết nối với Cloud Shell chỉ mất vài giây.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Cloud Shell cung cấp cho bạn quyền truy cập vào dòng lệnh của một 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. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là tất cả, công việc trong lớp học lập trình này 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 rằng mình đã được xác thực và dự án đã được đặt thành mã dự án của bạ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

Đầu ra của 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

Đầu ra của lệnh

[core]
project = <PROJECT_ID>

Nếu không, bạn có thể đặt nó bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Đầu ra của lệnh

Updated property [core/project].

3. Bật Cloud Document AI API

Trước khi có thể bắt đầu sử dụng Document AI, bạn phải bật API này. 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. Search API
  2. Tìm "Document AI API" (API AI cho tài liệu), sau đó nhấp vào Bật để sử dụng API này trong dự án trên đám mây của bạn

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

Trước tiên, bạn phải tạo một phiên bản của trình xử lý Trình phân tích cú pháp biểu mẫu để sử dụng trong Document AI 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ề Document AI
  2. Nhấp vào Tạo bộ 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 bộ xử lý và 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 bộ xử lý. Sau này, bạn phải sử dụng chỉ mục này trong mã của mình.

(Không bắt buộc) Bạn có thể kiểm thử bộ xử lý 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 rồi 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ó biểu mẫu nào để sử dụng.

Biểu mẫu về sức khoẻ

Kết quả đầu ra sẽ có dạng như sau: Biểu mẫu đã phân tích cú pháp

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

Để đưa ra yêu cầu cho Document AI API, 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 Google Client Node.js dùng để thực hiện 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 biểu thị bằng một đị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 đăng nhập cần thiết để xác thực dưới dạng 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ẽ 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 Document AI API 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 của bạn dùng để đăng nhập dưới dạng tài khoản dịch vụ mới. Tạo thông tin đăng nhập này và lưu dưới dạng tệp JSON "~/key.json" bằ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. Thư viện này dùng biến môi trường này để tìm thông tin đăng nhập của bạn. Để đọc thêm về phương thức xác thực biểu mẫu này, hãy xem hướng dẫn. Bạn nên đặ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 công khai của Google Cloud Storage. Hãy dùng lệnh sau để tải tệp này xuống thư mục làm việc của bạn.

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

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

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 làm việc.

Khởi động một gói Node.js mới:

npm init

Cài đặt thư viện ứng dụng Document AI:

npm install @google-cloud/documentai

8. Tạo yêu cầu về tài liệu xử lý đồng bộ

Trong bước này, bạn thực hiện lệnh gọi tài liệu xử lý bằng điểm cuối đồng bộ. Để xử lý một 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 biểu mẫu, hãy đọc hướng dẫn tại đây.

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

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ã của bạn ngay bây giờ và bạn sẽ thấy văn bản sau được in trong bảng điều khiển.

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ể lưu trữ dễ dàng hơn trong cơ sở dữ liệu hoặc sử 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 số độ tin cậy tương ứng. Đối tượng phản hồi Document 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.

Đoạn mã sau đây lặp lại từng trang và trích xuất từng khoá, giá trị và điểm số độ 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 một lệnh gọi vào hàm extractFormData() từ bên trong hàm main và 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 tôi:

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!

Chúc mừng bạn đã sử dụng thành công Document AI API để 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 phát sinh phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được dùng trong hướng dẫn này, hãy làm như sau:

  • 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 của bạn rồi nhấp vào Xoá.
  • Trong hộp thoại, hãy nhập mã 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 Ghi công theo Creative Commons 2.0 Chung.