1. ওভারভিউ
সুস্থতা এবং ফিটনেস অ্যাপের জগতে, ব্যবহারকারীদের একটি সমৃদ্ধ এবং আকর্ষক অভিজ্ঞতা প্রদান করাই মুখ্য৷ একটি যোগ অ্যাপের জন্য, এর অর্থ হল ভঙ্গির সাধারণ পাঠ্য বিবরণের বাইরে যাওয়া এবং ব্যাপক তথ্য, মাল্টিমিডিয়া সামগ্রী এবং বুদ্ধিমান অনুসন্ধান ক্ষমতা প্রদান করা। এই ব্লগে, আমরা কীভাবে Google ক্লাউডের ফায়ারস্টোর ব্যবহার করে একটি শক্তিশালী যোগা পোজ ডেটাবেস তৈরি করব, প্রাসঙ্গিক মিলের জন্য এটির ভেক্টর অনুসন্ধান এক্সটেনশনের সুবিধা গ্রহণ করব এবং মাল্টিমোডাল সামগ্রীর সাথে কাজ করার জন্য জেমিনি 2.0 ফ্ল্যাশ (পরীক্ষামূলক) এর শক্তিকে সংহত করব৷
কেন ফায়ারস্টোর?
Firestore, Google ক্লাউডের সার্ভারহীন NoSQL ডকুমেন্ট ডাটাবেস, মাপযোগ্য এবং গতিশীল অ্যাপ্লিকেশন তৈরির জন্য একটি চমৎকার পছন্দ। আমাদের যোগ অ্যাপের জন্য এটি কেন উপযুক্ত তা এখানে:
- স্কেলেবিলিটি এবং পারফরম্যান্স: Firestore স্বয়ংক্রিয়ভাবে লক্ষ লক্ষ ব্যবহারকারী এবং বিশাল ডেটাসেটগুলি পরিচালনা করার জন্য স্কেল করে, যাতে আপনার অ্যাপ বৃদ্ধির সাথে সাথে প্রতিক্রিয়াশীল থাকে তা নিশ্চিত করে।
- রিয়েল-টাইম আপডেট: অন্তর্নির্মিত রিয়েল-টাইম সিঙ্ক্রোনাইজেশন সমস্ত সংযুক্ত ক্লায়েন্ট জুড়ে ডেটা সামঞ্জস্যপূর্ণ রাখে, এটি লাইভ ক্লাস বা সহযোগী অনুশীলনের মতো বৈশিষ্ট্যগুলির জন্য নিখুঁত করে তোলে।
- নমনীয় ডেটা মডেল: ফায়ারস্টোরের নথি-ভিত্তিক কাঠামো আপনাকে পাঠ্য, চিত্র এবং এমনকি এমবেডিং সহ বিভিন্ন ধরণের ডেটা সঞ্চয় করতে দেয়, এটি জটিল যোগ পোজ তথ্য উপস্থাপনের জন্য আদর্শ করে তোলে।
- শক্তিশালী অনুসন্ধান: Firestore সমতা, অসমতা সহ জটিল প্রশ্নগুলিকে সমর্থন করে এবং এখন, নতুন এক্সটেনশনের সাথে, ভেক্টর সাদৃশ্য অনুসন্ধানগুলি ।
- অফলাইন সমর্থন: ফায়ারস্টোর স্থানীয়ভাবে ডেটা ক্যাশে করে, ব্যবহারকারীদের অফলাইনে থাকাকালীনও আপনার অ্যাপকে কাজ করার অনুমতি দেয়।
Firestore ভেক্টর অনুসন্ধান এক্সটেনশনের সাথে অনুসন্ধান উন্নত করা
যোগা ভঙ্গির মতো জটিল ধারণাগুলির সাথে কাজ করার সময় ঐতিহ্যগত কীওয়ার্ড-ভিত্তিক অনুসন্ধান সীমিত হতে পারে। একজন ব্যবহারকারী এমন একটি ভঙ্গি অনুসন্ধান করতে পারে যা "নিতম্ব খোলে" বা "ভারসাম্য উন্নত করে" নির্দিষ্ট পোজের নাম না জেনে। এখানেই ভেক্টর অনুসন্ধান আসে।
Firestore এর সাথে ভেক্টর অনুসন্ধান আপনাকে অনুমতি দেয়:
- এম্বেডিং তৈরি করুন: টেক্সট বর্ণনা এবং ভবিষ্যতে সম্ভাব্য ইমেজ এবং অডিওকে সংখ্যাসূচক ভেক্টর উপস্থাপনা (এম্বেডিং) তে রূপান্তর করুন যা Vertex AI বা কাস্টম মডেলগুলিতে উপলব্ধ মডেলগুলি ব্যবহার করে তাদের শব্দার্থিক অর্থ ক্যাপচার করে৷
- স্টোর এম্বেডিং: এই এম্বেডিংগুলি সরাসরি Firestore নথিতে সংরক্ষণ করুন।
- সাদৃশ্য অনুসন্ধানগুলি সম্পাদন করুন: প্রদত্ত ক্যোয়ারী ভেক্টরের মতো শব্দার্থকভাবে অনুরূপ নথিগুলি খুঁজে পেতে আপনার ডাটাবেস অনুসন্ধান করুন, প্রাসঙ্গিক মিল সক্ষম করে৷
মিথুন 2.0 ফ্ল্যাশ সংহত করা (পরীক্ষামূলক)
Gemini 2.0 Flash হল Google এর অত্যাধুনিক মাল্টিমডাল AI মডেল। এখনও পরীক্ষামূলকভাবে, এটি আমাদের যোগ অ্যাপকে সমৃদ্ধ করার জন্য উত্তেজনাপূর্ণ সম্ভাবনার প্রস্তাব দেয়:
- টেক্সট জেনারেশন : যোগব্যায়ামের বিশদ বিবরণ তৈরি করতে জেমিনি 2.0 ফ্ল্যাশ ব্যবহার করুন, সুবিধা, পরিবর্তন এবং দ্বন্দ্ব সহ।
- ইমেজ জেনারেশন (মিমিকড) : যদিও জেমিনির সাথে সরাসরি ইমেজ জেনারেশন এখনও সর্বজনীনভাবে উপলব্ধ নয়, আমি Google এর Imagen ব্যবহার করে এটিকে সিমুলেট করেছি, এমন ছবি তৈরি করেছি যা দৃশ্যত ভঙ্গিগুলিকে উপস্থাপন করে।
- অডিও জেনারেশন (নকল করা) : একইভাবে, আমরা প্রতিটি ভঙ্গির জন্য অডিও নির্দেশনা তৈরি করতে একটি টেক্সট-টু-স্পিচ (টিটিএস) পরিষেবা ব্যবহার করতে পারি, যা ব্যবহারকারীদের অনুশীলনের মাধ্যমে গাইড করে।
সম্ভাব্যভাবে, আমি মডেলের নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করার জন্য অ্যাপটিকে উন্নত করার জন্য ইন্টিগ্রেশন প্রস্তাব করার কল্পনা করছি:
- মাল্টিমোডাল লাইভ এপিআই : এই নতুন API আপনাকে টুল ব্যবহারের সাথে রিয়েল-টাইম ভিশন এবং অডিও স্ট্রিমিং অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।
- গতি এবং কর্মক্ষমতা : জেমিনি 2.0 ফ্ল্যাশের জেমিনি 1.5 ফ্ল্যাশের তুলনায় প্রথম টোকেন (TTFT) করার জন্য উল্লেখযোগ্যভাবে উন্নত সময় রয়েছে।
- উন্নত এজেন্টিক অভিজ্ঞতা : জেমিনি 2.0 মাল্টিমডাল বোঝাপড়া, কোডিং, জটিল নির্দেশনা অনুসরণ এবং ফাংশন কলিং-এ উন্নতি প্রদান করে। এই উন্নতিগুলি আরও ভাল এজেন্টিক অভিজ্ঞতা সমর্থন করার জন্য একসাথে কাজ করে।
আরও বিশদ বিবরণের জন্য এই ডকুমেন্টেশন পৃষ্ঠাটি দেখুন %20over%20Gemini%201.5%20Flash)।
Google অনুসন্ধানের সাথে গ্রাউন্ডিং
বিশ্বাসযোগ্যতা বাড়াতে এবং আরও সংস্থান সরবরাহ করতে, আমরা আমাদের অ্যাপ দ্বারা প্রদত্ত তথ্যের ভিত্তিতে Google অনুসন্ধানকে একীভূত করতে পারি। এর অর্থ:
- প্রাসঙ্গিক অনুসন্ধান: যখন একজন প্রশাসক ব্যবহারকারী একটি পোজের জন্য বিশদ বিবরণ প্রবেশ করেন, তখন আমরা একটি Google অনুসন্ধান সম্পাদন করতে পোজ নামটি ব্যবহার করতে পারি।
- ইউআরএল এক্সট্রাকশন: সার্চের ফলাফল থেকে, আমরা প্রাসঙ্গিক ইউআরএল বের করতে পারি, যেমন নিবন্ধ, ভিডিও বা সম্মানজনক যোগ ওয়েবসাইট, এবং সেগুলি অ্যাপের মধ্যে প্রদর্শন করতে পারি।
আপনি কি নির্মাণ করবেন
এই ল্যাবের অংশ হিসাবে, আপনি করবেন:
- একটি Firestore সংগ্রহ তৈরি করুন এবং যোগ নথি লোড করুন
- ফায়ারস্টোর দিয়ে কীভাবে CRUD অ্যাপ্লিকেশন তৈরি করবেন তা শিখুন
- জেমিনি 2.0 ফ্ল্যাশের সাথে যোগব্যায়াম ভঙ্গির বিবরণ তৈরি করুন
- Firestore ইন্টিগ্রেশন সহ Firebase ভেক্টর অনুসন্ধান সক্ষম করুন৷
- যোগ বর্ণনা থেকে এমবেডিং তৈরি করুন
- ব্যবহারকারী অনুসন্ধান টেক্সট জন্য সাদৃশ্য অনুসন্ধান সঞ্চালন
প্রয়োজনীয়তা
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷
2. আপনি শুরু করার আগে
একটি প্রকল্প তৈরি করুন
- Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন।
- নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন।
- আপনি ক্লাউড শেল ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ যা bq এর সাথে প্রিলোড করা হয়। গুগল ক্লাউড কনসোলের শীর্ষে সক্রিয় ক্লাউড শেল ক্লিক করুন।
- একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি পরীক্ষা করে দেখুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
- যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
- প্রয়োজনীয় API সক্রিয় করুন।
gcloud services enable firestore.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com \
storage.googleapis.com \
secretmanager.googleapis.com \
texttospeech.googleapis.com
gcloud কমান্ডের বিকল্প হল কনসোলের মাধ্যমে প্রতিটি পণ্য অনুসন্ধান করে বা এই লিঙ্কটি ব্যবহার করে।
যদি কোনো API মিস হয়, আপনি সর্বদা বাস্তবায়নের সময় এটি সক্রিয় করতে পারেন।
জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।
3. ডাটাবেস সেটআপ
কিভাবে ফায়ারস্টোর ইনস্ট্যান্স সেট আপ করতে হয় সে বিষয়ে ডকুমেন্টেশনে আরও সম্পূর্ণ ধাপ রয়েছে। একটি উচ্চ স্তরে, শুরু করতে, আমি এই পদক্ষেপগুলি অনুসরণ করব:
1 ফায়ারস্টোর ভিউয়ারে যান এবং একটি ডাটাবেস পরিষেবা নির্বাচন করুন স্ক্রীন থেকে, নেটিভ মোডে ফায়ারস্টোর নির্বাচন করুন
- আপনার ফায়ারস্টোরের জন্য একটি অবস্থান নির্বাচন করুন
- ডেটাবেস তৈরি করুন ক্লিক করুন (যদি এটি প্রথমবার হয় তবে এটিকে "(ডিফল্ট)" ডাটাবেস হিসাবে ছেড়ে দিন)
আপনি যখন একটি ফায়ারস্টোর প্রকল্প তৈরি করেন, তখন এটি ক্লাউড এপিআই ম্যানেজারে এপিআই সক্ষম করে
- গুরুত্বপূর্ণ: নিরাপত্তা বিধিগুলির পরীক্ষা (উৎপাদন নয়) সংস্করণ বেছে নিন যাতে ডেটা অ্যাক্সেসযোগ্য হয়
- একবার এটি সেট আপ হয়ে গেলে, নীচের ছবিতে দেখানো হিসাবে আপনি নেটিভ মোডে ফায়ারস্টোর ডেটাবেস, সংগ্রহ এবং নথির দৃশ্য দেখতে পাবেন:
- এই পদক্ষেপটি এখনও করবেন না, তবে শুধুমাত্র রেকর্ডের জন্য - আপনি "সংগ্রহ শুরু করুন" এ ক্লিক করতে পারেন এবং একটি নতুন সংগ্রহ তৈরি করতে পারেন৷ "পোজ" হিসাবে সংগ্রহ আইডি সেট করুন। সেভ বাটনে ক্লিক করুন।
উত্পাদন অ্যাপ্লিকেশনের জন্য প্রো টিপস:
- একবার আপনি আপনার ডেটা মডেল চূড়ান্ত করে নিলে এবং কে বিভিন্ন ধরণের নথি অ্যাক্সেস করতে সক্ষম হবে তা চিহ্নিত করলে, আপনি Firebase ইন্টারফেস থেকে নিরাপত্তা বিধি তৈরি, সম্পাদনা এবং নিরীক্ষণ করতে পারেন। আপনি এই লিঙ্ক থেকে নিরাপত্তা নিয়ম অ্যাক্সেস করতে পারেন: https://console.firebase.google.com/u/0/project/ <<your_project_id>>/firestore/rules
- ডেভেলপমেন্ট ফেজ থেকে প্রোজেক্ট ডিপ্লোয়িং/ রোল আউট করার আগে আপনার নিরাপত্তা বিধিগুলি সম্পাদনা, নিরীক্ষণ এবং পরীক্ষা করতে ভুলবেন না কারণ আপনার অ্যাপটি কেন ভিন্নভাবে কাজ করছে তার পিছনে এটি প্রায়শই নীরব অপরাধী :)
এই ডেমোর জন্য, আমরা এটি TEST মোডে ব্যবহার করব।
4. Firestore REST API
- REST API নিম্নলিখিত ব্যবহারের ক্ষেত্রে সহায়ক হতে পারে: a. একটি রিসোর্স-অনিরোধিত পরিবেশ থেকে ফায়ারস্টোর অ্যাক্সেস করা যেখানে একটি সম্পূর্ণ ক্লায়েন্ট লাইব্রেরি চালানো সম্ভব নয়। ডাটাবেস প্রশাসন স্বয়ংক্রিয় করা বা বিস্তারিত ডাটাবেস মেটাডেটা পুনরুদ্ধার করা
- Firestore ব্যবহার করার সবচেয়ে সহজ উপায় হল নেটিভ ক্লায়েন্ট লাইব্রেরিগুলির একটি ব্যবহার করা, এমন কিছু পরিস্থিতিতে আছে যখন এটি সরাসরি REST API কল করা উপযোগী
- এই ব্লগের পরিসরে, আপনি Firestore REST API-এর ব্যবহার এবং প্রদর্শন দেখতে পাবেন এবং নেটিভ ক্লায়েন্ট লাইব্রেরি নয়
- প্রমাণীকরণের জন্য, Firestore REST API হয় একটি Firebase প্রমাণীকরণ আইডি টোকেন বা একটি Google Identity OAuth 2.0 টোকেন গ্রহণ করে৷ প্রমাণীকরণ এবং অনুমোদন বিষয়ে আরও তথ্যের জন্য, ডকুমেন্টেশন পড়ুন।
- সমস্ত REST API এন্ডপয়েন্ট বেস URL https://firestore.googleapis.com/v1/ এর অধীনে বিদ্যমান।
স্প্রিং বুট এবং ফায়ারস্টোর API
স্প্রিং বুট ফ্রেমওয়ার্কের এই সমাধানটি হল একটি ক্লায়েন্ট অ্যাপ্লিকেশন প্রদর্শন করা যা ব্যবহারকারীর ইন্টারেক্টিভ অভিজ্ঞতার সাথে যোগ ভঙ্গি এবং শ্বাসের বিবরণ সংগ্রহ এবং সংশোধন করতে Firestore API ব্যবহার করে।
যোগা পোজ অ্যাপের Firestore CRUD সমাধান অংশের বিস্তারিত ধাপে ধাপে ব্যাখ্যার জন্য, আপনি ব্লগ লিঙ্কের মাধ্যমে যেতে পারেন।
বর্তমান সমাধানের উপর ফোকাস করতে এবং যেতে যেতে CRUD অংশটি শিখতে, আপনার ক্লাউড শেল টার্মিনাল থেকে নীচের সংগ্রহস্থল থেকে এই ব্লগে ফোকাস করা সম্পূর্ণ সমাধানটি ক্লোন করুন এবং কোডবেসের একটি অনুলিপি পান।
git clone https://github.com/AbiramiSukumaran/firestore-poserecommender
দয়া করে নোট করুন:
- একবার আপনি এই রেপো ক্লোন করে ফেললে, আপনাকে শুধু আপনার প্রোজেক্ট আইডি, এপিআই ইত্যাদির চারপাশে কিছু পরিবর্তন করতে হবে। আপনার অ্যাপ্লিকেশন চালু ও চালু করার জন্য অন্য কোনো পরিবর্তনের প্রয়োজন নেই। অ্যাপ্লিকেশনের প্রতিটি উপাদান আসন্ন বিভাগে ব্যাখ্যা করা হয়েছে। এখানে পরিবর্তনের একটি তালিকা রয়েছে:
-
src/main/java/com/example/demo/GenerateImageSample.java
ফাইলে, আপনার প্রজেক্ট আইডি দিয়ে "<<YOUR_PROJECT_ID>>" প্রতিস্থাপন করুন -
src/main/java/com/example/demo/GenerateEmbeddings.java
ফাইলে, আপনার প্রকল্প আইডি দিয়ে "<<YOUR_PROJECT_ID>>" প্রতিস্থাপন করুন -
src/main/java/com/example/demo/PoseController.java
এ, আপনার কনফিগারেশন থেকে উপযুক্ত মান সহ "<<YOUR_PROJECT_ID>>"
এবং ডাটাবেসের নাম,
এই ক্ষেত্রে"(default)",
এর সমস্ত উদাহরণ প্রতিস্থাপন করুন: -
src/main/java/com/example/demo/PoseController.java
এ, জেমিনি 2.0 ফ্ল্যাশের জন্য আপনার API KEY দিয়ে "[YOUR_API_KEY]
" প্রতিস্থাপন করুন। আপনি এআই স্টুডিও থেকে এটি পেতে পারেন। - আপনি যদি স্থানীয়ভাবে পরীক্ষা করতে চান তবে ক্লাউড শেল টার্মিনালে প্রোজেক্ট ফোল্ডার থেকে নিম্নলিখিত কমান্ডগুলি চালান:
mvn package
mvn spring-boot:run
এই মুহূর্তে, আপনি ক্লাউড শেল টার্মিনাল থেকে "ওয়েব প্রিভিউ" বিকল্পে ক্লিক করে আপনার অ্যাপ্লিকেশন চলমান দেখতে পারেন। আমরা এখনও পরীক্ষা করার জন্য প্রস্তুত নই এবং অ্যাপ্লিকেশনটি চেষ্টা করে দেখুন।
- ঐচ্ছিক: আপনি যদি ক্লাউড রানে অ্যাপটি স্থাপন করতে চান তবে আপনাকে ক্লাউড শেল এডিটর থেকে স্ক্র্যাচ থেকে একটি নতুন জাভা ক্লাউড রান অ্যাপ্লিকেশন বুটস্ট্র্যাপ করতে হবে এবং রেপো থেকে src ফাইল এবং টেমপ্লেট ফাইলগুলিকে সংশ্লিষ্ট ফোল্ডারে আপনার নতুন প্রকল্পে যুক্ত করতে হবে (যেহেতু বর্তমান গিথুব রেপো প্রকল্পটি ক্লাউড কনফিগারেশনের জন্য ডিফল্টরূপে সেট আপ করা হয়নি)। নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করতে হবে, সেক্ষেত্রে (বিদ্যমান রেপো ক্লোন করার পরিবর্তে):
- ক্লাউড শেল এডিটরে যান (নিশ্চিত করুন যে সম্পাদক খোলা আছে এবং টার্মিনাল নয়), স্ট্যাটাস বারের বাম দিকে Google ক্লাউড প্রজেক্টের নাম আইকনে ক্লিক করুন (নীচের স্ক্রিনশটে ব্লক করা অংশ)
- নতুন অ্যাপ্লিকেশন -> ক্লাউড রান অ্যাপ্লিকেশন -> জাভা: পছন্দের তালিকা থেকে ক্লাউড রান নির্বাচন করুন এবং এটির নাম দিন "firestore-poserecommender"
- এখন আপনি জাভা ক্লাউড রান অ্যাপ্লিকেশনের জন্য একটি সম্পূর্ণ স্ট্যাক টেমপ্লেট দেখতে পাবেন, আগে থেকে কনফিগার করা এবং যেতে প্রস্তুত
- বিদ্যমান কন্ট্রোলার ক্লাসটি সরান এবং নিম্নলিখিত ফাইলগুলিকে প্রকল্পের কাঠামোতে তাদের নিজ নিজ ফোল্ডারে অনুলিপি করুন:
firestore-poserecommender/src/main/java/com/example/demo/
- FirestoreSampleApplication.java
- জেনারেট এম্বেডিংস.জাভা
- ImageSample.java তৈরি করুন
- পোজ.জাভা
- PoseController.java
- ServletInitializer.java
firestore-poserecommender/src/main/resources/static/
- Index.html
firestore-poserecommender/src/main/resources/templates/
- contextsearch.html
- createpose.html
- errmessage.html
- pose.html
- ryoq.html
- searchpose.html
- showmessage.html
firestore-poserecommender/
- ডকারফাইল
- PROJECT ID এবং API KEY আপনার নিজ নিজ মান দিয়ে প্রতিস্থাপন করতে আপনাকে সংশ্লিষ্ট ফাইলগুলিতে পরিবর্তন করতে হবে। (উপরের ধাপ 1 a, b, c এবং d)।
5. ডেটা ইনজেশন
আবেদনের জন্য ডেটা এই ফাইলে পাওয়া যায় data.json: https://github.com/AbiramiSukumaran/firestore-poserecommender/blob/main/data.json
আপনি যদি কিছু পূর্বনির্ধারিত ডেটা দিয়ে শুরু করতে চান, তাহলে আপনি json কপি করতে পারেন এবং আপনার মান দিয়ে "<<YOUR_PROJECT_ID>>" এর সমস্ত ঘটনা প্রতিস্থাপন করতে পারেন
- ফায়ারস্টোর স্টুডিওতে যান
- আপনি "পোজ" নামে একটি সংগ্রহ তৈরি করেছেন তা নিশ্চিত করুন
- উপরে উল্লিখিত রেপো ফাইল থেকে ম্যানুয়ালি এক সময়ে ডকুমেন্ট যোগ করুন
আপনি বিকল্পভাবে নিম্নলিখিত পদক্ষেপগুলি চালিয়ে আপনার জন্য তৈরি করা পূর্বনির্ধারিত সেট থেকে এক শটে ডেটা আমদানি করতে পারেন:
- ক্লাউড শেল টার্মিনালে যান এবং নিশ্চিত করুন যে আপনার সক্রিয় Google ক্লাউড প্রকল্প সেট করা আছে এবং নিশ্চিত করুন যে আপনি অনুমোদিত৷ নীচে দেওয়া gsutil কমান্ড দিয়ে আপনার প্রকল্পে একটি বালতি তৈরি করুন। আপনার Google ক্লাউড প্রজেক্ট আইডি দিয়ে নিচের কমান্ডে <PROJECT_ID> ভেরিয়েবল প্রতিস্থাপন করুন:
gsutil mb -l us gs:// <PROJECT_ID> -যোগ-পোজেস-বালতি
- এখন যেহেতু বালতি তৈরি হয়েছে, আমরা ফায়ারবেস ডাটাবেসে আমদানি করার আগে আমাদের এই বালতিতে প্রস্তুত করা ডাটাবেস এক্সপোর্ট কপি করতে হবে। নীচে দেওয়া কমান্ড ব্যবহার করুন:
gsutil cp -r gs://demo-bq-gemini-public/yoga_poses gs:// <PROJECT_ID> -yoga-poses-বালতি
এখন যেহেতু আমাদের কাছে আমদানি করার ডেটা আছে, আমরা যে Firebase ডাটাবেস ( ডিফল্ট ) তৈরি করেছি তাতে ডেটা আমদানির চূড়ান্ত ধাপে যেতে পারি।
- এখনই Firestore কনসোলে যান এবং বাম দিকের নেভিগেশন মেনু থেকে আমদানি/রপ্তানি ক্লিক করুন।
আমদানি নির্বাচন করুন এবং আপনার তৈরি করা ক্লাউড স্টোরেজ পাথটি বেছে নিন এবং আপনি "yoga_poses.overall_export_metadata" ফাইলটি নির্বাচন না করা পর্যন্ত নেভিগেট করুন:
- আমদানি ক্লিক করুন.
আমদানিতে কয়েক সেকেন্ড সময় লাগবে এবং এটি প্রস্তুত হয়ে গেলে, আপনি https://console.cloud.google.com/firestore/databases- এ গিয়ে আপনার Firestore ডাটাবেস এবং সংগ্রহটি যাচাই করতে পারেন, ডিফল্ট ডাটাবেস এবং পোজ সংগ্রহটি নীচে দেখানো হিসাবে নির্বাচন করুন:
- আরেকটি পদ্ধতি হল যে আপনি "একটি নতুন পোজ তৈরি করুন" অ্যাকশন ব্যবহার করে মোতায়েন করার পরে আপনি অ্যাপ্লিকেশনটির মাধ্যমে ম্যানুয়ালি রেকর্ডগুলিও তৈরি করতে পারেন।
6. ভেক্টর অনুসন্ধান
Firestore ভেক্টর অনুসন্ধান এক্সটেনশন সক্ষম করুন৷
নতুন ভেক্টর অনুসন্ধান বৈশিষ্ট্য সহ আপনার Firestore নথিগুলিকে স্বয়ংক্রিয়ভাবে এম্বেড করতে এবং অনুসন্ধান করতে এই এক্সটেনশনটি ব্যবহার করুন! এটি আপনাকে Firebase এক্সটেনশন হাবে নিয়ে যাবে।
আপনি যখন ভেক্টর অনুসন্ধান এক্সটেনশন ইনস্টল করেন, আপনি একটি সংগ্রহ এবং একটি নথি ক্ষেত্রের নাম উল্লেখ করেন। এই ক্ষেত্রের সাথে একটি নথি যোগ করা বা আপডেট করা নথির জন্য একটি ভেক্টর এমবেডিং গণনা করতে এই এক্সটেনশনটিকে ট্রিগার করে৷ এই ভেক্টর এমবেডিংটি একই নথিতে আবার লেখা হয়, এবং নথিটি ভেক্টর স্টোরে সূচীকৃত হয়, এর বিরুদ্ধে জিজ্ঞাসা করার জন্য প্রস্তুত।
চলুন ধাপে ধাপে যাওয়া যাক:
এক্সটেনশন ইনস্টল করুন:
ফায়ারবেস এক্সটেনশন মার্কেটপ্লেস থেকে "Firebase কনসোলে ইনস্টল করুন" এ ক্লিক করে "Firestore সহ ভেক্টর অনুসন্ধান" এক্সটেনশনটি ইনস্টল করুন।
গুরুত্বপূর্ণ:
আপনি যখন এই এক্সটেনশন পৃষ্ঠায় প্রথম নেভিগেট করবেন, তখন আপনাকে Firebase কনসোলে তালিকাভুক্ত Google ক্লাউড কনসোলে আপনি যে প্রকল্পে কাজ করছেন সেটি নির্বাচন করতে হবে।
আপনার প্রোজেক্ট তালিকাভুক্ত না থাকলে, ফায়ারবেসে প্রোজেক্ট যোগ করুন (তালিকা থেকে আপনার বিদ্যমান Google ক্লাউড প্রোজেক্ট বেছে নিন )।
এক্সটেনশন কনফিগার করুন:
সংগ্রহ ("পোজ"), এম্বেড করার জন্য টেক্সট ধারণকারী ক্ষেত্র ("ভঙ্গি"), এবং এমবেডিং মাত্রার মতো অন্যান্য পরামিতি উল্লেখ করুন।
যদি এই ধাপে তালিকাভুক্ত API সক্রিয় করা প্রয়োজন থাকে, তাহলে কনফিগারেশন পৃষ্ঠা আপনাকে তা করার অনুমতি দেবে, সেই অনুযায়ী পদক্ষেপগুলি অনুসরণ করুন।
যদি কিছুক্ষণের জন্য API সক্রিয় করার পরে পৃষ্ঠাটি সাড়া না দেয়, তবে শুধু রিফ্রেশ করুন এবং আপনি API গুলি সক্ষম দেখতে সক্ষম হবেন।
নিম্নলিখিত ধাপগুলির মধ্যে একটিতে, এটি আপনাকে এমবেডিং তৈরি করার জন্য আপনার পছন্দের LLM ব্যবহার করতে দেয়৷ "Vertex AI" নির্বাচন করুন।
পরবর্তী কয়েকটি সেটিংস আপনার সংগ্রহ এবং আপনি যে ক্ষেত্রে এম্বেড করতে চান তার সাথে সম্পর্কিত:
এলএলএম: ভার্টেক্স এআই
সংগ্রহের পথ: ভঙ্গি
ডিফল্ট ক্যোয়ারী সীমা: 3
দূরত্ব পরিমাপ: কোসাইন
ইনপুট ক্ষেত্রের নাম: অঙ্গবিন্যাস
আউটপুট ক্ষেত্রের নাম: এমবেডিং
স্থিতি ক্ষেত্রের নাম: স্থিতি
বিদ্যমান নথিগুলি এম্বেড করুন: হ্যাঁ৷
বিদ্যমান এমবেডিং আপডেট করুন: হ্যাঁ
ক্লাউড ফাংশন অবস্থান: us-central1
ইভেন্টগুলি সক্ষম করুন: চেক করা হয়নি৷
এই সব সেট আপ হয়ে গেলে, ইন্সটল এক্সটেনশন বোতামে ক্লিক করুন। এটি 3 - 5 মিনিট সময় নেবে।
এমবেডিং তৈরি করুন:
আপনি "পোজ" সংগ্রহে নথিগুলি যোগ বা আপডেট করার সাথে সাথে, এক্সটেনশনটি স্বয়ংক্রিয়ভাবে একটি এপিআই এন্ডপয়েন্টের মাধ্যমে একটি প্রাক-প্রশিক্ষিত মডেল বা আপনার পছন্দের একটি মডেল ব্যবহার করে এমবেডিং তৈরি করবে৷ এক্ষেত্রে আমরা এক্সটেনশন কনফিগারেশনে ভার্টেক্স এআই বেছে নিয়েছি।
সূচক সৃষ্টি
এটি অ্যাপ্লিকেশনটিতে এমবেডিং ব্যবহারের সময় এমবেডিং ক্ষেত্রে সূচক তৈরি করতে বাধ্য করবে।
ফায়ারস্টোর মৌলিক প্রশ্নের জন্য স্বয়ংক্রিয়ভাবে সূচী তৈরি করে; যাইহোক, আপনি Firestore-কে ইনডেক্স সিনট্যাক্স তৈরি করতে দিতে পারেন যেগুলির কোনো সূচী নেই, এবং এটি আপনাকে অ্যাপ্লিকেশনের পাশে ত্রুটি বার্তায় জেনারেট করা সূচকের একটি লিঙ্ক প্রদান করবে। এখানে ভেক্টর সূচক তৈরির ধাপগুলির তালিকা রয়েছে:
- ক্লাউড শেল টার্মিনালে যান
- নিম্নলিখিত কমান্ড চালান:
gcloud firestore indexes composite create --collection-group="poses" --query-scope=COLLECTION --database="(default)" --field-config vector-config='{"dimension":"768", "flat": "{}"}',field-path="embedding"
এখানে এটি সম্পর্কে আরও পড়ুন.
একবার একটি ভেক্টর সূচক তৈরি হয়ে গেলে, আপনি আপনার ভেক্টর এম্বেডিংয়ের সাথে একটি নিকটতম প্রতিবেশী অনুসন্ধান করতে পারেন।
গুরুত্বপূর্ণ নোট:
এই বিন্দু থেকে, আপনাকে উৎসে কোনো পরিবর্তন করতে হবে না। অ্যাপ্লিকেশনটি কী করছে তা বুঝতে শুধু অনুসরণ করুন।
ভেক্টর অনুসন্ধান সম্পাদন করা
আপনার সদ্য নির্মিত অ্যাপ্লিকেশনটি ভেক্টর অনুসন্ধানের কাছে কীভাবে আসে তা দেখে নেওয়া যাক। একবার এম্বেডিংগুলি সংরক্ষণ করা হলে, আপনি ভেক্টর অনুসন্ধান করতে এবং নিকটতম প্রতিবেশী ফলাফল পেতে Firestore Java SDK-এর VectorQuery ক্লাস ব্যবহার করতে পারেন:
CollectionReference coll = firestore.collection("poses");
VectorQuery vectorQuery = coll.findNearest(
"embedding",
userSearchTextEmbedding,
/* limit */ 3,
VectorQuery.DistanceMeasure.EUCLIDEAN,
VectorQueryOptions.newBuilder().setDistanceResultField("vector_distance")
.setDistanceThreshold(2.0)
.build());
ApiFuture<VectorQuerySnapshot> future = vectorQuery.get();
VectorQuerySnapshot vectorQuerySnapshot = future.get();
List<Pose> posesList = new ArrayList<Pose>();
// Get the ID of the closest document (assuming results are sorted by distance)
String closestDocumentId = vectorQuerySnapshot.getDocuments().get(0).getId();
এই স্নিপেটটি ফায়ারস্টোরের নথির এম্বেডিংয়ের সাথে ব্যবহারকারীর অনুসন্ধানের পাঠ্যের এম্বেডিংয়ের তুলনা করে এবং প্রাসঙ্গিকভাবে নিকটতমটি বের করে।
7. মিথুন 2.0 ফ্ল্যাশ
মিথুন 2.0 ফ্ল্যাশ সংহত করা (বর্ণনা প্রজন্মের জন্য)
চলুন এক নজরে দেখে নেওয়া যাক কিভাবে আপনার নতুন নির্মিত অ্যাপ্লিকেশন বর্ণনা তৈরির জন্য Gemini 2.0 Flash ইন্টিগ্রেশন পরিচালনা করে।
এখন বলা যাক একজন প্রশাসক ব্যবহারকারী/যোগা প্রশিক্ষক জেমিনি 2.0 ফ্ল্যাশের সাহায্যে ভঙ্গির বিবরণ লিখতে চান এবং তারপরে নিকটতম ম্যাচগুলি দেখতে একটি অনুসন্ধান করতে চান। এর ফলে ফলাফল সমর্থন করে এমন মাল্টিমোডাল অবজেক্টের সাথে মিলিত ভঙ্গির বিবরণ বের করা হয়।
String apiUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent?key=[YOUR_API_KEY]";
Map<String, Object> requestBody = new HashMap<>();
List<Map<String, Object>> contents = new ArrayList<>();
List<Map<String, Object>> tools = new ArrayList<>();
Map<String, Object> content = new HashMap<>();
List<Map<String, Object>> parts = new ArrayList<>();
Map<String, Object> part = new HashMap<>();
part.put("text", prompt);
parts.add(part);
content.put("parts", parts);
contents.add(content);
requestBody.put("contents", contents);
/**Setting up Grounding*/
Map<String, Object> googleSearchTool = new HashMap<>();
googleSearchTool.put("googleSearch", new HashMap<>());
tools.add(googleSearchTool);
requestBody.put("tools", tools);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
ResponseEntity<String> response = restTemplate.exchange(apiUrl, HttpMethod.POST, requestEntity, String.class);
System.out.println("Generated response: " + response);
String responseBody = response.getBody();
JSONObject jsonObject = new JSONObject(responseBody);
JSONArray candidates = jsonObject.getJSONArray("candidates");
JSONObject candidate = candidates.getJSONObject(0);
JSONObject contentResponse = candidate.getJSONObject("content");
JSONArray partsResponse = contentResponse.getJSONArray("parts");
JSONObject partResponse = partsResponse.getJSONObject(0);
String generatedText = partResponse.getString("text");
System.out.println("Generated Text: " + generatedText);
ক ইমেজ এবং অডিও জেনারেশন নকল করা
জেমিনি 2.0 ফ্ল্যাশ এক্সপেরিমেন্টাল মাল্টিমডাল ফলাফল তৈরি করতে সক্ষম, তবে আমি এখনও এটির প্রাথমিক অ্যাক্সেসের জন্য সাইন আপ করিনি তাই আমি যথাক্রমে Imagen এবং TTS API-এর সাথে ছবি এবং অডিও আউটপুট নকল করেছি। জেমিনি 2.0 ফ্ল্যাশ-এ একটি API কলের মাধ্যমে এই সমস্তগুলি তৈরি করা কতটা দুর্দান্ত তা কল্পনা করুন!!
try (PredictionServiceClient predictionServiceClient =
PredictionServiceClient.create(predictionServiceSettings)) {
final EndpointName endpointName =
EndpointName.ofProjectLocationPublisherModelName(
projectId, location, "google", "imagen-3.0-generate-001");
Map<String, Object> instancesMap = new HashMap<>();
instancesMap.put("prompt", prompt);
Value instances = mapToValue(instancesMap);
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("sampleCount", 1);
paramsMap.put("aspectRatio", "1:1");
paramsMap.put("safetyFilterLevel", "block_few");
paramsMap.put("personGeneration", "allow_adult");
Value parameters = mapToValue(paramsMap);
PredictResponse predictResponse =
predictionServiceClient.predict(
endpointName, Collections.singletonList(instances), parameters);
for (Value prediction : predictResponse.getPredictionsList()) {
Map<String, Value> fieldsMap = prediction.getStructValue().getFieldsMap();
if (fieldsMap.containsKey("bytesBase64Encoded")) {
bytesBase64Encoded = fieldsMap.get("bytesBase64Encoded").getStringValue();
}
}
return bytesBase64Encoded;
}
try {
// Create a Text-to-Speech client
try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) {
// Set the text input to be synthesized
SynthesisInput input = SynthesisInput.newBuilder().setText(postureString).build();
// Build the voice request, select the language code ("en-US") and the ssml
// voice gender
// ("neutral")
VoiceSelectionParams voice =
VoiceSelectionParams.newBuilder()
.setLanguageCode("en-US")
.setSsmlGender(SsmlVoiceGender.NEUTRAL)
.build();
// Select the type of audio file you want returned
AudioConfig audioConfig =
AudioConfig.newBuilder().setAudioEncoding(AudioEncoding.MP3).build();
// Perform the text-to-speech request on the text input with the selected voice
// parameters and audio file type
SynthesizeSpeechResponse response =
textToSpeechClient.synthesizeSpeech(input, voice, audioConfig);
// Get the audio contents from the response
ByteString audioContents = response.getAudioContent();
// Convert to Base64 string
String base64Audio = Base64.getEncoder().encodeToString(audioContents.toByteArray());
// Add the Base64 encoded audio to the Pose object
return base64Audio;
}
} catch (Exception e) {
e.printStackTrace(); // Handle exceptions appropriately. For a real app, log and provide user feedback.
return "Error in Audio Generation";
}
}
খ. Google অনুসন্ধানের সাথে গ্রাউন্ডিং:
আপনি যদি ধাপ 6-এ জেমিনি আমন্ত্রণ কোডটি পরীক্ষা করেন, আপনি LLM প্রতিক্রিয়ার জন্য Google অনুসন্ধান গ্রাউন্ডিং সক্ষম করতে নিম্নলিখিত কোড স্নিপেটটি লক্ষ্য করবেন:
/**Setting up Grounding*/
Map<String, Object> googleSearchTool = new HashMap<>();
googleSearchTool.put("googleSearch", new HashMap<>());
tools.add(googleSearchTool);
requestBody.put("tools", tools);
এটি নিশ্চিত করার জন্য আমরা:
- আমাদের মডেলকে প্রকৃত অনুসন্ধান ফলাফলে গ্রাউন্ড করুন
- অনুসন্ধানে উল্লেখ করা প্রাসঙ্গিক URL গুলি বের করুন৷
8. আপনার অ্যাপ্লিকেশন চালান
চলুন একটি সাধারণ Thymeleaf ওয়েব ইন্টারফেস সহ আপনার নবনির্মিত জাভা স্প্রিং বুট অ্যাপ্লিকেশনটির সমস্ত ক্ষমতা দেখে নেওয়া যাক:
- Firestore CRUD অপারেশন (তৈরি করুন, পড়ুন, আপডেট করুন, মুছুন)
- কীওয়ার্ড অনুসন্ধান
- জেনারেটিভ এআই ভিত্তিক প্রসঙ্গ সৃষ্টি
- প্রাসঙ্গিক অনুসন্ধান (ভেক্টর অনুসন্ধান)
- মাল্টিমোডাল আউটপুট অনুসন্ধানের সাথে সম্পর্কিত
- আপনার নিজের ক্যোয়ারী চালান (স্ট্রাকচার্ড কোয়েরি ফরম্যাটে প্রশ্ন)
উদাহরণ: {"structuredQuery":{"select":{"fields":[{"fieldPath":"name"}]},"from":[{"collectionId":"fitness_poses"}]}}
এখন পর্যন্ত আলোচনা করা এই সমস্ত বৈশিষ্ট্যগুলি অ্যাপ্লিকেশনের অংশ যা আপনি এইমাত্র রেপো থেকে তৈরি করেছেন: https://github.com/AbiramiSukumaran/firestore-poserecommender
এটি তৈরি করতে, চালাতে এবং স্থাপন করতে, ক্লাউড শেল টার্মিনাল থেকে নিম্নলিখিত কমান্ডগুলি চালান:
mvn package
mvn spring-boot:run
আপনার ফলাফল দেখতে হবে এবং আপনার অ্যাপ্লিকেশন বৈশিষ্ট্যগুলির সাথে খেলতে সক্ষম হবেন। আউটপুটের ডেমোর জন্য নীচের ভিডিওটি দেখুন:
Firestore, ভেক্টর অনুসন্ধান এবং জেমিনি 2.0 ফ্ল্যাশ সহ পোজ সুপারিশকারী
ঐচ্ছিক পদক্ষেপ:
এটিকে ক্লাউড রানে স্থাপন করতে (ধরে নিচ্ছি যে আপনি ডকারফাইলের সাথে একটি নতুন অ্যাপ্লিকেশন বুটস্ট্র্যাপ করেছেন এবং প্রয়োজন অনুসারে ফাইলগুলি অনুলিপি করেছেন), আপনার প্রকল্প ডিরেক্টরির মধ্যে থেকে ক্লাউড শেল টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালান:
gcloud run deploy --source .
আবেদনের নাম, অঞ্চল কোড প্রদান করুন (আমাদের জন্য একটি নির্বাচন করুন-কেন্দ্রীয়1) এবং প্রম্পট হিসাবে অপ্রমাণিত আমন্ত্রণ "Y" চয়ন করুন৷ একবার স্থাপনা সফল হলে আপনার আবেদনের শেষ পয়েন্ট টার্মিনালে পাওয়া উচিত।
9. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Google ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান।
- প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
- ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন।
10. অভিনন্দন
অভিনন্দন! আপনি একটি শক্তিশালী এবং বুদ্ধিমান যোগ ভঙ্গি ব্যবস্থাপনা অ্যাপ্লিকেশন তৈরি করতে সফলভাবে Firestore ব্যবহার করেছেন। Firestore এর শক্তি, ভেক্টর অনুসন্ধান এক্সটেনশন, এবং Gemini 2.0 Flash এর ক্ষমতা (সিমুলেটেড ইমেজ এবং অডিও জেনারেশন সহ) একত্রিত করে, আমরা CRUD ক্রিয়াকলাপ বাস্তবায়ন, কীওয়ার্ড-ভিত্তিক অনুসন্ধান, প্রাসঙ্গিক ভেক্টর অনুসন্ধান, এবং মাল্টিমিডিয়া সামগ্রী তৈরি করতে একটি সত্যিকারের আকর্ষক এবং তথ্যপূর্ণ যোগ অ্যাপ তৈরি করেছি।
এই পদ্ধতিটি শুধুমাত্র যোগ অ্যাপের মধ্যে সীমাবদ্ধ নয়। মিথুনের মতো এআই মডেলগুলি বিকশিত হতে থাকলে, আরও বেশি নিমগ্ন এবং ব্যক্তিগতকৃত ব্যবহারকারীর অভিজ্ঞতা তৈরি করার সম্ভাবনাগুলি কেবল বাড়বে। এই প্রযুক্তিগুলির সম্পূর্ণ সম্ভাবনাকে কাজে লাগাতে Google ক্লাউড এবং ফায়ারবেস থেকে সাম্প্রতিক উন্নয়ন এবং ডকুমেন্টেশনের সাথে আপডেট থাকতে মনে রাখবেন।
আমি যদি এই অ্যাপটি প্রসারিত করতে চাই, আমি জেমিনি 2.0 ফ্ল্যাশ দিয়ে দুটি জিনিস করার চেষ্টা করব:
- ব্যবহারের ক্ষেত্রে রিয়েল-টাইম ভিশন এবং অডিও স্ট্রিমিং তৈরি করে ব্যবহার করার জন্য মাল্টিমডাল লাইভ API রাখুন।
- অভিজ্ঞতাকে আরও প্রাণবন্ত করতে রিয়েল-টাইম ডেটার সাথে মিথস্ক্রিয়া করার জন্য প্রতিক্রিয়াগুলির পিছনে চিন্তাভাবনা তৈরি করতে চিন্তা মোডকে যুক্ত করুন৷
নির্দ্বিধায় এটি চেষ্টা করে দেখুন এবং একটি টান অনুরোধ পাঠান :>D!!!