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

Detyra MediaPipe Image Segmenter ju lejon të ndani imazhet në rajone bazuar në kategoritë e paracaktuara për aplikimin e efekteve vizuale të tilla si mjegullimi i sfondit. Këto udhëzime ju tregojnë se si të përdorni Segmenterin e Imazhit për aplikacionet Node dhe ueb. 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 për Segmenterin e imazhit ofron një zbatim 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ë ndarjes së imazheve. Mund të shikoni, ekzekutoni dhe modifikoni kodin e shembullit të Segmenterit të Imazhit duke përdorur vetëm shfletuesin tuaj të internetit. Ju gjithashtu mund të rishikoni kodin për këtë shembull në GitHub .

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit në mënyrë specifike për të përdorur Segmenterin e 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 ueb .

Paketat JavaScript

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

Ju mund të instaloni paketat e kërkuara me kodin e mëposhtëm për vendosjen lokale duke përdorur komandën e mëposhtme:

npm install --save @mediapipe/tasks-vision

Nëse dëshironi të importoni kodin e detyrës nëpërmjet një shërbimi të rrjetit të shpërndarjes së përmbajtjes (CDN), shtoni kodin e mëposhtëm në etiketa në skedarin tuaj HTML:

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

Model

Detyra MediaPipe 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 e imazheve, shihni seksionin Modelet e përmbledhjes së detyrave.

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

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

Krijo detyrën

Përdorni një nga funksionet createFrom...() Segmenter Image për të përgatitur detyrën për ekzekutimin e konkluzioneve. Përdorni funksionin createFromModelPath() me një shteg relative ose absolute drejt skedarit të modelit të trajnuar. Nëse modeli juaj tashmë është i ngarkuar në memorie, mund të përdorni metodën createFromModelBuffer() .

Shembulli i kodit më poshtë tregon përdorimin e funksionit createFromOptions() për të vendosur detyrën. Funksioni createFromOptions ju lejon të personalizoni Segmenterin e Imazhit me opsionet e konfigurimit. Për më shumë informacion mbi konfigurimin e detyrës, shihni Opsionet e konfigurimit .

Kodi i mëposhtëm tregon se si të ndërtoni dhe konfiguroni detyrën 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ë zbatim më të plotë të krijimit të një detyre të Segmenterit të Imazhit, shihni shembullin e kodit .

Opsionet e konfigurimit

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

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
outputCategoryMask Nëse vendoset në True , dalja përfshin një maskë segmentimi si një imazh uint8, ku çdo vlerë piksel tregon vlerën e kategorisë fituese. { True, False } False
outputConfidenceMasks Nëse vendoset në True , dalja përfshin një maskë segmentimi si një imazh me vlerë notuese, ku çdo vlerë notuese përfaqëson hartën e rezultateve të besimit të kategorisë. { 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
resultListener Vendos 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ë caktuar 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 trajton gjithashtu parapërpunimin e hyrjes së të dhënave, duke përfshirë ndryshimin e madhësisë, rrotullimin dhe normalizimin e vlerës.

Thirrjet në metodat segment() dhe segmentForVideo() Image Segmenter ekzekutohen në mënyrë sinkronike dhe bllokojnë lidhjen e ndërfaqes së përdoruesit. Nëse segmentoni objekte në korniza video nga kamera e një pajisjeje, çdo detyrë segmentimi bllokon fillin kryesor. Ju mund ta parandaloni këtë duke zbatuar punëtorët e uebit për të ekzekutuar segment() dhe segmentForVideo() në një thread tjetër.

Drejtoni detyrën

Segmentuesi i imazhit përdor metodën segment() me modalitetin e imazhit dhe metodën segmentForVideo() me modalitetin video për të nxjerrë përfundime. Segmentuesi i imazhit i kthen segmentet e zbuluara si të dhëna imazhi në funksionin e kthimit të thirrjes që vendosni kur ekzekutoni një konkluzion për detyrën.

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

Imazhi

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ë zbatim më të plotë të ekzekutimit të një detyre të Segmenterit të imazhit, shihni shembullin e kodit .

Trajtoni dhe shfaqni rezultatet

Pas ekzekutimit të konkluzionit, detyra e Segmenterit të imazhit i kthen të dhënat e imazhit të segmentit në një funksion të kthimit të thirrjes. Përmbajtja e daljes varet nga lloji outputType që keni vendosur kur keni konfiguruar detyrën.

Seksionet e mëposhtme tregojnë shembuj të të dhënave dalëse 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ë. Dalja e maskës së besimit përmban vlerat float midis [0, 1] .

Dy vajza hipur në kalë dhe një vajzë që ecën 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ë figurës kapet, por gjysma e djathtë e figurës jo

Dalja origjinale e maskës së besimit të imazhit dhe kategorisë. Imazhi burim nga grupi i të dhënave Pascal VOC 2012 .

Vlera e kategorisë

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

Dy vajza hipur në kalë dhe një vajzë që ecën 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

Dalja origjinale e imazhit dhe maskës së kategorisë. Imazhi burim nga grupi i të dhënave Pascal VOC 2012 .

Shembulli i kodit të segmentit të imazhit tregon se si të shfaqen rezultatet e segmentimit të kthyera nga detyra, shikoni shembullin e kodit për detaje.