- 프로젝트 초기 설계 단계부터 전체 개발 프로세스 주도
- MediaPipe를 활용한 얼굴 등록 및 인식 기능 개발
- rPPG 데이터 수집 기능(비접촉식 심박수 측정) 구현
- 전체 시스템 기능 통합 및 최적화 작업 수행
얼굴 인식 기능 사용 시, 사용자가 정지된 사진을 화면에 대더라도 얼굴 인식이 성공하는 문제가 발생함.
기존 얼굴 인식 로직이 얼굴의 좌표(landmark)만 감지하여, 사진과 실제 사람을 구분하지 못하는 문제가 있었음.
이로 인해 사진을 이용한 인증 우회 가능성이 존재함.
얼굴 인식 시 입술 움직임을 추가로 체크하는 로직 도입
→ 사용자가 특정 문장을 읽게 하고, 발음 중 입술 좌표 변화를 실시간 추적
초기 캡처 시 입술 landmark 좌표를 저장
→ 기준 위치를 확보하여 이후 움직임과 비교
발음하는 동안 입술 좌표 이동 거리(변화량)를 계산
→ 변화량이 일정 threshold 이상일 경우에만 '실제 사람'으로 판정
정적인 사진과 실시간 사람을 정확히 구분하는 로직을 통해 보안성을 강화
얼굴 인식 정확도를 높이기 위해 Mediapipe FaceMesh를 사용했으나, 468개 얼굴 랜드마크를 실시간으로 추적하는 고성능 알고리즘 특성상 연산량이 매우 많음.
스펙이 낮은 키오스크 기기에서는 프레임 드랍, 렉, 인식 지연 문제가 발생함.
실시간 PPG(광용적맥파) 신호 추출을 목표로 했기 때문에, 프레임 불안정으로 PPG 데이터 품질 저하 문제가 함께 발생함.
Mediapipe FaceMesh 대신 FaceDetection 모델로 교체
→ 주요 얼굴 특징과 경계만 빠르게 감지하여 하드웨어 리소스 소모 대폭 감소
얼굴 전체를 넓게 캡처하던 기존 방식에서, 이마~턱까지 타이트하게 프레임 설정 변경
→ 노이즈(배경) 최소화 및 안정적인 신호 추출 가능
FaceDetection 모델 적용으로 저사양 장비에서도 프레임 드랍 없이 원활한 동작 확보
→ 실시간 PPG 데이터 품질 유지 및 전체 시스템 성능 안정화
키오스크 등에 설치된 카메라가 정면이 아니라 90도 회전된 상태로 고정되어 있음.
웹에서는 네이티브 카메라 설정을 조정할 수 없어, 받아오는 비디오 스트림이 90도 기울어진 상태로 입력되고, 이로 인해 얼굴 인식 및 영상 처리에 문제가 발생함.
숨은 캔버스(Canvas)에 비디오 스트림을 먼저 그린 후, 캔버스에서 90도 회전 변환(Transform) 적용
→ 카메라 영상의 물리적 회전을 소프트웨어적으로 보정
회전된 캔버스 이미지를 기반으로 얼굴 인식 및 영상 처리 수행
→ 기존 얼굴 인식 로직과 영상 처리가 정상적으로 작동
추가 하드웨어 수정 없이 소프트웨어 레벨에서 문제 해결
→ 장비 설치 상태에 관계없이 일관된 인식 및 처리 품질 확보
기존에 requestAnimationFrame(predictWebcam)을 사용해 브라우저 렌더링 타이밍에 맞춰 얼굴 인식을 반복 호출했음.
그러나 브라우저 렌더링 스케줄은 CPU 부하, 탭 활성화 상태 등에 따라 매 프레임마다 변동되어 호출 주기가 불규칙해졌음.
이로 인해 얼굴 인식 주기가 불안정해지고, PPG 신호 추출이나 시간 기반 계산에서 심각한 오차가 발생함.
requestAnimationFrame 대신 setInterval을 사용해 얼굴 인식 호출 주기 제어
→ 30FPS 기준으로 1000ms ÷ 30 ≈ 33.33ms 간격으로 predict 함수 호출
일정한 호출 주기를 유지하여 데이터 수집 타이밍 안정화
→ PPG 신호 추출 및 시간 기반 계산 시 오차 최소화
프레임 속도 변동으로 인한 얼굴 인식 품질 저하 문제 해결
→ 전반적인 시스템 성능과 데이터 신뢰도 향상