Desfocar o plano de fundo da câmera

François Beaufort
François Beaufort

O desfoque do plano de fundo é uma função popular em aplicativos modernos de videoconferência. Ele distingue automaticamente o plano de fundo da pessoa em frente à câmera, desfocando o ambiente e mantendo o foco no indivíduo.

A API Background Blur traz recursos de ocultação de plano de fundo para a Web. Essa API possibilita que apps da Web peçam ao sistema operacional para aplicar com eficiência o efeito de desfoque do plano de fundo ao feed de vídeo de uma câmera. Isso elimina a necessidade de aplicação manual do efeito por frameworks de aprendizado de máquina, como o TensorFlow.js, o Mediapipe ou soluções baseadas na nuvem, que exigem o processamento de cada frame de vídeo individualmente.

Foto com o desfoque do plano de fundo ativado e desativado.
Foto com desfoque do plano de fundo desativado (à esquerda) e ativado (à direita).

Ativar a API Background Blur

Por padrão, a API de desfoque de plano de fundo não é ativada no Chrome, mas pode ser testada no Chrome 114 ativando explicitamente a funcionalidade. Ative a sinalização "Recursos experimentais da plataforma Web" em chrome://flags/#enable-experimental-web-platform-features para ativá-la localmente.

Para ativar esse recurso para todos os visitantes do seu app, um teste de origem está em andamento e será encerrado no Chrome 117 (3 de novembro de 2023). Para participar do teste, inscreva-se e inclua um metaelemento com o token do teste de origem no cabeçalho HTML ou HTTP. Para mais informações, consulte Começar a usar os testes de origem.

Observe as mudanças no desfoque do plano de fundo

A configuração booleana backgroundBlur em um MediaStreamTrack permite saber se o sistema operacional aplica o desfoque de segundo plano no dispositivo de mídia. Além disso, quando o usuário ativa ou desativa o desfoque de segundo plano usando uma característica do sistema operacional, um evento "configurationchange" é acionado em um MediaStreamTrack.

O snippet de código a seguir ilustra como monitorar mudanças no desfoque de segundo plano em um dispositivo de mídia ao qual o usuário concedeu acesso.

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

Alternar o desfoque do plano de fundo

O capability de matriz backgroundBlur em um MediaStreamTrack permite saber se é possível controlar o desfoque do plano de fundo no dispositivo de mídia. Se ele estiver indefinido ou contiver apenas um valor ([true] ou [false]), não será possível controlar o desfoque de fundo da câmera. Se ele tiver dois valores, use o método applyConstraints() em um MediaStreamTrack para solicitar que o sistema operacional alterne o efeito de desfoque de fundo para o feed de vídeo da câmera. A promessa retornada será resolvida em caso de sucesso e recusada em caso de erro.

O snippet de código a seguir ilustra como controlar o desfoque de segundo plano da câmera em um dispositivo de mídia ao qual o usuário concedeu acesso.

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

Suporte a plataformas

A API Background Blur está disponível no Chrome 114 no ChromeOS, macOS e Windows.

No momento, o ChromeOS e o macOS só permitem que você observe mudanças de desfoque de plano de fundo que o usuário pode fazer na interface do sistema operacional, como o Centro de Controle no macOS. O Windows permite observar e controlar o desfoque do plano de fundo.

Demonstração

Você pode ativar o desfoque de segundo plano e observar as mudanças usando a amostra oficial. Como mencionado anteriormente, a disponibilidade desses recursos depende do suporte da plataforma.

Um app da Web observando mudanças no desfoque do plano de fundo da câmera.

Feedback

O feedback dos desenvolvedores é muito importante nesta fase. Por isso, registre problemas no GitHub com sugestões e perguntas.

Gostaríamos de saber se a exposição do desfoque de fundo como um valor booleano atende às suas necessidades ou se uma abordagem mais granular, como "light", "strong" e "off", seria mais adequada, mesmo que não seja compatível com o que é exposto em todos os sistemas operacionais.