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 फ़ंक्शन में वैल्यू डाली जा सकती हैं . टास्क कॉन्फ़िगरेशन के बारे में ज़्यादा जानकारी पाने के लिए, कॉन्फ़िगरेशन के विकल्प देखें.

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

इमेज

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

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

अपने इनपुट को इमेज फ़ाइल या नंपी अरे के तौर पर तैयार करें, फिर उसे 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 इमेज के तौर पर एक सेगमेंट वाला मास्क शामिल है. Pixel यह बताता है कि इनपुट इमेज की कैटगरी इंडेक्स की पहचान की गई. अगर output_type है CONFIDENCE_MASK, आउटपुट एक वेक्टर है जिसका साइज़, कैटगरी नंबर के मुताबिक है. हर सेगमेंट किया गया मास्क, [0,1] की रेंज में मौजूद एक फ़्लोट इमेज है. यह इमेज कैटगरी से जुड़े पिक्सल का कॉन्फ़िडेंस स्कोर.

नीचे दिए गए सेक्शन में, इस टास्क से मिलने वाले डेटा के उदाहरण दिखाए गए हैं:

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

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

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

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

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

ओरिजनल इमेज और कैटगरी मास्क का आउटपुट. इमेज का सोर्स यहां से लिया गया: पास्कल वीओसी 2012 डेटासेट.