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

۱. مرور کلی

هوش مصنوعی اسناد چیست؟

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

در این آموزش، شما بر استفاده از API هوش مصنوعی اسناد با Node.js تمرکز می‌کنید. این آموزش نحوه تجزیه و تحلیل یک فرم پذیرش پزشکی ساده را نشان می‌دهد.

آنچه یاد خواهید گرفت

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

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

  • یک پروژه ابری گوگل
  • یک مرورگر، مانند کروم یا فایرفاکس
  • آشنایی با Node.js

نظرسنجی

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

فقط تا انتها بخوانید آن را بخوانید و تمرین‌ها را انجام دهید

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

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

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

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

۲. تنظیمات و الزامات

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

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

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

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

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

شروع پوسته ابری

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

فعال کردن پوسته ابری

  1. از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

اگر قبلاً Cloud Shell را شروع نکرده‌اید، یک صفحه میانی (در پایین صفحه) به شما نمایش داده می‌شود که توضیح می‌دهد چیست. در این صورت، روی ادامه کلیک کنید (و دیگر هرگز آن را نخواهید دید). آن صفحه یکبار مصرف به این شکل است:

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

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

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Cloud Shell دسترسی ترمینال به یک ماشین مجازی میزبانی شده در فضای ابری را برای شما فراهم می‌کند. این ماشین مجازی شامل تمام ابزارهای توسعه مورد نیاز شما است. این ماشین یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و در فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی افزایش می‌دهد. بخش عمده‌ای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را می‌توان به سادگی با یک مرورگر یا کروم‌بوک انجام داد.

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

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

۳. فعال کردن رابط برنامه‌نویسی کاربردی هوش مصنوعی اسناد ابری

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

  1. روی منوی ناوبری ☰ > APIها و خدمات > کتابخانه کلیک کنید. جستجوی API
  2. عبارت «Document AI API» را جستجو کنید، سپس برای استفاده از API در پروژه Google Cloud خود، روی فعال‌سازی کلیک کنید.

۴. یک پردازنده ایجاد و آزمایش کنید

ابتدا باید یک نمونه از پردازشگر تجزیه‌کننده فرم ایجاد کنید تا در پلتفرم هوش مصنوعی سند برای این آموزش استفاده شود.

  1. در کنسول، به نمای کلی پلتفرم هوش مصنوعی اسناد بروید
  2. روی ایجاد پردازنده کلیک کنید و تجزیه‌گر فرم را انتخاب کنید پردازنده‌ها
  3. نام پردازنده را مشخص کنید و منطقه خود را از لیست انتخاب کنید.
  4. برای ایجاد پردازنده خود، روی ایجاد کلیک کنید
  5. شناسه پردازنده خود را کپی کنید. بعداً باید از آن در کد خود استفاده کنید.

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

فرم سلامت

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

۵. درخواست‌های API را تأیید اعتبار کنید

برای ارسال درخواست به API مربوط به Document AI، باید از یک حساب کاربری سرویس (Service Account ) استفاده کنید. یک حساب کاربری سرویس متعلق به پروژه شماست و توسط کتابخانه 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 را که توسط کتابخانه برای یافتن اعتبارنامه‌های شما استفاده می‌شود، تنظیم کنید. برای مطالعه بیشتر در مورد این احراز هویت فرم، به راهنما مراجعه کنید. متغیر محیطی باید با استفاده از دستور زیر، روی مسیر کامل فایل JSON اعتبارنامه‌هایی که ایجاد کرده‌اید، تنظیم شود:

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

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

ما یک فرم نمونه برای استفاده داریم که در مخزن نمونه‌های عمومی ذخیره‌سازی ابری گوگل (Google Cloud Storage samples bucket) ذخیره شده است. از دستور زیر برای دانلود آن در دایرکتوری کاری خود استفاده کنید.

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

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

ls -ltr form.pdf

۷. کتابخانه کلاینت را نصب کنید

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

یک بسته جدید Node.js را مقداردهی اولیه کنید:

npm init

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

npm install @google-cloud/documentai

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

در این مرحله، شما با استفاده از نقطه پایانی همزمان، یک فراخوانی سند فرآیند انجام می‌دهید. برای پردازش حجم زیادی از اسناد به طور همزمان، می‌توانید از 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

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

۹. استخراج جفت‌های کلید/مقدار فرم

اکنون می‌توانید جفت‌های کلید-مقدار و نمرات اطمینان مربوطه را از فرم استخراج کنید. شیء پاسخ Document شامل لیستی از صفحات سند ورودی است. هر شیء 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() را از داخل تابع اصلی فراخوانی کنید و شیء حاصل را به صورت یک جدول چاپ کنید.

/**
 * 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'     │
└─────────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────┴────────────────┴─────────────────┘

۱۰. تبریک می‌گویم!

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

تمیز کردن

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

  • در کنسول ابری، به صفحه مدیریت منابع بروید.
  • در لیست پروژه‌ها، پروژه خود را انتخاب کنید و سپس روی حذف کلیک کنید.
  • در کادر محاوره‌ای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن (Shut down) کلیک کنید.

اطلاعات بیشتر

مجوز

این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.