자바스크립트와 MediaStream API를 활용하여 웹 카메라 필터 기능 개발하기

이번 기술 블로그에서는 자바스크립트와 MediaStream API를 이용하여 웹 카메라 필터 기능을 개발하는 방법에 대해 알아보겠습니다.

필수 준비물

웹 카메라 필터 기능을 개발하기 위해서는 다음과 같은 필수 준비물이 필요합니다:

  1. 웹 브라우저
  2. 자바스크립트 코드 에디터

MediaStream API 소개

MediaStream API는 웹 브라우저에서 미디어 스트림(예: 웹 카메라, 마이크)을 사용할 수 있게 해주는 API입니다. 이를 활용하여 웹 카메라로부터 영상을 받아오고, 자바스크립트를 이용하여 이 영상에 필터를 적용할 수 있습니다.

웹 카메라 액세스하기

MediaStream API를 사용하여 웹 카메라에 액세스하는 방법은 다음과 같습니다:

navigator.mediaDevices.getUserMedia({ video: true })
  .then(function(stream) {
    // 성공적으로 웹 카메라에 액세스한 경우
    var videoElement = document.querySelector('#video');
    videoElement.srcObject = stream;
  })
  .catch(function(err) {
    // 웹 카메라 액세스 실패 시 에러 처리
    console.error('웹 카메라 액세스 에러:', err);
  });

위 코드에서 navigator.mediaDevices.getUserMedia() 함수를 호출하여 웹 카메라에 액세스하고, stream 객체를 통해 받아온 영상을 <video> 요소에 출력합니다.

필터 적용하기

웹 카메라에서 받아온 영상에 필터를 적용하기 위해서는 <canvas> 요소를 사용합니다. 예를 들어, 세피아 필터를 적용하는 코드는 다음과 같습니다:

function applySepiaFilter() {
  var videoElement = document.querySelector('#video');
  var canvasElement = document.querySelector('#canvas');

  var context = canvasElement.getContext('2d');
  context.drawImage(videoElement, 0, 0, canvasElement.width, canvasElement.height);

  var imageData = context.getImageData(0, 0, canvasElement.width, canvasElement.height);
  var data = imageData.data;

  for (var i = 0; i < data.length; i += 4) {
    var r = data[i];
    var g = data[i + 1];
    var b = data[i + 2];

    data[i] = (r * 0.393) + (g * 0.769) + (b * 0.189); // red
    data[i + 1] = (r * 0.349) + (g * 0.686) + (b * 0.168); // green
    data[i + 2] = (r * 0.272) + (g * 0.534) + (b * 0.131); // blue
  }

  context.putImageData(imageData, 0, 0);
}

위 코드에서는 <video> 요소와 <canvas> 요소를 JavaScript로 가져와서 <canvas>에 영상을 그린 후, 필터를 적용하여 화면에 출력합니다.

마무리

이렇게 자바스크립트와 MediaStream API를 이용하여 웹 카메라 필터 기능을 개발할 수 있습니다. 필터링 알고리즘을 변경하거나 다른 필터를 추가할 수도 있습니다.

더 많은 자세한 정보 및 예제 코드는 다음 참고 자료를 참고하시기 바랍니다:

#웹카메라 #MediaStreamAPI