1. ভূমিকা
এই কোডল্যাবে, জাভা, স্প্রিং বুট, ক্লাউড স্প্যানার ডাটাবেস এবং ভার্টেক্স এআই ইমেজেন API ব্যবহার করে একটি এআই-চালিত পোজ জেনারেটর তৈরি করুন। ব্যবহারকারী একটি প্রম্পট ইনপুট করবে এবং অ্যাপ্লিকেশনটি সেই প্রম্পটের উপর ভিত্তি করে একটি ভঙ্গি তৈরি করবে। আমরা REST API হিসাবে উন্মুক্ত স্প্যানার ডাটাবেস থেকে ডেটাও ব্যবহার করব। এটি Google ক্লাউডে স্প্রিং বুটের সাথে জেনারেটিভ এআই-এর ক্ষমতা প্রদর্শনের একটি মজার এবং শিক্ষামূলক উপায়।
ব্যবহৃত পরিষেবার তালিকা হল:
- ক্লাউড স্প্যানার
- Vertex AI Imagen API
- ক্লাউড রান
উচ্চ স্তরের প্রবাহ চিত্র
আপনি কি নির্মাণ করবেন
আপনি তৈরি করবেন
- একটি পরিষেবা API হিসাবে স্প্যানার ডেটার জন্য একটি জাভা স্প্রিং বুট অ্যাপ্লিকেশন
- ইমেজেন ব্যবহার করে ইমেজ জেনারেশন ইউজ কেস এর জন্য একটি জাভা স্প্রিং বুট অ্যাপ্লিকেশন
- প্রম্পট ইনপুট এবং প্রতিক্রিয়ার জন্য একটি ইন্টারেক্টিভ ইউজার ইন্টারফেস
2. প্রয়োজনীয়তা
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷
আপনি শুরু করার আগে
- Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন৷
- নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন
- নিশ্চিত করুন যে সমস্ত প্রয়োজনীয় API (ক্লাউড স্প্যানার API, Vertex AI API, Cloud Run API, Cloud Functions API) সক্ষম করা আছে
- আপনি ক্লাউড শেল ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ যা bq এর সাথে প্রি-লোড করা হয়। জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন
ক্লাউড কনসোল থেকে, উপরের ডানদিকে কোণায় ক্লাউড শেল সক্রিয় করুন ক্লিক করুন:
যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
- শুরু করতে আপনার সক্রিয় Google ক্লাউড প্রকল্পের সাথে ক্লাউড স্প্যানার পৃষ্ঠাতে নেভিগেট করুন৷
3. স্প্যানার দিয়ে ডেটা প্রস্তুত করা হচ্ছে
অ্যাপটি তৈরি করার আগে, আসুন একটি ক্লাউড স্প্যানার ইনস্ট্যান্স, ডাটাবেস এবং টেবিল তৈরি করে ডাটাবেস সেটআপ সম্পূর্ণ করি। ক্লাউড স্প্যানার বৈশিষ্ট্য, DDL, DML এবং আরও অনেক কিছু সম্পর্কে বিস্তারিতভাবে পড়তে আপনি এই ব্লগটি উল্লেখ করতে পারেন। এই প্রকল্পের জন্য প্রয়োজনীয় ডাটাবেস অবজেক্ট তৈরি করতে আপনি নীচের পদক্ষেপগুলি অনুসরণ করতে পারেন:
- ইনস্ট্যান্স পৃষ্ঠায় উদাহরণ তৈরি করুন ক্লিক করে একটি উদাহরণ তৈরি করুন।
- নিচের ছবিতে দেখানো মত বিস্তারিত লিখুন এবং CREATE এ ক্লিক করুন:
- একবার তৈরি হয়ে গেলে, ইনস্ট্যান্স ওভারভিউ পৃষ্ঠা থেকে, ডেটাবেস তৈরি করুন ক্লিক করুন
- "first-spanner-db" হিসাবে ডাটাবেসের নাম দিন এবং DDL টেমপ্লেট বিভাগে নিম্নলিখিত DDL লিখুন এবং জমা দিন ক্লিক করুন:
CREATE TABLE Yoga_Poses(
Pose_Id INT64 NOT NULL,
Name STRING(1024),
Breath STRING(1024),
Description STRING(1024)
) PRIMARY KEY(Pose_Id);
শেষ ধাপের ফলে ডাটাবেস এবং টেবিল তৈরি করা উচিত। এখন যোগা_পোজ টেবিলে কয়েকটি সারি সন্নিবেশ করা যাক যাতে আমরা আমাদের স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করতে পারি।
- বাম দিকে ডাটাবেস প্যানে স্প্যানার স্টুডিওতে ক্লিক করুন এবং নীচের ছবিতে দেখানো হিসাবে একটি নতুন ক্যোয়ারী এডিটর ট্যাব খুলুন:
- নিম্নলিখিত INSERT প্রশ্নগুলি চালান:
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(1, 'STAND', 'INHALE AND EXHALE',
'STAND WITH YOUR FEET HIP WIDTH APART AND ARMS RESTING BY THE SIDES');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(2, 'PLANK', 'INHALE OR EXHALE',
'PLANT YOUR TOES AND PALMS ON THE MAT WITH BODY PARALLEL TO THE GROUND');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(3, 'SIT', 'INHALE AND EXHALE',
'SIT ON THE FLOOR LEGS CROSSED');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(4, 'BEND', 'EXHALE',
'FOLD FORWARD AS YOU STAND, HANDS REACHING TO THE FLOOR');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(5, 'PUSH UP', 'EXHALE',
'PLANK WITH ELBOWS ON MAT');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(6, 'SEATED FORWARD BEND', 'EXHALE',
'FOLD FORWARD AS YOU SIT, HANDS TRYING TO REACH THE FEET');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(7, 'LUNGE', 'EXHALE',
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK LEG STRAIGHT');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(8, 'COURTESY LUNGE', 'INHALE',
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK KNEE TOUCHING THE FLOOR');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(9, 'BANK BEND', 'INHALE',
'STAND WITH ARMS UP AND BODY BENT BACKWARDS, ARCHING YOUR SPINE, LOOKING AT THE SKY');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(10, 'BICEP ACTION', 'INHALE AND EXHALE',
'CURL, PRESS AND WORK YOUR BICEPS');
এখন আমাদের স্প্যানার ইনস্ট্যান্স, ডাটাবেস, টেবিল এবং ডেটা তৈরি এবং অ্যাপ্লিকেশনের জন্য প্রস্তুত।
4. পোজ ডেটার জন্য স্প্রিং বুট এবং স্প্যানার সহ একটি REST API তৈরি করুন৷
স্প্রিং বুট এবং Google ক্লাউড কনসোলের সাথে নিজেকে পরিচিত করতে এই ব্লগটি দেখুন।
- স্প্রিং বুট অ্যাপ বুটস্ট্র্যাপ করুন স্ক্র্যাচ থেকে এই অ্যাপটিকে বুটস্ট্র্যাপ করতে, এই ব্লগটি অনুসরণ করুন। রেপো থেকে ক্লোন করতে এবং অ্যাকশনে সুইং করতে, আপনার ক্লাউড শেল টার্মিনালে নীচের কমান্ডটি চালান:
git clone https://github.com/AbiramiSukumaran/spanner-springb
এটি আপনার ক্লাউড শেল মেশিনে প্রকল্প স্প্যানার-স্প্রিংবি তৈরি করা উচিত ছিল। অ্যাপের উপাদানগুলো বুঝতে, ব্লগে যান।
- চলুন অ্যাপটি তৈরি করে রান করি এটি করার জন্য, ক্লাউড শেল টার্মিনাল থেকে নিম্নলিখিত কমান্ডগুলি চালান:
cd spanner-springb
./mvnw package
./mvnw spring-boot:run
- ক্লাউড রানে অ্যাপটি স্থাপন করুন যাতে এটি পোজ জেনারেটর অ্যাপের জন্য উপলব্ধ এটি করতে, ক্লাউড শেল টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালান:
gcloud run deploy –source .
প্রয়োজনীয় প্যারামিটারগুলি পাস করুন এবং নিশ্চিত করুন যে আপনার অ্যাপ স্থাপন করা হয়েছে। জেনারেট করা পরিষেবা URL স্প্যানারে তৈরি ডেটা তালিকাভুক্ত করতে সক্ষম হওয়া উচিত।
5. স্প্রিং বুট, স্প্যানার এবং ইমেজেনের সাথে একটি পোজ জেনারেটর অ্যাপ বুটস্ট্র্যাপ করুন
এই মুহুর্তে, আমরা ফ্লো ডায়াগ্রামের উপরের অংশটি সম্পন্ন করেছি, অর্থাৎ, স্প্যানার ডেটা একটি পরিষেবা (REST API) হিসাবে উপলব্ধ করা হয়েছে৷ এখন একটি ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করা যাক যা স্প্যানার ডেটা আহ্বান করে, একটি প্রম্পট সহ IMAGEN API কল করে এবং ব্যবহারকারী ইন্টারফেসে একটি চিত্র হিসাবে Base64 এনকোড করা স্ট্রিং ফেরত দেয়।
- এখন পর্যন্ত, আপনি ইতিমধ্যেই স্প্রিং বুট প্রকল্পের কাঠামো এবং এর তাৎপর্যের সাথে পরিচিত। তাই আপনার ক্লাউড শেল টার্মিনালে নীচের কমান্ডটি চালানোর মাধ্যমে আপনার ক্লাউড শেল মেশিনে রেপো ক্লোনিংয়ে দ্রুত ঝাঁপিয়ে পড়বে:
git clone https://github.com/AbiramiSukumaran/genai-posegen
এটি আপনার ক্লাউড শেল মেশিনে প্রোজেক্ট genai-posegen
তৈরি করা উচিত ছিল। ক্লাউড শেল এডিটরে ক্লোন করা প্রজেক্ট স্ট্রাকচার এইরকম দেখায়:
প্রম্পটকন্ট্রোলার জাভা ক্লাসে ডাটাবেস পরিষেবা আহ্বান, ব্যবসায়িক যুক্তির বাস্তবায়ন এবং ইমেজেনের জেনারেটিভ এআই এপিআই আহ্বান রয়েছে। এই ক্লাসটি Thymeleaf টেমপ্লেটগুলির সাথে ইন্টারঅ্যাক্ট করে যা ব্যবহারকারী ইন্টারফেসে ডেটা ইন্টিগ্রেশনের যত্ন নেয়। এই ক্লাসে 3টি পরিষেবা পদ্ধতি রয়েছে - 1) প্রম্পট ইনপুট পাওয়ার জন্য 2) অনুরোধটি প্রক্রিয়া করার জন্য এবং Imagen API ব্যবহার করার জন্য এবং 3) চিত্র প্রতিক্রিয়া প্রক্রিয়া করার জন্য।
প্রম্পট এবং ইয়োগা হল POJO ক্লাস যেগুলি যথাক্রমে Imagen API এবং Spanner ডেটা সার্ভার API এর সাথে ইন্টারফেস করার জন্য ক্ষেত্র, গেটার এবং সেটার ধারণ করে।
টেমপ্লেট ফোল্ডারে ইনডেক্স এবং getImage html ফাইলগুলিতে ইউজার ইন্টারফেসের জন্য টেমপ্লেট থাকে এবং তাদের সংশ্লিষ্ট ফোল্ডারে JS এবং CSS স্ক্রিপ্টের নির্ভরতা থাকে।
ভার্টেক্স এআই ইমেজেন এপিআই ইন্টিগ্রেশন ইমেজ জেনারেশন ব্যবহারের ক্ষেত্রে আমরা ভার্টেক্স এআই এর ইমেজেন এপিআই ব্যবহার করছি নিম্নলিখিত ফরম্যাটে:
https://<<region>>-
aiplatform.googleapis.com/v1/projects/
<<your-project-id>>/locations/<<region>>/publishers/google/models/imagegeneration:predict
আপনি এখানে ইমেজেন ক্ষমতা সম্পর্কে আরও পড়তে পারেন। এটি Base64 এনকোডেড স্ট্রিং বিন্যাসে প্রতিক্রিয়া প্রদান করে। এটিকে এর ইমেজে রূপান্তর করতে, আমরা getImage.HTML ফাইলে নিচের মতো ইমেজ অবজেক্টে (getImage.js ফাইলে) javascript setattribute পদ্ধতি ব্যবহার করেছি:
poseImage.setAttribute('src', "data:image/jpg;base64," + baseStr64);
অনুমোদন ইমেজেন এপিআই এর জন্য এটি অ্যাক্সেস করার জন্য আপনাকে বহনকারী টোকেন প্রমাণীকরণ সক্ষম করতে হবে। আমাদের ক্ষেত্রে, আমি অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র JSON পদ্ধতি ব্যবহার করেছি। আপনি ক্লাউড শেল টার্মিনাল থেকে নীচের কমান্ডটি চালিয়ে এবং টার্মিনালে অনুসরণ করা নির্দেশাবলী অনুসরণ করে এটি বাস্তবায়ন করতে পারেন:
gcloud auth application-default login
আপনার অ্যাকাউন্টের সাথে প্রমাণীকরণ করতে "Y" লিখুন। অ্যাক্সেসের অনুমতি দিন এবং পপ-আপে দেখানো অনুমোদন কোডটি অনুলিপি করুন। আপনি এটি করার সাথে সাথে, আপনি JSON ফাইলে অ্যাপ্লিকেশনের ডিফল্ট শংসাপত্রগুলি এইটির মতো একটি অবস্থানে সংরক্ষিত পাবেন: /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json৷
ফাইলটি ডাউনলোড করুন বা cat কমান্ড (cat /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json) চালিয়ে JSON ফাইলের বিষয়বস্তু অনুলিপি করুন এবং PromptController.java ক্লাসের callImagen() পদ্ধতিতে অ্যাপ্লিকেশনটিতে এটি ব্যবহার করুন। আপনি এখানে প্রমাণীকরণ সম্পর্কে আরও পড়তে পারেন।
ইউজার ইন্টারফেস ফ্রন্ট এন্ড টেমপ্লেট ফাইলে ডাটা পার্স ও রেন্ডার করতে এবং ইউজার ইন্টারফেসে মার্জিত ডিজাইন যোগ করতে আমরা Thymeleaf কে টেমপ্লেট ইঞ্জিন হিসেবে ব্যবহার করেছি। এটি এইচটিএমএল এর অনুরূপ কিন্তু রেন্ডার করা ডেটার সাথে কাজ করার জন্য আরও বৈশিষ্ট্য সমর্থন করে। index.html-এ ল্যান্ডিং পৃষ্ঠা ডিজাইনের উপাদান রয়েছে এবং এটি ব্যবহারকারীকে বিষয় নির্বাচন করতে এবং পছন্দসই চিত্র তৈরি করতে একটি ওভাররাইডিং প্রম্পট যোগ করার অনুমতি দেয়।
6. নির্মাণ এবং স্থাপন
এখন যেহেতু আপনি কোডটি ক্লোন করেছেন, আপনার প্রকল্প, অঞ্চল এবং প্রমাণীকরণ শংসাপত্রগুলির জন্য প্রযোজ্য স্থানধারকগুলির জন্য মানগুলি প্রতিস্থাপন করেছেন, আসুন অ্যাপটি তৈরি এবং স্থাপনে এগিয়ে যাই৷ কমান্ড, বিল্ড ব্যবহার করে ক্লাউড শেল টার্মিনালে প্রোজেক্ট ফোল্ডারে নেভিগেট করুন এবং তারপরে ক্লাউড শেল মেশিনে একের পর এক নিম্নলিখিত 3টি কমান্ড দিয়ে স্থানীয়ভাবে পরীক্ষার জন্য স্থাপন করুন:
cd genai-posegen
./mvnw package
./mvnw spring-boot:run
ক্লাউড রানে অ্যাপটি স্থাপন করুন যাতে এটি ক্লাউডে উপলব্ধ থাকে। এটি করার জন্য, প্রকল্প ফোল্ডারের মধ্যে ক্লাউড শেল টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালান:
gcloud run deploy –source .
প্রয়োজনীয় প্যারামিটারগুলি পাস করুন এবং নিশ্চিত করুন যে আপনার অ্যাপ স্থাপন করা হয়েছে।
7. ডেমো
একবার অ্যাপটি স্থাপন করা হলে, আপনি টার্মিনালে পরিষেবা URL দেখতে পাবেন। লিংকে ক্লিক করুন এবং দেখুন আপনার পোজ ইমেজ জেনারেশন অ্যাপটি গুগল ক্লাউড সার্ভারহীনভাবে চলছে!
8. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Google ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান
- প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন
- ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন
- আপনি যদি প্রকল্পটি মুছতে না চান, তাহলে এই প্রকল্পের জন্য আপনি যে উদাহরণটি তৈরি করেছেন সেখানে নেভিগেট করে স্প্যানার দৃষ্টান্তটি মুছুন এবং ইনস্ট্যান্স ওভারভিউ পৃষ্ঠার উপরের ডানদিকে কোণায় থাকা উদাহরণ মুছুন বোতামটি ক্লিক করুন
- এছাড়াও আপনি ক্লাউড রান পরিষেবা পৃষ্ঠাতে নেভিগেট করতে পারেন, এবং এই প্রকল্পে তৈরি পরিষেবাগুলি নির্বাচন করুন এবং পরিষেবাগুলি মুছতে মুছুন বোতামে ক্লিক করুন৷
9. অভিনন্দন
এই ব্লগে, আমরা ক্লাউড রানে নিয়োজিত একটি ইন্টারেক্টিভ ক্লায়েন্ট অ্যাপ্লিকেশনে Google Cloud Vertex AI এর Imagen API ব্যবহার করে পোজ তৈরি করতে ক্লাউড স্প্যানারে ডেটা সঞ্চয় করে এবং পরিচালনা করে এমন সম্পূর্ণ স্ট্যাক স্প্রিং বুট অ্যাপ্লিকেশন আনতে সক্ষম হয়েছি। এই ব্লগের আর্কিটেকচার ডায়াগ্রাম বিভাগে, আপনি ক্লাউড ফাংশন (জাভা) উপাদানটি দেখতে পাচ্ছেন যা আমরা কখনই করতে পারিনি? আপনি অবদান রাখতে চান তাহলে এটা grabs জন্য আপ. getimage.html ফাইলে পাওয়া যায় এমন 2টি পদ্ধতি সম্পাদন করতে আপনি 2টি জাভা ক্লাউড ফাংশন প্রয়োগ করতে পারেন: ডাটাবেসে পোজ সংরক্ষণ করুন এবং চিত্র পদ্ধতি আপলোড করুন৷ মডেল সম্পর্কে আরও জানতে Vertex AI ডকুমেন্টেশনের Imagen দেখুন।