التعرّف البصري على الأحرف (OCR) باستخدام Document AI (Python)

1. نظرة عامة

ما هو Document AI؟

الذكاء الاصطناعي للمستندات هو حل لفهم المستندات يستخدم البيانات غير المنظَّمة (مثل المستندات والرسائل الإلكترونية والفواتير والنماذج وما إلى ذلك) ويسهِّل فهم البيانات وتحليلها واستخدامها. توفّر واجهة برمجة التطبيقات البنية من خلال تصنيف المحتوى واستخراج الكيانات والبحث المتقدّم والمزيد.

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

سنستخدم ملف PDF للرواية الكلاسيكية "ويني ذا بوه" بواسطة A.A. Milne، الذي أصبح مؤخرًا جزءًا من النطاق العام في الولايات المتحدة. تم مسح هذا الملف ضوئيًا ورقمنته من خلال كتب Google.

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

  • طريقة تفعيل Document AI API
  • كيفية مصادقة طلبات البيانات من واجهة برمجة التطبيقات
  • كيفية تثبيت مكتبة البرامج في Python
  • كيفية استخدام واجهات برمجة التطبيقات على الإنترنت والمعالجة المجمّعة
  • كيفية تحليل النص من ملف PDF

المتطلبات

  • مشروع على Google Cloud
  • متصفح، مثل Chrome أو Firefox
  • الإلمام باستخدام لغة بايثون (الإصدار 3.9 والإصدارات الأحدث)

استطلاع

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

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

كيف تقيّم تجربتك مع Python؟

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

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

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

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

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

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

اختيار مشروع

مشروع جديد

الحصول على رقم تعريف المشروع

تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع 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 تفعيل Cloud Shell.

تفعيل Cloud Shell

إذا لم يسبق لك بدء تشغيل Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) تصف ماهيتها. إذا كان الأمر كذلك، فانقر على متابعة (ولن تراه مرة أخرى مطلقًا). إليك ما تبدو عليه هذه الشاشة التي تُستخدم لمرة واحدة:

مقدمة عن Cloud Shell

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط. Cloud Shell

توفّر لك Cloud Shell إمكانية الوصول الطرفي إلى جهاز افتراضي تتم استضافته على السحابة الإلكترونية. يتضمن الجهاز الظاهري جميع أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ الكثير من أعمالك، إن لم يكن كلّها، في هذا الدرس التطبيقي حول الترميز من خلال متصفّح ببساطة.

بعد الربط بخدمة 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- تفعيل واجهة برمجة تطبيقات Document AI

قبل البدء في استخدام Document AI، يجب تفعيل واجهة برمجة التطبيقات. يمكنك تنفيذ ذلك باستخدام واجهة سطر الأوامر gcloud أو Cloud Console.

استخدام واجهة سطر الأوامر gcloud

  1. إذا لم تكن تستخدم Cloud Shell، يُرجى اتّباع الخطوات الواردة في تثبيت gcloud CLI على جهازك المحلي.
  2. يمكن تفعيل واجهات برمجة التطبيقات باستخدام أوامر gcloud التالية.
gcloud services enable documentai.googleapis.com storage.googleapis.com

ينبغي أن تظهر لك على النحو التالي:

Operation "operations/..." finished successfully.

استخدام Cloud Console

افتح Cloud Console في متصفّحك.

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

واجهة برمجة تطبيقات البحث

  1. كرِّر الخطوة السابقة لواجهة Google Cloud Storage API.

يمكنك الآن استخدام Document AI.

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

يجب أولاً إنشاء مثيل لمعالِج التعرّف البصري على الأحرف (OCR) للمستند الذي سيجري الاستخراج. ويمكن إكمال ذلك باستخدام Cloud Console أو Processor Management API.

Cloud Console

  1. في وحدة التحكّم، انتقِل إلى Document AI Platform Overviewوحدة التحكّم في نظرة عامة على Document AI
  2. النقر على استكشاف المعالجات واختيار التعرّف البصري على الأحرف (OCR) للمستنداتالمعالجات
  3. أدخِل الاسم codelab-ocr (أو أي اسم آخر تتذكره) واختَر أقرب منطقة في القائمة.
  4. انقر على إنشاء لإنشاء المعالج
  5. انسخ رقم تعريف معالج البيانات. يجب استخدام هذا في الرمز لاحقًا. رقم تعريف معالج البيانات

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

يمكنك تنزيل ملف PDF أدناه، الذي يحتوي على أوّل 3 صفحات من روايتنا.

صفحة العنوان

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

مكتبة برامج Python

اتّبِع هذا الدرس التطبيقي حول الترميز لمعرفة كيفية إدارة معالِجات Document AI باستخدام مكتبة برامج Python:

إدارة معالجات الذكاء الاصطناعي للمستندات باستخدام Python - درس تطبيقي حول الترميز

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

لإرسال طلبات إلى Document AI API، يجب استخدام حساب خدمة. ينتمي حساب الخدمة إلى مشروعك، وتستخدمه مكتبة برامج Python لإرسال طلبات البيانات من واجهة برمجة التطبيقات. مثل أي حساب مستخدم آخر، يتم تمثيل حساب الخدمة بعنوان بريد إلكتروني. في هذا القسم، ستستخدم Cloud SDK لإنشاء حساب خدمة، ثم إنشاء بيانات الاعتماد التي تحتاج إلى مصادقتها كحساب الخدمة.

أولاً، افتح Cloud Shell واضبط متغيّر بيئة باستخدام 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"

بعد ذلك، امنح حساب الخدمة أذونات الوصول إلى Document AI وCloud Storage في مشروعك.

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
    --member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
    --role="roles/documentai.admin"

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
    --member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
    --role="roles/storage.admin"

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
    --member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
    --role="roles/serviceusage.serviceUsageConsumer"

بعد ذلك، أنشِئ بيانات الاعتماد التي يستخدمها رمز بايثون لتسجيل الدخول كحساب خدمة جديد. أنشِئ بيانات الاعتماد هذه واحفظها كملف 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- تثبيت مكتبة البرامج

تثبيت مكتبات برامج Python لكل من Document AI وCloud Storage وDocument AI Toolbox:

pip3 install --upgrade google-cloud-documentai
pip3 install --upgrade google-cloud-storage
pip3 install --upgrade google-cloud-documentai-toolbox

ينبغي أن تظهر لك على النحو التالي:

...
Installing collected packages: google-cloud-documentai
Successfully installed google-cloud-documentai-2.15.0
.
.
Installing collected packages: google-cloud-storage
Successfully installed google-cloud-storage-2.9.0
.
.
Installing collected packages: google-cloud-documentai-toolbox
Successfully installed google-cloud-documentai-toolbox-0.6.0a0

أنت الآن جاهز لاستخدام واجهة برمجة التطبيقات Document AI API

7. تنزيل نموذج PDF

يتوفر لدينا نموذج مستند يحتوي على أول 3 صفحات من الرواية.

يمكنك تنزيل ملف PDF باستخدام الرابط التالي. بعد ذلك، يمكنك تحميله إلى مثيل cloudshell.

يمكنك أيضًا تنزيله من حزمة Google Cloud Storage العامة باستخدام gsutil.

gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh_3_Pages.pdf .

8. تقديم طلب معالجة على الإنترنت

في هذه الخطوة، ستعالج أول 3 صفحات من الرواية باستخدام واجهة برمجة تطبيقات المعالجة (المتزامنة) عبر الإنترنت. هذه الطريقة هي الأنسب للمستندات الأصغر التي يتم تخزينها محليًا. اطّلِع على القائمة الكاملة لمعالجة البيانات لمعرفة الحدّ الأقصى لعدد الصفحات وحجم الملفّ في كل نوع من أنواع معالجات البيانات.

يمكنك استخدام محرِّر Cloud Shell أو محرِّر نصوص على جهازك المحلي لإنشاء ملف باسم online_processing.py واستخدام الرمز أدناه.

استبدِل YOUR_PROJECT_ID وYOUR_PROJECT_LOCATION وYOUR_PROCESSOR_ID وFILE_PATH بقيم مناسبة لبيئتك.

online_processing.py

from google.api_core.client_options import ClientOptions
from google.cloud import documentai


PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION"  # Format is 'us' or 'eu'
PROCESSOR_ID = "YOUR_PROCESSOR_ID"  # Create processor in Cloud Console

# The local file in your current working directory
FILE_PATH = "Winnie_the_Pooh_3_Pages.pdf"
# Refer to https://cloud.google.com/document-ai/docs/file-types
# for supported file types
MIME_TYPE = "application/pdf"

# Instantiates a client
docai_client = documentai.DocumentProcessorServiceClient(
    client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com")
)

# 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
RESOURCE_NAME = docai_client.processor_path(PROJECT_ID, LOCATION, PROCESSOR_ID)

# Read the file into memory
with open(FILE_PATH, "rb") as image:
    image_content = image.read()

# Load Binary Data into Document AI RawDocument Object
raw_document = documentai.RawDocument(content=image_content, mime_type=MIME_TYPE)

# Configure the process request
request = documentai.ProcessRequest(name=RESOURCE_NAME, raw_document=raw_document)

# Use the Document AI client to process the sample form
result = docai_client.process_document(request=request)

document_object = result.document
print("Document processing complete.")
print(f"Text: {document_object.text}")

قم بتشغيل التعليمة البرمجية، والتي ستقوم باستخراج النص وطباعته في وحدة التحكم.

من المفترض أن يظهر لك الناتج التالي إذا كنت تستخدم نموذج المستند:

Document processing complete.
Text: CHAPTER I
IN WHICH We Are Introduced to
Winnie-the-Pooh and Some
Bees, and the Stories Begin
Here is Edward Bear, coming
downstairs now, bump, bump, bump, on the back
of his head, behind Christopher Robin. It is, as far
as he knows, the only way of coming downstairs,
but sometimes he feels that there really is another
way, if only he could stop bumping for a moment
and think of it. And then he feels that perhaps there
isn't. Anyhow, here he is at the bottom, and ready
to be introduced to you. Winnie-the-Pooh.
When I first heard his name, I said, just as you
are going to say, "But I thought he was a boy?"
"So did I," said Christopher Robin.
"Then you can't call him Winnie?"
"I don't."
"But you said "

...

Digitized by
Google

9. تقديم طلب معالجة مجمّعة

لنفترض الآن أنك تريد قراءة نص الرواية بأكملها.

  • تفرض المعالجة على الإنترنت قيودًا على عدد الصفحات وحجم الملفات التي يمكن إرسالها، وتسمح فقط بملف مستند واحد لكل طلب بيانات من واجهة برمجة التطبيقات.
  • تسمح المعالجة المجمّعة بمعالجة الملفات الأكبر حجمًا/المتعددة بطريقة غير متزامنة.

في هذه الخطوة، سنعالج قصة "ويني ذا بوه" بالكامل جديدة باستخدام واجهة برمجة التطبيقات Document AI Batchلاً API ويمكنك إخراج النص إلى حزمة Google Cloud Storage.

تستخدم المعالجة المجمّعة عمليات طويلة التشغيل لإدارة الطلبات بطريقة غير متزامنة، ولذلك يتعين علينا تقديم الطلب واسترداد الناتج بطريقة مختلفة عن المعالجة على الإنترنت. ومع ذلك، سيكون الناتج بتنسيق عنصر Document نفسه سواء كان المعالجة على الإنترنت أو المعالجة على دُفعة.

توضّح هذه الخطوة كيفية تقديم مستندات محددة لمعالجتها باستخدام Document AI. ستوضح الخطوة اللاحقة كيفية معالجة دليل كامل من المستندات.

تحميل ملف PDF إلى Cloud Storage

تقبل الطريقة batch_process_documents() حاليًا الملفات من Google Cloud Storage. يمكنك الرجوع إلى documentai_v1.types.BatchProcessRequest للحصول على مزيد من المعلومات حول بنية العنصر.

في هذا المثال، يمكنك قراءة الملف مباشرةً من نموذج الحزمة.

يمكنك أيضًا نسخ الملف إلى حزمتك الخاصة باستخدام gsutil...

gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf gs://YOUR_BUCKET_NAME/

...أو يمكنك تنزيل نموذج الملف للرواية من الرابط أدناه وتحميله إلى حزمتك الخاصة.

ستحتاج أيضًا إلى حزمة GCS لتخزين نتائج واجهة برمجة التطبيقات.

يمكنك الاطّلاع على مستندات Cloud Storage للتعرّف على كيفية إنشاء حِزم التخزين.

باستخدام الطريقة batch_process_documents()

أنشئ ملفًا باسم batch_processing.py واستخدِم الرمز أدناه.

استبدِل YOUR_PROJECT_ID وYOUR_PROCESSOR_LOCATION وYOUR_PROCESSOR_ID وYOUR_INPUT_URI وYOUR_OUTPUT_URI بالقيم المناسبة لبيئتك.

احرص على أن يشير YOUR_INPUT_URI مباشرةً إلى ملف PDF، على سبيل المثال: gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf.

batch_processing.py

"""
Makes a Batch Processing Request to Document AI
"""

import re

from google.api_core.client_options import ClientOptions
from google.api_core.exceptions import InternalServerError
from google.api_core.exceptions import RetryError
from google.cloud import documentai
from google.cloud import storage

# TODO(developer): Fill these variables before running the sample.
project_id = "YOUR_PROJECT_ID"
location = "YOUR_PROCESSOR_LOCATION"  # Format is "us" or "eu"
processor_id = "YOUR_PROCESSOR_ID"  # Create processor before running sample
gcs_output_uri = "YOUR_OUTPUT_URI"  # Must end with a trailing slash `/`. Format: gs://bucket/directory/subdirectory/
processor_version_id = (
    "YOUR_PROCESSOR_VERSION_ID"  # Optional. Example: pretrained-ocr-v1.0-2020-09-23
)

# TODO(developer): If `gcs_input_uri` is a single file, `mime_type` must be specified.
gcs_input_uri = "YOUR_INPUT_URI"  # Format: `gs://bucket/directory/file.pdf` or `gs://bucket/directory/`
input_mime_type = "application/pdf"
field_mask = "text,entities,pages.pageNumber"  # Optional. The fields to return in the Document object.


def batch_process_documents(
    project_id: str,
    location: str,
    processor_id: str,
    gcs_input_uri: str,
    gcs_output_uri: str,
    processor_version_id: str = None,
    input_mime_type: str = None,
    field_mask: str = None,
    timeout: int = 400,
):
    # You must set the api_endpoint if you use a location other than "us".
    opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")

    client = documentai.DocumentProcessorServiceClient(client_options=opts)

    if not gcs_input_uri.endswith("/") and "." in gcs_input_uri:
        # Specify specific GCS URIs to process individual documents
        gcs_document = documentai.GcsDocument(
            gcs_uri=gcs_input_uri, mime_type=input_mime_type
        )
        # Load GCS Input URI into a List of document files
        gcs_documents = documentai.GcsDocuments(documents=[gcs_document])
        input_config = documentai.BatchDocumentsInputConfig(gcs_documents=gcs_documents)
    else:
        # Specify a GCS URI Prefix to process an entire directory
        gcs_prefix = documentai.GcsPrefix(gcs_uri_prefix=gcs_input_uri)
        input_config = documentai.BatchDocumentsInputConfig(gcs_prefix=gcs_prefix)

    # Cloud Storage URI for the Output Directory
    gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig(
        gcs_uri=gcs_output_uri, field_mask=field_mask
    )

    # Where to write results
    output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config)

    if processor_version_id:
        # The full resource name of the processor version, e.g.:
        # projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}
        name = client.processor_version_path(
            project_id, location, processor_id, processor_version_id
        )
    else:
        # The full resource name of the processor, e.g.:
        # projects/{project_id}/locations/{location}/processors/{processor_id}
        name = client.processor_path(project_id, location, processor_id)

    request = documentai.BatchProcessRequest(
        name=name,
        input_documents=input_config,
        document_output_config=output_config,
    )

    # BatchProcess returns a Long Running Operation (LRO)
    operation = client.batch_process_documents(request)

    # Continually polls the operation until it is complete.
    # This could take some time for larger files
    # Format: projects/{project_id}/locations/{location}/operations/{operation_id}
    try:
        print(f"Waiting for operation {operation.operation.name} to complete...")
        operation.result(timeout=timeout)
    # Catch exception when operation doesn"t finish before timeout
    except (RetryError, InternalServerError) as e:
        print(e.message)

    # NOTE: Can also use callbacks for asynchronous processing
    #
    # def my_callback(future):
    #   result = future.result()
    #
    # operation.add_done_callback(my_callback)

    # Once the operation is complete,
    # get output document information from operation metadata
    metadata = documentai.BatchProcessMetadata(operation.metadata)

    if metadata.state != documentai.BatchProcessMetadata.State.SUCCEEDED:
        raise ValueError(f"Batch Process Failed: {metadata.state_message}")

    storage_client = storage.Client()

    print("Output files:")
    # One process per Input Document
    for process in list(metadata.individual_process_statuses):
        # output_gcs_destination format: gs://BUCKET/PREFIX/OPERATION_NUMBER/INPUT_FILE_NUMBER/
        # The Cloud Storage API requires the bucket name and URI prefix separately
        matches = re.match(r"gs://(.*?)/(.*)", process.output_gcs_destination)
        if not matches:
            print(
                "Could not parse output GCS destination:",
                process.output_gcs_destination,
            )
            continue

        output_bucket, output_prefix = matches.groups()

        # Get List of Document Objects from the Output Bucket
        output_blobs = storage_client.list_blobs(output_bucket, prefix=output_prefix)

        # Document AI may output multiple JSON files per source file
        for blob in output_blobs:
            # Document AI should only output JSON files to GCS
            if blob.content_type != "application/json":
                print(
                    f"Skipping non-supported file: {blob.name} - Mimetype: {blob.content_type}"
                )
                continue

            # Download JSON File as bytes object and convert to Document Object
            print(f"Fetching {blob.name}")
            document = documentai.Document.from_json(
                blob.download_as_bytes(), ignore_unknown_fields=True
            )

            # For a full list of Document object attributes, please reference this page:
            # https://cloud.google.com/python/docs/reference/documentai/latest/google.cloud.documentai_v1.types.Document

            # Read the text recognition output from the processor
            print("The document contains the following text:")
            print(document.text)


if __name__ == "__main__":
    batch_process_documents(
        project_id=project_id,
        location=location,
        processor_id=processor_id,
        gcs_input_uri=gcs_input_uri,
        gcs_output_uri=gcs_output_uri,
        input_mime_type=input_mime_type,
        field_mask=field_mask,
    )

قم بتشغيل التعليمة البرمجية، وسترى النص الجديد الكامل مستخرَجًا وطباعته في وحدة التحكم الخاصة بك.

قد يستغرق إكمال ذلك بعض الوقت لأنّ الملف أكبر بكثير من المثال السابق. (حسنًا...)

ومع ذلك، باستخدام واجهة برمجة التطبيقات "معالجة الدفعة"، ستتلقّى "معرّف عملية" يمكن استخدامه للحصول على المخرجات من فريق GCS بعد اكتمال المهمّة.

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

Waiting for operation projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_NUMBER to complete...
Document processing complete.
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-0.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-1.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-10.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-11.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-12.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-13.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-14.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-15.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-16.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-17.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-18.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-2.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-3.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-4.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-5.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-6.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-7.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-8.json
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-9.json

This is a reproduction of a library book that was digitized
by Google as part of an ongoing effort to preserve the
information in books and make it universally accessible.
TM
Google books
https://books.google.com

.....

He nodded and went
out ... and in a moment
I heard Winnie-the-Pooh
-bump, bump, bump-go-ing up the stairs behind
him.
Digitized by
Google

10. تقديم طلب معالجة مجمّعة لدليل

في بعض الأحيان قد تحتاج إلى معالجة دليل كامل من المستندات، دون سرد كل مستند على حدة. تدعم الطريقة batch_process_documents() إدخال قائمة مستندات محددة أو مسار دليل.

ستوضح هذه الخطوة كيفية معالجة دليل كامل لملفات المستندات. يعمل معظم الرمز بالطريقة نفسها المُتّبعة في الخطوة السابقة، والفرق الوحيد هو معرّف الموارد المنتظم (URI) لـ GCS الذي تم إرساله مع BatchProcessRequest.

لدينا دليل في العينة الذي يحتوي على عدة صفحات من الرواية في ملفات منفصلة.

  • gs://cloud-samples-data/documentai/codelabs/ocr/multi-document/

يمكنك قراءة الملفات مباشرةً أو نسخها إلى حزمتك الخاصة على Cloud Storage.

أعد تشغيل الرمز من الخطوة السابقة، مع استبدال YOUR_INPUT_URI بدليل في Cloud Storage.

شغِّل الرمز البرمجي، ومن المفترض أن يظهر لك النص المُستخرَج من جميع ملفات المستندات في دليل Cloud Storage.

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

Waiting for operation projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_NUMBER to complete...
Document processing complete.
Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh_Page_0-0.json
Fetching docai-output/OPERATION_NUMBER/1/Winnie_the_Pooh_Page_1-0.json
Fetching docai-output/OPERATION_NUMBER/2/Winnie_the_Pooh_Page_10-0.json
Fetching docai-output/OPERATION_NUMBER/3/Winnie_the_Pooh_Page_12-0.json
Fetching docai-output/OPERATION_NUMBER/4/Winnie_the_Pooh_Page_16-0.json
Fetching docai-output/OPERATION_NUMBER/5/Winnie_the_Pooh_Page_7-0.json

Introduction
(I₂
F YOU happen to have read another
book about Christopher Robin, you may remember
th
CHAPTER I
IN WHICH We Are Introduced to
Winnie-the-Pooh and Some
Bees, and the Stories Begin
HERE is
10
WINNIE-THE-POOH
"I wonder if you've got such a thing as a balloon
about you?"
"A balloon?"
"Yes, 
12
WINNIE-THE-POOH
and you took your gun with you, just in case, as
you always did, and Winnie-the-P
16
WINNIE-THE-POOH
this song, and one bee sat down on the nose of the
cloud for a moment, and then g
WE ARE INTRODUCED
7
"Oh, help!" said Pooh, as he dropped ten feet on
the branch below him.
"If only 

11. معالجة استجابة المعالجة المجمّعة باستخدام مجموعة أدوات الذكاء الاصطناعي للمستندات

يتطلب إنجاز المعالجة المجمّعة تنفيذ بضع خطوات بسبب التكامل مع خدمة Cloud Storage. قد يتم أيضًا "تقسيم" ناتج Document. في عدة ملفات .json بناءً على حجم مستند الإدخال.

تم إنشاء حزمة تطوير البرامج (SDK) في Python ضمن Document AI Toolbox لتبسيط عمليات ما بعد المعالجة وغيرها من المهام الشائعة باستخدام Document AI. من المفترض أن تكون هذه المكتبة مكمّلة لمكتبة برامج Document AI، وليست بديلاً. يُرجى الانتقال إلى المستندات المرجعية للاطّلاع على المواصفات الكاملة.

توضّح هذه الخطوة كيفية إرسال طلب معالجة مجمّعة واسترداد الناتج باستخدام مجموعة أدوات Document AI.

batch_processing_toolbox.py

"""
Makes a Batch Processing Request to Document AI using Document AI Toolbox
"""

from google.api_core.client_options import ClientOptions
from google.cloud import documentai
from google.cloud import documentai_toolbox

# TODO(developer): Fill these variables before running the sample.
project_id = "YOUR_PROJECT_ID"
location = "YOUR_PROCESSOR_LOCATION"  # Format is "us" or "eu"
processor_id = "YOUR_PROCESSOR_ID"  # Create processor before running sample
gcs_output_uri = "YOUR_OUTPUT_URI"  # Must end with a trailing slash `/`. Format: gs://bucket/directory/subdirectory/
processor_version_id = (
    "YOUR_PROCESSOR_VERSION_ID"  # Optional. Example: pretrained-ocr-v1.0-2020-09-23
)

# TODO(developer): If `gcs_input_uri` is a single file, `mime_type` must be specified.
gcs_input_uri = "YOUR_INPUT_URI"  # Format: `gs://bucket/directory/file.pdf`` or `gs://bucket/directory/``
input_mime_type = "application/pdf"
field_mask = "text,entities,pages.pageNumber"  # Optional. The fields to return in the Document object.


def batch_process_toolbox(
    project_id: str,
    location: str,
    processor_id: str,
    gcs_input_uri: str,
    gcs_output_uri: str,
    processor_version_id: str = None,
    input_mime_type: str = None,
    field_mask: str = None,
):
    # You must set the api_endpoint if you use a location other than "us".
    opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")

    client = documentai.DocumentProcessorServiceClient(client_options=opts)

    if not gcs_input_uri.endswith("/") and "." in gcs_input_uri:
        # Specify specific GCS URIs to process individual documents
        gcs_document = documentai.GcsDocument(
            gcs_uri=gcs_input_uri, mime_type=input_mime_type
        )
        # Load GCS Input URI into a List of document files
        gcs_documents = documentai.GcsDocuments(documents=[gcs_document])
        input_config = documentai.BatchDocumentsInputConfig(gcs_documents=gcs_documents)
    else:
        # Specify a GCS URI Prefix to process an entire directory
        gcs_prefix = documentai.GcsPrefix(gcs_uri_prefix=gcs_input_uri)
        input_config = documentai.BatchDocumentsInputConfig(gcs_prefix=gcs_prefix)

    # Cloud Storage URI for the Output Directory
    gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig(
        gcs_uri=gcs_output_uri, field_mask=field_mask
    )

    # Where to write results
    output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config)

    if processor_version_id:
        # The full resource name of the processor version, e.g.:
        # projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}
        name = client.processor_version_path(
            project_id, location, processor_id, processor_version_id
        )
    else:
        # The full resource name of the processor, e.g.:
        # projects/{project_id}/locations/{location}/processors/{processor_id}
        name = client.processor_path(project_id, location, processor_id)

    request = documentai.BatchProcessRequest(
        name=name,
        input_documents=input_config,
        document_output_config=output_config,
    )

    # BatchProcess returns a Long Running Operation (LRO)
    operation = client.batch_process_documents(request)

    # Operation Name Format: projects/{project_id}/locations/{location}/operations/{operation_id}
    documents = documentai_toolbox.document.Document.from_batch_process_operation(
        location=location, operation_name=operation.operation.name
    )

    for document in documents:
        # Read the text recognition output from the processor
        print("The document contains the following text:")
        # Truncated at 100 characters for brevity
        print(document.text[:100])


if __name__ == "__main__":
    batch_process_toolbox(
        project_id=project_id,
        location=location,
        processor_id=processor_id,
        gcs_input_uri=gcs_input_uri,
        gcs_output_uri=gcs_output_uri,
        input_mime_type=input_mime_type,
        field_mask=field_mask,
    )

12. تهانينا

لقد تمكّنت من استخدام الذكاء الاصطناعي (AI) للمستند بنجاح لاستخراج النص من رواية باستخدام ميزتَي "المعالجة على الإنترنت" و"المعالجة المجمّعة" و"مجموعة أدوات الذكاء الاصطناعي للمستندات".

ننصحك بتجربة مستندات أخرى واستكشاف المعالِجات الأخرى المتاحة على المنصّة.

إخلاء مساحة

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

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

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

يمكنك مواصلة التعرّف على مزيد من المعلومات حول Document AI من خلال هذه الدروس التطبيقية حول الترميز.

المراجع

الترخيص

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