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 में बिलिंग चालू करनी होगी, ताकि 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 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.