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

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

कोड का उदाहरण

MediaPipe टास्क कोड का उदाहरण, इंटरैक्टिव इमेज सेगमेंटर को लागू करने का एक आसान तरीका है Android के लिए ऐप. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है यह उदाहरण, डिवाइस की गैलरी से चुनी गई इमेज पर काम करता है.

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

कोड डाउनलोड करें

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

उदाहरण कोड डाउनलोड करने के लिए:

  1. नीचे दिए गए कमांड का इस्तेमाल करके git रिपॉज़िटरी का क्लोन बनाएं:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. इसके अलावा, स्पार्स चेकआउट का इस्तेमाल करने के लिए अपना git इंस्टेंस कॉन्फ़िगर करें, इसलिए आपके पास सिर्फ़ इंटरैक्टिव इमेज सेगमेंटर के उदाहरण ऐप्लिकेशन की फ़ाइलें हैं:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/interactive_segmentation/android
    

उदाहरण के तौर पर दिए गए कोड का लोकल वर्शन बनाने के बाद, प्रोजेक्ट को इंपोर्ट किया जा सकता है और इस ऐप्लिकेशन को चलाएं. निर्देशों के लिए, इसे देखें Android के लिए सेटअप गाइड.

मुख्य कॉम्पोनेंट

इन फ़ाइलों में इस इमेज का ज़रूरी कोड शामिल है सेगमेंटेशन का उदाहरण:

  • InteractiveSegmentationHelper.kt - इंटरैक्टिव इमेज सेगमेंटर टास्क को शुरू करता है. साथ ही, मॉडल और डेलिगेट को हैंडल करता है चुनें.
  • OverlayView.kt - सेगमेंटेशन के नतीजों को हैंडल और फ़ॉर्मैट करता है.

सेटअप

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

डिपेंडेंसी

इंटरैक्टिव इमेज सेगमेंटर, com.google.mediapipe:tasks-vision लाइब्रेरी का इस्तेमाल करता है. इसे जोड़ें आपकी build.gradle फ़ाइल पर निर्भरता Android ऐप्लिकेशन डेवलपमेंट प्रोजेक्ट. इसके साथ ज़रूरी डिपेंडेंसी इंपोर्ट करें यह कोड डालें:

dependencies {
    ...
    implementation 'com.google.mediapipe:tasks-vision:latest.release'
}

मॉडल

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

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

<dev-project-root>/src/main/assets

पाथ की जानकारी देने के लिए, BaseOptions.Builder.setModelAssetPath() तरीके का इस्तेमाल करें इस्तेमाल किया जाता है. यह तरीका अगले उदाहरण में दिए गए कोड उदाहरण में दिखाया गया है सेक्शन में जाएं.

इंटरैक्टिव इमेज सेगमेंटर में उदाहरण कोड, मॉडल की जानकारी InteractiveSegmenterHelper.kt में दी गई है क्लास को setupInteractiveSegmenter() फ़ंक्शन में शामिल करें.

टास्क बनाएं

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

InteractiveSegmenterOptions options =
  InteractiveSegmenterOptions.builder()
    .setBaseOptions(
      BaseOptions.builder().setModelAssetPath("model.tflite").build())
    .setOutputCategoryMask(true)
    .setOutputConfidenceMasks(false)
    .setResultListener((result, inputImage) -> {
         // Process the segmentation result here.
    })
    .setErrorListener(exception -> {
         // Process the segmentation errors here.
    })    
    .build();
interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);

इस टास्क को सेट अप करने के तरीके के बारे में ज़्यादा जानने के लिए, यहां जाएं: InteractiveSegmenterHelper क्लास setupInteractiveSegmenter() फ़ंक्शन.

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

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

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

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

इंटरैक्टिव इमेज सेगमेंटर, इमेज के साथ काम करता है और यह टास्क डेटा इनपुट को हैंडल करता है प्री-प्रोसेसिंग, जिसमें साइज़ बदलना, रोटेशन, और वैल्यू नॉर्मलाइज़ेशन शामिल है. आपको इनपुट इमेज को इसमें बदलना होगा com.google.mediapipe.framework.image.MPImage ऑब्जेक्ट को टास्क.

import com.google.mediapipe.framework.image.BitmapImageBuilder;
import com.google.mediapipe.framework.image.MPImage;

// Load an image on the users device as a Bitmap object using BitmapFactory.

// Convert an Androids Bitmap object to a MediaPipes Image object.
MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create(
    NormalizedKeypoint.create(
        normX * it.width,
        normY * it.height
    )
);

ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);

इंटरैक्टिव इमेज सेगमेंटर के उदाहरण कोड में, segment फ़ंक्शन InteractiveSegmenterHelper.kt फ़ाइल से लिए जाते हैं.

नतीजों को हैंडल करना और दिखाना

रनिंग अनुमान पर, इंटरैक्टिव इमेज सेगमेंटर टास्क, ImageSegmenterResult ऑब्जेक्ट जिसमें सेगमेंट करने का टास्क. आउटपुट के कॉन्टेंट में कैटगरी मास्क, कॉन्फ़िडेंस मास्क या फिर दोनों. यह इस बात पर निर्भर करता है कि आपने कौनसा मास्क सेट किया कॉन्फ़िगर कर दिया.

इन सेक्शन में, इस टास्क से मिलने वाले डेटा के बारे में ज़्यादा जानकारी दी गई है:

श्रेणी मास्क

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

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

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

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