Python के लिए इमेज सेगमेंटेशन गाइड

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

कोड का उदाहरण

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

सेटअप

इस सेक्शन में, डेवलपमेंट एनवायरमेंट को सेट अप करने के मुख्य चरणों के बारे में बताया गया है. साथ ही, ऐसे कोड प्रोजेक्ट के बारे में भी बताया गया है जो खास तौर पर इमेज सेगमेंटर का इस्तेमाल करने के लिए बनाए गए हैं. MediaPipe टास्क का इस्तेमाल करने के लिए अपने डेवलपमेंट एनवायरमेंट को सेट अप करने से जुड़ी सामान्य जानकारी के लिए, 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'

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

base_options = BaseOptions(model_asset_path=model_path)

टास्क बनाएं

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

ये नमूने इमेज, वीडियो फ़ाइलों, और लाइव वीडियो स्ट्रीम के लिए टास्क बनाने के तरीके को भी दिखाते हैं.

Image

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
  

वीडियो

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the video mode:
options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
  

लाइव स्ट्रीम

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the live stream mode:
def print_result(result: List[Image], output_image: Image, timestamp_ms: int):
    print('segmented masks size: {}'.format(len(result)))

options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
    

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

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

विकल्प का नाम ब्यौरा वैल्यू रेंज डिफ़ॉल्ट मान
running_mode टास्क के लिए, रनिंग मोड सेट करता है. इसके तीन मोड होते हैं:

इमेज: सिंगल इमेज इनपुट के लिए मोड.

वीडियो: वीडियो के डिकोड किए गए फ़्रेम का मोड.

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

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

अपने इनपुट को इमेज फ़ाइल या numpy कलेक्शन के तौर पर तैयार करें. इसके बाद, उसे mediapipe.Image ऑब्जेक्ट में बदलें. अगर आपका इनपुट, वेबकैम से कोई वीडियो फ़ाइल या लाइव स्ट्रीम है, तो OpenCV जैसी बाहरी लाइब्रेरी का इस्तेमाल करके, अपने इनपुट फ़्रेम को सुन्न कलेक्शन के तौर पर लोड किया जा सकता है.

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)
    

वीडियो

# Use OpenCV’s VideoCapture to load the input video.
# Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS
# You need the frame rate to calculate the timestamp for each frame.
# Loop through each frame in the video using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

लाइव स्ट्रीम

# Use OpenCV’s VideoCapture to start capturing from the webcam.
# Create a loop to read the latest frame from the camera using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

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

टास्क चलाएं

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

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

Image

# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
segmented_masks = segmenter.segment(mp_image)
    

वीडियो

# Perform image segmentation on the provided single image.
# The image segmenter must be created with the video mode.
segmented_masks = segmenter.segment_for_video(mp_image, frame_timestamp_ms)
    

लाइव स्ट्रीम

# Send live image data to perform image segmentation.
# The results are accessible via the `result_callback` provided in
# the `ImageSegmenterOptions` object.
# The image segmenter must be created with the live stream mode.
segmenter.segment_async(mp_image, frame_timestamp_ms)
    

निम्न पर ध्यान दें:

  • वीडियो मोड या लाइव स्ट्रीम मोड में चलाते समय, आपको इमेज सेगमेंटर टास्क को इनपुट फ़्रेम का टाइमस्टैंप भी देना होगा.
  • इमेज या वीडियो मॉडल में चलाते समय, इमेज सेगमेंटर टास्क मौजूदा थ्रेड को तब तक ब्लॉक रखेगा, जब तक कि वह इनपुट इमेज या फ़्रेम की प्रोसेसिंग पूरी नहीं कर लेता.

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

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

इमेज सेगमेंटर, Image डेटा की सूची देता है. अगर output_type CATEGORY_MASK है, तो आउटपुट ऐसी सूची है जिसमें uint8 इमेज के तौर पर सिंगल सेगमेंट वाला मास्क दिया गया है. पिक्सल, इनपुट इमेज की पहचानी गई कैटगरी के इंडेक्स को दिखाता है. अगर output_type CONFIDENCE_MASK है, तो आउटपुट एक वेक्टर है, जिसका साइज़ कैटगरी नंबर होता है. सेगमेंट किया गया हर मास्क, रेंज [0,1] में मौजूद एक फ़्लोट इमेज होती है. यह कैटगरी से जुड़े पिक्सल के कॉन्फ़िडेंस स्कोर को दिखाती है.

यहां दिए गए सेक्शन, इस टास्क के आउटपुट डेटा के उदाहरण दिखाते हैं:

कैटगरी कॉन्फ़िडेंस

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

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

कैटगरी की वैल्यू

नीचे दी गई इमेज में कैटगरी वैल्यू मास्क के लिए टास्क आउटपुट का विज़ुअलाइज़ेशन दिखाया गया है. कैटगरी मास्क की रेंज [0, 255] है और हर पिक्सल वैल्यू मॉडल आउटपुट की विनिंग कैटगरी इंडेक्स को दिखाती है. जीतने वाली कैटगरी के इंडेक्स का वह स्कोर सबसे ज़्यादा होता है जिसे मॉडल पहचान सकता है.

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