Python के साथ Vision API का इस्तेमाल करना

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

5ab7829fc22b21c4.png

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

इस ट्यूटोरियल में, Python के साथ Vision API का इस्तेमाल करने पर फ़ोकस किया जाएगा.

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

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

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट
  • कोई ब्राउज़र, जैसे कि Chrome या Firefox
  • Python का इस्तेमाल करने की जानकारी

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

सिर्फ़ इसे पढ़ें इसे पढ़ें और एक्सरसाइज़ पूरी करें

Python के साथ अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

Google Cloud की सेवाओं को कितनी रेटिंग देना चाहेंगे/चाहेंगी?

शुरुआती स्तर सामान्य स्तर एडवांस लेवल

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

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

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

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

Cloud Shell शुरू करें

Google Cloud को अपने लैपटॉप से रिमोटली ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें 853e55310c205094.png पर क्लिक करें.

55efc1aaa7a4d3ad.png

अगर Cloud Shell को पहली बार शुरू किया जा रहा है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में बताया गया होगा. अगर आपको इंटरमीडिएट स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

9c92662c6a846a5c.png

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, Google Cloud में काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम ब्राउज़र से किया जा सकता है.

Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपने पुष्टि कर ली है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर सेट कर दिया गया है.

  1. पुष्टि करें कि आपने Cloud Shell में पुष्टि कर ली है. इसके लिए, यह कमांड चलाएं:
gcloud auth list

कमांड का आउटपुट

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं:
gcloud config list project

कमांड का आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो इस कमांड का इस्तेमाल करके इसे सेट किया जा सकता है:

gcloud config set project <PROJECT_ID>

कमांड का आउटपुट

Updated property [core/project].

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

Vision API का इस्तेमाल शुरू करने से पहले, Cloud Shell में यह निर्देश चलाकर एपीआई चालू करें:

gcloud services enable vision.googleapis.com

आपको कुछ ऐसा दिखेगा:

Operation "operations/..." finished successfully.

अब Vision API का इस्तेमाल किया जा सकता है!

अपनी होम डायरेक्ट्री पर जाएं:

cd ~

डिपेंडेंसी को अलग करने के लिए, Python का वर्चुअल एनवायरमेंट बनाएं:

virtualenv venv-vision

वर्चुअल एनवायरमेंट चालू करें:

source venv-vision/bin/activate

IPython और Vision API क्लाइंट लाइब्रेरी इंस्टॉल करें:

pip install ipython google-cloud-vision

आपको कुछ ऐसा दिखेगा:

...
Installing collected packages: ..., ipython, google-cloud-vision
Successfully installed ... google-cloud-vision-3.4.0 ...

अब, Vision API क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है!

अगले चरणों में, आपको IPython नाम के इंटरैक्टिव Python इंटरप्रेटर का इस्तेमाल करना होगा. इसे आपने पिछले चरण में इंस्टॉल किया था. Cloud Shell में ipython चलाकर सेशन शुरू करें:

ipython

आपको कुछ ऐसा दिखेगा:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

अब आप पहला अनुरोध कर सकते हैं...

4. लेबल का पता लगाना

Vision API की मुख्य सुविधाओं में से एक, इमेज में मौजूद ऑब्जेक्ट या इकाइयों की पहचान करना है. इसे लेबल एनोटेशन कहा जाता है. लेबल का पता लगाने की सुविधा, सामान्य चीज़ों, जगहों, गतिविधियों, जानवरों की प्रजातियों, प्रॉडक्ट वगैरह की पहचान करती है. Vision API, इनपुट इमेज लेता है और उस इमेज पर लागू होने वाले सबसे संभावित लेबल दिखाता है. यह इमेज से सबसे ज़्यादा मिलते-जुलते लेबल दिखाता है. साथ ही, यह भी बताता है कि इमेज से लेबल कितने मिलते-जुलते हैं.

इस उदाहरण में, टोक्यो के लोकप्रिय ज़िले सेतागाया की इमेज (ऐलेक्स नाइट की अनुमति से ली गई) पर लेबल का पता लगाया जाएगा:

756f97f0b1e46c38.jpeg

नीचे दिए गए कोड को अपने IPython सेशन में कॉपी करें:

from typing import Sequence

from google.cloud import vision


def analyze_image_from_uri(
    image_uri: str,
    feature_types: Sequence,
) -> vision.AnnotateImageResponse:
    client = vision.ImageAnnotatorClient()

    image = vision.Image()
    image.source.image_uri = image_uri
    features = [vision.Feature(type_=feature_type) for feature_type in feature_types]
    request = vision.AnnotateImageRequest(image=image, features=features)

    response = client.annotate_image(request=request)

    return response


def print_labels(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for label in response.label_annotations:
        print(
            f"{label.score:4.0%}",
            f"{label.description:5}",
            sep=" | ",
        )
        

कुछ समय निकालकर कोड को देखें. साथ ही, यह देखें कि दी गई सुविधाओं के सेट के लिए, इमेज का विश्लेषण करने के लिए annotate_image क्लाइंट लाइब्रेरी के तरीके का इस्तेमाल कैसे किया जाता है.

LABEL_DETECTION सुविधा का इस्तेमाल करके अनुरोध भेजें:

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.LABEL_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_labels(response)

आपको यह आउटपुट मिलेगा:

================================================================================
 97% | Bicycle
 96% | Tire
 94% | Wheel
 91% | Automotive lighting
 89% | Infrastructure
 87% | Bicycle wheel
 86% | Mode of transport
 85% | Building
 83% | Electricity
 82% | Neighbourhood

ऑनलाइन डेमो में, नतीजे इस तरह दिखाए जाते हैं:

2191b0425c9c148f.png

खास जानकारी

इस चरण में, आपने किसी इमेज में मौजूद ऑब्जेक्ट का पता लगाया और उस इमेज से जुड़े सबसे संभावित लेबल दिखाए. लेबल का पता लगाने के बारे में ज़्यादा जानें.

5. टेक्स्ट की पहचान करना

टेक्स्ट का पता लगाने की सुविधा, ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर) की प्रोसेस करती है. यह इमेज में मौजूद टेक्स्ट का पता लगाता है और उसे निकालता है. यह कई भाषाओं के साथ काम करता है. इसमें भाषा की अपने-आप पहचान होने की सुविधा भी है.

इस उदाहरण में, आपको ट्रैफ़िक साइन की इमेज में मौजूद टेक्स्ट का पता लगाना है:

4dedd3fcfd9ad99b.jpeg

नीचे दिए गए कोड को अपने IPython सेशन में कॉपी करें:

def print_text(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for annotation in response.text_annotations:
        vertices = [f"({v.x},{v.y})" for v in annotation.bounding_poly.vertices]
        print(
            f"{repr(annotation.description):42}",
            ",".join(vertices),
            sep=" | ",
        )
        

TEXT_DETECTION सुविधा का इस्तेमाल करके अनुरोध भेजें:

image_uri = "gs://cloud-samples-data/vision/ocr/sign.jpg"
features = [vision.Feature.Type.TEXT_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_text(response)

आपको यह आउटपुट मिलेगा:

================================================================================
'WAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE' | (310,821),(2225,821),(2225,1965),(310,1965)
'WAITING'                                  | (344,821),(2025,879),(2016,1127),(335,1069)
'?'                                        | (2057,881),(2225,887),(2216,1134),(2048,1128)
'PLEASE'                                   | (1208,1230),(1895,1253),(1891,1374),(1204,1351)
'TURN'                                     | (1217,1414),(1718,1434),(1713,1558),(1212,1538)
'OFF'                                      | (1787,1437),(2133,1451),(2128,1575),(1782,1561)
'YOUR'                                     | (1211,1609),(1741,1626),(1737,1747),(1207,1731)
'ENGINE'                                   | (1213,1805),(1923,1819),(1920,1949),(1210,1935)

ऑनलाइन डेमो में, नतीजे इस तरह दिखाए जाते हैं:

9c70fbce871c5fe5.png

खास जानकारी

इस चरण में, आपने किसी इमेज में मौजूद टेक्स्ट का पता लगाया और इमेज में पहचाने गए टेक्स्ट को दिखाया. टेक्स्ट का पता लगाने के बारे में ज़्यादा जानें.

6. लैंडमार्क की पहचान करने की सुविधा

लैंडमार्क की पहचान करने की सुविधा, किसी इमेज में मौजूद लोकप्रिय कुदरती और इंसानों की बनाई गई संरचनाओं की पहचान करती है.

इस उदाहरण में, आपको एफ़िल टावर की इमेज (जॉन टाउनर की ओर से उपलब्ध कराई गई) पर लैंडमार्क का पता लगाने की सुविधा का इस्तेमाल करना है:

fb7801e36884b875.jpeg

नीचे दिए गए कोड को अपने IPython सेशन में कॉपी करें:

def print_landmarks(response: vision.AnnotateImageResponse, min_score: float = 0.5):
    print("=" * 80)
    for landmark in response.landmark_annotations:
        if landmark.score < min_score:
            continue
        vertices = [f"({v.x},{v.y})" for v in landmark.bounding_poly.vertices]
        lat_lng = landmark.locations[0].lat_lng
        print(
            f"{landmark.description:18}",
            ",".join(vertices),
            f"{lat_lng.latitude:.5f}",
            f"{lat_lng.longitude:.5f}",
            sep=" | ",
        )
        

LANDMARK_DETECTION सुविधा का इस्तेमाल करके अनुरोध भेजें:

image_uri = "gs://cloud-samples-data/vision/landmark/eiffel_tower.jpg"
features = [vision.Feature.Type.LANDMARK_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_landmarks(response)

आपको यह आउटपुट मिलेगा:

================================================================================
Trocadéro Gardens  | (303,36),(520,36),(520,371),(303,371) | 48.86160 | 2.28928
Eiffel Tower       | (458,76),(512,76),(512,263),(458,263) | 48.85846 | 2.29435

ऑनलाइन डेमो में, नतीजे इस तरह दिखाए जाते हैं:

2788697365670985.png

खास जानकारी

इस चरण में, आपने आइफ़िल टावर की इमेज में लैंडमार्क का पता लगाया. लैंडमार्क की पहचान करने की सुविधा के बारे में ज़्यादा जानें.

7. चेहरे की पहचान करना

चेहरे की पहचान करने वाली सुविधा, किसी इमेज में मौजूद एक से ज़्यादा चेहरों की पहचान करती है. साथ ही, चेहरे की मुख्य विशेषताओं का पता लगाती है. जैसे, चेहरे के भाव या सिर पर पहने जाने वाले सामान.

इस उदाहरण में, आपको इस तस्वीर में मौजूद चेहरों का पता लगाना है. यह तस्वीर हिमांशु सिंह गुर्जर ने उपलब्ध कराई है:

58c578ece524cf32.jpeg

नीचे दिए गए कोड को अपने IPython सेशन में कॉपी करें:

def print_faces(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for face_number, face in enumerate(response.face_annotations, 1):
        vertices = ",".join(f"({v.x},{v.y})" for v in face.bounding_poly.vertices)
        print(f"# Face {face_number} @ {vertices}")
        print(f"Joy:     {face.joy_likelihood.name}")
        print(f"Exposed: {face.under_exposed_likelihood.name}")
        print(f"Blurred: {face.blurred_likelihood.name}")
        print("-" * 80)
        

FACE_DETECTION सुविधा का इस्तेमाल करके अनुरोध भेजें:

image_uri = "gs://cloud-samples-data/vision/face/faces.jpeg"
features = [vision.Feature.Type.FACE_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_faces(response)

आपको यह आउटपुट मिलेगा:

================================================================================
# Face 1 @ (1077,157),(2146,157),(2146,1399),(1077,1399)
Joy:     VERY_LIKELY
Exposed: VERY_UNLIKELY
Blurred: VERY_UNLIKELY
--------------------------------------------------------------------------------
# Face 2 @ (144,1273),(793,1273),(793,1844),(144,1844)
Joy:     VERY_UNLIKELY
Exposed: VERY_UNLIKELY
Blurred: UNLIKELY
--------------------------------------------------------------------------------
# Face 3 @ (785,167),(1100,167),(1100,534),(785,534)
Joy:     VERY_UNLIKELY
Exposed: LIKELY
Blurred: VERY_LIKELY
--------------------------------------------------------------------------------

ऑनलाइन डेमो में, नतीजे इस तरह दिखाए जाते हैं:

cbb7f59299651b83.png

खास जानकारी

इस चरण में, चेहरे की पहचान की जा सकती है. चेहरे की पहचान करने की सुविधा के बारे में ज़्यादा जानें.

8. ऑब्जेक्ट का पता लगाने की सुविधा

इस उदाहरण में, आपको सेतागाया की उसी पुरानी इमेज (ऐलेक्स नाइट की सौजन्य से) पर ऑब्जेक्ट का पता लगाने की सुविधा का इस्तेमाल करना है:

756f97f0b1e46c38.jpeg

नीचे दिए गए कोड को अपने IPython सेशन में कॉपी करें:

def print_objects(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for obj in response.localized_object_annotations:
        nvertices = obj.bounding_poly.normalized_vertices
        print(
            f"{obj.score:4.0%}",
            f"{obj.name:15}",
            f"{obj.mid:10}",
            ",".join(f"({v.x:.1f},{v.y:.1f})" for v in nvertices),
            sep=" | ",
        )
        

OBJECT_LOCALIZATION सुविधा का इस्तेमाल करके अनुरोध भेजें:

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.OBJECT_LOCALIZATION]

response = analyze_image_from_uri(image_uri, features)
print_objects(response)

आपको यह आउटपुट मिलेगा:

================================================================================
 93% | Bicycle         | /m/0199g   | (0.6,0.6),(0.8,0.6),(0.8,0.9),(0.6,0.9)
 92% | Bicycle wheel   | /m/01bqk0  | (0.6,0.7),(0.7,0.7),(0.7,0.9),(0.6,0.9)
 91% | Tire            | /m/0h9mv   | (0.7,0.7),(0.8,0.7),(0.8,1.0),(0.7,1.0)
 75% | Bicycle         | /m/0199g   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)
 51% | Tire            | /m/0h9mv   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)

ऑनलाइन डेमो में, नतीजे इस तरह दिखाए जाते हैं:

e1c2ca803d874a6b.png

खास जानकारी

इस चरण में, ऑब्जेक्ट का पता लगाने की सुविधा का इस्तेमाल किया जा सका. ऑब्जेक्ट का पता लगाने की सुविधा के बारे में ज़्यादा जानें.

9. एक से ज़्यादा सुविधाएं

आपने Vision API की कुछ सुविधाओं का इस्तेमाल करने का तरीका देखा है. हालांकि, इसमें कई और सुविधाएं भी उपलब्ध हैं. साथ ही, एक ही अनुरोध में कई सुविधाओं का अनुरोध किया जा सकता है.

यहां बताया गया है कि एक साथ सभी अहम जानकारी पाने के लिए, किस तरह का अनुरोध किया जा सकता है:

image_uri = "gs://..."
features = [
    vision.Feature.Type.OBJECT_LOCALIZATION,
    vision.Feature.Type.FACE_DETECTION,
    vision.Feature.Type.LANDMARK_DETECTION,
    vision.Feature.Type.LOGO_DETECTION,
    vision.Feature.Type.LABEL_DETECTION,
    vision.Feature.Type.TEXT_DETECTION,
    vision.Feature.Type.DOCUMENT_TEXT_DETECTION,
    vision.Feature.Type.SAFE_SEARCH_DETECTION,
    vision.Feature.Type.IMAGE_PROPERTIES,
    vision.Feature.Type.CROP_HINTS,
    vision.Feature.Type.WEB_DETECTION,
    vision.Feature.Type.PRODUCT_SEARCH,
    vision.Feature.Type.OBJECT_LOCALIZATION,
]

# response = analyze_image_from_uri(image_uri, features)

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

10. बधाई हो!

5ab7829fc22b21c4.png

आपने Python के साथ Vision API का इस्तेमाल करना सीखा और इमेज का पता लगाने वाली कुछ सुविधाओं को आज़माया!

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

Cloud Shell से डेवलपमेंट एनवायरमेंट को क्लीन अप करने के लिए:

  • अगर आप अब भी IPython सेशन में हैं, तो शेल पर वापस जाएं: exit
  • Python के वर्चुअल एनवायरमेंट का इस्तेमाल बंद करें: deactivate
  • अपना वर्चुअल एनवायरमेंट फ़ोल्डर मिटाएं: cd ~ ; rm -rf ./venv-vision

Google Cloud प्रोजेक्ट मिटाने के लिए, Cloud Shell में जाकर यह तरीका अपनाएं:

  • अपना मौजूदा प्रोजेक्ट आईडी पाएं: PROJECT_ID=$(gcloud config get-value core/project)
  • पक्का करें कि आपको यही प्रोजेक्ट मिटाना है: echo $PROJECT_ID
  • प्रोजेक्ट मिटाएं: gcloud projects delete $PROJECT_ID

ज़्यादा जानें

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.