將相機背景模糊處理

François Beaufort
François Beaufort

背景模糊處理是現代視訊會議應用程式中常見的功能。這項功能會自動區分攝影機前的人與背景,並模糊處理周遭環境,同時維持對人物的聚焦。

Background Blur API 可為網頁提供背景隱藏功能。這個 API 可讓網頁應用程式要求作業系統,將背景模糊效果套用至相機的影片動態饋給。透過 TensorFlow.js、Mediapipe 或雲端式解決方案等機器學習架構,不需要個別處理每個影片畫面,因此不必手動套用效果。

已關閉背景模糊效果的相片。
關閉 (左圖) 和開啟 (右圖) 背景模糊效果的相片。

啟用 Background Blur API

根據預設,Chrome 不會啟用背景模糊處理 API,但您可以透過明確啟用這項功能,在 Chrome 114 中進行實驗。如要在本機啟用這項功能,請在 chrome://flags/#enable-experimental-web-platform-features 中啟用「Experimental Web Platform features」flag

如要為應用程式的所有訪客提供這項服務,來源試用已於 Chrome 117 (2023 年 11 月 3 日) 結束。如要參與試用,請註冊並在 HTML 或 HTTP 標頭中加入含有來源試用權杖的中繼標記元素。詳情請參閱「開始使用來源試用」。

觀察背景模糊效果變化

MediaStreamTrack 上的 backgroundBlur 布林值設定可讓您瞭解作業系統是否會在媒體裝置上套用背景模糊效果。此外,當使用者透過作業系統操作選項開啟或關閉背景模糊效果時,系統會在 MediaStreamTrack 上觸發 "configurationchange" 事件。

下列程式碼片段說明如何監控使用者授予存取權的媒體裝置上背景模糊處理的變更。

// Prompt the user to grant access to a camera.
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
// Show camera video feed to the user (optional).
document.querySelector("video").srcObject = stream;

// Read current background blur value.
const [track] = stream.getVideoTracks();
let { backgroundBlur } = track.getSettings();
console.log(`Background blur is ${backgroundBlur ? "ON" : "OFF"}`);

// Listen to background blur changes.
track.addEventListener("configurationchange", () => {
  if (backgroundBlur !== track.getSettings().backgroundBlur) {
    backgroundBlur = track.getSettings().backgroundBlur;
    console.log(`Background blur is now ${backgroundBlur ? "ON" : "OFF"}`);
  }
});

切換背景模糊效果

MediaStreamTrack 上的 backgroundBlur 陣列功能可讓您瞭解是否可以在媒體裝置上控制背景模糊效果。如未定義或僅包含一個值 ([true][false]),就無法控制相機背景模糊效果。如果包含兩個值,您可以在 MediaStreamTrack 上使用 applyConstraints() 方法,要求作業系統將背景模糊效果切換至相機的影片動態饋給。傳回的承諾會在成功後解決,並在發生錯誤時拒絕。

下列程式碼片段說明如何在使用者已授予存取權的媒體裝置上,控制相機背景模糊效果。

// Prompt the user to grant access to a camera.
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
// Show camera video feed to the user (optional).
document.querySelector("video").srcObject = stream;

// Check whether the user can toggle background blur in the web app.
// If not, note that you may still want to apply it through a fallback
// software solution.
const [track] = stream.getVideoTracks();
if (track.getCapabilities().backgroundBlur?.length === 2) {
  const button = document.querySelector("button");
  button.addEventListener("click", toggleBackgroundBlurButtonClick);
  button.disabled = false;
}

async function toggleBackgroundBlurButtonClick() {
  const constraints = {
    backgroundBlur: !track.getSettings().backgroundBlur,
  };
  // Request operating system to toggle background blur.
  await track.applyConstraints(constraints);
  const newSettings = track.getSettings();
  log(`Background blur is now ${newSettings.backgroundBlur ? "ON" : "OFF"}`);
}

平台支援

在 ChromeOS、macOS 和 Windows 上,Chrome 114 支援背景模糊處理 API。

ChromeOS 和 macOS 目前只允許您觀察使用者透過作業系統 UI (例如 macOS 的控制中心) 所做的背景模糊處理變更。您可以透過 Windows 觀察及控制背景模糊效果。

示範

您可以透過官方範例切換背景模糊處理效果,並觀察變化。(如前所述,這些功能的可用性取決於平台的支援。)

觀察相機背景模糊處理變化的網頁應用程式。

意見回饋

開發人員意見回饋在這個階段非常重要,因此請在 GitHub 上回報問題,並提供建議和問題。

我們很想聽聽您的想法,看看以布林值呈現背景模糊效果是否符合您的需求,或是更精細的做法 (例如「輕微」、「強烈」、「關閉」) 是否更適合,即使這可能與所有作業系統上顯示的內容不相容。