網頁版臉部偵測指南

MediaPipe 臉部偵測工作可讓您偵測圖片或影片中的臉孔。別擔心!您可以使用 這項工作能找出相框內的人臉和臉部特徵這項工作會使用 用於單一或連續圖像的機器學習 (ML) 模型 一流的圖片這項工作會輸出臉孔位置,以及以下程式碼 臉部表情要點:左眼、右眼、鼻子、嘴巴、左眼視線和 右眼滑動

以下操作說明會示範如何在網頁版和 JavaScript 中使用臉部偵測器 應用程式。進一步瞭解功能、模型和設定 請參閱總覽

程式碼範例

臉部偵測器的範例程式碼提供完整的實作 方便您參考。這個程式碼可協助您測試這項工作 開始打造自己的臉部偵測應用程式您可以查看、執行 編輯臉部偵測器程式碼範例 只要使用網路瀏覽器即可。

設定

本節說明設定開發環境的重要步驟 我們特別針對「臉部偵測器」使用這些功能如需 設定您的網路和 JavaScript 開發環境,包含 平台版本需求,請參閱 網頁版設定指南

JavaScript 套件

你可以透過 MediaPipe @mediapipe/tasks-vision 取得臉部偵測器代碼 NPM 套件。你可以 才能找到並下載這些程式庫。 設定指南

您可以透過 NPM 安裝必要的套件 使用以下指令:

npm install @mediapipe/tasks-vision

如果想要透過內容傳遞網路 (CDN) 匯入工作程式碼 請在 <head> 加入下列程式碼代碼:

<!-- 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>

型號

MediaPipe Face Detector 工作需要一個與此相容的已訓練模型 工作。如要進一步瞭解適用於臉部偵測器的已訓練模型,請參閱: 工作總覽的「模型」一節

選取並下載模型,然後將模型儲存在專案目錄中:

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

建立工作

使用臉部偵測 createFrom...() 函式的其中一個函式即可 準備執行推論的工作。使用「createFromModelPath()」 內含已訓練模型檔案的相對或絕對路徑。 如果模型已載入記憶體,您可以使用 createFromModelBuffer() 方法。

以下程式碼範例示範如何使用 createFromOptions() 函式 設定工作。createFromOptions 函式可讓您自訂 提供設定選項的臉部偵測器。進一步瞭解設定 選項,請參閱設定選項

以下程式碼示範如何使用自訂選項建構及設定工作 選項:

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

設定選項

這項工作包含以下網頁和 JavaScript 設定選項 應用程式:

選項名稱 說明 值範圍 預設值
option_var_1_web_js 設定任務的執行模式。這裡共有兩個 模式:

圖片:單一圖片輸入模式。

VIDEO:此模式適用於 影片或即時串流等輸入資料 (例如攝影機) 時
{IMAGE, VIDEO} IMAGE
minDetectionConfidence 臉部偵測必須達到的最低可信度分數,才能視為成功。 Float [0,1] 0.5
minSuppressionThreshold 臉部偵測視為重疊的最大非抑制門檻。 Float [0,1] 0.3

準備資料

臉部偵測器可以偵測圖像中任何支援的臉孔格式,例如 主機瀏覽器。這項工作也會處理資料輸入預先處理作業,包括 調整大小、旋轉以及值正規化為了偵測影片中的臉孔, 您可以運用這個 API 的時間戳記, 的影格數,判斷臉孔在影片中出現的時間點。

執行工作

臉部偵測器會使用 detect() (執行模式為 image) 要觸發的 detectForVideo() (執行模式 video) 方法 推論出工作會處理資料、嘗試偵測臉孔並 然後回報結果

系統會執行對臉部偵測器 detect()detectForVideo() 方法的呼叫 以及封鎖使用者介面執行緒如果偵測到臉孔 ,每次偵測都會封鎖 。如要避免這種情況發生,您可以實作網路工作站來執行 detect()detectForVideo() 方法

下列程式碼示範如何使用工作模型執行處理程序:

圖片

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

影片

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

如需更完整的執行臉部偵測器工作實作方式,請參閱 程式碼範例

處理及顯示結果

臉部偵測器會為每個偵測項目產生臉部偵測器結果物件 此程序的第一步 是將程式碼簽入執行所有單元測試的存放區中結果物件包含圖片座標與全世界的臉孔 座標。

以下範例顯示這項工作的輸出資料範例:

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)

下圖是工作輸出內容的視覺化呈現:

如果是沒有定界框的圖片,請參閱原始圖片

臉部偵測器範例程式碼示範如何顯示 查看工作傳回的結果 程式碼範例