Python के लिए, इंटरैक्टिव इमेज सेगमेंटेशन गाइड

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

कोड का उदाहरण

इंटरैक्टिव इमेज सेगमेंटर के लिए दिए गए कोड के उदाहरण में, Python में इस टास्क को पूरा करने का तरीका बताया गया है. इस कोड की मदद से, इस टास्क की जांच की जा सकती है और अपना इंटरैक्टिव इमेज सेगमेंटेशन ऐप्लिकेशन बनाने की प्रोसेस शुरू की जा सकती है. सिर्फ़ वेब ब्राउज़र का इस्तेमाल करके, इंटरैक्टिव इमेज सेगमेंटर के उदाहरण के कोड को देखा, चलाया, और उसमें बदलाव किया जा सकता है.

सेटअप

इस सेक्शन में, इंटरैक्टिव इमेज सेगमेंटर का इस्तेमाल करने के लिए, डेवलपमेंट एनवायरमेंट और कोड प्रोजेक्ट सेट अप करने के मुख्य चरणों के बारे में बताया गया है. MediaPipe Tasks का इस्तेमाल करने के लिए, डेवलपमेंट एनवायरमेंट सेट अप करने के बारे में सामान्य जानकारी पाने के लिए, Python के लिए सेटअप गाइड देखें. इसमें प्लैटफ़ॉर्म के वर्शन से जुड़ी ज़रूरी शर्तें भी शामिल हैं. इस उदाहरण के सोर्स कोड की समीक्षा, GitHub पर की जा सकती है

पैकेज

MediaPipe इंटरैक्टिव इमेज सेगमेंटर टास्क के लिए, mediapipe पैकेज की ज़रूरत होती है. ज़रूरी डिपेंडेंसी को इस कमांड की मदद से इंस्टॉल किया जा सकता है:

$ python -m pip install mediapipe

आयात

इंटरैक्टिव इमेज सेगमेंटर टास्क के फ़ंक्शन ऐक्सेस करने के लिए, ये क्लास इंपोर्ट करें:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

मॉडल

MediaPipe इंटरैक्टिव इमेज सेगमेंटर टैस्क के लिए, ऐसे मॉडल की ज़रूरत होती है जिसे इस टैस्क के लिए ट्रेन किया गया हो. इंटरैक्टिव इमेज सेगमेंटर के लिए, ट्रेन किए गए उपलब्ध मॉडल के बारे में ज़्यादा जानने के लिए, टास्क की खास जानकारी वाला मॉडल सेक्शन देखें.

मॉडल चुनें और डाउनलोड करें. इसके बाद, उसे अपनी प्रोजेक्ट डायरेक्ट्री में सेव करें:

model_path = '/absolute/path/to/model.tflite'

model_asset_path पैरामीटर में मॉडल का पाथ बताएं, जैसा कि यहां दिखाया गया है:

base_options = BaseOptions(model_asset_path=model_path)

टास्क बनाना

MediaPipe इंटरैक्टिव इमेज सेगमेंटर टास्क, टास्क को सेट अप करने के लिए create_from_options फ़ंक्शन का इस्तेमाल करता है. create_from_options फ़ंक्शन, कॉन्फ़िगरेशन के विकल्पों को मैनेज करने के लिए वैल्यू स्वीकार करता है. कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानने के लिए, कॉन्फ़िगरेशन के विकल्प लेख पढ़ें. नीचे दिए गए कोड में, इस टास्क को बनाने और कॉन्फ़िगर करने का तरीका बताया गया है.

BaseOptions = mp.tasks.BaseOptions
InteractiveSegmenter = mp.tasks.vision.InteractiveSegmenter
InteractiveSegmenterOptions = mp.tasks.vision.InteractiveSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = InteractiveSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_type=InteractiveSegmenterOptions.OutputType.CATEGORY_MASK)
with InteractiveSegmenter.create_from_options(options) as segmenter:
# segmenter is initialized and ready to use

कॉन्फ़िगरेशन विकल्प

इस टास्क में, Python ऐप्लिकेशन के लिए ये कॉन्फ़िगरेशन विकल्प हैं:

विकल्प का नाम ब्यौरा वैल्यू की रेंज डिफ़ॉल्ट मान
output_category_mask अगर इसे True पर सेट किया जाता है, तो आउटपुट में uint8 इमेज के तौर पर सेगमेंटेशन मास्क शामिल होता है. इसमें हर पिक्सल की वैल्यू से पता चलता है कि पिक्सल, दिलचस्पी के क्षेत्र में मौजूद ऑब्जेक्ट का हिस्सा है या नहीं. {True, False} False
output_confidence_masks अगर True पर सेट किया जाता है, तो आउटपुट में फ़्लोट वैल्यू वाली इमेज के तौर पर सेगमेंटेशन मास्क शामिल होता है. इसमें हर फ़्लोट वैल्यू, इस बात की संभावना दिखाती है कि पिक्सल, दिलचस्पी के इलाके में मौजूद ऑब्जेक्ट का हिस्सा है. {True, False} True
display_names_locale टास्क के मॉडल के मेटाडेटा में दिए गए डिसप्ले नेम के लिए, लेबल की भाषा सेट करता है. हालांकि, ऐसा तब ही किया जाता है, जब वह भाषा उपलब्ध हो. अंग्रेज़ी के लिए, डिफ़ॉल्ट तौर पर en होता है. TensorFlow Lite मेटाडेटा राइटर एपीआई का इस्तेमाल करके, कस्टम मॉडल के मेटाडेटा में स्थानीय भाषा के लेबल जोड़े जा सकते हैं स्थानीय भाषा का कोड en

डेटा तैयार करना

अपने इनपुट को इमेज फ़ाइल या numpy ऐरे के तौर पर तैयार करें. इसके बाद, उसे mediapipe.Image ऑब्जेक्ट में बदलें.

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)

इंटरैक्टिव इमेज सेगमेंटर के लिए डेटा तैयार करने का उदाहरण देखने के लिए, कोड का उदाहरण देखें.

टास्क चलाना

इंटरैक्टिव इमेज सेगमेंटर, अनुमान ट्रिगर करने के लिए segment फ़ंक्शन का इस्तेमाल करता है. इमेज के सेगमेंटेशन के लिए, इनपुट डेटा को पहले से प्रोसेस करना, सेगमेंटेशन मॉडल चलाना, और रॉ मॉडल के आउटपुट को सेगमेंट किए गए मास्क में पोस्ट-प्रोसेस करना शामिल है.

यहां दिए गए कोड के उदाहरण में, टास्क मॉडल की मदद से प्रोसेसिंग करने का तरीका बताया गया है.

RegionOfInterest = vision.InteractiveSegmenterRegionOfInterest
# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
roi = RegionOfInterest(format=RegionOfInterest.Format.KEYPOINT,
                          keypoint=NormalizedKeypoint(x, y))
segmented_masks = segmenter.segment(mp_image, roi)

इंटरैक्टिव इमेज सेगमेंटर के अनुमान चलाने का बेहतर उदाहरण देखने के लिए, कोड का उदाहरण देखें.

नतीजों को मैनेज और दिखाना

इंटरैक्टिव इमेज सेगमेंटर के आउटपुट के नतीजे, Image डेटा की सूची होती है. इसमें कैटगरी मास्क, कॉन्फ़िडेंस मास्क या दोनों शामिल हो सकते हैं. यह इस बात पर निर्भर करता है कि आपने टास्क को कॉन्फ़िगर करते समय क्या सेट किया था. अगर output_category_mask को True पर सेट किया जाता है, तो आउटपुट एक सूची होती है, जिसमें uint8 इमेज के तौर पर एक सेगमेंट वाला मास्क होता है. पिक्सल वैल्यू से पता चलता है कि वह ऑब्जेक्ट के हिस्से में है या नहीं. अगर output_confidence_masks को True पर सेट किया जाता है, तो आउटपुट में उन चैनलों की सूची दिखती है जिनमें [0,1] की रेंज में पिक्सल वैल्यू होती है. यह रेंज, दिलचस्पी के ऑब्जेक्ट से जुड़े पिक्सल के कॉन्फ़िडेंस स्कोर को दिखाती है.

इस टास्क के आउटपुट डेटा के बारे में ज़्यादा जानकारी इन सेक्शन में दी गई है:

कैटगरी मास्क

नीचे दी गई इमेज में, कैटगरी वैल्यू मास्क के लिए टास्क के आउटपुट को विज़ुअलाइज़ किया गया है. इसमें, दिलचस्पी के पॉइंट एरिया को दिखाया गया है. हर पिक्सल एक uint8 वैल्यू होती है. इससे पता चलता है कि पिक्सल, दिलचस्पी के क्षेत्र में मौजूद ऑब्जेक्ट का हिस्सा है या नहीं. दूसरी इमेज में काले और सफ़ेद रंग का सर्कल, चुने गए विषय के बारे में बताता है.

पत्तियों के ढेर के बीच खड़ा कुत्ता पिछली इमेज में कुत्ते का आउटलाइन

ओरिजनल इमेज और कैटगरी मास्क का आउटपुट. Pascal VOC 2012 के डेटासेट से ली गई सोर्स इमेज.

कॉन्फ़िडेंस मास्क

कॉन्फ़िडेंस मास्क के आउटपुट में, हर इमेज इनपुट चैनल के लिए [0, 1] के बीच फ़्लोट वैल्यू होती हैं. ज़्यादा वैल्यू से यह पता चलता है कि इमेज पिक्सल, दिलचस्पी के इलाके में मौजूद ऑब्जेक्ट का हिस्सा है.