از Document AI برای پردازش هوشمندانه فرم‌های دست‌نویس خود استفاده کنید (Node.js)

1. بررسی اجمالی

Document AI چیست؟

Document AI API راه حلی برای درک اسناد است که داده های بدون ساختار مانند اسناد، ایمیل ها و غیره را دریافت می کند و درک، تجزیه و تحلیل و مصرف داده ها را آسان تر می کند. API ساختار را از طریق طبقه بندی محتوا، استخراج موجودیت، جستجوی پیشرفته و موارد دیگر ارائه می دهد.

در این آموزش، شما بر روی استفاده از Document AI API با Node.js تمرکز می کنید. این آموزش نحوه تجزیه یک فرم دریافت ساده پزشکی را نشان می دهد.

چیزی که یاد خواهید گرفت

  • نحوه فعال کردن Document AI API
  • نحوه احراز هویت درخواست های API
  • نحوه نصب کتابخانه مشتری برای Node.js
  • نحوه تجزیه اطلاعات از فرم اسکن شده

آنچه شما نیاز دارید

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

فقط از طریق آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

تجربه خود را با Node.js چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

تجربه خود را در استفاده از خدمات Google Cloud چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud. (نام شما در بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متاسفم!). شما باید این شناسه را بعداً به عنوان PROJECT_ID ارائه دهید.

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .

حتماً دستورالعمل‌های موجود در بخش «تمیز کردن» را دنبال کنید. این بخش به شما توصیه می کند که چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud می‌توانید Google Cloud را از راه دور از لپ‌تاپ خود کار کنید، این کد لبه از Google Cloud Shell استفاده می‌کند، یک محیط خط فرمان که در Cloud اجرا می‌شود.

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0ZlWzVDLWD2Ca0ZlUZRWLXT دی کیو .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4ZIRF6HQWQ2 rbzQ

اگر قبلاً Cloud Shell را راه‌اندازی نکرده‌اید، یک صفحه میانی (در زیر تاشو) برای شما نمایش داده می‌شود که آن را توصیف می‌کند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4tw1Uo6VRh1

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyRvcD

Cloud Shell دسترسی ترمینال به یک ماشین مجازی که در فضای ابری میزبانی شده است را برای شما فراهم می کند. ماشین مجازی شامل تمام ابزارهای توسعه است که شما نیاز دارید. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.

  1. برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list

خروجی فرمان

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

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

خروجی فرمان

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی فرمان

Updated property [core/project].

3. Cloud Document AI API را فعال کنید

قبل از شروع استفاده از Document AI، باید API را فعال کنید. Cloud Console را در مرورگر خود باز کنید.

  1. روی منوی پیمایش ☰ > APIs & Services > Library کلیک کنید. جستجوی API
  2. «Document AI API» را جستجو کنید، سپس روی Enable کلیک کنید تا از API در پروژه Google Cloud خود استفاده کنید

4. ایجاد و تست یک پردازنده

ابتدا باید یک نمونه از پردازشگر Form Parser ایجاد کنید تا در Document AI Platform برای این آموزش استفاده کنید.

  1. در کنسول، به Document AI Platform Overview بروید
  2. روی Create Processor کلیک کرده و Form Parser را انتخاب کنید پردازنده ها
  3. نام پردازنده را مشخص کنید و منطقه خود را از لیست انتخاب کنید.
  4. برای ایجاد پردازنده خود روی Create کلیک کنید
  5. شناسه پردازنده خود را کپی کنید. بعدا باید از این در کد خود استفاده کنید.

(اختیاری) می توانید با آپلود یک سند، پردازنده خود را در کنسول آزمایش کنید. روی آپلود سند کلیک کنید و فرمی را برای تجزیه انتخاب کنید. اگر فرمی برای استفاده در دسترس ندارید، می توانید این نمونه فرم را دانلود و استفاده کنید.

فرم سلامت

خروجی شما باید به این شکل باشد: فرم تجزیه شده

5. احراز هویت درخواست های API

برای ارسال درخواست به Document AI API، باید از یک حساب سرویس استفاده کنید. یک حساب سرویس متعلق به پروژه شما است و توسط کتابخانه Google Client Node.js برای درخواست های API استفاده می شود. مانند هر حساب کاربری دیگری، یک حساب سرویس با یک آدرس ایمیل نشان داده می شود. در این بخش، از Cloud SDK برای ایجاد یک حساب سرویس و سپس ایجاد اعتبارنامه هایی که برای احراز هویت به عنوان حساب سرویس نیاز دارید، استفاده خواهید کرد.

ابتدا یک متغیر محیطی را با PROJECT_ID خود تنظیم کنید که در سراسر این کد لبه استفاده خواهید کرد:

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

سپس، یک حساب سرویس جدید برای دسترسی به Document AI API با استفاده از:

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

در مرحله بعد، اعتبارنامه هایی ایجاد کنید که کد Node.js شما برای ورود به عنوان حساب سرویس جدید خود استفاده می کند. این اعتبارنامه ها را ایجاد کنید و با استفاده از دستور زیر آن را به عنوان یک فایل JSON " ~/key.json " ذخیره کنید:

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

در نهایت، متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را تنظیم کنید، که توسط کتابخانه برای یافتن اعتبار شما استفاده می شود. برای مطالعه بیشتر در مورد این احراز هویت فرم، به راهنما مراجعه کنید. متغیر محیطی باید با استفاده از:

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

6. نمونه فرم را دانلود کنید

ما یک فرم نمونه برای استفاده داریم که در سطل نمونه‌های Google Cloud Storage عمومی ذخیره شده است. از دستور زیر برای دانلود آن در پوشه کاری خود استفاده کنید.

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

با استفاده از دستور زیر تأیید کنید که فایل در پوسته ابری شما دانلود شده است:

ls -ltr form.pdf

7. کتابخانه مشتری را نصب کنید

سپس کد خود را در دایرکتوری کاری خود تنظیم کنید.

یک بسته Node.js جدید را راه اندازی کنید:

npm init

کتابخانه مشتری Document AI را نصب کنید:

npm install @google-cloud/documentai

8. یک درخواست سند فرآیند همزمان ایجاد کنید

در این مرحله، با استفاده از نقطه پایانی همزمان، یک فراخوانی سند فرآیند برقرار می‌کنید. برای پردازش مقادیر زیادی از اسناد در یک زمان، می‌توانید از API ناهمزمان نیز استفاده کنید، برای کسب اطلاعات بیشتر در مورد استفاده از APIهای تجزیه‌کننده فرم، راهنمای اینجا را بخوانید.

یک فایل index.js ایجاد کنید و کد زیر را در آن قرار دهید. متغیرهای مربوطه را با اطلاعات پردازنده خود پر کنید.

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

اکنون کد خود را اجرا کنید و باید متن زیر را در کنسول خود چاپ کنید.

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

در مراحل بعدی، داده‌های ساختاریافته‌ای را استخراج می‌کنید که می‌توانند به راحتی در پایگاه‌های داده ذخیره شوند یا در برنامه‌های کاربردی دیگر استفاده شوند.

9. Form Key/Value Pairs را استخراج کنید

اکنون می توانید جفت های کلید-مقدار را از فرم و امتیازات اطمینان مربوط به آنها استخراج کنید. شیء پاسخ سند حاوی فهرستی از صفحات از سند ورودی است. هر شی page حاوی لیستی از فیلدهای فرم و مکان آنها در متن است.

کد زیر در هر صفحه تکرار می شود و هر کلید، ارزش و امتیاز اطمینان را استخراج می کند.

تابع زیر را به کد خود اضافه کنید.

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

یک فراخوانی به تابع extractFormData() از داخل تابع main اضافه کنید و شیء به دست آمده را به صورت جدول چاپ کنید.

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

حالا کد خود را اجرا کنید. در صورت استفاده از سند نمونه ما باید خروجی زیر را ببینید:

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. تبریک می گویم!

تبریک می‌گوییم، شما با موفقیت از Document AI API برای استخراج داده‌ها از یک فرم دست‌نویس استفاده کردید. ما شما را تشویق می کنیم که با سایر تصاویر فرم آزمایش کنید.

پاک کردن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش:

  • در Cloud Console، به صفحه مدیریت منابع بروید.
  • در لیست پروژه، پروژه خود را انتخاب کنید و سپس روی Delete کلیک کنید.
  • در گفتگو، ID پروژه را تایپ کنید و سپس بر روی Shut down کلیک کنید تا پروژه حذف شود.

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.