Udhëzues interaktiv i segmentimit të imazheve për Android

Detyra MediaPipe Interactive Image Segmenter merr një vendndodhje në një imazh, vlerëson kufijtë e një objekti në atë vendndodhje dhe kthen segmentimin për objektin si të dhëna imazhi. Këto udhëzime ju tregojnë se si të përdorni Segmentuesin Interaktiv të Imazheve me aplikacionet Android. Shembulli i kodit i përshkruar në këto udhëzime është i disponueshëm në GitHub . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Shembulli i kodit MediaPipe Tasks është një zbatim i thjeshtë i një aplikacioni Interactive Image Segmenter për Android. Shembulli funksionon me imazhe të zgjedhura nga galeria e pajisjes.

Mund ta përdorni aplikacionin si pikënisje për aplikacionin tuaj Android ose t'i referoheni kur modifikoni një aplikacion ekzistues. Shembulli i kodit të Segmenterit Interaktiv të Imazhit është pritur në GitHub .

Shkarkoni kodin

Udhëzimet e mëposhtme ju tregojnë se si të krijoni një kopje lokale të kodit shembull duke përdorur mjetin e linjës së komandës git .

Për të shkarkuar kodin shembull:

  1. Klononi depon e git duke përdorur komandën e mëposhtme:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Opsionale, konfiguroni shembullin tuaj të git për të përdorur arkëtimin e rrallë, në mënyrë që të keni vetëm skedarët për shembullin e aplikacionit Interactive Image Segmenter:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/interactive_segmentation/android
    

Pas krijimit të një versioni lokal të kodit shembull, mund ta importoni projektin në Android Studio dhe të ekzekutoni aplikacionin. Për udhëzime, shihni Udhëzuesin e konfigurimit për Android .

Komponentët kryesorë

Skedarët e mëposhtëm përmbajnë kodin vendimtar për këtë aplikacion shembulli të segmentimit të imazheve:

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit për të përdorur Segmentuesin Interaktiv të Imazhit. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e detyrave të MediaPipe, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për Android .

varësitë

Segmentuesi interaktiv i imazheve përdor bibliotekën com.google.mediapipe:tasks-vision . Shtoni këtë varësi në skedarin build.gradle të projektit tuaj të zhvillimit të aplikacionit Android. Importoni varësitë e kërkuara me kodin e mëposhtëm:

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

Model

Detyra MediaPipe Interactive Image Segmenter kërkon një model të trajnuar që është në përputhje me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Segmenterin Interaktiv të Imazhit, shihni seksionin Modelet e përmbledhjes së detyrave.

Zgjidhni dhe shkarkoni modelin dhe më pas ruajeni në direktorinë e projektit tuaj:

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

Përdorni metodën BaseOptions.Builder.setModelAssetPath() për të specifikuar shtegun e përdorur nga modeli. Kjo metodë tregohet në shembullin e kodit në pjesën tjetër.

kodin e shembullit Interactive Image Segmenter, modeli përcaktohet në klasën InteractiveSegmenterHelper.kt në funksionin setupInteractiveSegmenter() .

Krijo detyrën

Ju mund të përdorni funksionin createFromOptions për të krijuar detyrën. Funksioni createFromOptions pranon opsionet e konfigurimit duke përfshirë llojet e daljes së maskës. Për më shumë informacion mbi opsionet e konfigurimit, shihni Përmbledhjen e konfigurimit .

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);
outputCategoryMask Nëse vendoset në True , dalja përfshin një maskë segmentimi si një imazh uint8, ku çdo vlerë piksel tregon nëse piksel është pjesë e objektit të vendosur në zonën e interesit. { True, False } False outputConfidenceMasks Nëse vendoset në True , dalja përfshin një maskë segmentimi si një imazh me vlerë notuese, ku çdo vlerë float përfaqëson besimin se piksel është pjesë e objektit të vendosur në zonën e interesit. { True, False } True displayNamesLocale Vendos gjuhën e etiketave për t'u përdorur për emrat e shfaqur të dhëna në meta të dhënat e modelit të detyrës, nëse disponohet. Parazgjedhja është en për anglisht. Ju mund të shtoni etiketa të lokalizuara në meta të dhënat e një modeli të personalizuar duke përdorur API-në e shkrimtarit metadata TensorFlow Lite Kodi lokal sq errorListener Vendos një dëgjues opsional gabimi. N/A Nuk është vendosur

Përgatitni të dhënat

Segmentuesi interaktiv i imazheve punon me imazhe dhe detyra trajton parapërpunimin e hyrjes së të dhënave, duke përfshirë ndryshimin e madhësisë, rrotullimin dhe normalizimin e vlerës. Ju duhet ta konvertoni imazhin e hyrjes në një objekt com.google.mediapipe.framework.image.MPImage përpara se ta kaloni atë në detyrë.

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);