カメラの背景をぼかす

François Beaufort
François Beaufort

背景のぼかしは、最新のビデオ会議アプリケーションでよく使用される機能です。カメラの前にいる人物と背景を自動的に区別して、その人物にピントを合わせながら、周囲をぼかします。

Background Blur API は、ウェブで背景隠し機能を実現します。この API を使用すると、ウェブアプリからオペレーティング システムに、背景のぼかし効果をカメラの動画フィードに効率的に適用するよう要求できます。これにより、各動画フレームを個別に処理する必要がある TensorFlow.js、Mediapipe、クラウドベースのソリューションなどの ML フレームワークを通じて、エフェクトを手動で適用する必要がなくなります。

背景のぼかしをオフにしてからオンに戻す写真。
背景のぼかしをオフにして(左)、オン(右)にした写真

Background Blur API を有効にする

デフォルトでは、Background Blur API は Chrome で有効になっていませんが、Chrome 114 で明示的に有効にすると、この API を試すことができます。ローカルで有効にするには、chrome://flags/#enable-experimental-web-platform-features で「試験運用版 Web Platform の機能」フラグを有効にします。

現在、オリジン トライアルが進行中であり、Chrome 117(2023 年 11 月 3 日)で終了する予定です。トライアルに参加するには、登録し、HTML または HTTP ヘッダーにオリジン トライアル トークンを含むメタ要素を含めてください。詳しくは、オリジン トライアルのスタートガイドをご覧ください。

背景のぼかしの変化を確認する

MediaStreamTrackbackgroundBlur ブール値設定を使用すると、オペレーティング システムがメディア デバイスに背景のぼかしを適用するかどうかを確認できます。また、ユーザーがオペレーティング システム アフォーダンスで背景のぼかしのオンとオフを切り替えると、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"}`);
  }
});

背景のぼかしを切り替える

MediaStreamTrackbackgroundBlur 配列機能を使用すると、メディア デバイスで背景のぼかしを制御できるかどうかがわかります。定義されていないか、1 つの値([true] または [false])しか含まれていない場合、カメラの背景のぼかしを制御できません。2 つの値が含まれている場合は、MediaStreamTrackapplyConstraints() メソッドを使用して、背景のぼかし効果をカメラの動画フィードに切り替えるようオペレーティング システムにリクエストできます。返された Promise は、成功時に解決され、エラー時には拒否されます。

次のコード スニペットは、ユーザーがアクセスを許可したメディア デバイスで、カメラの背景のぼかしを制御する方法を示しています。

// 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"}`);
}

プラットフォーム サポート

Background Blur API は、ChromeOS、macOS、Windows の Chrome 114 でご利用いただけます。

現在、ChromeOS と macOS では、ユーザーがオペレーティング システムの UI(macOS のコントロール センターなど)を通じて行える背景のぼかしの変更のみを確認できます。Windows では、背景のぼかしを監視、制御できます。

デモ

公式サンプルでプレイすることで、背景のぼかしを切り替えたり、変化を観察したりできます。(前述のとおり、これらの機能を使用できるかどうかはプラットフォームのサポート状況によって異なります)。

カメラの背景のぼかしの変化を監視するウェブアプリ。

フィードバック

この段階では、デベロッパーからのフィードバックは非常に重要であるため、提案や質問を GitHub で問題を報告してください。

背景のぼかしをブール値で公開することがニーズに合っているか、あるいは、すべてのオペレーティング システムで公開されているものと互換性がない場合でも、「明」、「強」、「オフ」のようなより詳細なアプローチが適切かどうかについて、ご意見をお寄せください。

ヒーロー画像 by Ayo Ogunseinde