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:
- Klononi depon e git duke përdorur komandën e mëposhtme:
git clone https://github.com/google-ai-edge/mediapipe-samples
- 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:
- InteractiveSegmentationHelper.kt - Inicializon detyrën Interactive Image Segmenter dhe trajton përzgjedhjen e modelit dhe delegatit.
- OverlayView.kt - Trajton dhe formaton rezultatet e segmentimit.
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.
Në 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
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
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
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 LiteerrorListener
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 user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s 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);