Udhëzues për zbulimin e fytyrës për ueb

Detyra MediaPipe Face Detector ju lejon të zbuloni fytyrat në një imazh ose video. Ju mund ta përdorni këtë detyrë për të lokalizuar fytyrat dhe tiparet e fytyrës brenda një kornize. Kjo detyrë përdor një model të mësimit të makinës (ML) që funksionon me imazhe të vetme ose një rrjedhë të vazhdueshme imazhesh. Detyra nxjerr vendndodhjet e fytyrës, së bashku me pikat kryesore të mëposhtme të fytyrës: syri i majtë, syri i djathtë, maja e hundës, goja, tragjia e syrit të majtë dhe tragjia e syrit të djathtë.

Këto udhëzime ju tregojnë se si të përdorni Detektorin e Fytyrës për aplikacionet në ueb dhe JavaScript. 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 Detektorin e Fytyrës ofron një zbatim të plotë të kësaj detyre në JavaScript për referencën tuaj. Ky kod të ndihmon të testosh këtë detyrë dhe të fillosh të ndërtosh aplikacionin tënd të zbulimit të fytyrës. Mund të shikoni, ekzekutoni dhe modifikoni kodin shembull të Detektorit të Fytyrës duke përdorur vetëm shfletuesin tuaj të internetit.

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit posaçërisht për të përdorur Detektorin e Fytyrës. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit të uebit dhe JavaScript, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për ueb .

Paketat JavaScript

Kodi i Detektorit të Fytyrës ofrohet përmes paketës MediaPipe @mediapipe/tasks-vision NPM . Ju mund t'i gjeni dhe shkarkoni këto biblioteka duke ndjekur udhëzimet në udhëzuesin e konfigurimit të platformës.

Ju mund të instaloni paketat e kërkuara përmes NPM duke përdorur komandën e mëposhtme:

npm install @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ë etiketën <head> në skedarin tuaj HTML:

<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Model

Detyra MediaPipe Face Detector 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 Detektorin e Fytyrës, 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 Face Detector createFrom...() 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 Detektorin e Fytyrës me opsionet e konfigurimit. Për më shumë informacion mbi opsionet e konfigurimit, shihni Opsionet e konfigurimit .

Kodi i mëposhtëm tregon se si të ndërtoni dhe konfiguroni detyrën me opsione të personalizuara:

const vision = await FilesetResolver.forVisionTasks(
  // path/to/wasm/root
  "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const facedetector = await FaceDetector.createFromOptions(
    vision,
    {
      baseOptions: {
        modelAssetPath: "path/to/model"
      },
      runningMode: runningMode
    });

Opsionet e konfigurimit

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

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
option_var_1_web_js Vendos modalitetin e ekzekutimit për detyrën. Ka dy mënyra:

IMAGE: Modaliteti për hyrjet e një imazhi të vetëm.

VIDEO: Modaliteti për kornizat e deshifruara të një videoje ose në një transmetim të drejtpërdrejtë të të dhënave hyrëse, si p.sh. nga një aparat fotografik.
{ IMAGE, VIDEO } IMAGE
minDetectionConfidence Rezultati minimal i besimit për zbulimin e fytyrës për t'u konsideruar i suksesshëm. Float [0,1] 0.5
minSuppressionThreshold Pragu minimal jo-maksimal i shtypjes për zbulimin e fytyrës duhet të konsiderohet i mbivendosur. Float [0,1] 0.3

Përgatitni të dhënat

Detektori i fytyrës mund të zbulojë fytyrat 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. Për të zbuluar fytyrat në video, mund të përdorni API-në për të përpunuar shpejt një kornizë në një kohë, duke përdorur vulën kohore të kornizës për të përcaktuar se kur shfaqen fytyrat brenda videos.

Drejtoni detyrën

Detektori i Fytyrës përdor metodat detect() (me image e modalitetit të ekzekutimit ) dhe detectForVideo() (me video në modalitetin e ekzekutimit ) për të shkaktuar përfundime. Detyra përpunon të dhënat, përpiqet të zbulojë fytyrat dhe më pas raporton rezultatet.

Thirrjet në metodat e Detektuesit të Fytyrës detect() dhe detectForVideo() ekzekutohen në mënyrë sinkronike dhe bllokojnë lidhjen e ndërfaqes së përdoruesit. Nëse zbuloni fytyra në kornizat video nga kamera e një pajisjeje, çdo zbulim bllokon lidhjen kryesore. Ju mund ta parandaloni këtë duke zbatuar punëtorët e uebit për të ekzekutuar metodat detect() dhe detectForVideo() në një thread tjetër.

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

Imazhi

const image = document.getElementById("image") as HTMLImageElement;
const faceDetectorResult = faceDetector.detect(image);

Video

await faceDetector.setOptions({ runningMode: "video" });

let lastVideoTime = -1;
function renderLoop(): void {
  const video = document.getElementById("video");

  if (video.currentTime !== lastVideoTime) {
    const detections = faceDetector.detectForVideo(video);
    processResults(detections);
    lastVideoTime = video.currentTime;
  }

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

Për një zbatim më të plotë të ekzekutimit të një detyre të Detektorit të Fytyrës, shihni shembullin e kodit .

Trajtoni dhe shfaqni rezultatet

Detektori i fytyrës gjeneron një objekt rezultati të detektorit të fytyrës për çdo ekzekutim zbulimi. Objekti i rezultatit përmban fytyrat në koordinatat e imazhit dhe fytyrat në koordinatat botërore.

Më poshtë tregon një shembull të të dhënave dalëse nga kjo detyrë:

FaceDetectionResult:
  Detections:
    Detection #0:
      BoundingBox:
        origin_x: 126
        origin_y: 100
        width: 463
        height: 463
      Categories:
        Category #0:
          index: 0
          score: 0.9729152917861938
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.18298381567001343
          y: 0.2961040139198303
        NormalizedKeypoint #1:
          x: 0.3302789330482483
          y: 0.29289937019348145
        ... (6 keypoints for each face)
    Detection #1:
      BoundingBox:
        origin_x: 616
        origin_y: 193
        width: 430
        height: 430
      Categories:
        Category #0:
          index: 0
          score: 0.9251380562782288
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.6151331663131714
          y: 0.3713381886482239
        NormalizedKeypoint #1:
          x: 0.7460576295852661
          y: 0.38825345039367676
        ... (6 keypoints for each face)

Imazhi i mëposhtëm tregon një vizualizim të daljes së detyrës:

Dy fëmijë me kuti kufizuese rreth fytyrave të tyre

Për imazhin pa kuti kufizuese, shihni imazhin origjinal .

Kodi i shembullit të Detektorit të Fytyrës tregon se si të shfaqen rezultatet e kthyera nga detyra, shikoni shembullin e kodit