1. بررسی اجمالی
Document AI چیست؟
Document AI راه حلی برای درک اسناد است که داده های بدون ساختار (مانند اسناد، ایمیل ها، فاکتورها، فرم ها و غیره) را می گیرد و درک، تجزیه و تحلیل و مصرف داده ها را آسان تر می کند. API ساختار را از طریق طبقه بندی محتوا، استخراج موجودیت، جستجوی پیشرفته و موارد دیگر ارائه می دهد.
در این آزمایشگاه، نحوه انجام تشخیص کاراکتر نوری با استفاده از Document AI API با پایتون را خواهید آموخت.
ما از یک فایل PDF رمان کلاسیک "وینی پو" اثر AA Milne که اخیراً بخشی از دامنه عمومی در ایالات متحده شده است استفاده خواهیم کرد. این فایل توسط Google Books اسکن و دیجیتالی شده است.
چیزی که یاد خواهید گرفت
- نحوه فعال کردن Document AI API
- نحوه احراز هویت درخواست های API
- نحوه نصب کتابخانه کلاینت برای پایتون
- نحوه استفاده از API های پردازش آنلاین و دسته ای
- نحوه تجزیه متن از یک فایل PDF
آنچه شما نیاز دارید
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با پایتون چگونه ارزیابی می کنید؟
تجربه خود را در استفاده از خدمات Google Cloud چگونه ارزیابی می کنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، نامی منحصر به فرد در تمام پروژه های Google Cloud. (شناسه پروژه بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). شما باید این شناسه را بعداً به عنوان PROJECT_ID
ارائه دهید.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید. این بخش به شما توصیه می کند که چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud میتوانید Google Cloud را از راه دور از لپتاپ خود کار کنید، این کد لبه از Google Cloud Shell استفاده میکند، یک محیط خط فرمان که در Cloud اجرا میشود.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید
اگر قبلاً Cloud Shell را راهاندازی نکردهاید، یک صفحه میانی (در زیر تاشو) برای شما نمایش داده میشود که آن را توصیف میکند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
Cloud Shell دسترسی ترمینال به یک ماشین مجازی که در فضای ابری میزبانی شده است را برای شما فراهم می کند. ماشین مجازی شامل تمام ابزارهای توسعه است که شما نیاز دارید. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بسیاری از کارهای شما، اگر نه همه، در این کد لبه به سادگی با یک مرورگر انجام می شود.
پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی Project ID شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در 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 استفاده کنید
- اگر از Cloud Shell استفاده نمی کنید، مراحل نصب
gcloud
CLI را در دستگاه محلی خود دنبال کنید. - API ها را می توان با استفاده از دستورات
gcloud
زیر فعال کرد.
gcloud services enable documentai.googleapis.com storage.googleapis.com
شما باید چیزی شبیه به این را ببینید:
Operation "operations/..." finished successfully.
از Cloud Console استفاده کنید
Cloud Console را در مرورگر خود باز کنید.
- با استفاده از نوار جستجو در بالای کنسول، "Document AI API" را جستجو کنید، سپس روی فعال کردن کلیک کنید تا از API در پروژه Google Cloud خود استفاده کنید.
- مرحله قبل را برای Google Cloud Storage API تکرار کنید.
اکنون، می توانید از Document AI استفاده کنید!
4. یک پردازنده ایجاد و آزمایش کنید
ابتدا باید یک نمونه از پردازنده Document OCR ایجاد کنید که استخراج را انجام دهد. این را می توان با استفاده از Cloud Console یا Processor Management API تکمیل کرد.
کنسول ابری
- در کنسول، به Document AI Platform Overview بروید
- روی Explore Processors کلیک کنید و Document OCR را انتخاب کنید
- نام آن را
codelab-ocr
(یا چیز دیگری که به یاد دارید) بگذارید و نزدیکترین منطقه را در لیست انتخاب کنید. - برای ایجاد پردازنده خود روی Create کلیک کنید
- شناسه پردازنده خود را کپی کنید. بعدا باید از این در کد خود استفاده کنید.
می توانید با آپلود یک سند، پردازنده خود را در کنسول آزمایش کنید. روی آپلود سند آزمایشی کلیک کنید و یک سند را برای تجزیه انتخاب کنید.
فایل پی دی اف زیر را که شامل 3 صفحه اول رمان ماست می توانید دانلود کنید.
خروجی شما باید به این شکل باشد:
کتابخانه مشتری پایتون
برای یادگیری نحوه مدیریت پردازشگرهای هوش مصنوعی سند با کتابخانه کلاینت پایتون، این کد را دنبال کنید:
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 ادامه دهید.
- تجزیه فرم با هوش مصنوعی سند (پایتون)
- پردازنده های تخصصی با Document AI (Python)
- مدیریت پردازشگرهای هوش مصنوعی سند با پایتون
- سند هوش مصنوعی: انسان در حلقه
منابع
- آینده اسناد - لیست پخش YouTube
- مستندات هوش مصنوعی
- کتابخانه مشتری پایتون هوش مصنوعی را مستند کنید
- مخزن نمونه های AI سند
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.