Eventarc और Cloud Run फ़ंक्शन का इस्तेमाल करके, Cloud Storage से इवेंट प्रोसेसिंग को ट्रिगर करना

1. खास जानकारी

इस लैब में, आपको इवेंट प्रोसेसिंग को ट्रिगर करने के लिए, Cloud Storage बकेट इवेंट और Eventarc का इस्तेमाल करने का तरीका बताया जाएगा. डेटा का विश्लेषण करने और इमेज प्रोसेस करने के लिए, Cloud Run फ़ंक्शन का इस्तेमाल किया जाएगा. यह फ़ंक्शन, Google के Vision API का इस्तेमाल करेगा. साथ ही, इससे मिली इमेज को Cloud Storage बकेट में वापस सेव कर देगा.

424779013ac38648.png

आपको क्या सीखने को मिलेगा

इमेज प्रोसेसिंग पाइपलाइन बनाने का तरीका.

  • स्टोरेज बकेट कॉन्फ़िगर करना
  • Cloud Storage में ऑब्जेक्ट पढ़ने और लिखने के लिए, Cloud Run फ़ंक्शन बनाना
  • Eventarc ट्रिगर डिप्लॉय करना
  • खाने की इमेज का पता लगाने के लिए, Vision API को इंटिग्रेट करना
  • एंड-टू-एंड समाधान की जांच करना और उसकी पुष्टि करना

ज़रूरी शर्तें

  • इस लैब को शुरू करने से पहले, यह माना जा रहा है कि आपको Cloud Console और शेल एनवायरमेंट के बारे में जानकारी है.
  • Cloud Storage, Cloud Run फ़ंक्शन या Vision API का इस्तेमाल करने का अनुभव होना फ़ायदेमंद है, लेकिन यह ज़रूरी नहीं है.

2. सेटअप और ज़रूरी शर्तें

Cloud Project का सेटअप

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी (आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है) का रेफ़रंस देना होगा. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहता है.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा समय नहीं लगेगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

Cloud Shell चालू करें

सर्च बार के दाईं ओर मौजूद आइकॉन पर क्लिक करके, Cloud Shell चालू करें.

b02c63d9c7632ef8.png

एनवायरमेंट सेटअप करना

  1. Cloud Shell टर्मिनल में यहां दी गई कमांड चलाकर, प्रोजेक्ट और संसाधन से जुड़ी एनवायरमेंट वैरिएबल बनाएं.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NAME=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1 
export UPLOAD_BUCKET_NAME=menu-item-uploads-$PROJECT_ID
export UPLOAD_BUCKET=gs://menu-item-uploads-$PROJECT_ID
export BUCKET_THUMBNAILS=gs://menu-item-thumbnails-$PROJECT_ID
export MENU_SERVICE_NAME=menu-service
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
  1. लैब के लिए ज़रूरी एपीआई चालू करें
gcloud services enable \
    vision.googleapis.com \
    cloudfunctions.googleapis.com \
    pubsub.googleapis.com \
    cloudbuild.googleapis.com \
    logging.googleapis.com \
    eventarc.googleapis.com \
    artifactregistry.googleapis.com \
    run.googleapis.com \
    --quiet
  1. रिपॉज़िटरी को क्लोन करना
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/cloud-functions

3. Cloud Storage बकेट कॉन्फ़िगर करना

स्टोरेज बकेट बनाना

इमेज प्रोसेसिंग पाइपलाइन के लिए, अपलोड और थंबनेल Cloud Storage बकेट बनाएं.

दो बकेट बनाने के लिए, gsutil mb कमांड और कोई यूनीक नाम इस्तेमाल करें:

  1. वह अपलोड बकेट जहां इमेज सबसे पहले अपलोड की जाएंगी
  2. जनरेट की गई थंबनेल इमेज को सेव करने के लिए थंबनेल बकेट

नई इमेज अपलोड करने के लिए, एक बकेट बनाएं:

gsutil mb -p $PROJECT_ID -l $REGION $UPLOAD_BUCKET

आउटपुट का उदाहरण:

Creating gs://menu-item-uploads-cymbal-eats-8399-3119/...

जनरेट किए गए थंबनेल सेव करने के लिए, एक बकेट बनाएं:

gsutil mb -p $PROJECT_ID -l $REGION $BUCKET_THUMBNAILS

आउटपुट का उदाहरण:

Creating gs://menu-item-thumbnails-cymbal-eats-8399-3119/...

बकेट की अनुमतियां अपडेट करना

स्टोरेज बकेट की अनुमतियां अपडेट करें, ताकि उपयोगकर्ताओं को पढ़ने की अनुमतियां मिल सकें.

अपने बकेट में मौजूद ऑब्जेक्ट को पढ़ने और उनमें बदलाव करने की अनुमति देने के लिए, gsutil iam ch कमांड का इस्तेमाल करें:

gsutil iam ch allUsers:objectViewer $UPLOAD_BUCKET
gsutil iam ch allUsers:objectViewer $BUCKET_THUMBNAILS

आउटपुट का उदाहरण

Updated IAM policy for project [cymbal-eats-8399-3119].
[...]

4. सेवा खातों को कॉन्फ़िगर करना

थंबनेल प्रोसेस करने के लिए, Cloud Functions के लिए कस्टम सेवा खाता बनाएं:

export CF_SERVICE_ACCOUNT=thumbnail-service-sa
gcloud iam service-accounts create ${CF_SERVICE_ACCOUNT}

Artifact Registry से डेटा पढ़ने की अनुमति देने के लिए, artifactregistry.reader भूमिका असाइन करें:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/artifactregistry.reader"

जनरेट की गई इमेज को थंबनेल बकेट में सेव करने की अनुमति देने के लिए, storage.objectCreator की भूमिका असाइन करें:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/storage.objectCreator"

Cloud Run सेवा को शुरू करने की अनुमति देने के लिए, run.invoker की भूमिका असाइन करें:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/run.invoker"

eventarc.eventReceiver की भूमिका असाइन करें, ताकि इवेंट के डेटा को पाने की अनुमति दी जा सके:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/eventarc.eventReceiver"

Cloud Storage सेवा खाते को pubsub.publisher की भूमिका असाइन करें. इससे सेवा खाते को, बकेट में इमेज अपलोड होने पर इवेंट पब्लिश करने की अनुमति मिल जाएगी.

GCS_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER)

gcloud projects add-iam-policy-binding $PROJECT_NUMBER \
    --member "serviceAccount:$GCS_SERVICE_ACCOUNT" \
    --role "roles/pubsub.publisher"

5. इमेज प्रोसेसिंग फ़ंक्शन के बारे में खास जानकारी

Cloud Storage से इमेज डाउनलोड करने, उसका साइज़ बदलने, और उसे वापस Cloud Storage पर अपलोड करने के लिए एक फ़ंक्शन बनाएं. यह फ़ंक्शन, Vision API को कॉल करेगा, ताकि इमेज को जानकारी देने वाला लेबल असाइन किया जा सके. यह फ़ंक्शन, ब्यौरे वाले लेबल की जांच करेगा. अगर लेबल से इमेज की पहचान "खाना" के तौर पर होती है, तो मेन्यू सेवा को एक इवेंट भेजा जाएगा. इससे मेन्यू आइटम की इमेज और थंबनेल अपडेट हो जाएगा.

4c3c3b758dba6a9f.png

किसी फ़ंक्शन को ट्रिगर करना

Cloud Storage के फ़ंक्शन, Cloud Storage से मिलने वाली Pub/Sub सूचनाओं पर आधारित होते हैं. साथ ही, ये एक जैसे इवेंट टाइप के साथ काम करते हैं:

इस लैब में, Cloud Storage में किसी ऑब्जेक्ट के फ़ाइनल होने पर, फ़ंक्शन को डिप्लॉय और ट्रिगर किया जाएगा.

ऑब्जेक्ट फ़ाइनलाइज़ किया गया

Cloud Storage ऑब्जेक्ट का "लिखने" का प्रोसेस पूरी होने पर, ऑब्जेक्ट फ़ाइनलाइज़ इवेंट ट्रिगर होते हैं. खास तौर पर, इसका मतलब है कि नया ऑब्जेक्ट बनाने या किसी मौजूदा ऑब्जेक्ट को बदलने पर, यह इवेंट ट्रिगर होता है. यह ट्रिगर, संग्रह करने और मेटाडेटा अपडेट करने की कार्रवाइयों को अनदेखा करता है.

6. Cloud Storage को इंटिग्रेट करना

Cloud Storage, Google Cloud में आपके ऑब्जेक्ट सेव करने की सेवा है. ऑब्जेक्ट, डेटा का ऐसा हिस्सा होता है जिसमें बदलाव नहीं किया जा सकता. इसमें किसी भी फ़ॉर्मैट की फ़ाइल शामिल होती है. ऑब्जेक्ट को बकेट नाम के कंटेनर में सेव किया जाता है. सभी बकेट, किसी प्रोजेक्ट से जुड़ी होती हैं. साथ ही, अपने प्रोजेक्ट को किसी संगठन के तहत ग्रुप किया जा सकता है. क्लाइंट लाइब्रेरी और एपीआई , Cloud Storage के साथ इंटिग्रेट करने की प्रोसेस को आसान बनाते हैं

इस लैब में, Cloud Storage में ऑब्जेक्ट पढ़ने और लिखने के लिए क्लाइंट लाइब्रेरी का इस्तेमाल किया जाएगा.

क्लाइंट लाइब्रेरी इंस्टॉल करना

क्लाउड क्लाइंट लाइब्रेरी, कई लोकप्रिय प्रोग्रामिंग भाषाओं में उपलब्ध हैं. लाइब्रेरी का इस्तेमाल शुरू करने के लिए, आपको क्लाइंट लाइब्रेरी इंस्टॉल करनी होगी.

क्लाइंट लाइब्रेरी का इस्तेमाल करना

लागू करने से जुड़ी ज़्यादातर जानकारी, प्रोग्रामिंग भाषा पर निर्भर करती है. अपने ऐप्लिकेशन में क्लाइंट लाइब्रेरी का इस्तेमाल करने के लिए, पहला चरण Cloud Storage की डिपेंडेंसी इंपोर्ट करना है. उदाहरण के लिए, Node.js प्रोजेक्ट में, package.json फ़ाइल में इंपोर्ट जोड़े जाते हैं. नीचे दिए गए स्निपेट में, इस लैब की package.json फ़ाइल की सूचना दिखाई गई है.

package.json

{
    "name": "thumbnail-service",
    "version": "0.1.0",
    "dependencies": {
      "@google-cloud/functions-framework": "^3.0.0",
      "@google-cloud/storage": "^5.18.2",
      "@google-cloud/vision": "^2.4.2",
        ...
    }
  }

CloudEvent कॉलबैक रजिस्टर करना

Functions Framework के साथ CloudEvent कॉलबैक रजिस्टर करें. यह कॉलबैक, Cloud Storage से तब ट्रिगर होगा, जब बकेट में कोई नई इमेज अपलोड की जाएगी.

index.js

functions.cloudEvent('process-thumbnails', async (cloudEvent) => {
    console.log(`Event ID: ${cloudEvent.id}`);
    console.log(`Event Type: ${cloudEvent.type}`);
    ...

स्टोरेज रेफ़रंस ऑब्जेक्ट बनाना

क्लाइंट लाइब्रेरी इंपोर्ट करने के बाद, आपको एक नया स्टोरेज क्लाइंट और बकेट बनाने होंगे. आपका ऐप्लिकेशन इनके साथ इंटरैक्ट करेगा.

index.js

const storage = new Storage();
const bucket = storage.bucket(file.bucket);
const thumbBucket = storage.bucket(process.env.BUCKET_THUMBNAILS);

Cloud Storage ऑब्जेक्ट डाउनलोड करना

index.js

await bucket.file(file.name).download({
            destination: originalFile
        });

Cloud Storage में ऑब्जेक्ट अपलोड करने की अनुमति हो

Cloud Storage में फ़ाइलें अपलोड करने के अनुरोध तीन तरीकों से भेजे जा सकते हैं: एक बार में पूरा डेटा अपलोड करने का अनुरोध, फिर से शुरू किए जा सकने वाले अपलोड का अनुरोध या एक्सएमएल एपीआई मल्टीपार्ट अपलोड का अनुरोध. बड़े साइज़ की फ़ाइलों को अपलोड करने या स्ट्रीमिंग के लिए, फिर से शुरू किए जा सकने वाले अपलोड का इस्तेमाल करें. एक्सएमएल एपीआई की मदद से, फ़ाइलों को हिस्सों में अपलोड किया जाता है और उन्हें एक ऑब्जेक्ट के तौर पर इकट्ठा किया जाता है. छोटे ऑब्जेक्ट के लिए, एक बार में अपलोड करने की सुविधा का इस्तेमाल करें.

नीचे दिया गया कोड, एक बार में अपलोड करने की सुविधा का इस्तेमाल करके, क्लाउड स्टोरेज में इमेज अपलोड करता है.

index.js

const thumbnailImage = await thumbBucket.upload(thumbFile);

7. Vision API को इंटिग्रेट करना

Cloud Vision की मदद से डेवलपर, अपने ऐप्लिकेशन में विज़न डिटेक्ट करने की सुविधाओं को आसानी से इंटिग्रेट कर पाते हैं. जैसे, इमेज लेबल करने, चेहरे और लैंडमार्क की पहचान करने, ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर), और अश्लील कॉन्टेंट को टैग करने की सुविधा.

क्लाइंट लाइब्रेरी इंस्टॉल करना

क्लाउड क्लाइंट लाइब्रेरी, कई लोकप्रिय प्रोग्रामिंग भाषाओं में उपलब्ध हैं. लाइब्रेरी का इस्तेमाल शुरू करने के लिए, आपको क्लाइंट लाइब्रेरी इंस्टॉल करनी होगी.

इमेज एनोटेटर क्लाइंट बनाना

आधिकारिक क्लाइंट SDK टूल का इस्तेमाल करके Google APIs को ऐक्सेस करने के लिए, आपको एपीआई के खोज से जुड़े दस्तावेज़ के आधार पर एक सेवा ऑब्जेक्ट बनाना होगा. इससे SDK टूल को एपीआई के बारे में जानकारी मिलती है. आपको अपने क्रेडेंशियल का इस्तेमाल करके, Vision API की डिस्कवरी सेवा से इसे फ़ेच करना होगा.

index.js

const client = new vision.ImageAnnotatorClient();

Vision API का अनुरोध बनाना

Vision API, किसी इमेज फ़ाइल में मौजूद सुविधाओं का पता लगा सकता है. इसके लिए, आपको इमेज फ़ाइल के कॉन्टेंट को अपने अनुरोध के मुख्य हिस्से में base64 एन्कोड की गई स्ट्रिंग के तौर पर भेजना होगा.

इमेज को एनोटेट करने के लिए, इमेज रिसॉर्स का इस्तेमाल करके अनुरोध बनाना. इस एपीआई को भेजा गया अनुरोध, एक ऑब्जेक्ट के तौर पर होता है. इसमें अनुरोधों की सूची होती है. इस सूची के हर आइटम में दो तरह की जानकारी होती है:

  • Base64 कोड में बदला गया इमेज डेटा
  • उन सुविधाओं की सूची जिनके बारे में आपको उस इमेज में एनोटेशन चाहिए.

index.js

        const client = new vision.ImageAnnotatorClient();
        const visionRequest = {
            image: { source: { imageUri: `gs://${file.bucket}/${file.name}` } },
            features: [
                { type: 'LABEL_DETECTION' },
            ]
        };
        const visionPromise = client.annotateImage(visionRequest);

8. Cloud Run फ़ंक्शन डिप्लॉय करना

इमेज का साइज़ बदलने की यह सेवा, Cymbal Eats सिस्टम का हिस्सा है. इस सेक्शन में, आपको सिर्फ़ इमेज प्रोसेसिंग की सुविधा से जुड़े कॉम्पोनेंट डिप्लॉय करने होंगे. पूरे इंस्टॉलेशन में, इमेज अपलोड करने के लिए यूज़र इंटरफ़ेस (यूआई) और मेटाडेटा को सेव करने के लिए डाउनस्ट्रीम अनुरोध शामिल होता है. ये सुविधाएं, इस लैब के साथ इंस्टॉल नहीं की जाती हैं.

फ़ंक्शन डिप्लॉय करने के दौरान, ये कॉम्पोनेंट बनाए जाएंगे:

  • Cloud Run फ़ंक्शन
  • Eventarc ट्रिगर
  • Pub/Sub विषय और सदस्यता

menu-item-uploads-$PROJECT_ID पर ट्रिगर बकेट के साथ Cloud Run फ़ंक्शन डिप्लॉय करने के लिए, Cloud Shell टर्मिनल में यहां दिया गया निर्देश चलाएं:

Cloud Run फ़ंक्शन को सीधे Cloud Run पर डिप्लॉय करने के लिए, आपको पहले फ़ंक्शन डिप्लॉय करना होगा. इसके बाद, उसके लिए ट्रिगर बनाना होगा.

Cloud Run फ़ंक्शन डिप्लॉय करें:

gcloud beta run deploy process-thumbnails \
      --source=thumbnail \
      --function process-thumbnails \
      --region $REGION \
      --base-image google-22-full/nodejs20 \
      --no-allow-unauthenticated \
      --project=$PROJECT_ID \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--set-env-vars=BUCKET_THUMBNAILS=$BUCKET_THUMBNAILS,MENU_SERVICE_URL=$MENU_SERVICE_URL \
  --max-instances=1 \
  --quiet

आउटपुट का उदाहरण:

Done.                                                                                                                                                                                    
Service [process-thumbnails] revision [process-thumbnails-00001-abc] has been deployed and is serving 100 percent of traffic.
Service URL: https://process-thumbnails-000000000.us-east1.run.app

ट्रिगर बनाएं:

gcloud eventarc triggers create process-thumbnails-trigger \
     --location=$REGION \
     --destination-run-service=process-thumbnails \
    --destination-run-region=$REGION \
     --event-filters="type=google.cloud.storage.object.v1.finalized" \
     --event-filters="bucket=$UPLOAD_BUCKET_NAME" \
     --service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com"

आउटपुट का उदाहरण:

Creating trigger [process-thumbnails-trigger] in project [qwiklabs-gcp-02-53f8532696e1], location [us-east1]...done.                                                                     
WARNING: It may take up to 2 minutes for the new trigger to become active.

अगर अनुमति से जुड़ी समस्या की वजह से ट्रिगर डिप्लॉय नहीं हो पाता है, तो कृपया पिछले चरण में किए गए IAM बदलावों के लागू होने का इंतज़ार करें. आम तौर पर, इसमें एक से दो मिनट लगते हैं. इसके बाद, फिर से डिप्लॉय करने की कोशिश करें.

गड़बड़ी के आउटपुट का उदाहरण:

...If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent...
[...] 

Cloud Console में, फ़ंक्शन के लिए बनाई गई Cloud Run सेवा की समीक्षा करें:

546c5c951cf0f2f.png

Cloud Console में, फ़ंक्शन के लिए बनाए गए Eventarc ट्रिगर की समीक्षा करें:

dec11309016b09ac.png

Cloud Console में, Eventarc ट्रिगर के लिए बनाए गए Pub/Sub विषय और सदस्यता की समीक्षा करें:

affe089c39ae1465.png

a4c41ede2af300db.png

9. एंड-टू-एंड समाधान की जांच करना और उसकी पुष्टि करना

Cloud Storage में नई फ़ोटो अपलोड करें. साथ ही, इमेज का विश्लेषण किए जाने के दौरान पाइपलाइन की प्रोग्रेस पर नज़र रखें. क्लाउड फ़ंक्शन के लॉग की निगरानी करके, शुरू से आखिर तक के समाधान की जांच करें.

इमेज अपलोड करना

ab7b43f876f9c3a9.jpeg

  1. इस इमेज को अपने कंप्यूटर पर सेव करें
  2. फ़ाइल 1.jpg का नाम बदलें
  3. Cloud Storage कंसोल खोलें
  4. menu-item-uploads-... बकेट पर क्लिक करें
  5. फ़ाइलें अपलोड करें पर क्लिक करें
  6. स्टोरेज बकेट में 1.jpg अपलोड करें
  7. Cloud Console में, Cloud Run पर जाएं
  8. process-thumbails पर क्लिक करें
  9. LOGS टैब पर क्लिक करें

fca8e4bafbdf135d.png

  1. menu-item-thumbnails-$PROJECT_ID Cloud Storage बकेट में जाएं
  2. पुष्टि करें कि थंबनेल इमेज, थंबनेल बकेट में बनाई गई है

1b6dee72a1fde681.png

खाने-पीने की चीज़ों के अलावा किसी अन्य प्रॉडक्ट की इमेज अपलोड करना

यह पुष्टि करने के लिए कि फ़ंक्शन ठीक से काम कर रहा है, आपको ऐसी इमेज अपलोड करनी होगी जिसमें "खाना" के तौर पर क्लासिफ़ाई किया जाने वाला कोई ऑब्जेक्ट न हो.

c76dd525765f66a6.jpeg

  1. इस इमेज को अपने कंप्यूटर पर सेव करें
  2. फ़ाइल 2.jpg का नाम बदलें
  3. Cloud Storage कंसोल खोलें
  4. menu-item-uploads-... बकेट पर क्लिक करें
  5. अपलोड करें फ़ाइलें
  6. स्टोरेज बकेट में 2.jpg अपलोड करें
  7. Cloud Console में, Cloud Run पर जाएं
  8. process-thumbails पर क्लिक करें
  9. LOGS टैब पर क्लिक करें

18b1e30ee78d3955.png

10. बधाई हो!

बधाई हो, आपने यह लैब पूरी कर ली है!

इसके बाद क्या होगा:

Cymbal Eats के अन्य कोडलैब देखें:

व्यवस्थित करें

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, संसाधनों वाला प्रोजेक्ट मिटाएं. इसके अलावा, प्रोजेक्ट को बनाए रखने और अलग-अलग संसाधनों को मिटाने का विकल्प भी है.

प्रोजेक्ट मिटाना

बिलिंग को बंद करने का सबसे आसान तरीका यह है कि ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटा दें.