১. সংক্ষিপ্ত বিবরণ
ডকুমেন্ট এআই কী?
ডকুমেন্ট এআই হলো একটি ডকুমেন্ট বোঝার সমাধান, যা অসংগঠিত ডেটা (যেমন ডকুমেন্ট, ইমেল, ইনভয়েস, ফর্ম ইত্যাদি) গ্রহণ করে এবং সেই ডেটাকে বোঝা, বিশ্লেষণ করা ও ব্যবহার করা সহজ করে তোলে। এর এপিআই কন্টেন্ট ক্লাসিফিকেশন, এনটিটি এক্সট্র্যাকশন, অ্যাডভান্সড সার্চিং এবং আরও অনেক কিছুর মাধ্যমে ডেটাকে একটি কাঠামো প্রদান করে।
এই ল্যাবে, আপনি পাইথন ব্যবহার করে ডকুমেন্ট এআই এপিআই (Document AI API) দিয়ে অপটিক্যাল ক্যারেক্টার রিকগনিশন (Optical Character Recognition) করার পদ্ধতি শিখবেন।
আমরা এ. এ. মিলনের ক্লাসিক উপন্যাস 'উইনি দ্য পুহ'-এর একটি পিডিএফ ফাইল ব্যবহার করব, যা সম্প্রতি মার্কিন যুক্তরাষ্ট্রে পাবলিক ডোমেইনের অন্তর্ভুক্ত হয়েছে। এই ফাইলটি গুগল বুকস দ্বারা স্ক্যান ও ডিজিটাইজ করা হয়েছে।
আপনি যা শিখবেন
- ডকুমেন্ট এআই এপিআই কীভাবে সক্রিয় করবেন
- এপিআই অনুরোধগুলি কীভাবে প্রমাণীকরণ করবেন
- পাইথনের জন্য ক্লায়েন্ট লাইব্রেরি কীভাবে ইনস্টল করবেন
- অনলাইন এবং ব্যাচ প্রসেসিং এপিআই কীভাবে ব্যবহার করবেন
- একটি পিডিএফ ফাইল থেকে টেক্সট কীভাবে পার্স করবেন
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড প্রজেক্ট
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- পাইথন (৩.৯+) ব্যবহারে পরিচিতি
জরিপ
আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?
পাইথন নিয়ে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। (যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)



প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে একটি অনন্য নাম। (উপরের প্রজেক্ট আইডিটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!) আপনাকে পরবর্তীতে এই আইডিটি PROJECT_ID হিসাবে প্রদান করতে হবে।
- এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।
"পরিষ্কার-পরিচ্ছন্নতা" বিভাগের যেকোনো নির্দেশাবলী অবশ্যই অনুসরণ করুন। এই বিভাগে রিসোর্সগুলো কীভাবে বন্ধ করতে হবে সে সম্পর্কে পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
ক্লাউড শেল শুরু করুন
যদিও আপনি আপনার ল্যাপটপ থেকে দূরবর্তীভাবে গুগল ক্লাউড পরিচালনা করতে পারেন, এই কোডল্যাবটিতে গুগল ক্লাউড শেল ব্যবহার করা হয়েছে, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন।
আপনি যদি আগে কখনো ক্লাউড শেল চালু না করে থাকেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন (নিচে দেওয়া আছে) আপনার সামনে আসবে। যদি তাই হয়, তাহলে 'Continue'-তে ক্লিক করুন (এবং আপনি এটি আর কখনো দেখতে পাবেন না)। একবারের জন্য আসা সেই স্ক্রিনটি দেখতে এইরকম:
ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।
ক্লাউড শেল আপনাকে ক্লাউডে হোস্ট করা একটি ভার্চুয়াল মেশিনের টার্মিনাল অ্যাক্সেস প্রদান করে। এই ভার্চুয়াল মেশিনে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস অন্তর্ভুক্ত রয়েছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই শুধুমাত্র একটি ব্রাউজার দিয়ে করা সম্ভব।
ক্লাউড শেলে সংযুক্ত হওয়ার পর আপনি দেখতে পাবেন যে, আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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].
৩. ডকুমেন্ট এআই এপিআই সক্রিয় করুন
Document AI ব্যবহার শুরু করার আগে, আপনাকে অবশ্যই API সক্রিয় করতে হবে। আপনি gcloud কমান্ড লাইন ইন্টারফেস অথবা ক্লাউড কনসোল ব্যবহার করে এটি করতে পারেন।
gcloud CLI ব্যবহার করুন
- আপনি যদি ক্লাউড শেল ব্যবহার না করেন, তাহলে আপনার স্থানীয় মেশিনে
gcloudCLI ইনস্টল করার ধাপগুলো অনুসরণ করুন। - নিম্নলিখিত
gcloudকমান্ডগুলো ব্যবহার করে এপিআইগুলো সক্রিয় করা যেতে পারে।
gcloud services enable documentai.googleapis.com storage.googleapis.com
আপনার এইরকম কিছু দেখা উচিত:
Operation "operations/..." finished successfully.
ক্লাউড কনসোল ব্যবহার করুন
আপনার ব্রাউজারে ক্লাউড কনসোলটি খুলুন।
- কনসোলের উপরের সার্চ বার ব্যবহার করে 'Document AI API' লিখে সার্চ করুন, তারপর আপনার গুগল ক্লাউড প্রজেক্টে এপিআইটি ব্যবহার করার জন্য 'Enable'- এ ক্লিক করুন।

- Google Cloud Storage API-এর জন্য পূর্ববর্তী ধাপটি পুনরাবৃত্তি করুন।
এখন আপনি ডকুমেন্ট এআই ব্যবহার করতে পারেন!
৪. একটি প্রসেসর তৈরি ও পরীক্ষা করুন
প্রথমে আপনাকে ডকুমেন্ট ওসিআর প্রসেসরের একটি ইনস্ট্যান্স তৈরি করতে হবে যা এক্সট্র্যাকশনের কাজটি করবে। এটি ক্লাউড কনসোল অথবা প্রসেসর ম্যানেজমেন্ট এপিআই ব্যবহার করে সম্পন্ন করা যেতে পারে।
ক্লাউড কনসোল
- কনসোলে, ডকুমেন্ট এআই প্ল্যাটফর্ম ওভারভিউ- তে যান।

- Explore Processors-এ ক্লিক করুন এবং Document OCR নির্বাচন করুন।

- এটির নাম দিন
codelab-ocr(অথবা এমন কিছু যা আপনার মনে থাকবে) এবং তালিকা থেকে সবচেয়ে কাছের অঞ্চলটি নির্বাচন করুন। - আপনার প্রসেসর তৈরি করতে ক্রিয়েট-এ ক্লিক করুন।
- আপনার প্রসেসর আইডি কপি করুন। পরবর্তীতে আপনার কোডে এটি অবশ্যই ব্যবহার করতে হবে।

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

আপনার আউটপুটটি দেখতে এইরকম হবে: 
পাইথন ক্লায়েন্ট লাইব্রেরি
পাইথন ক্লায়েন্ট লাইব্রেরি ব্যবহার করে কীভাবে ডকুমেন্ট এআই প্রসেসর পরিচালনা করতে হয় তা শিখতে এই কোডল্যাবটি অনুসরণ করুন:
৫. এপিআই অনুরোধ প্রমাণীকরণ করুন
ডকুমেন্ট এআই এপিআই-তে অনুরোধ পাঠানোর জন্য, আপনাকে অবশ্যই একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করতে হবে। একটি সার্ভিস অ্যাকাউন্ট আপনার প্রোজেক্টের অন্তর্গত এবং পাইথন ক্লায়েন্ট লাইব্রেরি এপিআই অনুরোধ পাঠানোর জন্য এটি ব্যবহার করে। অন্য যেকোনো ইউজার অ্যাকাউন্টের মতোই, একটি সার্ভিস অ্যাকাউন্ট একটি ইমেল অ্যাড্রেস দ্বারা চিহ্নিত করা হয়। এই অংশে, আপনি ক্লাউড এসডিকে ব্যবহার করে একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন এবং তারপর সেই সার্ভিস অ্যাকাউন্ট হিসেবে প্রমাণীকরণের জন্য প্রয়োজনীয় ক্রেডেনশিয়াল তৈরি করবেন।
প্রথমে, ক্লাউড শেল খুলুন এবং আপনার 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"
এরপর, আপনার প্রোজেক্টে ডকুমেন্ট এআই এবং ক্লাউড স্টোরেজ অ্যাক্সেস করার জন্য আপনার সার্ভিস অ্যাকাউন্টকে অনুমতি দিন।
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"
৬. ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন
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
এখন, আপনি ডকুমেন্ট এআই এপিআই ব্যবহার করার জন্য প্রস্তুত!
৭. নমুনা পিডিএফটি ডাউনলোড করুন।
আমাদের কাছে একটি নমুনা নথি আছে, যেটিতে উপন্যাসটির প্রথম ৩টি পৃষ্ঠা রয়েছে।
আপনি নিচের লিঙ্কটি ব্যবহার করে পিডিএফটি ডাউনলোড করতে পারেন। তারপর এটি ক্লাউডশেল ইনস্ট্যান্সে আপলোড করুন ।
আপনি gsutil ব্যবহার করে আমাদের পাবলিক গুগল ক্লাউড স্টোরেজ বাকেট থেকেও এটি ডাউনলোড করতে পারেন।
gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh_3_Pages.pdf .
৮. অনলাইনে প্রক্রিয়াকরণের জন্য অনুরোধ করুন
এই ধাপে, আপনি অনলাইন প্রসেসিং (সিঙ্ক্রোনাস) এপিআই ব্যবহার করে উপন্যাসটির প্রথম ৩টি পৃষ্ঠা প্রসেস করবেন। এই পদ্ধতিটি স্থানীয়ভাবে সংরক্ষিত ছোট আকারের ডকুমেন্টের জন্য সবচেয়ে উপযুক্ত। প্রতিটি প্রসেসর ধরনের সর্বোচ্চ পৃষ্ঠা সংখ্যা এবং ফাইলের আকার জানতে সম্পূর্ণ প্রসেসর তালিকাটি দেখুন।
আপনার লোকাল মেশিনে ক্লাউড শেল এডিটর অথবা কোনো টেক্সট এডিটর ব্যবহার করে online_processing.py নামে একটি ফাইল তৈরি করুন এবং নিচের কোডটি ব্যবহার করুন।
আপনার পরিবেশ অনুযায়ী YOUR_PROJECT_ID , YOUR_PROJECT_LOCATION , YOUR_PROCESSOR_ID এবং FILE_PATH উপযুক্ত মান দিয়ে প্রতিস্থাপন করুন।
অনলাইন_প্রসেসিং.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
৯. ব্যাচ প্রসেসিংয়ের জন্য অনুরোধ করুন
এখন, ধরুন আপনি পুরো উপন্যাসটি থেকে লেখাটি পড়তে চান।
- অনলাইন প্রক্রিয়াকরণে পাঠানো পৃষ্ঠার সংখ্যা এবং ফাইলের আকারের উপর সীমাবদ্ধতা রয়েছে এবং এটি প্রতি এপিআই কলে কেবল একটি ডকুমেন্ট ফাইল পাঠানোর অনুমতি দেয়।
- ব্যাচ প্রসেসিংয়ের মাধ্যমে অ্যাসিঙ্ক্রোনাস পদ্ধতিতে অধিক সংখ্যক বা একাধিক ফাইল প্রসেস করা যায়।
এই ধাপে, আমরা ডকুমেন্ট এআই ব্যাচ প্রসেসিং এপিআই ব্যবহার করে সম্পূর্ণ 'উইনি দ্য পুহ' উপন্যাসটি প্রসেস করব এবং টেক্সটটি একটি গুগল ক্লাউড স্টোরেজ বাকেটে আউটপুট করব।
ব্যাচ প্রসেসিং অ্যাসিঙ্ক্রোনাস পদ্ধতিতে রিকোয়েস্টগুলো পরিচালনা করার জন্য লং রানিং অপারেশন ব্যবহার করে, তাই অনলাইন প্রসেসিংয়ের চেয়ে ভিন্ন উপায়ে আমাদের রিকোয়েস্ট করতে ও আউটপুট গ্রহণ করতে হয়। তবে, অনলাইন বা ব্যাচ প্রসেসিং, যেটাই ব্যবহার করা হোক না কেন, আউটপুট একই Document অবজেক্ট ফরম্যাটে থাকবে।
এই ধাপে দেখানো হয়েছে কীভাবে ডকুমেন্ট এআই-কে প্রক্রিয়াকরণের জন্য নির্দিষ্ট নথি সরবরাহ করতে হয়। পরবর্তী একটি ধাপে দেখানো হবে কীভাবে নথির একটি সম্পূর্ণ ডিরেক্টরি প্রক্রিয়াকরণ করতে হয়।
ক্লাউড স্টোরেজে পিডিএফ আপলোড করুন
` batch_process_documents() ` মেথডটি বর্তমানে গুগল ক্লাউড স্টোরেজ থেকে ফাইল গ্রহণ করে। অবজেক্টের গঠন সম্পর্কে আরও তথ্যের জন্য আপনি documentai_v1.types.BatchProcessRequest রেফারেন্সটি দেখতে পারেন।
এই উদাহরণের জন্য, আপনি আমাদের স্যাম্পল বাকেট থেকে সরাসরি ফাইলটি পড়তে পারেন।
আপনি gsutil ব্যবহার করে ফাইলটি আপনার নিজের বাকেটে কপি করতেও পারেন...
gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf gs://YOUR_BUCKET_NAME/
...অথবা আপনি নিচের লিঙ্ক থেকে উপন্যাসটির নমুনা ফাইলটি ডাউনলোড করে আপনার নিজের বাকেটে আপলোড করতে পারেন।
এপিআই-এর আউটপুট সংরক্ষণ করার জন্য আপনার একটি জিসিএস বাকেটও লাগবে।
কীভাবে স্টোরেজ বাকেট তৈরি করতে হয়, তা জানতে আপনি ক্লাউড স্টোরেজ ডকুমেন্টেশন অনুসরণ করতে পারেন।
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 ।
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) ব্যবহার করলে, কাজটি সম্পন্ন হওয়ার পর আপনি একটি অপারেশন আইডি (Operation ID) পাবেন, যা 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 ফাইলে "শার্ড" বা বিভক্তও হতে পারে।
ডকুমেন্ট এআই টুলবক্স পাইথন এসডিকে-টি ডকুমেন্ট এআই-এর পোস্ট-প্রসেসিং এবং অন্যান্য সাধারণ কাজগুলোকে সহজ করার জন্য তৈরি করা হয়েছে। এই লাইব্রেরিটি ডকুমেন্ট এআই ক্লায়েন্ট লাইব্রেরির পরিপূরক হিসেবে কাজ করে, এর বিকল্প হিসেবে নয়। সম্পূর্ণ বিবরণের জন্য রেফারেন্স ডকুমেন্টেশন দেখুন।
এই ধাপে দেখানো হয়েছে কীভাবে ডকুমেন্ট এআই টুলবক্স ব্যবহার করে ব্যাচ প্রসেসিংয়ের জন্য অনুরোধ করতে হয় এবং তার আউটপুট সংগ্রহ করতে হয়।
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,
)
১২. অভিনন্দন
আপনি অনলাইন প্রসেসিং, ব্যাচ প্রসেসিং এবং ডকুমেন্ট এআই টুলবক্স ব্যবহার করে একটি উপন্যাস থেকে টেক্সট বের করতে ডকুমেন্ট এআই সফলভাবে প্রয়োগ করেছেন।
আমরা আপনাকে অন্যান্য নথি নিয়ে পরীক্ষা-নিরীক্ষা করতে এবং প্ল্যাটফর্মে উপলব্ধ অন্যান্য প্রসেসরগুলো অন্বেষণ করতে উৎসাহিত করি।
পরিষ্কার করা
এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলির জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে:
- ক্লাউড কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
- প্রজেক্ট তালিকা থেকে আপনার প্রজেক্টটি নির্বাচন করে ডিলিট-এ ক্লিক করুন।
- ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।
আরও জানুন
এই পরবর্তী কোডল্যাবগুলোর মাধ্যমে ডকুমেন্ট এআই সম্পর্কে আরও জানুন।
- ডকুমেন্ট এআই (পাইথন) ব্যবহার করে ফর্ম পার্সিং
- ডকুমেন্ট এআই (পাইথন) সহ বিশেষায়িত প্রসেসর
- পাইথন ব্যবহার করে ডকুমেন্ট এআই প্রসেসর পরিচালনা করা
- ডকুমেন্ট এআই: হিউম্যান ইন লুপ
সম্পদ
- নথিপত্রের ভবিষ্যৎ - ইউটিউব প্লেলিস্ট
- ডকুমেন্ট এআই ডকুমেন্টেশন
- ডকুমেন্ট এআই পাইথন ক্লায়েন্ট লাইব্রেরি
- ডকুমেন্ট এআই স্যাম্পল রিপোজিটরি
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।