दस्तावेज़ एआई की मदद से, हाथ से लिखे गए फ़ॉर्म (Node.js) को बेहतर तरीके से प्रोसेस करें

1. खास जानकारी

Document AI क्या है?

Document AI API, दस्तावेज़ों को समझने में मदद करने वाला एक समाधान है. यह दस्तावेज़ों, ईमेल वगैरह जैसे बिना किसी स्ट्रक्चर वाले डेटा को लेता है और उसे समझने, उसका विश्लेषण करने, और उसका इस्तेमाल करने में आसानी होती है. यह एपीआई, कॉन्टेंट क्लासिफ़िकेशन, इकाई एक्सट्रैक्शन, ऐडवांस खोज वगैरह के ज़रिए स्ट्रक्चर उपलब्ध कराता है.

इस ट्यूटोरियल में, Node.js के साथ Document AI API का इस्तेमाल करने के बारे में बताया गया है. इस ट्यूटोरियल में, मेडिकल से जुड़े सामान्य फ़ॉर्म को पार्स करने का तरीका बताया गया है.

आपको क्या सीखने को मिलेगा

  • 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. इसके बाद, Google Cloud के संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.

"सफ़ाई करना" सेक्शन में दिए गए निर्देशों का पालन ज़रूर करें. इस सेक्शन में, संसाधनों को बंद करने का तरीका बताया गया है, ताकि इस ट्यूटोरियल के बाद आपसे बिलिंग न की जाए. 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 का इस्तेमाल नहीं किया है, तो आपको एक इंटरमीडिएट स्क्रीन (नीचे फ़ोल्ड की गई) दिखेगी. इसमें 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. नेविगेशन मेन्यू ☰ > एपीआई और सेवाएं > लाइब्रेरी पर क्लिक करें. Search API
  2. "Document AI API" खोजें. इसके बाद, अपने Google Cloud प्रोजेक्ट में एपीआई का इस्तेमाल करने के लिए, चालू करें पर क्लिक करें

4. प्रोसेसर बनाना और उसकी जांच करना

इस ट्यूटोरियल में Document AI Platform का इस्तेमाल करने के लिए, आपको सबसे पहले फ़ॉर्म पार्सर प्रोसेसर का एक इंस्टेंस बनाना होगा.

  1. कंसोल में, Document AI Platform की खास जानकारी पर जाएं
  2. प्रोसेसर बनाएं पर क्लिक करें. इसके बाद, फ़ॉर्म पार्सरप्रोसेसर चुनें
  3. प्रोसेसर का नाम डालें और सूची से अपना देश/इलाका चुनें.
  4. प्रोसेसर बनाने के लिए, बनाएं पर क्लिक करें
  5. अपने प्रोसेसर आईडी को कॉपी करें. आपको इसका इस्तेमाल बाद में अपने कोड में करना होगा.

(ज़रूरी नहीं) दस्तावेज़ अपलोड करके, कंसोल में अपने प्रोसेसर को आज़माया जा सकता है. दस्तावेज़ अपलोड करें पर क्लिक करें और पार्स करने के लिए कोई फ़ॉर्म चुनें. अगर आपके पास कोई फ़ॉर्म उपलब्ध नहीं है, तो इस सैंपल फ़ॉर्म को डाउनलोड करके इस्तेमाल किया जा सकता है.

स्वास्थ्य से जुड़ा फ़ॉर्म

आपका आउटपुट ऐसा दिखना चाहिए: पार्स किया गया फ़ॉर्म

5. एपीआई अनुरोधों की पुष्टि करना

Document AI API से अनुरोध करने के लिए, आपको सेवा खाता इस्तेमाल करना होगा. सेवा खाता आपके प्रोजेक्ट से जुड़ा होता है. इसका इस्तेमाल 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 .

नीचे दिए गए निर्देश का इस्तेमाल करके पुष्टि करें कि फ़ाइल आपके Cloud Shell में डाउनलोड हो गई है:

ls -ltr form.pdf

7. क्लाइंट लाइब्रेरी इंस्टॉल करना

इसके बाद, अपनी वर्किंग डायरेक्ट्री में कोड सेट अप करें.

नया Node.js पैकेज शुरू करें:

npm init

Document AI क्लाइंट लाइब्रेरी इंस्टॉल करें:

npm install @google-cloud/documentai

8. सिंक्रोनस प्रोसेस के दस्तावेज़ के लिए अनुरोध करना

इस चरण में, सिंक्रोनस एंडपॉइंट का इस्तेमाल करके, प्रोसेस दस्तावेज़ को कॉल किया जाता है. एक साथ कई दस्तावेज़ों को प्रोसेस करने के लिए, एसिंक्रोनस एपीआई का भी इस्तेमाल किया जा सकता है. Form Parser 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. फ़ॉर्म के की/वैल्यू पेयर एक्सट्रैक्ट करना

अब फ़ॉर्म से की-वैल्यू पेयर और उनसे जुड़े कॉन्फ़िडेंस स्कोर निकाले जा सकते हैं. 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'     │
└─────────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────┴────────────────┴─────────────────┘

10. बधाई हो!

बधाई हो, आपने हाथ से लिखे गए फ़ॉर्म से डेटा निकालने के लिए, Document AI API का इस्तेमाल कर लिया है. हमारा सुझाव है कि आप फ़ॉर्म में शामिल की जाने वाली अन्य इमेज के साथ एक्सपेरिमेंट करें.

खाली करने के लिए जगह

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए:

  • Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
  • प्रोजेक्ट की सूची में, अपना प्रोजेक्ट चुनें. इसके बाद, मिटाएं पर क्लिक करें.
  • डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.

ज़्यादा जानें

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.