ডকুমেন্ট এআই (পাইথন) সহ অপটিক্যাল ক্যারেক্টার রিকগনিশন (OCR)

1. সংক্ষিপ্ত বিবরণ

ডকুমেন্ট এআই কী?

ডকুমেন্ট এআই হল একটি ডকুমেন্ট বোঝার সমাধান যা অসংগঠিত ডেটা (যেমন ডকুমেন্ট, ইমেল, ইনভয়েস, ফর্ম ইত্যাদি) গ্রহণ করে এবং ডেটা বোঝা, বিশ্লেষণ এবং ব্যবহার করা সহজ করে তোলে। API কন্টেন্ট শ্রেণীবিভাগ, সত্তা নিষ্কাশন, উন্নত অনুসন্ধান এবং আরও অনেক কিছুর মাধ্যমে কাঠামো প্রদান করে।

এই ল্যাবে, আপনি পাইথনের সাহায্যে ডকুমেন্ট এআই এপিআই ব্যবহার করে অপটিক্যাল ক্যারেক্টার রিকগনিশন কীভাবে সম্পাদন করবেন তা শিখবেন।

আমরা এএ মিলনের লেখা ক্লাসিক উপন্যাস "উইনি দ্য পুহ" এর একটি পিডিএফ ফাইল ব্যবহার করব, যা সম্প্রতি মার্কিন যুক্তরাষ্ট্রে পাবলিক ডোমেনের অংশ হয়ে উঠেছে। এই ফাইলটি গুগল বুকস দ্বারা স্ক্যান এবং ডিজিটাইজ করা হয়েছে।

তুমি কি শিখবে

  • ডকুমেন্ট এআই এপিআই কীভাবে সক্ষম করবেন
  • API অনুরোধগুলি কীভাবে প্রমাণীকরণ করবেন
  • পাইথনের জন্য ক্লায়েন্ট লাইব্রেরি কীভাবে ইনস্টল করবেন
  • অনলাইন এবং ব্যাচ প্রসেসিং API গুলি কীভাবে ব্যবহার করবেন
  • পিডিএফ ফাইল থেকে টেক্সট কীভাবে পার্স করবেন

তোমার যা লাগবে

  • একটি গুগল ক্লাউড প্রকল্প
  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • পাইথন ব্যবহারে পরিচিতি (৩.৯+)

জরিপ

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলি সম্পূর্ণ করুন।

পাইথনের সাথে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবীন মধ্যবর্তী দক্ষ

গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবীন মধ্যবর্তী দক্ষ

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। (যদি আপনার ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

প্রকল্প নির্বাচন করুন

নতুন প্রকল্প

প্রজেক্ট আইডি পান

প্রজেক্ট আইডি মনে রাখবেন, সমস্ত গুগল ক্লাউড প্রোজেক্টের জন্য এটি একটি অনন্য নাম। (উপরের প্রজেক্ট আইডিটি ইতিমধ্যেই নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। আপনাকে পরে এই আইডিটি PROJECT_ID হিসাবে প্রদান করতে হবে।

  1. এরপর, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে।

"পরিষ্কার করা" বিভাগে দেওয়া যেকোনো নির্দেশাবলী অনুসরণ করতে ভুলবেন না। এই টিউটোরিয়ালের বাইরে যাতে আপনাকে বিলিংয়ের সম্মুখীন না হতে হয়, সেজন্য কীভাবে রিসোর্স বন্ধ করতে হয়, সেই বিষয়ে এই বিভাগটি আপনাকে পরামর্শ দেবে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা $300USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

গুগল ক্লাউড আপনি আপনার ল্যাপটপ থেকে দূরবর্তীভাবে গুগল ক্লাউড পরিচালনা করতে পারবেন, এই কোডল্যাবটি গুগল ক্লাউড শেল ব্যবহার করে, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন ক্লাউড শেল সক্রিয় করুন

ক্লাউড শেল সক্রিয় করুন

যদি আপনি আগে কখনও ক্লাউড শেল শুরু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন (ভাঁজের নীচে) দেখানো হবে যেখানে এটি কী তা বর্ণনা করা হবে। যদি তাই হয়, তাহলে Continue এ ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এই এককালীন স্ক্রিনটি কেমন দেখাবে:

ক্লাউড শেল ভূমিকা

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। ক্লাউড শেল

ক্লাউড শেল আপনাকে ক্লাউডে হোস্ট করা একটি ভার্চুয়াল মেশিনে টার্মিনাল অ্যাক্সেস প্রদান করে। ভার্চুয়াল মেশিনে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল রয়েছে। এটি একটি স্থায়ী 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার বেশিরভাগ কাজ, যদি সব না হয়, কেবল একটি ব্রাউজার দিয়েই করা যেতে পারে।

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণিত এবং প্রকল্পটি ইতিমধ্যেই আপনার প্রকল্প আইডিতে সেট করা আছে।

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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].

৩. ডকুমেন্ট এআই এপিআই সক্ষম করুন

ডকুমেন্ট এআই ব্যবহার শুরু করার আগে, আপনাকে API সক্রিয় করতে হবে। আপনি gcloud কমান্ড লাইন ইন্টারফেস অথবা ক্লাউড কনসোল ব্যবহার করে এটি সম্পন্ন করতে পারেন।

gcloud সিএলআই ব্যবহার করুন

  1. আপনি যদি ক্লাউড শেল ব্যবহার না করেন, তাহলে আপনার স্থানীয় মেশিনে gcloud CLI ইনস্টল করুন এর ধাপগুলি অনুসরণ করুন।
  2. নিম্নলিখিত gcloud কমান্ড ব্যবহার করে API গুলি সক্রিয় করা যেতে পারে।
gcloud services enable documentai.googleapis.com storage.googleapis.com

তোমার এরকম কিছু দেখা উচিত:

Operation "operations/..." finished successfully.

ক্লাউড কনসোল ব্যবহার করুন

আপনার ব্রাউজারে ক্লাউড কনসোল খুলুন।

  1. কনসোলের উপরের সার্চ বার ব্যবহার করে, "ডকুমেন্ট এআই এপিআই" অনুসন্ধান করুন, তারপর আপনার গুগল ক্লাউড প্রজেক্টে এপিআই ব্যবহার করতে সক্ষম করুন এ ক্লিক করুন।

অনুসন্ধান API

  1. গুগল ক্লাউড স্টোরেজ এপিআই-এর জন্য আগের ধাপটি পুনরাবৃত্তি করুন।

এখন, আপনি ডকুমেন্ট এআই ব্যবহার করতে পারেন!

৪. একটি প্রসেসর তৈরি এবং পরীক্ষা করুন

আপনাকে প্রথমে ডকুমেন্ট OCR প্রসেসরের একটি ইনস্ট্যান্স তৈরি করতে হবে যা এক্সট্রাকশন সম্পাদন করবে। এটি ক্লাউড কনসোল অথবা প্রসেসর ম্যানেজমেন্ট API ব্যবহার করে সম্পন্ন করা যেতে পারে।

ক্লাউড কনসোল

  1. কনসোলে, ডকুমেন্ট এআই প্ল্যাটফর্ম ওভারভিউতে নেভিগেট করুন। ডকুমেন্ট এআই ওভারভিউ কনসোল
  2. এক্সপ্লোর প্রসেসর ক্লিক করুন এবং ডকুমেন্ট ওসিআর নির্বাচন করুন। প্রসেসর
  3. এটির নাম দিন codelab-ocr (অথবা অন্য কিছু যা আপনার মনে থাকবে) এবং তালিকার সবচেয়ে কাছের অঞ্চলটি নির্বাচন করুন।
  4. আপনার প্রসেসর তৈরি করতে Create এ ক্লিক করুন।
  5. আপনার প্রসেসর আইডি কপি করুন। আপনাকে পরে আপনার কোডে এটি ব্যবহার করতে হবে। প্রসেসর আইডি

আপনি একটি ডকুমেন্ট আপলোড করে কনসোলে আপনার প্রসেসরটি পরীক্ষা করতে পারেন। আপলোড টেস্ট ডকুমেন্টে ক্লিক করুন এবং পার্স করার জন্য একটি ডকুমেন্ট নির্বাচন করুন।

আপনি নীচের পিডিএফ ফাইলটি ডাউনলোড করতে পারেন, যেখানে আমাদের উপন্যাসের প্রথম 3 পৃষ্ঠা রয়েছে।

শিরোনাম পৃষ্ঠা

আপনার আউটপুটটি এইরকম দেখা উচিত: পার্সড বই

পাইথন ক্লায়েন্ট লাইব্রেরি

পাইথন ক্লায়েন্ট লাইব্রেরি দিয়ে ডকুমেন্ট এআই প্রসেসর পরিচালনা করতে শিখতে এই কোডল্যাবটি অনুসরণ করুন:

পাইথন দিয়ে ডকুমেন্ট এআই প্রসেসর পরিচালনা করা - কোডল্যাব

৫. API অনুরোধগুলি প্রমাণীকরণ করুন

ডকুমেন্ট এআই এপিআই-তে অনুরোধ করার জন্য, আপনাকে অবশ্যই একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করতে হবে। একটি পরিষেবা অ্যাকাউন্ট আপনার প্রকল্পের অন্তর্গত এবং এটি পাইথন ক্লায়েন্ট লাইব্রেরি দ্বারা API অনুরোধ করার জন্য ব্যবহৃত হয়। অন্যান্য ব্যবহারকারীর অ্যাকাউন্টের মতো, একটি পরিষেবা অ্যাকাউন্ট একটি ইমেল ঠিকানা দ্বারা প্রতিনিধিত্ব করা হয়। এই বিভাগে, আপনি একটি পরিষেবা অ্যাকাউন্ট তৈরি করতে ক্লাউড SDK ব্যবহার করবেন এবং তারপরে পরিষেবা অ্যাকাউন্ট হিসাবে প্রমাণীকরণের জন্য প্রয়োজনীয় শংসাপত্র তৈরি করবেন।

প্রথমে, ক্লাউড শেল খুলুন এবং আপনার PROJECT_ID দিয়ে একটি পরিবেশ পরিবর্তনশীল সেট করুন যা আপনি এই কোডল্যাব জুড়ে ব্যবহার করবেন:

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

এরপর, ডকুমেন্ট এআই এপিআই অ্যাক্সেস করার জন্য একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরি করুন:

gcloud iam service-accounts create my-docai-sa \
  --display-name "my-docai-service-account"

এরপর, আপনার প্রোজেক্টে ডকুমেন্ট এআই এবং ক্লাউড স্টোরেজ অ্যাক্সেস করার জন্য আপনার পরিষেবা অ্যাকাউন্টকে অনুমতি দিন।

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"

এরপর, আপনার পাইথন কোড ব্যবহার করে আপনার নতুন পরিষেবা অ্যাকাউন্ট হিসেবে লগইন করার জন্য এমন শংসাপত্র তৈরি করুন। এই শংসাপত্রগুলি তৈরি করুন এবং নিম্নলিখিত কমান্ড ব্যবহার করে ~/key.json 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"

৬. ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন

ডকুমেন্ট এআই, ক্লাউড স্টোরেজ এবং ডকুমেন্ট এআই টুলবক্সের জন্য পাইথন ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন:

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

এখন, আপনি ডকুমেন্ট এআই এপিআই ব্যবহার করার জন্য প্রস্তুত!

৭. নমুনা পিডিএফ ডাউনলোড করুন

আমাদের কাছে একটি নমুনা নথি আছে যাতে উপন্যাসের প্রথম ৩ পৃষ্ঠা রয়েছে।

আপনি নিচের লিঙ্কটি ব্যবহার করে PDF ডাউনলোড করতে পারেন। তারপর এটি ক্লাউডশেল ইনস্ট্যান্সে আপলোড করুন

আপনি gsutil ব্যবহার করে আমাদের পাবলিক গুগল ক্লাউড স্টোরেজ বাকেট থেকেও এটি ডাউনলোড করতে পারেন।

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

৮. একটি অনলাইন প্রক্রিয়াকরণ অনুরোধ করুন

এই ধাপে, আপনি অনলাইন প্রসেসিং (সিঙ্ক্রোনাস) API ব্যবহার করে উপন্যাসের প্রথম 3 পৃষ্ঠা প্রক্রিয়া করবেন। এই পদ্ধতিটি স্থানীয়ভাবে সংরক্ষিত ছোট নথির জন্য সবচেয়ে উপযুক্ত। প্রতিটি প্রসেসরের ধরণের জন্য সর্বাধিক পৃষ্ঠা এবং ফাইলের আকারের জন্য সম্পূর্ণ প্রসেসরের তালিকাটি দেখুন।

আপনার স্থানীয় মেশিনে ক্লাউড শেল এডিটর অথবা একটি টেক্সট এডিটর ব্যবহার করে 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

৯. একটি ব্যাচ প্রসেসিং অনুরোধ করুন

এবার ধরুন, আপনি পুরো উপন্যাসটির লেখাটি পড়তে চান।

  • অনলাইন প্রক্রিয়াকরণে পাঠানো যেতে পারে এমন পৃষ্ঠার সংখ্যা এবং ফাইলের আকারের সীমা রয়েছে এবং এটি প্রতি API কলে কেবল একটি ডকুমেন্ট ফাইলের অনুমতি দেয়।
  • ব্যাচ প্রসেসিং একটি অ্যাসিঙ্ক্রোনাস পদ্ধতিতে বৃহত্তর/একাধিক ফাইল প্রক্রিয়াকরণের অনুমতি দেয়।

এই ধাপে, আমরা ডকুমেন্ট এআই ব্যাচ প্রসেসিং এপিআই ব্যবহার করে সম্পূর্ণ "উইনি দ্য পুহ" উপন্যাসটি প্রক্রিয়া করব এবং টেক্সটটি একটি গুগল ক্লাউড স্টোরেজ বাকেটে আউটপুট করব।

ব্যাচ প্রসেসিং দীর্ঘমেয়াদী অপারেশন ব্যবহার করে অ্যাসিঙ্ক্রোনাস পদ্ধতিতে অনুরোধ পরিচালনা করে, তাই আমাদের অনুরোধটি করতে হবে এবং অনলাইন প্রক্রিয়াকরণের চেয়ে ভিন্ন পদ্ধতিতে আউটপুট পুনরুদ্ধার করতে হবে। তবে, আউটপুট একই Document অবজেক্ট ফর্ম্যাটে থাকবে, তা অনলাইন বা ব্যাচ প্রক্রিয়াকরণ ব্যবহার করেই হোক না কেন।

এই ধাপে দেখানো হবে কিভাবে ডকুমেন্ট এআই প্রক্রিয়াকরণের জন্য নির্দিষ্ট ডকুমেন্ট সরবরাহ করতে হয়। পরবর্তী ধাপে দেখানো হবে কিভাবে ডকুমেন্টের একটি সম্পূর্ণ ডিরেক্টরি প্রক্রিয়াকরণ করতে হয়।

ক্লাউড স্টোরেজে পিডিএফ আপলোড করুন

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 সরাসরি পিডিএফ ফাইলের দিকে নির্দেশ করে, উদাহরণস্বরূপ: gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf

ব্যাচ_প্রসেসিং.পিআই

"""
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

১০. একটি ডিরেক্টরির জন্য একটি ব্যাচ প্রসেসিং অনুরোধ করুন

কখনও কখনও, আপনি প্রতিটি ডকুমেন্টকে আলাদাভাবে তালিকাভুক্ত না করেই ডকুমেন্টের একটি সম্পূর্ণ ডিরেক্টরি প্রক্রিয়া করতে চাইতে পারেন। batch_process_documents() পদ্ধতি নির্দিষ্ট ডকুমেন্টের তালিকা বা ডিরেক্টরি পাথের ইনপুট সমর্থন করে।

এই ধাপে ডকুমেন্ট ফাইলের একটি সম্পূর্ণ ডিরেক্টরি কীভাবে প্রক্রিয়া করতে হয় তা দেখানো হবে। বেশিরভাগ কোড পূর্ববর্তী ধাপের মতোই কাজ করে, একমাত্র পার্থক্য হল BatchProcessRequest এর সাথে পাঠানো GCS URI।

আমাদের নমুনা বাকেটে একটি ডিরেক্টরি আছে যেখানে উপন্যাসের একাধিক পৃষ্ঠা আলাদা ফাইলে রয়েছে।

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

আপনি সরাসরি ফাইলগুলি পড়তে পারেন অথবা আপনার নিজস্ব ক্লাউড স্টোরেজ বাকেটে কপি করতে পারেন।

পূর্ববর্তী ধাপের কোডটি পুনরায় চালান, YOUR_INPUT_URI ক্লাউড স্টোরেজে একটি ডিরেক্টরি দিয়ে প্রতিস্থাপন করুন।

কোডটি চালান, এবং আপনি ক্লাউড স্টোরেজ ডিরেক্টরিতে সমস্ত ডকুমেন্ট ফাইল থেকে এক্সট্র্যাক্ট করা টেক্সট দেখতে পাবেন।

আপনার আউটপুটটি এরকম কিছু দেখা উচিত:

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 

১১. ডকুমেন্ট এআই টুলবক্সের সাহায্যে ব্যাচ প্রসেসিং রেসপন্স পরিচালনা করুন

ক্লাউড স্টোরেজের সাথে ইন্টিগ্রেশনের কারণে ব্যাচ প্রসেসিংয়ে বেশ কয়েকটি ধাপ সম্পন্ন করতে হয়। ইনপুট ডকুমেন্টের আকারের উপর নির্ভর করে Document আউটপুটকে একাধিক .json ফাইলে "sharded" করা যেতে পারে।

ডকুমেন্ট এআই টুলবক্স পাইথন এসডিকে ডকুমেন্ট এআই-এর পোস্ট-প্রসেসিং এবং অন্যান্য সাধারণ কাজগুলিকে সহজ করার জন্য তৈরি করা হয়েছিল। এই লাইব্রেরিটি ডকুমেন্ট এআই ক্লায়েন্ট লাইব্রেরির পরিপূরক হিসেবে তৈরি করা হয়েছে, প্রতিস্থাপন হিসেবে নয়। সম্পূর্ণ স্পেসিফিকেশনের জন্য রেফারেন্স ডকুমেন্টেশনে যান।

এই ধাপে দেখানো হয়েছে কিভাবে ডকুমেন্ট এআই টুলবক্স ব্যবহার করে ব্যাচ প্রসেসিং অনুরোধ করতে হয় এবং আউটপুট পুনরুদ্ধার করতে হয়।

ব্যাচ_প্রসেসিং_টুলবক্স.পি

"""
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,
    )

১২. অভিনন্দন

আপনি অনলাইন প্রসেসিং, ব্যাচ প্রসেসিং এবং ডকুমেন্ট এআই টুলবক্স ব্যবহার করে একটি উপন্যাস থেকে টেক্সট বের করতে ডকুমেন্ট এআই সফলভাবে ব্যবহার করেছেন।

আমরা আপনাকে অন্যান্য নথি নিয়ে পরীক্ষা-নিরীক্ষা করতে এবং প্ল্যাটফর্মে উপলব্ধ অন্যান্য প্রসেসরগুলি অন্বেষণ করতে উৎসাহিত করছি।

পরিষ্কার কর

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সের জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে:

  • ক্লাউড কনসোলে, রিসোর্স পরিচালনা পৃষ্ঠায় যান।
  • প্রকল্পের তালিকায়, আপনার প্রকল্প নির্বাচন করুন এবং তারপর মুছুন ক্লিক করুন।
  • ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলতে Shut down এ ক্লিক করুন।

আরও জানুন

এই ফলো-আপ কোডল্যাবগুলির সাহায্যে ডকুমেন্ট এআই সম্পর্কে শেখা চালিয়ে যান।

রিসোর্স

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।