১. শুরু করার আগে
এই কোডল্যাবে, আপনি ব্যবহারকারীর দেওয়া ছবির ইনপুটের জন্য সমৃদ্ধ ও ডাইনামিক মেশিন লার্নিং-ভিত্তিক প্রতিক্রিয়া প্রদানের উদ্দেশ্যে Dialogflow-এর সাথে Vision API ইন্টিগ্রেট করবেন। আপনি এমন একটি চ্যাটবট অ্যাপ তৈরি করবেন যা ইনপুট হিসেবে একটি ছবি গ্রহণ করে, Vision API-এর মাধ্যমে সেটিকে প্রসেস করে এবং ব্যবহারকারীকে একটি চিহ্নিত ল্যান্ডমার্ক ফেরত দেয়। উদাহরণস্বরূপ, যদি ব্যবহারকারী তাজমহলের একটি ছবি আপলোড করেন, তাহলে চ্যাটবটটি প্রতিক্রিয়া হিসেবে তাজমহল ফেরত দেবে।
এটি উপকারী, কারণ এর মাধ্যমে আপনি ছবিতে থাকা জিনিসগুলো বিশ্লেষণ করে প্রাপ্ত তথ্যের ভিত্তিতে ব্যবস্থা নিতে পারেন। এছাড়াও, আপনি একটি রিফান্ড-প্রসেসিং সিস্টেম তৈরি করতে পারেন যা ব্যবহারকারীদের রসিদ আপলোড করতে, রসিদ থেকে কেনার তারিখ বের করতে এবং তারিখটি সঠিক হলে রিফান্ড প্রক্রিয়া করতে সাহায্য করবে।
নিম্নলিখিত নমুনা সংলাপটি দেখুন:
ব্যবহারকারী: হাই
চ্যাটবট: হ্যালো! দর্শনীয় স্থানগুলো ঘুরে দেখার জন্য আপনি একটি ছবি আপলোড করতে পারেন।
ব্যবহারকারী: তাজমহল আছে এমন একটি ছবি আপলোড করুন।
চ্যাটবট: ফাইলটি প্রক্রিয়া করা হচ্ছে, ফলাফলগুলো নিচে দেওয়া হলো: তাজমহল, তাজমহল গার্ডেন, তাজমহল।

পূর্বশর্ত
এগিয়ে যাওয়ার আগে, আপনাকে নিম্নলিখিত কোডল্যাবগুলি সম্পূর্ণ করতে হবে:
- Dialogflow দিয়ে একটি অ্যাপয়েন্টমেন্ট শিডিউলার তৈরি করুন
- অ্যাকশনস অন গুগল-এর সাথে একটি ডায়ালগফ্লো চ্যাটবট সংযুক্ত করুন
- Dialogflow-তে এনটিটিগুলি বুঝুন
- একটি ডায়ালগফ্লো অ্যাপের জন্য একটি ফ্রন্টএন্ড জ্যাঙ্গো ক্লায়েন্ট তৈরি করুন
আপনাকে Dialogflow-এর মৌলিক ধারণা এবং গঠন সম্পর্কেও বুঝতে হবে, যা আপনি 'Build a chatbot with Dialogflow' পাথওয়ের নিম্নলিখিত ভিডিওগুলো থেকে জেনে নিতে পারেন:
আপনি যা শিখবেন
- কীভাবে একটি Dialogflow এজেন্ট তৈরি করবেন
- ফাইল আপলোড করার জন্য একটি Dialogflow এজেন্ট কীভাবে আপডেট করবেন
- Dialogflow ফুলফিলমেন্টের সাথে Vision API সংযোগ কীভাবে সেট আপ করবেন
- Dialogflow-এর জন্য কীভাবে একটি Django ফ্রন্টএন্ড অ্যাপ সেট আপ এবং রান করবেন
- অ্যাপ ইঞ্জিনে কীভাবে গুগল ক্লাউডে জ্যাঙ্গো ফ্রন্টএন্ড অ্যাপ ডিপ্লয় করবেন
- কাস্টম ফ্রন্টএন্ড থেকে Dialogflow অ্যাপটি কীভাবে পরীক্ষা করবেন
আপনি যা তৈরি করবেন
- একটি ডায়ালগফ্লো এজেন্ট তৈরি করুন
- ফাইল আপলোড করার জন্য একটি জ্যাঙ্গো ফ্রন্টএন্ড বাস্তবায়ন করুন।
- আপলোড করা ছবির বিপরীতে ভিশন এপিআই কল করার জন্য ডায়ালগফ্লো ফুলফিলমেন্ট প্রয়োগ করুন।
আপনার যা যা লাগবে
- পাইথন সম্পর্কে প্রাথমিক জ্ঞান
- ডায়ালগফ্লো সম্পর্কে প্রাথমিক ধারণা
- ভিশন এপিআই সম্পর্কে প্রাথমিক ধারণা
২. স্থাপত্যের সংক্ষিপ্ত বিবরণ
আপনি একটি কাস্টম জ্যাঙ্গো ফ্রন্টএন্ড ব্যবহার করে একটি নতুন কথোপকথনমূলক অভিজ্ঞতা তৈরি করবেন এবং ভিশন এপিআই (Vision API)-এর সাথে ইন্টিগ্রেট করার জন্য এটিকে প্রসারিত করবেন। আপনি জ্যাঙ্গো ফ্রেমওয়ার্ক ব্যবহার করে ফ্রন্টএন্ডটি বিল্ড করবেন, স্থানীয়ভাবে এটি রান ও টেস্ট করবেন এবং তারপর অ্যাপ ইঞ্জিনে (App Engine) ডেপ্লয় করবেন। ফ্রন্টএন্ডটি দেখতে এইরকম হবে:

অনুরোধ প্রবাহটি নিম্নলিখিত ছবিতে দেখানো অনুযায়ী কাজ করবে:
- ব্যবহারকারী ফ্রন্টএন্ডের মাধ্যমে একটি অনুরোধ পাঠাবেন।
- এর ফলে ব্যবহারকারীর উক্তিকে সঠিক ইনটেন্টের সাথে সংযুক্ত করার জন্য Dialogflow-এর detectIntent API-কে কল করা হবে।
- একবার ‘explore landmark’ ইন্টেন্টটি শনাক্ত হলে, Dialogflow fulfillment ভিশন এপিআই-তে একটি অনুরোধ পাঠাবে, একটি প্রতিক্রিয়া গ্রহণ করবে এবং সেটি ব্যবহারকারীর কাছে পাঠিয়ে দেবে।

সামগ্রিক স্থাপত্যটি দেখতে এইরকম হবে।

৩. ভিশন এপিআই (Vision API) বলতে কী বোঝায়?
ভিশন এপিআই হলো একটি প্রি-ট্রেইনড এমএল মডেল যা ছবি থেকে তথ্য আহরণ করে। এটি আপনাকে একাধিক তথ্য দিতে পারে, যার মধ্যে রয়েছে ছবির লেবেলিং, মুখমণ্ডল ও ল্যান্ডমার্ক শনাক্তকরণ, অপটিক্যাল ক্যারেক্টার রিকগনিশন এবং আপত্তিকর বিষয়বস্তু ট্যাগিং। আরও জানতে, ভিশন এআই দেখুন।
৪. একটি Dialogflow এজেন্ট তৈরি করুন
- Dialogflow কনসোলে যান।
- সাইন ইন করুন। (আপনি যদি প্রথমবার ব্যবহারকারী হন, তাহলে সাইন আপ করার জন্য আপনার ইমেল ব্যবহার করুন।)
- শর্তাবলী ও নিয়মকানুনগুলো মেনে নিন, তাহলেই আপনি কনসোলে প্রবেশ করবেন।
- ক্লিক করুন
একদম নিচে স্ক্রোল করুন এবং 'Create new agent'-এ ক্লিক করুন। 
- এজেন্টের নাম হিসেবে 'VisionAPI' লিখুন।
- তৈরি করুন- এ ক্লিক করুন।
Dialogflow এজেন্টের অংশ হিসেবে নিম্নলিখিত দুটি ডিফল্ট ইন্টেন্ট তৈরি করে:
- ডিফল্ট ওয়েলকাম ইন্টেন্ট আপনার ব্যবহারকারীদের স্বাগত জানায়।
- ডিফল্ট ফলব্যাক ইন্টেন্ট আপনার বটের বুঝতে না পারা সমস্ত প্রশ্ন ধরে ফেলে।
এই মুহূর্তে আপনার কাছে একটি কার্যকরী বট আছে যা ব্যবহারকারীদের স্বাগত জানায়, কিন্তু আপনাকে এটি আপডেট করতে হবে যাতে ব্যবহারকারীরা জানতে পারে যে তারা বিভিন্ন দর্শনীয় স্থান ঘুরে দেখার জন্য একটি ছবি আপলোড করতে পারে।
ব্যবহারকারীকে ছবি আপলোড করার জন্য অবহিত করতে ডিফল্ট ওয়েলকাম ইন্টেন্ট আপডেট করুন।
- ডিফল্ট ওয়েলকাম ইনটেন্ট-এ ক্লিক করুন।
- Responses > Default > Text or SSML Response- এ যান এবং "Hi! You can upload a picture to explore landmarks." লিখুন।

সত্তা তৈরি করুন
- সত্তাগুলিতে ক্লিক করুন।

- Create Entity-তে ক্লিক করুন, এটির নাম 'filename' দিন এবং Save-এ ক্লিক করুন।

নতুন অভিপ্রায় তৈরি করুন
- ইনটেন্ট > ইনটেন্ট তৈরি করুন- এ ক্লিক করুন।
- Intent name হিসেবে 'Explore uploaded image' লিখুন।
- Training phrases > Add Training Phrases- এ ক্লিক করুন এবং ইউজার এক্সপ্রেশন হিসেবে 'file is
demo.jpg" ও 'file istaj.jpeg" লিখুন, যেখানে এনটিটি হিসেবে থাকবে @filename ।

- Responses > Add Response > Default > Text or SSML Response-এ ক্লিক করুন। 'Assessing file' লিখুন এবং Add Responses-এ ক্লিক করুন।
- Fulfillment-এ ক্লিক করুন > Fullfillment সক্ষম করুন এবং এই ইন্টেন্টের জন্য ওয়েবহুক কল সক্ষম করা চালু করুন।

৫. ভিশন এপিআই (Vision API)-এর সাথে ইন্টিগ্রেট করার জন্য ফুলফিলমেন্ট সেট আপ করুন।
- ফুলফিলমেন্ট- এ ক্লিক করুন।
- ইনলাইন এডিটর সক্রিয় করুন।

- নিম্নলিখিত কোড দিয়ে
index.jsফাইলটি আপডেট করুন এবংYOUR-BUCKET-NAMEজায়গায় আপনার ক্লাউড স্টোরেজ বাকেটের নামটি বসান।
'use strict';
const functions = require('firebase-functions');
const {google} = require('googleapis');
const {WebhookClient} = require('dialogflow-fulfillment');
const vision = require('@google-cloud/vision');
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
const bucketName = 'YOUR-BUCKET-NAME';
const timeZone = 'America/Los_Angeles';
const timeZoneOffset = '-07:00';
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
console.log("Parameters", agent.parameters);
function applyML(agent){
const filename = agent.parameters.filename;
console.log("filename is: ", filename);
// call vision API to detect text
return callVisionApi(agent, bucketName, filename).then(result => {
console.log(`result is ${result}`);
agent.add(`file is being processed, here are the results: ${result}`);
//agent.add(`file is being processed ${result}`);
}).catch((error)=> {
agent.add(`error occurred at apply ml function` + error);
});
}
let intentMap = new Map();
intentMap.set('Explore uploaded image', applyML);
agent.handleRequest(intentMap);
});
async function callVisionApi(agent, bucketName, fileName){
// [START vision_text_detection_gcs]
// Imports the Google Cloud client libraries
// Creates a client
const client = new vision.ImageAnnotatorClient();
try {
// Performs text detection on the gcs file
const [result] = await client.landmarkDetection(`gs://${bucketName}/${fileName}`);
const detections = result.landmarkAnnotations;
var detected = [];
detections.forEach(text => {
console.log(text.description);
detected.push(text.description);
});
return detected;
}
catch(error) {
console.log('fetch failed', error);
return [];
}
}
-
package.jsonফাইলের বিষয়বস্তু প্রতিস্থাপন করতে নিম্নলিখিতটি পেস্ট করুন।
{
"name": "dialogflowFirebaseFulfillment",
"description": "Dialogflow fulfillment for the bike shop sample",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "6"
},
"scripts": {
"lint": "semistandard --fix \"**/*.js\"",
"start": "firebase deploy --only functions",
"deploy": "firebase deploy --only functions"
},
"dependencies": {
"firebase-functions": "2.0.2",
"firebase-admin": "^5.13.1",
"actions-on-google": "2.2.0",
"googleapis": "^27.0.0",
"dialogflow-fulfillment": "^0.6.1",
"@google-cloud/bigquery": "^1.3.0",
"@google-cloud/storage": "^2.0.0",
"@google-cloud/vision": "^0.25.0"
}
}
- সংরক্ষণ করুন-এ ক্লিক করুন।
৬. ফ্রন্টএন্ড অ্যাপটি ডাউনলোড করে চালান।
- এই রিপোজিটরিটি আপনার স্থানীয় মেশিনে ক্লোন করুন:
https://github.com/priyankavergadia/visionapi-dialogflow.git
- যে ডিরেক্টরিতে কোডটি রয়েছে, সেখানে যান। বিকল্পভাবে, আপনি নমুনাটি জিপ ফাইল হিসেবে ডাউনলোড করে এক্সট্র্যাক্ট করতে পারেন।
cd visionapi-dialogflow
৭. আপনার স্থানীয় পরিবেশ প্রস্তুত করুন
ডেপ্লয় করার পর, আপনার অ্যাপ আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সের সাথে যোগাযোগের জন্য অ্যাপ ইঞ্জিন স্ট্যান্ডার্ড এনভায়রনমেন্টে বিল্ট-ইন ক্লাউড এসকিউএল প্রক্সি ব্যবহার করে। তবে, আপনার অ্যাপটি স্থানীয়ভাবে পরীক্ষা করার জন্য, আপনাকে অবশ্যই আপনার ডেভেলপমেন্ট এনভায়রনমেন্টে ক্লাউড এসকিউএল প্রক্সির একটি স্থানীয় কপি ইনস্টল এবং ব্যবহার করতে হবে। আরও জানতে, ‘ক্লাউড এসকিউএল প্রক্সি সম্পর্কে’ দেখুন।
আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সে সাধারণ অ্যাডমিন কাজগুলো করার জন্য, আপনি ক্লাউড এসকিউএল ফর মাইএসকিউএল ক্লায়েন্ট ব্যবহার করতে পারেন।
ক্লাউড SQL প্রক্সি ইনস্টল করুন
নিম্নলিখিত কমান্ড ব্যবহার করে ক্লাউড এসকিউএল প্রক্সি ডাউনলোড এবং ইনস্টল করুন। স্থানীয়ভাবে চালানোর সময় আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সের সাথে সংযোগ করতে ক্লাউড এসকিউএল প্রক্সি ব্যবহৃত হয়।
প্রক্সি ডাউনলোড করুন:
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
প্রক্সিটিকে এক্সিকিউটেবল করুন।
chmod +x cloud_sql_proxy
একটি ক্লাউড SQL ইনস্ট্যান্স তৈরি করুন
- একটি Cloud SQL for MySQL Second Generation ইনস্ট্যান্স তৈরি করুন। নাম হিসেবে "polls-instance" বা এই ধরনের কিছু লিখুন। ইনস্ট্যান্সটি প্রস্তুত হতে কয়েক মিনিট সময় লাগতে পারে। প্রস্তুত হয়ে গেলে, এটি ইনস্ট্যান্স তালিকায় দেখা যাবে।
- এখন gcloud কমান্ড-লাইন টুল ব্যবহার করে নিম্নলিখিত কমান্ডটি চালান, যেখানে
[YOUR_INSTANCE_NAME]হলো আপনার ক্লাউড SQL ইনস্ট্যান্সের নাম। পরবর্তী ধাপের জন্যconnectionNameএর প্রদর্শিত মানটি লিখে রাখুন। এটি[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]ফরম্যাটে প্রদর্শিত হয়।
gcloud sql instances describe [YOUR_INSTANCE_NAME]
বিকল্পভাবে, আপনি কনসোলে ইনস্ট্যান্সটিতে ক্লিক করে ইনস্ট্যান্স সংযোগের নামটি পেতে পারেন।

আপনার ক্লাউড SQL ইনস্ট্যান্স শুরু করুন
পূর্ববর্তী বিভাগ থেকে connectionName ব্যবহার করে ক্লাউড এসকিউএল প্রক্সি চালু করুন।
./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306
[YOUR_INSTANCE_CONNECTION_NAME] এর জায়গায় আগের অংশে আপনার রেকর্ড করা মানটি বসান। এটি স্থানীয় পরীক্ষার উদ্দেশ্যে আপনার স্থানীয় কম্পিউটার থেকে আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সে একটি সংযোগ স্থাপন করে। আপনার অ্যাপটি স্থানীয়ভাবে পরীক্ষা করার পুরো সময় জুড়ে ক্লাউড এসকিউএল প্রক্সি চালু রাখুন।
এরপর, একটি নতুন ক্লাউড এসকিউএল ব্যবহারকারী এবং ডেটাবেস তৈরি করুন।
- আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সের জন্য গুগল ক্লাউড কনসোল ব্যবহার করে `polls-instance` নামের একটি নতুন ডেটাবেস তৈরি করুন। উদাহরণস্বরূপ, আপনি নাম হিসেবে 'polls' লিখতে পারেন।

- আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সের জন্য ক্লাউড কনসোল ব্যবহার করে polls-instance নামে একটি নতুন ব্যবহারকারী তৈরি করুন।

ডাটাবেস সেটিংস কনফিগার করুন
- সম্পাদনার জন্য
mysite/settings-changeme.pyখুলুন। - ফাইলটির নাম পরিবর্তন করে
setting.pyরাখুন। - দুটি জায়গায়,
[YOUR-USERNAME]এবং[YOUR-PASSWORD]এর পরিবর্তে পূর্ববর্তী বিভাগে তৈরি করা ডাটাবেস ইউজারনেম এবং পাসওয়ার্ড লিখুন। এটি অ্যাপ ইঞ্জিন ডেপ্লয়মেন্ট এবং লোকাল টেস্টিংয়ের জন্য ডাটাবেসের সাথে সংযোগ স্থাপন করতে সাহায্য করে। -
'HOST': 'cloudsql/ [PROJECT_NAME]:[REGION_NAME]:[INSTANC]' লাইনে[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]এর জায়গায় পূর্ববর্তী বিভাগে প্রাপ্ত আপনার ইনস্ট্যান্সের নামটি বসান। - নিম্নলিখিত কমান্ডটি চালান এবং পরবর্তী ধাপের জন্য আউটপুট হওয়া
connectionNameভ্যালুটি কপি করুন।
gcloud sql instances describe [YOUR_INSTANCE_NAME]
- পূর্ববর্তী ধাপে আপনার রেকর্ড করা মানটি দিয়ে
[YOUR-CONNECTION-NAME]প্রতিস্থাপন করুন। -
[YOUR-DATABASE]জায়গায় পূর্ববর্তী বিভাগে আপনার বেছে নেওয়া নামটি বসান।
# [START db_setup]
if os.getenv('GAE_APPLICATION', None):
# Running on production App Engine, so connect to Google Cloud SQL using
# the unix socket at /cloudsql/<your-cloudsql-connection string>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]',
'NAME': '[YOUR-DATABASE]',
}
}
else:
# Running locally so connect to either a local MySQL instance or connect to
# Cloud SQL via the proxy. To start the proxy via command line:
# $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
# See https://cloud.google.com/sql/docs/mysql-connect-proxy
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'NAME': '[YOUR-DATABASE]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]'
}
}
# [END db_setup]
-
settings.pyবন্ধ করুন এবং সংরক্ষণ করুন।
৮. পরিষেবা অ্যাকাউন্ট তৈরি করুন
- Dialogflow-এর কনসোলে, ক্লিক করুন
জেনারেল ট্যাবে, গুগল প্রজেক্ট > প্রজেক্ট আইডি -তে যান এবং গুগল ক্লাউড-এ ক্লিক করুন।
ক্লাউড কনসোল খুলতে। 
- নেভিগেশন মেনু ☰ > IAM & Admin > Service accounts- এ ক্লিক করুন, তারপর ক্লিক করুন।
Dialogflow ইন্টিগ্রেশনগুলির পাশে থাকা Create key-তে ক্লিক করুন।

- আপনার কম্পিউটারে একটি JSON ফাইল ডাউনলোড হবে, যা পরবর্তী সেটআপ পর্বগুলোতে আপনার প্রয়োজন হবে।
৯. অ্যাপ থেকে কল করার জন্য Dialogflow detectIntent এন্ডপয়েন্টটি সেট আপ করুন।
- চ্যাট ফোল্ডারে,
key-sample.jsonজায়গায় আপনার ক্রেডেনশিয়ালস JSON ফাইলটি রাখুন এবং ফাইলটির নাম দিনkey.json। - chat ফোল্ডারের
views.pyফাইলে,GOOGLE_PROJECT_ID = "<YOUR_PROJECT_ID>"লাইনটি পরিবর্তন করে আপনার প্রজেক্ট আইডি দিন।
১০. ক্লাউড স্টোরেজ বাকেট তৈরি করুন
ফ্রন্টএন্ড স্ট্যাটিক অবজেক্টগুলোর জন্য একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন
- ক্লাউড কনসোলে, নেভিগেশন মেনু ☰ > স্টোরেজ- এ ক্লিক করুন।

- বালতি তৈরি করুন -এ ক্লিক করুন।
- একটি বিশ্বব্যাপী অনন্য নাম প্রদান করুন।

- আপনার ডেটা কোথায় সংরক্ষণ করবেন তা বেছে নিন। অঞ্চল বাছাই করুন এবং আপনার প্রয়োজন অনুযায়ী সবচেয়ে উপযুক্ত স্থানটি নির্বাচন করুন।
- আপনার ডিফল্ট স্টোরেজ ক্লাস হিসেবে স্ট্যান্ডার্ড বেছে নিন।

- ‘Set permissions uniformly at bucket-level (Bucket Policy Only)’ বিকল্পটি বেছে নিন, তারপর বাকেটটি তৈরি করতে ‘Continue’ ক্লিক করুন।

- বাকেটটি তৈরি হয়ে গেলে, নেভিগেশন মেনু ☰ > স্টোরেজ > ব্রাউজার-এ ক্লিক করুন এবং আপনার তৈরি করা বাকেটটি খুঁজে বের করুন।

- ক্লিক করুন
সংশ্লিষ্ট বাকেটের পাশে থাকা অপশনে গিয়ে 'Edit bucket permissions'-এ ক্লিক করুন।

- 'Add Members'-এ ক্লিক করুন, ' New members'- এ ক্লিক করে 'allUsers' লিখুন, তারপর 'Select a role > Storage Object Viewer'-এ ক্লিক করুন। এটি allUsers- কে স্ট্যাটিক ফ্রন্টএন্ড ফাইলগুলো দেখার অ্যাক্সেস দেয়। ফাইলগুলোর জন্য এটি কোনো আদর্শ নিরাপত্তা ব্যবস্থা নয়, কিন্তু এই নির্দিষ্ট কোডল্যাবের উদ্দেশ্য পূরণের জন্য এটি কাজ করে।

ব্যবহারকারীর আপলোড করা ছবির জন্য একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন
ব্যবহারকারীর ছবি আপলোড করার জন্য একটি আলাদা বাকেট তৈরি করতে একই নির্দেশাবলী অনুসরণ করুন। পারমিশন আবার 'allUsers' এ সেট করুন, কিন্তু রোল হিসেবে Storage Object Creator এবং Storage Object Viewer নির্বাচন করুন।
১১. ফ্রন্টএন্ড অ্যাপে ক্লাউড স্টোরেজ বাকেটগুলো কনফিগার করুন।
settings.py-তে ক্লাউড স্টোরেজ বাকেটটি কনফিগার করুন।
-
mysite/setting.pyখুলুন। -
GCS_BUCKETভেরিয়েবলটি খুঁজুন এবং'<YOUR-GCS-BUCKET-NAME>'-এর জায়গায় আপনার ক্লাউড স্টোরেজ স্ট্যাটিক বাকেটটি বসান। -
GS_MEDIA_BUCKET_NAMEভেরিয়েবলটি খুঁজুন এবং'<YOUR-GCS-BUCKET-NAME-MEDIA>'-এর জায়গায় ইমেজগুলোর জন্য আপনার ক্লাউড স্টোরেজ বাকেটের নামটি বসান। -
GS_STATIC_BUCKET_NAMEভেরিয়েবলটি খুঁজুন এবং'<YOUR-GCS-BUCKET-NAME-STATIC>'-এর জায়গায় স্ট্যাটিক ফাইলগুলির জন্য আপনার ক্লাউড স্টোরেজ বাকেটের নামটি বসান। - ফাইলটি সংরক্ষণ করুন।
GCS_BUCKET = '<YOUR-GCS-BUCKET-NAME>'
GS_MEDIA_BUCKET_NAME = '<YOUR-GCS-BUCKET-NAME-MEDIA>'
GS_STATIC_BUCKET_NAME = '<YOUR-GCS-BUCKET-NAME-STATIC>'
home.html-এ ক্লাউড স্টোরেজ বাকেট কনফিগার করুন
- চ্যাট ফোল্ডারটি খুলুন, তারপর
templatesখুলুন এবংhome-changeme.htmlনাম পরিবর্তন করেhome.htmlরাখুন। -
<YOUR-GCS-BUCKET-NAME-MEDIA>খুঁজুন এবং ব্যবহারকারীর আপলোড করা ফাইলটি যেখানে সংরক্ষণ করতে চান, সেই বাকেটের নামটি দিয়ে এটি প্রতিস্থাপন করুন। এটি আপনাকে ব্যবহারকারীর আপলোড করা ফাইলটি ফ্রন্টএন্ডে সংরক্ষণ করা এবং স্ট্যাটিক অ্যাসেটগুলিকে ক্লাউড স্টোরেজ বাকেটে রাখা থেকে বিরত রাখে। ভিশন এপিআই ফাইলটি গ্রহণ করতে এবং পূর্বাভাস তৈরি করতে ক্লাউড স্টোরেজ বাকেটকে কল করে।
১২. অ্যাপটি স্থানীয়ভাবে বিল্ড ও রান করুন।
আপনার স্থানীয় কম্পিউটারে জ্যাঙ্গো অ্যাপটি চালানোর জন্য, আপনাকে পাইথন, পিপ এবং ভার্চুয়ালএনভ সহ একটি পাইথন ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করতে হবে। নির্দেশাবলীর জন্য, "একটি পাইথন ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করা" অংশটি দেখুন।
- একটি পৃথক পাইথন পরিবেশ তৈরি করুন এবং প্রয়োজনীয় নির্ভরতাগুলো ইনস্টল করুন।
virtualenv env source env/bin/activate pip install -r requirements.txt
- আপনার মডেলগুলো সেট আপ করতে জ্যাঙ্গো মাইগ্রেশনগুলো চালান।
python3 manage.py makemigrations python3 manage.py makemigrations polls python3 manage.py migrate
- একটি স্থানীয় ওয়েব সার্ভার চালু করুন।
python3 manage.py runserver
- আপনার ওয়েব ব্রাউজারে http://localhost:8000/ -এ যান। আপনি এইরকম একটি সাধারণ ওয়েবপেজ দেখতে পাবেন:

নমুনা অ্যাপ পেজগুলো আপনার কম্পিউটারে চলমান জ্যাঙ্গো ওয়েব সার্ভারের মাধ্যমে সরবরাহ করা হয়। যখন আপনি সামনে এগোতে প্রস্তুত হবেন, তখন স্থানীয় ওয়েব সার্ভারটি বন্ধ করতে Control+C (ম্যাকিনটোশে Command+C ) চাপুন।
Django অ্যাডমিন কনসোল ব্যবহার করুন
- একজন সুপারইউজার তৈরি করুন।
python3 manage.py createsuperuser
- একটি স্থানীয় ওয়েব সার্ভার চালু করুন।
python3 manage.py runserver
- আপনার ওয়েব ব্রাউজারে http://localhost:8000/admin/ এ যান। অ্যাডমিন সাইটে লগ অন করতে,
createsuperuserচালানোর সময় আপনার তৈরি করা ইউজারনেম এবং পাসওয়ার্ডটি লিখুন।
১৩. অ্যাপটি অ্যাপ ইঞ্জিন স্ট্যান্ডার্ড এনভায়রনমেন্টে ডেপ্লয় করুন।
নিম্নলিখিত কমান্ডটি চালিয়ে সমস্ত স্ট্যাটিক কন্টেন্ট একটি ফোল্ডারে জড়ো করুন, যা অ্যাপের সমস্ত স্ট্যাটিক ফাইলকে settings.py তে STATIC_ROOT দ্বারা নির্দিষ্ট ফোল্ডারে সরিয়ে দেবে:
python3 manage.py collectstatic
অ্যাপের যে ডিরেক্টরিতে app.yaml ফাইলটি রয়েছে, সেখান থেকে নিম্নলিখিত কমান্ডটি চালিয়ে অ্যাপটি আপলোড করুন:
gcloud app deploy
আপডেট সম্পন্ন হওয়ার বার্তাটির জন্য অপেক্ষা করুন।
১৪. ফ্রন্টএন্ড অ্যাপটি পরীক্ষা করুন
আপনার ওয়েব ব্রাউজারে https://<your_project_id>.appspot.com-এ যান।
এইবার, আপনার অনুরোধটি অ্যাপ ইঞ্জিন স্ট্যান্ডার্ড এনভায়রনমেন্টে চলমান একটি ওয়েব সার্ভার দ্বারা পরিবেশিত হচ্ছে।
app deploy কমান্ডটি app.yaml এ বর্ণিত পদ্ধতি অনুযায়ী অ্যাপটিকে ডেপ্লয় করে এবং নতুন ডেপ্লয় করা ভার্সনটিকে ডিফল্ট ভার্সন হিসেবে সেট করে, যার ফলে এটি সমস্ত নতুন ট্র্যাফিক পরিবেশন করে।
১৫. উৎপাদন
যখন আপনি প্রোডাকশনে আপনার কন্টেন্ট পরিবেশন করার জন্য প্রস্তুত হবেন, তখন mysite/settings.py ফাইলে DEBUG ভেরিয়েবলটির মান False এ পরিবর্তন করুন।
১৬. আপনার চ্যাটবট পরীক্ষা করুন
আপনি সিমুলেটরে আপনার চ্যাটবট পরীক্ষা করতে পারেন, অথবা পূর্বে তৈরি করা ওয়েব বা গুগল হোম ইন্টিগ্রেশন ব্যবহার করতে পারেন।
- ব্যবহারকারী: "হাই"
- চ্যাটবট: "হাই! দর্শনীয় স্থানগুলো ঘুরে দেখার জন্য আপনি একটি ছবি আপলোড করতে পারেন।"
- ব্যবহারকারী একটি ছবি আপলোড করেন।
এই ছবিটি ডাউনলোড করুন, এর নাম দিন demo.jpg এবং এটি ব্যবহার করুন।

- চ্যাটবট: "ফাইলটি প্রক্রিয়া করা হচ্ছে, ফলাফলগুলো হলো: গোল্ডেন গেট ব্রিজ, গোল্ডেন গেট ন্যাশনাল রিক্রিয়েশন এরিয়া, গোল্ডেন গেট ব্রিজ, গোল্ডেন গেট ব্রিজ, গোল্ডেন গেট ব্রিজ।"
সামগ্রিকভাবে, এটি দেখতে এইরকম হওয়া উচিত:

১৭. পরিষ্কার করা
আপনি যদি অন্যান্য Dialogflow কোডল্যাবগুলো সম্পন্ন করতে চান, তাহলে এই অংশটি এড়িয়ে যান এবং পরে সেখানে ফিরে আসতে পারেন।
Dialogflow এজেন্টটি মুছে ফেলুন
- ক্লিক করুন
আপনার বর্তমান এজেন্টের পাশে।

- জেনারেল ট্যাবে, নিচে স্ক্রোল করুন এবং ‘ডিলিট দিস এজেন্ট’ এ ক্লিক করুন।
- প্রদর্শিত উইন্ডোতে Delete টাইপ করুন এবং Delete-এ ক্লিক করুন।
১৮. অভিনন্দন
আপনি Dialogflow-তে একটি চ্যাটবট তৈরি করেছেন এবং এটিকে Vision API-এর সাথে সংযুক্ত করেছেন। আপনি এখন একজন চ্যাটবট ডেভেলপার!
আরও জানুন
আরও জানতে, Dialogflow গিটহাব পেজে থাকা কোড নমুনাগুলো দেখুন।