استخدام الذكاء الاصطناعي للمستندات لمعالجة النماذج المكتوبة بخط اليد (Node.js)

1. نظرة عامة

ما هو Document AI؟

واجهة برمجة التطبيقات Document AI API هي حل لفهم المستندات الذي يأخذ البيانات غير المنظَّمة، مثل المستندات والرسائل الإلكترونية وغيرها، ويسهِّل فهم البيانات وتحليلها واستخدامها. توفّر واجهة برمجة التطبيقات البنية من خلال تصنيف المحتوى واستخراج الكيانات والبحث المتقدّم والمزيد.

ستركّز في هذا البرنامج التعليمي على استخدام Document AI API مع Node.js. يشرح البرنامج التعليمي كيفية تحليل نموذج طبي بسيط.

المعلومات التي ستطّلع عليها

  • طريقة تفعيل Document AI API
  • كيفية مصادقة طلبات البيانات من واجهة برمجة التطبيقات
  • كيفية تثبيت مكتبة البرامج الخاصة ببروتوكول Node.js
  • كيفية تحليل البيانات من نموذج تم مسحه ضوئيًا

المتطلبات

  • مشروع على Google Cloud
  • متصفح، مثل Chrome أو Firefox
  • الإلمام ببروتوكول Node.js

استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

القراءة فقط اقرأها وأكمِل التمارين

ما هو تقييمك لتجربتك في استخدام Node.js؟

حديث متوسط بارع

ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud؟

حديث متوسط بارع

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. (إذا لم يكن لديك حساب على Gmail أو G Suite، عليك إنشاء حساب.)

تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud. (لقد تم استخدام اسمك أعلاه من قبل ولن يكون مناسبًا لك، عذرًا!). يجب تقديم مستند التعريف هذا في وقت لاحق باستخدام عنوان البريد الإلكتروني PROJECT_ID.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". . يقدم لك هذا القسم إرشادات حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي تكاليف فوترة خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج الفترة التجريبية المجانية التي تبلغ قيمتها 300 دولار أمريكي.

بدء Cloud Shell

يمكنك تشغيل Google Cloud من الكمبيوتر المحمول عن بُعد في هذا الدرس التطبيقي حول الترميز باستخدام Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

تفعيل Cloud Shell

  1. من Cloud Console، انقر على تفعيل Cloud Shell 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 إمكانية الوصول الطرفي إلى جهاز افتراضي تتم استضافته على السحابة الإلكترونية. يتضمن الجهاز الظاهري جميع أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح أو جهاز Chromebook.

بعد الربط بخدمة 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].

3- تفعيل Cloud Document AI API

قبل البدء في استخدام Document AI، يجب تفعيل واجهة برمجة التطبيقات. افتح Cloud Console في متصفّحك.

  1. انقر على قائمة التنقل ⋮ > واجهات برمجة التطبيقات الخدمات > المكتبة: واجهة برمجة تطبيقات البحث
  2. ابحث عن "Document AI API" ثم انقر على تفعيل لاستخدام واجهة برمجة التطبيقات في مشروعك على Google Cloud.

4. إنشاء معالج بيانات واختباره

يجب أولاً إنشاء مثيل من معالج النموذج اللغوي للنماذج لاستخدامه في Document AI Platform لهذا البرنامج التعليمي.

  1. في وحدة التحكّم، انتقِل إلى Document AI Platform Overview
  2. انقر على إنشاء معالج واختَر النموذج اللغوي للنموذجالمعالجات.
  3. حدِّد اسم معالج بيانات واختَر منطقتك من القائمة.
  4. انقر على إنشاء لإنشاء المعالج
  5. انسخ رقم تعريف معالج البيانات. يجب استخدام هذا في الرمز لاحقًا.

(اختياري) يمكنك اختبار المعالج في وحدة التحكّم من خلال تحميل مستند. انقر على تحميل المستند واختَر نموذجًا لتحليله. يمكنك تنزيل هذا النموذج واستخدامه إذا لم يكن لديك نموذج متاح للاستخدام.

نموذج صحي

يجب أن تبدو مخرجاتك على هذا النحو: النموذج الذي تم تحليله

5- مصادقة طلبات البيانات من واجهة برمجة التطبيقات

لإرسال طلبات إلى Document AI API، يجب استخدام حساب خدمة. ينتمي حساب الخدمة إلى مشروعك، وتستخدمه مكتبة Node.js في برنامج Google Client Node.js لإرسال طلبات البيانات من واجهة برمجة التطبيقات. مثل أي حساب مستخدم آخر، يتم تمثيل حساب الخدمة بعنوان بريد إلكتروني. في هذا القسم، ستستخدم 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"

6- تنزيل عيّنة النموذج

لدينا نموذج نموذج لاستخدامه في حزمة عينات Google Cloud Storage العامة. استخدِم الأمر التالي لتنزيله في دليل العمل.

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

تأكَّد من تنزيل الملف على cloudshell باستخدام الأمر أدناه:

ls -ltr form.pdf

7. تثبيت مكتبة البرامج

بعد ذلك، اضبط الرمز في دليل العمل.

إعداد حزمة Node.js جديدة:

npm init

تثبيت مكتبة برامج الذكاء الاصطناعي للمستندات:

npm install @google-cloud/documentai

8. تقديم طلب مستند عملية متزامن

في هذه الخطوة، يمكنك إجراء استدعاء عملية مستند باستخدام نقطة النهاية المتزامنة. لمعالجة كميات كبيرة من المستندات في وقت واحد، يمكنك أيضًا استخدام واجهة برمجة التطبيقات غير المتزامنة، ولمزيد من المعلومات حول استخدام واجهات برمجة تطبيقات محلل النماذج، اقرأ الدليل هنا.

أنشئ ملف 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. استخراج أزواج المفتاح/القيمة للنماذج

يمكنك الآن استخراج أزواج المفتاح/القيمة من النموذج ونتائج الثقة المقابلة لها. يحتوي كائن الاستجابة المستند على قائمة بالصفحات من مستند الإدخال. يحتوي كل عنصر 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'     │
└─────────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────┴────────────────┴─────────────────┘

10. تهانينا!

تهانينا، لقد تم استخدام Document AI API بنجاح لاستخراج البيانات من نموذج مكتوب بخط اليد. نشجعك على تجربة نماذج أخرى من الصور.

إخلاء مساحة

لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي:

  • في Cloud Console، انتقِل إلى صفحة إدارة الموارد.
  • في قائمة المشاريع، اختَر مشروعك ثم انقر على "حذف".
  • في مربع الحوار، اكتب معرّف المشروع ثم انقر على "إيقاف التشغيل" لحذف المشروع.

مزيد من المعلومات

الترخيص

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.