Cloud Vision एपीआई की मदद से इमेज में लेबल, चेहरे, और लैंडमार्क का पता लगाएं

Cloud Vision एपीआई से आप किसी इमेज के कॉन्टेंट को समझ सकते हैं. इसके लिए, आप आसान REST API में मशीन लर्निंग मॉडल को इस्तेमाल करके ऐसा कर सकते हैं.

इस लैब में, हम विज़न एपीआई पर इमेज भेजेंगे. साथ ही, यह देखेंगे कि यह ऑब्जेक्ट, चेहरे, और लैंडमार्क से जुड़ा है.

आप क्या #39;जानेंगे

  • विज़न एपीआई अनुरोध बनाना और एपीआई को कॉल के साथ कॉल करना
  • विज़न एपीआई के लेबल, वेब, चेहरे, और लैंडमार्क की पहचान करने के तरीकों का इस्तेमाल करना

आपकोआपको ज़रूरत होगी

  • Google Cloud Platform प्रोजेक्ट
  • ब्राउज़र, जैसे कि Chrome या Firefox

आप इस ट्यूटोरियल का इस्तेमाल कैसे करेंगे?

सिर्फ़ इसे पढ़ें इसे पढ़ें और कसरत करें

Google Cloud Platform के साथ आपका अनुभव कैसा रहा?

शुरुआती बीच का लेवल असरदार

अपनी सुविधा के हिसाब से एनवायरमेंट सेट अप करना

अगर आपके पास पहले से कोई Google खाता (Gmail या Google Apps) नहीं है, तो आपको एक खाता बनाना होगा. Google Cloud Platform Console (console.cloud.google.com) में साइन इन करें और एक नया प्रोजेक्ट बनाएं:

10-02-2016 का स्क्रीनशॉट 12:45:26.png

प्रोजेक्ट आईडी याद रखें, सभी Google क्लाउड प्रोजेक्ट में दिया गया नाम (ऊपर दिया गया नाम पहले ही लिया जा चुका है और यह आपके लिए काम नहीं करेगा!). इसे बाद में इस कोडलैब (कोड बनाना सीखना) में PROJECT_ID के तौर पर बताया जाएगा.

इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग को चालू करना होगा.

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

Google Cloud Platform के नए उपयोगकर्ता, 300 डॉलर का मुफ़्त ट्रायल पा सकते हैं.

स्क्रीन के सबसे ऊपर बाईं ओर, मेन्यू आइकॉन पर क्लिक करें.

ड्रॉप-डाउन से API और सेवाएं चुनें और डैशबोर्ड पर क्लिक करें

एपीआई और सेवाओं को चालू करें पर क्लिक करें.

इसके बाद, खोज बॉक्स में &कोटेशन;विज़न&कोटेशन खोजें; Google Cloud Vision एपीआई पर क्लिक करें:

Cloud Vision एपीआई को चालू करने के लिए, चालू करें पर क्लिक करें:

इसे चालू करने के लिए, कुछ सेकंड का इंतज़ार करें. इसे चालू करने के बाद, आपको यह दिखेगा:

Google Cloud Shell, Cloud में चलने वाला कमांड लाइन एनवायरमेंट है. Debian वाली वर्चुअल मशीन में, डेवलपमेंट के लिए इस्तेमाल होने वाले सभी टूल (#gcloud, bq, git, और अन्य टूल) मौजूद हैं. साथ ही, यह 5 जीबी से ज़्यादा स्टोरेज इस्तेमाल करने वाली डायरेक्ट्री उपलब्ध कराती है. हम Speech API के लिए अपना अनुरोध तैयार करने के लिए, Cloud Shell का इस्तेमाल करेंगे.

Cloud Shell का इस्तेमाल करने के लिए, हेडर बार के सबसे ऊपर दाएं कोने में मौजूद &Google Cloud Shell&कोट को चालू करें; स्क्रीन शॉट, 08-06-2015, शाम 5.30.32 बजे.pngआइकॉन पर क्लिक करें

Cloud Shell सेशन, कंसोल के सबसे नीचे एक नए फ़्रेम में खुलता है और एक कमांड-लाइन प्रॉम्प्ट दिखाता है. user@project:~$ प्रॉम्प्ट दिखने तक इंतज़ार करें

जब हम Vision API को अनुरोध भेजने के लिए curl का इस्तेमाल करते हैं, तो हमें अपने अनुरोध को पास करने के लिए एक एपीआई कुंजी जनरेट करनी होगी. एपीआई कुंजी बनाने के लिए, अपने Cloud Console में एपीआई और सेवाओं के क्रेडेंशियल सेक्शन पर जाएं:

ड्रॉप-डाउन मेन्यू में, एपीआई कुंजी चुनें:

इसके बाद, वह कुंजी कॉपी करें जो आपने अभी-अभी जनरेट की है.

अब जब आपके पास एपीआई कुंजी है, तो उसे किसी एनवायरमेंट वैरिएबल में सेव करें, ताकि हर अनुरोध में आपकी एपीआई कुंजी की वैल्यू न डालनी पड़े. आप Cloud Shell में जाकर ऐसा कर सकते हैं. <your_api_key> को उसी कुंजी से बदलना न भूलें जिसे आपने अभी-अभी कॉपी किया है.

export API_KEY=<YOUR_API_KEY>

Cloud Storage बकेट बनाना

इमेज का पता लगाने के लिए विज़न एपीआई में इमेज भेजने के दो तरीके हैं: एपीआई को base64 कोड में बदली गई इमेज स्ट्रिंग भेजकर या Google Cloud Storage में सेव की गई फ़ाइल का यूआरएल भेजकर. हम'Cloud Storage यूआरएल का इस्तेमाल करेंगे. हम अपनी इमेज सेव करने के लिए, Google Cloud Storage बकेट बनाएंगे.

अपने प्रोजेक्ट के लिए Cloud Console में स्टोरेज ब्राउज़र पर जाएं:

इसके बाद, बाल्टी बनाएं पर क्लिक करें. अपनी बकेट को कोई यूनीक नाम दें (जैसे कि आपका प्रोजेक्ट आईडी) और बनाएं पर क्लिक करें.

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

डोनट की इस इमेज पर दायां क्लिक करें. इसके बाद, इमेज को इस रूप में सेव करें पर क्लिक करें और उसे अपने डाउनलोड फ़ोल्डर में donuts.png के तौर पर सेव करें.

स्टोरेज बकेट में अभी बनाए गए बकेट पर नेविगेट करें और फ़ाइलें अपलोड करें पर क्लिक करें. इसके बाद, donuts.png को चुनें.

आपको अपनी बकेट में फ़ाइल दिखनी चाहिए:

इसके बाद, इमेज की अनुमति में बदलाव करें.

आइटम जोड़ें पर क्लिक करें.

Group की एक नई इकाई और allUsers का नाम जोड़ें:

सेव करें पर क्लिक करें.

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

अपने Cloud Shell एनवायरमेंट में, नीचे दिए गए कोड के साथ request.json फ़ाइल बनाएं. साथ ही, पक्का करें कि आपने my- Bucket-name को अपने बनाए गए Cloud Storage बकेट के नाम से बदल दिया हो. आप या तो अपनी पसंद के किसी कमांड लाइन एडिटर (नैनो, विम, ईएमएसी) का इस्तेमाल करके, फ़ाइल बना सकते हैं या Cloud Shell में पहले से मौजूद Orion Editor का इस्तेमाल कर सकते हैं:

request.json

{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/donuts.png"
          } 
        },
        "features": [
          {
            "type": "LABEL_DETECTION",
            "maxResults": 10
          }
        ]
      }
  ]
}

पहली क्लाउड विज़न एपीआई सुविधा हम #33; लेबल की पहचान करना है. इस तरीके से आपकी इमेज में मौजूद लेबल (शब्दों) की सूची दिखेगी.

हम अब #39; vision API को कॉल के साथ कॉल करने के लिए तैयार हैं:

curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json  https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}

आपका जवाब कुछ ऐसा दिखना चाहिए:

{
  "responses": [
    {
      "labelAnnotations": [
        {
          "mid": "/m/01dk8s",
          "description": "powdered sugar",
          "score": 0.9436922
        },
        {
          "mid": "/m/01wydv",
          "description": "beignet",
          "score": 0.7160288
        },
        {
          "mid": "/m/06_dn",
          "description": "snow",
          "score": 0.71219236
        },
        {
          "mid": "/m/02wvn_6",
          "mid": "/m/0bp3f6m",
          "description": "fried food",
          "score": 0.7075312
        },
        {
          "mid": "/m/02wvn_6",
          "description": "ricciarelli",
          "score": 0.5625
        },
        {
          "mid": "/m/052lwg6",
          "description": "baked goods",
          "score": 0.53270763
        }
      ]
    }
  ]
}

एपीआई, खास तरह के डोनट की पहचान कर पाया था (बेनेट)! विज़न एपीआई हर लेबल के लिए, आइटम के नाम के साथ description दिखाता है. इससे score भी मिलता है, जो 0 - 100 तक की कोई संख्या होती है. इससे पता चलता है कि कितनी जानकारी से यह पता चलता है कि ब्यौरा, इमेज में मौजूद ##39 से मेल खाता है. mid मान, Google's के नॉलेज ग्राफ़ में आइटम और mid के बीच मैप करता है. किसी आइटम के बारे में ज़्यादा जानकारी पाने के लिए, आप नॉलेज ग्राफ़ एपीआई को कॉल करते समय, mid का इस्तेमाल कर सकते हैं.

हमारी इमेज में क्या' लेबल है, के अलावा विज़न एपीआई हमारी इमेज के बारे में ज़्यादा जानकारी पाने के लिए इंटरनेट पर भी खोज सकता है. एपीआई की सुविधाwebDetection के तरीके से, हमें बहुत सारे दिलचस्प डेटा मिलते हैं:

  • हमारी इमेज में मिली इकाइयों की सूची, एक जैसी इमेज वाले पेजों के कॉन्टेंट के आधार पर
  • वेब पर मिली सटीक और आंशिक मिलान वाली इमेज के यूआरएल के साथ-साथ उन पेजों के यूआरएल भी
  • मिलती-जुलती इमेज के यूआरएल, जैसे कि रिवर्स इमेज खोज करना

request.json सुविधाओं की सूची में, टाइप को LABEL_DETECTION से WEB_DETECTION में बदलें. request.json को अब कुछ ऐसा दिखना चाहिए:

request.json

{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/donuts.png"
          } 
        },
        "features": [
          {
            "type": "WEB_DETECTION",
            "maxResults": 10
          }
        ]
      }
  ]
}

इसे विज़न एपीआई पर भेजने के लिए, आप पहले के ऑर्डर यूआरएल का इस्तेमाल कर सकते हैं. हालांकि, Cloud Shell में अप ऐरो दबाएं:

curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json  https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}

webEntities से शुरू होने वाले जवाब पर ध्यान दें. इस इमेज में दी गई इकाइयों की जानकारी यहां दी गई है:

 "webEntities": [
          {
            "entityId": "/m/01hyh_",
            "score": 0.7155,
            "description": "Machine learning"
          },
          {
            "entityId": "/m/01wydv",
            "score": 0.48758492,
            "description": "Beignet"
          },
          {
            "entityId": "/m/0105pbj4",
            "score": 0.3976,
            "description": "Google Cloud Platform"
          },
          {
            "entityId": "/m/02y_9m3",
            "score": 0.3782,
            "description": "Cloud computing"
          },
          ...
        ]

इस इमेज का इस्तेमाल हमारे Cloud ML एपीआई में कई प्रज़ेंटेशन में फिर से किया गया है. इस वजह से, एपीआई में इकाइयां &कोटेशन;मशीन लर्निंग &कोटेशन; Google Cloud Platform&&tt; और &कोटेशन;क्लाउड कंप्यूटिंग> मिला है.

अगर हम fullMatchingImages, partialMatchingImages, और pagesWithMatchingImages के तहत यूआरएल डालते हैं, तो हम देख पाएंगे कि कई यूआरएल इस कोडलैब (कोड बनाना सीखना) की साइट पर ले जाते हैं (सुपर मेटा!).

मान लें कि हम विनेट की दूसरी इमेज खोजना चाहते हैं, लेकिन ओरिजनल इमेज नहीं. जहां # एपीआई के रिस्पॉन्स का visuallySimilarImages हिस्सा आसान होता है. यहां दिखने में मिलती-जुलती इमेज में से कुछ इमेज दी गई हैं:

"visuallySimilarImages": [
          {
            "url": "https://igx.4sqi.net/img/general/558x200/21646809_fe8K-bZGnLLqWQeWruymGEhDGfyl-6HSouI2BFPGh8o.jpg"
          },
          {
            "url": "https://spoilednyc.com//2016/02/16/beignetszzzzzz-852.jpg"
          },
          {
            "url": "https://img-global.cpcdn.com/001_recipes/a66a9a6fc2696648/1200x630cq70/photo.jpg"
          },
          ...
]

मिलती-जुलती इमेज देखने के लिए, हम उन यूआरएल पर जा सकते हैं:

कूल! और शायद आपको असल में कोई मुर्गी चाहिए. यह Google Images पर किसी इमेज की मदद से खोजने जैसा ही है:

हालांकि, Cloud Vision की मदद से, इस सुविधा को आसानी से इस्तेमाल करने के लिए, REST API का इस्तेमाल किया जा सकता है. साथ ही, इसे हमारे ऐप्लिकेशन से जोड़ा जा सकता है.

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

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

इन दो नए तरीकों का इस्तेमाल करने के लिए, आइए और #39; हमारी Cloud Storage बकेट में नई इमेज अपलोड करते हैं. इन इमेज में चेहरे और लैंडमार्क मौजूद होते हैं. नीचे दी गई इमेज पर दायां क्लिक करें, फिर इमेज को इस रूप में सेव करें पर क्लिक करें और उसे अपने डाउनलोड फ़ोल्डर में selfie.png के तौर पर सेव करें.

इसके बाद, इसे अपने Cloud Storage बकेट में उसी तरह अपलोड करें जिस तरह आपने पिछले चरण में किया था. पक्का करें कि & &कोटेशन को सार्वजनिक रूप से शेयर करें & चेकबॉक्स पर सही का निशान लगाएं.

हमारा अनुरोध अपडेट करना

इसके बाद, हम नई इमेज का यूआरएल शामिल करने और लेबल की पहचान करने के बजाय चेहरे और लैंडमार्क की पहचान करने की सुविधा का इस्तेमाल करने के लिए, अपनी request.json फ़ाइल को अपडेट करेंगे. my- Bucket-name को हमारी Cloud Storage बकेट के नाम से बदलना न भूलें:

request.json

{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/selfie.png"
          } 
        },
        "features": [
          {
            "type": "FACE_DETECTION"
          },
          {
            "type": "LANDMARK_DETECTION"
          }
        ]
      }
  ]
}

विज़न एपीआई को कॉल करना और रिस्पॉन्स को पार्स करना

अब आप ऊपर # उसी यूआरएल निर्देश का इस्तेमाल करके Vision एपीआई को कॉल करने के लिए तैयार हैं:

curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json  https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}

आइए, सबसे पहले हमारे जवाब में faceAnnotations ऑब्जेक्ट पर एक नज़र डालें. आपको ध्यान रहेगा कि एपीआई इमेज में मिले हर चेहरे के लिए एक ऑब्जेक्ट दिखाता है - इस मामले में, तीन. यहां हमारे जवाब का क्लिप किया गया वर्शन दिया गया है:

{
      "faceAnnotations": [
        {
          "boundingPoly": {
            "vertices": [
              {
                "x": 669,
                "y": 324
              },
              ...
            ]
          },
          "fdBoundingPoly": {
            ...
          },
          "landmarks": [
            {
              "type": "LEFT_EYE",
              "position": {
                "x": 692.05646,
                "y": 372.95868,
                "z": -0.00025268539
              }
            },
            ...
          ],
          "rollAngle": 0.21619819,
          "panAngle": -23.027969,
          "tiltAngle": -1.5531756,
          "detectionConfidence": 0.72354823,
          "landmarkingConfidence": 0.20047489,
          "joyLikelihood": "POSSIBLE",
          "sorrowLikelihood": "VERY_UNLIKELY",
          "angerLikelihood": "VERY_UNLIKELY",
          "surpriseLikelihood": "VERY_UNLIKELY",
          "underExposedLikelihood": "VERY_UNLIKELY",
          "blurredLikelihood": "VERY_UNLIKELY",
          "headwearLikelihood": "VERY_LIKELY"
        }
        ...
     }
}

boundingPoly हमें इमेज में चेहरे के आस-पास x,y निर्देशांक देता है. fdBoundingPoly, boundingPoly से छोटा साइज़ का बॉक्स है, जो चेहरे के स्किन के हिस्से को एन्कोड करता है. landmarks हर चेहरे की सुविधा के लिए कई ऑब्जेक्ट की एक सारणी होती है (कुछ के बारे में शायद आपको पता भी न हो!). इससे हमें उस सुविधा के 3D पोज़िशन के साथ लैंडमार्क का टाइप पता चलता है (x,y,z निर्देशांक) जहां z निर्देशांक डेप्थ का है. बाकी बचे पैसों से हमें चेहरे से जुड़ी ज़्यादा जानकारी मिलती है. इनमें खुशी, दुख, गुस्सा, और हैरान करने की संभावना शामिल है. ऊपर दिया गया ऑब्जेक्ट इमेज में सबसे दूर मौजूद व्यक्ति के लिए है - आप देख सकते हैं कि वह #39; किस तरह का मज़ाक़िया चेहरा बनाता है जो POSSIBLE के joyLikelihood के बारे में बताता है.

अगला वाला #39 हमारे जवाब के landmarkAnnotations हिस्से पर नज़र डालता है:

"landmarkAnnotations": [
        {
          "mid": "/m/0c7zy",
          "description": "Petra",
          "score": 0.5403372,
          "boundingPoly": {
            "vertices": [
              {
                "x": 153,
                "y": 64
              },
              ...
            ]
          },
          "locations": [
            {
              "latLng": {
                "latitude": 30.323975,
                "longitude": 35.449361
              }
            }
          ]

यहां से, Vision API ने यह बताया कि यह चित्र पेट्रा में खींची गई थी - यह चित्र बेहद आकर्षक है, क्योंकि इस चित्र में दिखने वाले संकेत कम से कम हैं. इस रिस्पॉन्स में दी गई वैल्यू, ऊपर दिए गए labelAnnotations रिस्पॉन्स से मिलती-जुलती होनी चाहिए.

हमें इस लैंडमार्क का mid, #39; का नाम (description), कॉन्फ़िडेंस score के साथ मिलता है. boundingPoly इमेज में वह इलाका दिखाता है जहां लैंडमार्क की पहचान की गई थी. locations कुंजी हमें इस लैंडमार्क के अक्षांश देशांतर निर्देशांक बताती है.

हमने विज़न एपीआई's लेबल, चेहरे, और लैंडमार्क की पहचान करने के तरीकों को देखा है, लेकिन तीन ऐसे और भी तरीके हैं जिन्हें हमने एक्सप्लोर नहीं किया है. अन्य तीन के बारे में जानने के लिए दस्तावेज़ों की गहराई में जाएं:

  • लोगो की पहचान: किसी इमेज में सामान्य लोगो और उसकी जगह की पहचान करें.
  • सुरक्षित खोज की पहचान: यह तय करें कि इमेज में अश्लील कॉन्टेंट है या नहीं. यह यूज़र जनरेटेड कॉन्टेंट वाले किसी भी ऐप्लिकेशन के लिए काम का होता है. आप इन चार चीज़ों के आधार पर इमेज को फ़िल्टर कर सकते हैं: वयस्कों के लिए, मेडिकल, हिंसक, और स्पूफ़ कॉन्टेंट.
  • टेक्स्ट का पता लगाना: इमेज से टेक्स्ट निकालने के लिए ओसीआर चलाएं. यह तरीका, इमेज में मौजूद टेक्स्ट की भाषा का भी पता लगा सकता है.

आपने #39; Vision API से इमेज का विश्लेषण करना सीख लिया है. इस उदाहरण में आपने अपनी इमेज का एपीआई Google Cloud Storage यूआरएल पास किया है. इसके अलावा, आप अपनी इमेज की base64 कोड में बदली गई स्ट्रिंग पास कर सकते हैं.

हमने क्या-क्या शामिल किया है

  • Vision API को कॉल करके किसी क्लाउड मेमोरी बकेट में इमेज का यूआरएल पास करके
  • Vision API #, लेबल, वेब, और लैंडमार्क की पहचान करने के तरीकों का इस्तेमाल करना

अगले चरण