1. खास जानकारी
Vision API की मदद से डेवलपर, ऐप्लिकेशन में दृष्टि की पहचान करने वाली सुविधाओं को आसानी से इंटिग्रेट कर सकते हैं. इनमें इमेज को लेबल करना, चेहरे और लैंडमार्क की पहचान, ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर), और अश्लील कॉन्टेंट को टैग करना शामिल है.
इस ट्यूटोरियल में, Python के साथ Vision API को इस्तेमाल करने पर फ़ोकस किया गया है.
आपको इनके बारे में जानकारी मिलेगी
- अपना एनवायरमेंट सेट अप करने का तरीका
- लेबल की पहचान करने का तरीका
- टेक्स्ट की पहचान करने का तरीका
- लैंडमार्क की पहचान करने का तरीका
- चेहरे की पहचान करने का तरीका
- ऑब्जेक्ट की पहचान करने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
सर्वे
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
Python के साथ अपने अनुभव को आप कितनी रेटिंग देंगे?
Google Cloud की सेवाओं का इस्तेमाल करने का आपका अनुभव कैसा रहा?
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको अपना प्रोजेक्ट आईडी बताना होगा. आम तौर पर, इसकी पहचान
PROJECT_ID
के रूप में की जाती है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. दूसरा तरीका यह है कि आप खुद भी आज़माकर देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. साथ ही, यह प्रोजेक्ट के खत्म होने तक बना रहता है. - आपकी जानकारी के लिए, प्रोजेक्ट नंबर नाम की एक तीसरी वैल्यू दी गई है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, बिलिंग से बचने के लिए संसाधनों को बंद करें. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
Cloud Shell शुरू करना
Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें पर क्लिक करें.
अगर आपने Cloud Shell का इस्तेमाल पहली बार किया है, तो आपको बीच में आने वाली स्क्रीन दिखेगी. इसमें यह बताया जाएगा कि यह क्या है. अगर आपको बीच के लेवल पर मिलने वाली स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.
प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.
इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. इसमें लगातार पांच जीबी की होम डायरेक्ट्री मिलती है और यह Google Cloud में काम करती है. यह नेटवर्क की परफ़ॉर्मेंस और ऑथेंटिकेशन को बेहतर बनाने में मदद करती है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम ब्राउज़र से किया जा सकता है.
Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि हो चुकी है और प्रोजेक्ट आपके प्रोजेक्ट आईडी पर सेट है.
- यह पुष्टि करने के लिए 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`
- 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, इनपुट इमेज लेता है और उस इमेज पर लागू होने वाले संभावित लेबल दिखाता है. यह इमेज से सबसे ज़्यादा मेल खाने वाले लेबल के साथ-साथ, इमेज से मिलते-जुलते नतीजे का कॉन्फ़िडेंस स्कोर दिखाता है.
इस उदाहरण में, टोक्यो के एक लोकप्रिय ज़िले सेटागाया की इमेज (एलेक्स नाइट के सौजन्य से) पर लेबल की पहचान की जा सकेगी:
यहां दिए गए कोड को अपने 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
ऑनलाइन डेमो में नतीजे इस तरह दिखाए गए हैं:
खास जानकारी
इस तरीके का इस्तेमाल करके, किसी इमेज पर लेबल की पहचान की जा सकती है. साथ ही, उस इमेज से जुड़े लेबल दिखाए जा सकते हैं. लेबल की पहचान करने के बारे में और पढ़ें.
5. टेक्स्ट की पहचान करें
टेक्स्ट की पहचान करने वाली सुविधा, ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर) की सुविधा देती है. यह किसी इमेज में मौजूद टेक्स्ट का पता लगाकर, उसे एक्सट्रैक्ट करता है. साथ ही, इसे कई तरह की भाषाओं में इस्तेमाल किया जा सकता है. इसमें अपने-आप भाषा की पहचान करने की सुविधा भी है.
इस उदाहरण में, आप किसी ट्रैफ़िक चिह्न इमेज पर टेक्स्ट की पहचान करेंगे:
यहां दिए गए कोड को अपने 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)
ऑनलाइन डेमो में नतीजे इस तरह दिखाए गए हैं:
खास जानकारी
इस चरण में, आपने किसी इमेज पर टेक्स्ट की पहचान की और इमेज में मौजूद टेक्स्ट की पहचान की. टेक्स्ट की पहचान करने के बारे में और पढ़ें.
6. लैंडमार्क की पहचान करें
लैंडमार्क की पहचान करने की सुविधा की मदद से, किसी इमेज में मौजूद प्राकृतिक और मानव-निर्मित स्ट्रक्चर की पहचान की जा सकती है.
इस उदाहरण में, आप एफ़िल टावर की किसी इमेज (जॉन टाउनर के सौजन्य से) पर लैंडमार्क पहचान करेंगे:
यहां दिए गए कोड को अपने 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
ऑनलाइन डेमो में नतीजे इस तरह दिखाए गए हैं:
खास जानकारी
इस तरीके से, आपने एफ़िल टावर की इमेज पर लैंडमार्क का पता लगाया. लैंडमार्क का पता लगाने के बारे में और पढ़ें.
7. चेहरे की पहचान करें
चेहरे की सुविधाओं का पता लगाने की सुविधा की मदद से, किसी इमेज में मौजूद कई चेहरों के बारे में पता लगाया जा सकता है. साथ ही, चेहरे से जुड़े मुख्य विशेषताओं (जैसे, भावनात्मक स्थिति या हेडवियर पहनने) का भी पता लगाया जाता है.
इस उदाहरण में, आप नीचे दी गई तस्वीर में चेहरों का पता लगाएंगे (हिमांशु सिंह गुर्जर के सौजन्य से):
यहां दिए गए कोड को अपने 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 --------------------------------------------------------------------------------
ऑनलाइन डेमो में नतीजे इस तरह दिखाए गए हैं:
खास जानकारी
इस चरण में, चेहरे की पहचान करने की सुविधा चालू की जा सकी. चेहरे की पहचान के बारे में और पढ़ें.
8. ऑब्जेक्ट का पता लगाएं
इस उदाहरण में, सेतागाया की उसी पिछली इमेज (एलेक्स नाइट के सौजन्य से) पर ऑब्जेक्ट की पहचान की जाएगी:
यहां दिए गए कोड को अपने 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)
ऑनलाइन डेमो में नतीजे इस तरह दिखाए गए हैं:
खास जानकारी
इस चरण में, ऑब्जेक्ट की पहचान की जा सकी. ऑब्जेक्ट का पता लगाने के बारे में और पढ़ें.
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. बधाई हो!
आपने 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
ज़्यादा जानें
- अपने ब्राउज़र में ऑनलाइन डेमो की जांच करें: https://cloud.google.com/vision
- Vision API दस्तावेज़: https://cloud.google.com/vision/docs
- Google Cloud पर Python: https://cloud.google.com/python
- Python के लिए Cloud क्लाइंट लाइब्रेरी: https://github.com/googleapis/google-cloud-python
लाइसेंस
इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.