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.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Cloud Shell शुरू करना

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

Cloud Shell चालू करें

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

55efc1aaa7a4d3ad.png

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

9c92662c6a846a5c.png

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. इसमें लगातार पांच जीबी की होम डायरेक्ट्री मिलती है और यह 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. Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
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

Cloud Shell से अपना Google Cloud प्रोजेक्ट मिटाने के लिए:

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

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

लाइसेंस

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