웹 브라우저에서의 실시간 얼굴 필터링을 위한 MediaStream API 활용 방법

웹 브라우저에서 실시간 얼굴 필터링을 구현하려면 MediaStream API를 활용해야 합니다. MediaStream API는 웹 카메라를 통해 비디오 및 오디오 스트림을 처리하는 API입니다. 이를 이용하여 실시간으로 웹 카메라에서 얼굴을 감지하고 필터를 적용할 수 있습니다.

MediaStream API를 통해 웹 카메라에 접근하기

먼저, MediaStream API를 사용하여 웹 카메라에 접근해야 합니다. 아래의 코드는 사용자의 브라우저에서 웹 카메라에 접근하는 방법을 보여줍니다.

navigator.mediaDevices.getUserMedia({ video: true })
  .then(function(stream) {
    // 웹 카메라에 접근 성공 시 실행할 코드
    // 스트림을 처리하는 로직을 추가하세요
  })
  .catch(function(error) {
    // 웹 카메라에 접근 실패 시 실행할 코드
    console.error("웹 카메라 접근에 실패하였습니다.", error);
  });

위의 코드는 navigator.mediaDevices.getUserMedia 함수를 사용하여 웹 카메라에 접근하고, 성공하면 stream 객체를 얻게 됩니다. 이 stream 객체를 이용하여 웹 카메라의 비디오 스트림을 처리할 수 있습니다.

얼굴 감지 및 필터링 구현하기

웹 카메라의 비디오 스트림을 받아와서 얼굴을 감지하고 필터를 적용하는 방법에 대해 알아보겠습니다. 얼굴 감지를 위해 face-api.js와 같은 얼굴 감지 라이브러리를 사용할 수 있습니다.

  1. 먼저, 필요한 스크립트를 로드합니다.
<script src="face-api.min.js"></script>
  1. 웹 카메라 스트림을 HTML 요소에 출력합니다.
const video = document.getElementById('video');
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');

navigator.mediaDevices.getUserMedia({ video: true })
  .then(function(stream) {
    video.srcObject = stream;
  })
  .catch(function(error) {
    console.error("웹 카메라 접근에 실패하였습니다.", error);
  });
  1. 비디오 프레임을 캡처하고 얼굴을 감지하여 필터를 적용합니다.
video.addEventListener('play', () => {
  setInterval(async () => {
    const detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks();
    context.clearRect(0, 0, canvas.width, canvas.height);
    detections.forEach(detection => {
      const { top, left, width, height } = detection.detection.box;
      context.drawImage(filterImageElement, left, top, width, height);
    });
  }, 100);
});

위의 코드에서 video는 HTML 비디오 요소를 나타내며, canvas는 필터를 적용할 캔버스 요소를 나타냅니다. filterImageElement는 필터 이미지의 HTML 요소입니다. 필터 이미지를 적절히 디자인하여 사용할 수 있습니다.

결과 확인하기

위의 코드를 사용하여 웹 브라우저에서 실시간 얼굴 필터링을 구현할 수 있습니다. 필터링에 사용할 이미지, 얼굴 감지 알고리즘 등을 추가하여 더 다양한 필터링 효과를 구현할 수도 있습니다.

#얼굴인식 #미디어스트림

참고 자료