Udhëzues për segmentimin e imazheve për ueb

Detyra MediaPipe Image Segmenter ju lejon të ndani imazhet në rajone bazuar në kategori të paracaktuara për aplikimin e efekteve vizuale, siç është turbullimi i sfondit. Këto udhëzime ju tregojnë se si të përdorni Image Segmenter për aplikacionet Node dhe web. Për më shumë informacion në lidhje me aftësitë, modelet dhe opsionet e konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Kodi shembull për Image Segmenter ofron një implementim të plotë të kësaj detyre në JavaScript për referencën tuaj. Ky kod ju ndihmon të testoni këtë detyrë dhe të filloni ndërtimin e aplikacionit tuaj të segmentimit të imazheve. Mund ta shikoni, ekzekutoni dhe modifikoni shembullin e Image Segmenter duke përdorur vetëm shfletuesin tuaj të internetit.

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit posaçërisht për të përdorur Image Segmenter. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e detyrave MediaPipe, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për ueb .

Paketat JavaScript

Kodi i Segmentuesit të Imazheve është i disponueshëm përmes paketës MediaPipe @mediapipe/tasks-vision NPM . Mund t'i gjeni dhe shkarkoni këto biblioteka nga lidhjet e dhëna në udhëzuesin e Konfigurimit të platformës.

Mund të instaloni paketat e kërkuara me kodin e mëposhtëm për konfigurimin lokal duke përdorur komandën e mëposhtme:

npm install --save @mediapipe/tasks-vision

Nëse doni të importoni kodin e detyrës nëpërmjet një shërbimi të rrjetit të ofrimit të përmbajtjes (CDN), shtoni kodin e mëposhtëm në etiketë në skedarin tuaj HTML:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.mjs"
    crossorigin="anonymous"></script>
</head>

Model

Detyra MediaPipe Image Segmenter kërkon një model të trajnuar që është i pajtueshëm me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Image Segmenter, shihni seksionin Modelet e përmbledhjes së detyrës.

Zgjidhni dhe shkarkoni një model dhe më pas ruajeni atë brenda direktorisë së projektit tuaj:

<dev-project-root>/app/shared/models/

Krijo detyrën

Përdorni një nga funksionet createFrom...() të Image Segmenter për të përgatitur detyrën për ekzekutimin e inferencave. Përdorni funksionin createFromModelPath() me një shteg relativ ose absolut për në skedarin e modelit të trajnuar. Nëse modeli juaj është ngarkuar tashmë në memorie, mund të përdorni metodën createFromModelBuffer() .

Shembulli i kodit më poshtë demonstron përdorimin e funksionit createFromOptions() për të konfiguruar detyrën. Funksioni createFromOptions ju lejon të personalizoni Segmentuesin e Imazhit me opsione konfigurimi. Për më shumë informacion mbi konfigurimin e detyrës, shihni Opsionet e Konfigurimit .

Kodi i mëposhtëm tregon se si të ndërtohet dhe konfigurohet detyra me opsione të personalizuara:

runningMode = "IMAGE";

async function createImageSegmenter() {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
  );

  imageSegmenter = await ImageSegmenter.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath:
        "https://storage.googleapis.com/mediapipe-assets/deeplabv3.tflite?generation=1661875711618421",
    },
    outputCategoryMask: true,
    outputConfidenceMasks: false
    runningMode: runningMode
  });
}
createImageSegmenter();

Për një implementim më të plotë të krijimit të një detyre të Segmentuesit të Imazheve, shihni shembullin e kodit .

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Web:

Emri i opsionit Përshkrimi Diapazoni i Vlerave Vlera e parazgjedhur
outputCategoryMask Nëse vendoset në True , rezultati përfshin një maskë segmentimi si një imazh uint8, ku çdo vlerë pikseli tregon vlerën e kategorisë fituese. { True, False } False
outputConfidenceMasks Nëse vendoset në True , rezultati përfshin një maskë segmentimi si një imazh me vlerë lundruese, ku çdo vlerë lundruese përfaqëson hartën e rezultateve të besimit të kategorisë. { True, False } True
displayNamesLocale Cakton gjuhën e etiketave që do të përdoren për emrat e shfaqur të dhënë në metadatat e modelit të detyrës, nëse është e disponueshme. Vlera e parazgjedhur është en për anglishten. Mund të shtoni etiketa të lokalizuara në metadatat e një modeli të personalizuar duke përdorur API-në e Shkruesit të Metadatave TensorFlow Lite. Kodi lokal en
resultListener Cakton dëgjuesin e rezultateve që të marrë rezultatet e segmentimit në mënyrë asinkrone kur segmentuesi i imazhit është në modalitetin LIVE_STREAM . Mund të përdoret vetëm kur modaliteti i ekzekutimit është vendosur në LIVE_STREAM N/A N/A

Përgatitni të dhënat

Segmentuesi i Imazheve mund të segmentojë objektet në imazhe në çdo format të mbështetur nga shfletuesi pritës. Detyra gjithashtu trajton përpunimin paraprak të të dhënave të futura, duke përfshirë ndryshimin e madhësisë, rrotullimin dhe normalizimin e vlerave.

Thirrjet në metodat Image Segmenter segment() dhe segmentForVideo() ekzekutohen në mënyrë sinkrone dhe bllokojnë fijen e ndërfaqes së përdoruesit. Nëse segmentoni objekte në kuadro video nga kamera e një pajisjeje, çdo detyrë segmentimi bllokon fijen kryesore. Mund ta parandaloni këtë duke zbatuar punëtorët e uebit për të ekzekutuar segment() dhe segmentForVideo() në një fije tjetër.

Ekzekuto detyrën

Segmentuesi i Imazhit përdor metodën segment() me modalitetin e imazhit dhe metodën segmentForVideo() me modalitetin video për të shkaktuar përfundime. Segmentuesi i Imazhit i kthen segmentet e zbuluara si të dhëna imazhi në një funksion rikthimi që ju e vendosni kur ekzekutoni një përfundim për detyrën.

Kodi i mëposhtëm tregon se si të ekzekutohet përpunimi me modelin e detyrës:

Imazh

const image = document.getElementById("image") as HTMLImageElement;
imageSegmenter.segment(image, callback);

Video

async function renderLoop(): void {
  const video = document.getElementById("video");
  let startTimeMs = performance.now();

  imageSegmenter.segmentForVideo(video, startTimeMs, callbackForVideo);

  requestAnimationFrame(() => {
    renderLoop();
  });
}

Për një implementim më të plotë të ekzekutimit të një detyre të Segmentuesit të Imazheve, shihni shembullin .

Trajtoni dhe shfaqni rezultatet

Pas ekzekutimit të inferencës, detyra Image Segmenter kthen të dhënat e imazhit të segmentit në një funksion rikthimi. Përmbajtja e rezultatit varet nga outputType që keni vendosur kur keni konfiguruar detyrën.

Seksionet e mëposhtme tregojnë shembuj të të dhënave të dala nga kjo detyrë:

Besimi i kategorisë

Imazhet e mëposhtme tregojnë një vizualizim të rezultatit të detyrës për një maskë besimi të kategorisë. Rezultati i maskës së besimit përmban vlera lundruese midis [0, 1] .

Dy vajza duke hipur mbi një kalë dhe një vajzë duke ecur pranë kalitMaska e imazhit që përshkruan formën e vajzave dhe kalit nga fotografia e mëparshme. Gjysma e majtë e skicës së imazhit është kapur, por gjysma e djathtë e imazhit nuk është.

Imazhi origjinal dhe dalja e maskës së besimit të kategorisë. Imazhi burimor nga të dhënat Pascal VOC 2012 .

Vlera e kategorisë

Imazhet e mëposhtme tregojnë një vizualizim të rezultatit të detyrës për një maskë me vlerë kategorie. Diapazoni i maskës së kategorisë është [0, 255] dhe çdo vlerë pikseli përfaqëson indeksin e kategorisë fituese të rezultatit të modelit. Indeksi i kategorisë fituese ka rezultatin më të lartë midis kategorive që modeli mund të njohë.

Dy vajza duke hipur mbi një kalë dhe një vajzë duke ecur pranë kalitMaska e imazhit që përshkruan formën e vajzave dhe kalit nga imazhi i mëparshëm. Forma e të tre vajzave dhe kalit janë maskuar me saktësi.

Imazhi origjinal dhe dalja e maskës së kategorisë. Imazhi burimor nga të dhënat Pascal VOC 2012 .

Kodi shembullor i Image Segmenter demonstron se si të shfaqen rezultatet e segmentimit të kthyera nga detyra, shihni shembullin për detaje.