1. मकसद
खास जानकारी
यह कोडलैब, इवेंट मैनेजमेंट की सुविधा की मदद से इवेंट भेजने के लिए, शुरुआत से लेकर आखिर तक Vertex AI Vision ऐप्लिकेशन बनाने पर फ़ोकस करेगा. हम इन चीज़ों को कैप्चर करने के आधार पर इवेंट जनरेट करने के लिए, पहले से ट्रेन किए गए खास मॉडल ऑक्यूपेंसी Analytics की इन-बिल्ट सुविधाओं का इस्तेमाल करेंगे:
- किसी खास लाइन पर सड़क पार करने वाले वाहनों और लोगों की संख्या गिनें.
- सड़क के किसी तय क्षेत्र में वाहन/व्यक्ति की संख्या की गिनती करें.
- सड़क के किसी भी हिस्से में भीड़ का पता लगाना.
आपको इनके बारे में जानकारी मिलेगी
- स्ट्रीमिंग के लिए वीडियो डालने का तरीका
- Vertex AI Vision में ऐप्लिकेशन बनाने का तरीका
- बुकिंग के आंकड़े देखने की सुविधा में उपलब्ध अलग-अलग सुविधाएं और उनका इस्तेमाल करने का तरीका
- ऐप्लिकेशन को डिप्लॉय करने का तरीका
- अपने स्टोरेज Vertex AI Vision के मीडिया वेयरहाउस में वीडियो खोजने का तरीका.
- ऐसा Cloud फ़ंक्शन बनाने का तरीका जो ऑक्यूपेंसी Analytics मॉडल का डेटा प्रोसेस करता है.
- Pub/Sub विषय और सदस्यता बनाने का तरीका.
- Pub/Sub विषय के ज़रिए इवेंट भेजने के लिए, इवेंट मैनेजमेंट को सेट अप करने का तरीका.
2. शुरू करने से पहले
- Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं. ध्यान दें: अगर इस प्रोसेस में बनाए गए संसाधनों का इस्तेमाल नहीं करना है, तो मौजूदा प्रोजेक्ट चुनने के बजाय कोई प्रोजेक्ट बनाएं. इन चरणों को पूरा करने के बाद, प्रोजेक्ट से जुड़े सभी संसाधनों को हटाकर, प्रोजेक्ट को मिटाया जा सकता है. प्रोजेक्ट सिलेक्टर पर जाएं
- पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग की सुविधा चालू है या नहीं, यह देखने का तरीका जानें.
- Compute Engine और Vision AI API चालू करें. एपीआई चालू करना
सेवा खाता बनाएं:
- Google Cloud Console में, सेवा खाता बनाएं पेज पर जाएं. 'सेवा खाता बनाएं' पर जाएं
- अपना प्रोजेक्ट चुनें.
- सेवा खाते का नाम फ़ील्ड में, कोई नाम डालें. Google Cloud Console, इस नाम के आधार पर सेवा खाते का आईडी फ़ील्ड भर देता है. सेवा खाते की जानकारी फ़ील्ड में, ब्यौरा डालें. उदाहरण के लिए, तुरंत शुरू करने के लिए सेवा खाता.
- बनाएं और जारी रखें पर क्लिक करें.
- अपने प्रोजेक्ट का ऐक्सेस देने के लिए, अपने सेवा खाते को ये भूमिकाएं दें: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (beta), Storage > Storage Object Viewer † . कोई भूमिका चुनें सूची में, कोई भूमिका चुनें. अन्य भूमिकाओं के लिए, अन्य भूमिका जोड़ें पर क्लिक करें और हर भूमिका जोड़ें. ध्यान दें: भूमिका फ़ील्ड से यह तय होता है कि आपका सेवा खाता, आपके प्रोजेक्ट में कौनसे संसाधन ऐक्सेस कर सकता है. आपके पास बाद में इन भूमिकाओं को रद्द करने या अतिरिक्त भूमिकाएं देने का विकल्प होता है. प्रोडक्शन का काम करते समय, मालिक, एडिटर या दर्शक की भूमिकाएं न दें. इसके बजाय, अपनी ज़रूरतों के हिसाब से, पहले से तय की गई भूमिका या कस्टम भूमिका दें.
- जारी रखें पर क्लिक करें.
- सेवा खाता बनाने की प्रोसेस पूरी करने के लिए, हो गया पर क्लिक करें. ब्राउज़र विंडो बंद न करें. इसका इस्तेमाल अगले चरण में किया जाएगा.
सेवा खाता कुंजी बनाएं:
- Google Cloud Console में, उस सेवा खाते के ईमेल पते पर क्लिक करें जिसे आपने बनाया है.
- बटन पर क्लिक करें.
- कुंजी जोड़ें पर क्लिक करें. इसके बाद, नई कुंजी बनाएं पर क्लिक करें.
- बनाएं पर क्लिक करें. आपके कंप्यूटर पर JSON कुंजी फ़ाइल डाउनलोड हो जाती है.
- Close पर क्लिक करें.
- Google Cloud CLI को इंस्टॉल और शुरू करें.
† भूमिका की ज़रूरत सिर्फ़ तब होती है, जब Cloud Storage बकेट से सैंपल वीडियो फ़ाइल कॉपी की जाती है.
3. स्ट्रीमिंग के लिए वीडियो फ़ाइल डालें
व्यस्तता की दर से जुड़े आंकड़े दिखाने वाले ऐप्लिकेशन पर, वीडियो का डेटा स्ट्रीम करने के लिए, vaictl का इस्तेमाल किया जा सकता है.
सबसे पहले, Cloud Console में Vision AI API को चालू करें
नई स्ट्रीम रजिस्टर करना
- Vertex AI Vision के बाएं पैनल में, स्ट्रीम टैब पर क्लिक करें.
- 'रजिस्टर करें' पर क्लिक करें
- स्ट्रीम के नाम में 'traffic-stream' डालें
- क्षेत्र में ‘us-central1' डालें
- रजिस्टर करें पर क्लिक करें
स्ट्रीम को रजिस्टर होने में कुछ मिनट लगेंगे.
सैंपल वीडियो तैयार करना
- नीचे दिए गए gsutil cp निर्देश की मदद से, सैंपल वीडियो कॉपी किया जा सकता है. इस वैरिएबल को बदलें:
- सोर्स: इस्तेमाल की जाने वाली वीडियो फ़ाइल की जगह. अपनी वीडियो फ़ाइल के सोर्स (उदाहरण के लिए, gs://BUCKET_NAME/FILENAME.mp4) का इस्तेमाल किया जा सकता है. इसके अलावा, सैंपल वीडियो (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(लोगों और वाहनों वाला वीडियो, सोर्स) का इस्तेमाल भी किया जा सकता है
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 gsutil cp $SOURCE .
अपनी स्ट्रीम में डेटा डालना
- इस लोकल वीडियो फ़ाइल को ऐप्लिकेशन की इनपुट स्ट्रीम में भेजने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करें. आपको वैरिएबल के लिए ये सबस्टिट्यूशन करने होंगे:
- PROJECT_ID: आपका Google Cloud प्रोजेक्ट आईडी.
- LOCATION_ID: आपका जगह का आईडी. उदाहरण के लिए, us-central1. ज़्यादा जानकारी के लिए, क्लाउड की जगहें देखें.
- LOCAL_FILE: किसी लोकल वीडियो फ़ाइल का फ़ाइल नाम. उदाहरण के लिए, street_vehicles_people.mp4.
- –लूप फ़्लैग: वैकल्पिक. स्ट्रीमिंग को सिम्युलेट करने के लिए, फ़ाइल के डेटा को लूप में चलाता है.
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
- यह कमांड, किसी वीडियो फ़ाइल को स्ट्रीम पर स्ट्रीम करता है. –loop फ़्लैग का इस्तेमाल करने पर, वीडियो तब तक स्ट्रीम में लूप में चलता रहेगा, जब तक कि आपने कमांड को बंद नहीं कर दिया. हम इस निर्देश को बैकग्राउंड जॉब के तौर पर चलाएंगे, ताकि यह स्ट्रीमिंग करती रहे.
- ( इसे बैकग्राउंड में चलाने के लिए शुरुआत में nohup और आखिर में '&' जोड़ें)
nohup vaictl -p $PROJECT_ID \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &
डेटा डालने की कार्रवाई शुरू करने और डैशबोर्ड पर वीडियो दिखने के बीच ~100 सेकंड लग सकते हैं.
स्ट्रीम डालने की सुविधा उपलब्ध होने के बाद, Vertex AI Vision के डैशबोर्ड के स्ट्रीम टैब में जाकर, ट्रैफ़िक-स्ट्रीम स्ट्रीम चुनकर वीडियो फ़ीड देखा जा सकता है.
Google Cloud कंसोल में, स्ट्रीम में डाले जा रहे वीडियो का लाइव व्यू. वीडियो का क्रेडिट: Pixabay पर मौजूद Elizabeth Mavor (पिक्सलेशन जोड़ा गया है).
4. Cloud फ़ंक्शन बनाना
मॉडल के डेटा को पचाने और इवेंट जनरेट करने के लिए, हमें Cloud फ़ंक्शन की ज़रूरत होगी. इवेंट को बाद में इवेंट चैनल के ज़रिए भेजा जाएगा.
Cloud Function के बारे में ज़्यादा जानने के लिए यहां जाएं
ऐसा Cloud फ़ंक्शन बनाना जो आपके मॉडल को सुनता हो
- Cloud Function यूज़र इंटरफ़ेस (यूआई) बनाने वाले पेज पर जाएं.
- फ़ंक्शन का नाम सेट करें, जिसका इस्तेमाल बाद में इवेंट मैनेजमेंट की सेटिंग में इस Cloud Function को रेफ़र करने के लिए किया जाएगा.
- पक्का करें कि देश/इलाका आपके आवेदन से मेल खाता हो.
- बदलाव करें और फिर ट्रिगर की सेटिंग सेव करें.
- "कोड" वाले हिस्से पर जाने के लिए, अगले बटन पर क्लिक करें.
- अपने क्लाउड फ़ंक्शन में बदलाव करें. यहां Node.js रनटाइम का उदाहरण दिया गया है.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
// Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
// For more about logging, please see https://cloud.google.com/functions/docs/monitoring
// The processor output will be stored in req.body.
const messageString = constructMessage(req.body);
// Send your message to operator output with res HTTP response context.
res.status(200).send(messageString);
};
function constructMessage(data) {
/**
* Typically, your processor output should contains appPlatformMetadata & it's designed output.
* For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
* to construct the return annotation as such.
*/
// access appPlatformMetat.
const appPlatformMetadata = data.appPlatformMetadata;
// access annotations.
const annotations = data.annotations.map(annotation => {
// This is a mock OccupancyCountingPredictionResult annotation.
return {"annotation" : {"track_info": {"track_id": "12345"}}};
});
const events = [];
for(const annotation of annotations) {
events.push({
"event_message": "Detection event",
"payload" : {
"description" : "object detected"
},
"event_id" : "track_id_12345"
});
}
/**
* Typically, your cloud function should return a string represent a JSON which has two fields:
* "annotations" must follow the specification of the target model.
* "events" should be of type "AppPlatformEventBody".
*/
const messageJson = {
"annotations": annotations,
"events": events,
};
return JSON.stringify(messageJson);
}
- फ़ंक्शन को डिप्लॉय करने के लिए, "डिप्लॉय करें" बटन पर क्लिक करें.
5. Pub/Sub विषय और सदस्यता बनाएं
हमें ऐप्लिकेशन को एक Pub/Sub टॉपिक देना होगा, ताकि वह उस पर इवेंट भेज सके. इवेंट पाने के लिए, Pub/Sub सदस्यता को कॉन्फ़िगर किए गए ऑप्टिक की सदस्यता लेनी होगी.
Pub/Sub विषय के बारे में ज़्यादा जानने के लिए यहां और सदस्यता के बारे में ज़्यादा जानने के लिए यहां जाएं.
Pub/Sub का कोई विषय बनाना
Pub/Sub विषय बनाने के लिए, gcloud CLI का इस्तेमाल किया जा सकता है: (आपको SUBSCRIPTION_ID को अपने सेट अप की असल वैल्यू से बदलना चाहिए)
gcloud pubsub topics create TOPIC_ID
इसके अलावा, Pub/Sub यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल किया जा सकता है
Pub/Sub की सदस्यता बनाना
Pub/Sub सदस्यता बनाने के लिए, gcloud CLI का इस्तेमाल किया जा सकता है: (आपको SUBSCRIPTION_ID और TOPIC_ID को अपने सेट अप की असल वैल्यू से बदलना चाहिए)
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \
इसके अलावा, Pub/Sub यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल भी किया जा सकता है
6. एक ऐप्लिकेशन बनाएं
सबसे पहले, आपको ऐसा ऐप्लिकेशन बनाना होगा जो आपके डेटा को प्रोसेस करता हो. ऐप्लिकेशन को ऑटोमेटेड पाइपलाइन के तौर पर देखा जा सकता है, जो इन चीज़ों को जोड़ती है:
- डेटा डालना: किसी वीडियो फ़ीड को स्ट्रीम में डाला जाता है.
- डेटा का विश्लेषण: डेटा डालने के बाद, एआई(कंप्यूटर विज़न) मॉडल जोड़ा जा सकता है.
- डेटा स्टोरेज: वीडियो फ़ीड के दो वर्शन (ओरिजनल स्ट्रीम और एआई मॉडल से प्रोसेस की जाने वाली स्ट्रीम) को मीडिया वेयरहाउस में सेव किया जा सकता है.
Google Cloud Console में, किसी ऐप्लिकेशन को ग्राफ़ के तौर पर दिखाया जाता है.
खाली ऐप्लिकेशन बनाना
ऐप्लिकेशन ग्राफ़ में जानकारी भरने से पहले, आपको एक खाली ऐप्लिकेशन बनाना होगा.
Google Cloud Console में कोई ऐप्लिकेशन बनाएं.
- Google Cloud console पर जाएं.
- Vertex AI Vision डैशबोर्ड का ऐप्लिकेशन टैब खोलें.
- जोड़ें बनाएं बटन पर क्लिक करें.
- ऐप्लिकेशन के नाम के तौर पर traffic-app डालें और अपना इलाका चुनें.
- बनाएं पर क्लिक करें.
ऐप्लिकेशन कॉम्पोनेंट नोड जोड़ना
खाली ऐप्लिकेशन बनाने के बाद, ऐप्लिकेशन ग्राफ़ में ये तीन नोड जोड़े जा सकते हैं:
- डेटा डालना नोड: वह स्ट्रीम संसाधन जिसमें डेटा डाला जाता है.
- प्रोसेसिंग नोड: व्यस्तता के आंकड़े का मॉडल, जो डाले गए डेटा पर काम करता है.
- स्टोरेज नोड: यह एक मीडिया वेयरहाउस है, जिसमें प्रोसेस किए गए वीडियो सेव किए जाते हैं. साथ ही, यह मेटाडेटा स्टोर के तौर पर भी काम करता है. मेटाडेटा स्टोर में, डाले गए वीडियो डेटा के आंकड़े और एआई मॉडल से अनुमानित जानकारी शामिल होती है.
कंसोल में अपने ऐप्लिकेशन में कॉम्पोनेंट नोड जोड़ें.
- Vertex AI Vision के डैशबोर्ड में, ऐप्लिकेशन टैब खोलें. ऐप्लिकेशन टैब पर जाएं
- ट्रैफ़िक-ऐप्लिकेशन लाइन में, ग्राफ़ देखें को चुनें. इससे, आपको प्रोसेसिंग पाइपलाइन का ग्राफ़ विज़ुअलाइज़ेशन दिखेगा.
डेटा डालने वाला नोड जोड़ना
- इनपुट स्ट्रीम नोड जोड़ने के लिए, साइड मेन्यू के कनेक्टर सेक्शन में जाकर, स्ट्रीम विकल्प चुनें.
- इसके बाद, खुलने वाले स्ट्रीम मेन्यू के सोर्स सेक्शन में, स्ट्रीम जोड़ें को चुनें.
- स्ट्रीम जोड़ें मेन्यू में, नई स्ट्रीम रजिस्टर करें चुनें और स्ट्रीम के नाम के तौर पर traffic-stream जोड़ें.
- स्ट्रीम को ऐप्लिकेशन के ग्राफ़ में जोड़ने के लिए, स्ट्रीम जोड़ें पर क्लिक करें.
डेटा प्रोसेसिंग नोड जोड़ना
- बुकिंग के हिसाब से वयस्कों और बच्चों की संख्या वाला मॉडल नोड जोड़ने के लिए, साइड मेन्यू के खास मॉडल सेक्शन में, व्यस्तता की दर के आंकड़े का विकल्प चुनें.
- डिफ़ॉल्ट तौर पर चुने गए लोग और वाहन विकल्पों को चुना रहने दें.
- लाइन क्रॉसिंग में लाइन जोड़ना. मल्टी पॉइंट लाइन टूल का इस्तेमाल करके, ऐसी लाइनें खींचें जहां आपको कार या लोगों के आने-जाने का पता लगाना है.
- उस ज़ोन में लोगों/वाहनों की गिनती करने के लिए, ऐक्टिव ज़ोन बनाएं.
- ऐक्टिव ज़ोन बनाए जाने पर, कंजेशन का पता लगाने के लिए, ड्वेल टाइम की सेटिंग जोड़ें.
- फ़िलहाल, सक्रिय ज़ोन और लाइन क्रॉसिंग, दोनों एक साथ काम नहीं करते. एक बार में सिर्फ़ एक सुविधा का इस्तेमाल करें.)
डेटा स्टोरेज नोड जोड़ना
- आउटपुट डेस्टिनेशन (स्टोरेज) नोड जोड़ने के लिए, साइड मेन्यू के कनेक्टर सेक्शन में Vertex AI Vision का मीडिया वेयरहाउस विकल्प चुनें.
- Vertex AI Vision के मीडिया वेयरहाउस मेन्यू में, वेयरहाउस कनेक्ट करें पर क्लिक करें.
- वेयरहाउस कनेक्ट करें मेन्यू में, नया वेयरहाउस बनाएं चुनें. वेयरहाउस के ट्रैफ़िक-वेयरहाउस को नाम दें और TTL की अवधि को 14 दिन पर छोड़ दें.
- वेयरहाउस जोड़ने के लिए, बनाएं बटन पर क्लिक करें.
7. इवेंट मैनेजमेंट को कॉन्फ़िगर करना
अवधि 02:00
हम मॉडल को पोस्ट-प्रोसेसिंग के लिए, पहले से बनाए गए Cloud फ़ंक्शन से कनेक्ट करेंगे. यहां Cloud फ़ंक्शन, मॉडल के आउटपुट को आसानी से समझ सकता है और आपकी ज़रूरत के हिसाब से इवेंट जनरेट कर सकता है. इसके बाद, हम पहले से बनाए गए Pub/Sub विषय को अपने टारगेट के तौर पर कॉन्फ़िगर करके, इवेंट चैनल को कॉन्फ़िगर करेंगे. आपके पास कम से कम इंटरवल सेट करने का विकल्प भी होता है. इससे, आपके इवेंट चैनल पर कम समय में एक ही इवेंट के कई बार दिखने से बचा जा सकता है.
पोस्ट-प्रोसेसिंग के लिए Cloud फ़ंक्शन चुनना
- साइड मेन्यू खोलने के लिए, अपने ऐप्लिकेशन ग्राफ़ पर डेटा प्रोसेसिंग नोड(व्यस्तता के आंकड़े) पर क्लिक करें.
- पोस्ट-प्रोसेसिंग ड्रॉप डाउन में अपना Cloud Function (जिसकी पहचान उसके फ़ंक्शन के नाम से की जाती है) चुनें.
- ऐप्लिकेशन ग्राफ़ आपके बदलाव अपने-आप सेव कर लेगा.
इवेंट चैनल कॉन्फ़िगर करना
- साइड मेन्यू खोलने के लिए, अपने ऐप्लिकेशन ग्राफ़ पर डेटा प्रोसेसिंग नोड(व्यस्तता के आंकड़े) पर क्लिक करें.
- इवेंट की सूचना वाले सेक्शन में, "इवेंट की सूचना सेट अप करें" पर क्लिक करें.
- ड्रॉप-डाउन में अपना Pub/Sub विषय चुनें.
- (ज़रूरी नहीं) इवेंट पब्लिश करने के लिए, कम से कम इंटरवल/फ़्रीक्वेंसी सेट करें.
8. इस्तेमाल के लिए अपना ऐप्लिकेशन डिप्लॉय करना
सभी ज़रूरी कॉम्पोनेंट वाला एंड-टू-एंड ऐप्लिकेशन बनाने के बाद, उसे डिप्लॉय करने का आखिरी चरण, ऐप्लिकेशन को इस्तेमाल करना है.
- Vertex AI Vision के डैशबोर्ड में, ऐप्लिकेशन टैब खोलें. ऐप्लिकेशन टैब पर जाएं
- सूची में, traffic-app ऐप्लिकेशन के बगल में मौजूद, ग्राफ़ देखें को चुनें.
- ऐप्लिकेशन ग्राफ़ बिल्डर पेज पर, डिप्लॉय करें बटन पर क्लिक करें.
- नीचे दिए गए पुष्टि करने वाले डायलॉग में, डिप्लॉय करें चुनें. डिप्लॉयमेंट की कार्रवाई पूरी होने में कुछ मिनट लग सकते हैं. डिप्लॉयमेंट पूरा होने के बाद, नोड के बगल में हरे रंग के सही का निशान दिखते हैं.
9. Pub/Sub सदस्यता में इवेंट/मैसेज की पुष्टि करना
वीडियो डेटा को प्रोसेस करने वाले ऐप्लिकेशन में डालने के बाद, जब ऑक्युपेंसी के आंकड़े देने वाला मॉडल एनोटेशन दिखाए, तो Cloud फ़ंक्शन इवेंट जनरेट करेगा. इसके बाद, वे इवेंट आपके Pub/Sub विषय के ज़रिए मैसेज के तौर पर पब्लिश होने चाहिए और उन्हें आपकी सदस्यता में मिल जाना चाहिए.
यहां दिया गया तरीका, इस आधार पर बताया गया है कि आपके पास पूल सदस्यता है.
- अपने प्रोजेक्ट पर Pub/Sub सदस्यता की सूची खोलें और उससे जुड़ी सदस्यता ढूंढें. Pub/Sub की सदस्यता सूची वाले पेज पर जाएं
- "मैसेज" टैब पर जाएं.
- "पुल" बटन पर क्लिक करें.
- टेबल में अपना मैसेज देखें.
इसके अलावा, यूज़र इंटरफ़ेस (यूआई) के बिना मैसेज पाने का तरीका भी जाना जा सकता है. सदस्यता वाले पेज पर जाएं
10. बधाई हो
बधाई हो, आपने लैब पूरा कर लिया है!
खाली करने के लिए जगह
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर शुल्क न लगे. इसके लिए, उस प्रोजेक्ट को मिटा दें जिसमें संसाधन शामिल हैं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं.
प्रोजेक्ट मिटाना
अलग-अलग संसाधन मिटाना
संसाधन
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
सुझाव, राय या शिकायत
सुझाव/राय देने या शिकायत करने के लिए यहां क्लिक करें