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

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

कोड का उदाहरण

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

सेटअप

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

पैकेज

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

$ python -m pip install mediapipe

आयात

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

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

मॉडल

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

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

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

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

base_options = BaseOptions(model_asset_path=model_path)

टास्क बनाना

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

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

इमेज

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 टास्क के लिए रनिंग मोड सेट करता है. इसके तीन मोड हैं:

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

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

LIVE_STREAM: कैमरे से मिले इनपुट डेटा की लाइव स्ट्रीम के लिए मोड. इस मोड में, नतीजे असींक्रोनस तरीके से पाने के लिए, एक listener सेट अप करने के लिए, resultListener को कॉल करना होगा.
{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 मेटाडेटा राइटर एपीआई का इस्तेमाल करके, कस्टम मॉडल के मेटाडेटा में स्थानीय भाषा के लेबल जोड़े जा सकते हैं स्थानीय भाषा का कोड en
result_callback जब इमेज सेगमेंटर LIVE_STREAM मोड में हो, तब सेगमेंटेशन के नतीजे पाने के लिए, रिज़ल्ट लिसनर को असिंक्रोनस तरीके से सेट करता है. इसका इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को LIVE_STREAM पर सेट किया गया हो लागू नहीं लागू नहीं

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

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

इमेज

# 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 फ़ंक्शन का इस्तेमाल करता है. इमेज सेगमेंटेशन के लिए, इसमें इनपुट डेटा को पहले से प्रोसेस करना, सेगमेंटेशन मॉडल चलाना, और रॉ मॉडल के आउटपुट को सेगमेंट किए गए मास्क में पोस्ट-प्रोसेस करना शामिल है.

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

इमेज

# 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 के डेटासेट से ली गई सोर्स इमेज.