تشخیص نوری کاراکتر (OCR) با هوش مصنوعی سند (پایتون)

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

Document AI چیست؟

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

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

ما از یک فایل PDF رمان کلاسیک "وینی پو" اثر AA Milne که اخیراً بخشی از دامنه عمومی در ایالات متحده شده است استفاده خواهیم کرد. این فایل توسط Google Books اسکن و دیجیتالی شده است.

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

  • نحوه فعال کردن Document AI API
  • نحوه احراز هویت درخواست های API
  • نحوه نصب کتابخانه کلاینت برای پایتون
  • نحوه استفاده از API های پردازش آنلاین و دسته ای
  • نحوه تجزیه متن از یک فایل PDF

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

  • یک پروژه Google Cloud
  • یک مرورگر، مانند کروم یا فایرفاکس
  • آشنایی با پایتون (3.9+)

نظرسنجی

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

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

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

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

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

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

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

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

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

پروژه را انتخاب کنید

پروژه جدید

شناسه پروژه را دریافت کنید

شناسه پروژه را به خاطر بسپارید، نامی منحصر به فرد در تمام پروژه های 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 کلیک کنید Cloud Shell را فعال کنید

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

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

معرفی پوسته ابری

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

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

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی Project 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. Document AI API را فعال کنید

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

از gcloud CLI استفاده کنید

  1. اگر از Cloud Shell استفاده نمی کنید، مراحل نصب gcloud CLI را در دستگاه محلی خود دنبال کنید.
  2. API ها را می توان با استفاده از دستورات gcloud زیر فعال کرد.
gcloud services enable documentai.googleapis.com storage.googleapis.com

شما باید چیزی شبیه به این را ببینید:

Operation "operations/..." finished successfully.

از Cloud Console استفاده کنید

Cloud Console را در مرورگر خود باز کنید.

  1. با استفاده از نوار جستجو در بالای کنسول، "Document AI API" را جستجو کنید، سپس روی فعال کردن کلیک کنید تا از API در پروژه Google Cloud خود استفاده کنید.

جستجوی API

  1. مرحله قبل را برای Google Cloud Storage API تکرار کنید.

اکنون، می توانید از Document AI استفاده کنید!

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

ابتدا باید یک نمونه از پردازنده Document OCR ایجاد کنید که استخراج را انجام دهد. این را می توان با استفاده از Cloud Console یا Processor Management API تکمیل کرد.

کنسول ابری

  1. در کنسول، به Document AI Platform Overview بروید کنسول نمای کلی هوش مصنوعی سند
  2. روی Explore Processors کلیک کنید و Document OCR را انتخاب کنید پردازنده ها
  3. نام آن را codelab-ocr (یا چیز دیگری که به یاد دارید) بگذارید و نزدیکترین منطقه را در لیست انتخاب کنید.
  4. برای ایجاد پردازنده خود روی Create کلیک کنید
  5. شناسه پردازنده خود را کپی کنید. بعدا باید از این در کد خود استفاده کنید. شناسه پردازنده

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

فایل پی دی اف زیر را که شامل 3 صفحه اول رمان ماست می توانید دانلود کنید.

صفحه عنوان

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

کتابخانه مشتری پایتون

برای یادگیری نحوه مدیریت پردازشگرهای هوش مصنوعی سند با کتابخانه کلاینت پایتون، این کد را دنبال کنید:

مدیریت پردازشگرهای هوش مصنوعی سند با پایتون - Codelab

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

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

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

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

کتابخانه های کلاینت پایتون را برای 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 صفحه اول رمان است.

با استفاده از لینک زیر می توانید پی دی اف را دانلود کنید. سپس آن را در نمونه cloudshell آپلود کنید .

همچنین می‌توانید آن را از Google Cloud Storage Bucket با استفاده از gsutil بارگیری کنید.

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

8. یک درخواست پردازش آنلاین ارائه دهید

در این مرحله، 3 صفحه اول رمان را با استفاده از API پردازش آنلاین (همگام) پردازش خواهید کرد. این روش برای اسناد کوچکتری که به صورت محلی ذخیره می شوند مناسب است. لیست کامل پردازنده را برای حداکثر صفحات و اندازه فایل برای هر نوع پردازنده بررسی کنید.

برای ایجاد فایلی به نام online_processing.py از Cloud Shell Editor یا یک ویرایشگر متن در دستگاه محلی خود استفاده کنید و از کد زیر استفاده کنید.

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. یک درخواست پردازش دسته ای ارائه دهید

حال، فرض کنید که می خواهید در متن از کل رمان بخوانید.

  • پردازش آنلاین محدودیت هایی در تعداد صفحات و اندازه فایل قابل ارسال دارد و تنها اجازه می دهد تا یک فایل سند در هر تماس API وجود داشته باشد.
  • پردازش دسته ای امکان پردازش فایل های بزرگتر/چندین را در یک روش ناهمزمان فراهم می کند.

در این مرحله، کل رمان «وینی پو» را با Document AI Batch Processing API پردازش می کنیم و متن را در یک سطل ذخیره سازی ابری Google خارج می کنیم.

پردازش دسته ای از Long Running Operations برای مدیریت درخواست ها به صورت ناهمزمان استفاده می کند، بنابراین ما باید درخواست را انجام دهیم و خروجی را به روشی متفاوت از پردازش آنلاین بازیابی کنیم. با این حال، خروجی با همان فرمت شی Document خواهد بود، چه با استفاده از پردازش آنلاین یا دسته ای.

این مرحله نشان می دهد که چگونه می توان اسناد خاصی را برای پردازش Document AI ارائه کرد. مرحله بعدی نحوه پردازش کل فهرست اسناد را نشان می دهد.

PDF را در فضای ذخیره سازی ابری بارگذاری کنید

روش 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/

... یا فایل نمونه رمان را می توانید از لینک زیر دانلود و در سطل خود آپلود کنید .

همچنین برای ذخیره خروجی API به یک سطل GCS نیاز دارید.

برای یادگیری نحوه ایجاد سطل های ذخیره سازی، می توانید مستندات فضای ذخیره سازی ابری را دنبال کنید.

با استفاده از متد 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,
    )

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

ممکن است تکمیل آن کمی طول بکشد زیرا فایل بسیار بزرگتر از مثال قبلی است. (اوه، مزاحم...)

با این حال، با Batch Processing API، یک شناسه عملیاتی دریافت خواهید کرد که پس از تکمیل کار، می‌توان از آن برای دریافت خروجی از 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/

می‌توانید فایل‌ها را مستقیماً بخوانید یا آن‌ها را در سطل فضای ذخیره‌سازی ابری خود کپی کنید.

کد مرحله قبل را مجدداً اجرا کنید و 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. پاسخ پردازش دسته ای را با جعبه ابزار Document AI کنترل کنید

پردازش دسته‌ای به دلیل ادغام با فضای ذخیره‌سازی ابری به چندین مرحله برای انجام نیاز دارد. بسته به اندازه سند ورودی، خروجی Document ممکن است به چندین فایل .json . "تجزیه" شود.

Document AI Toolbox Python SDK برای ساده سازی پس پردازش و سایر کارهای رایج با 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. تبریک می گویم

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

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

پاک کردن

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

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

بیشتر بدانید

با این Codelab های بعدی به یادگیری در مورد Document AI ادامه دهید.

منابع

مجوز

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