프로젝트 목록

영상 속 특정 인물 제거 프로그램

Team Project2024.06 ~ 2024.09

영상에 나오는 사람 중 사용자가 고른 한 명만 지우고 배경을 채워 넣는 Flask 웹 프로그램입니다. 6명이 만들었고, 저는 얼굴 인식과 YOLOv8 모델을 맡았습니다.

Role
얼굴 인식(InsightFace), YOLOv8
Team
6명
My Code
utils/insight_face.py
Links
GitHub 저장소 (팀)

Overview

영상에서 특정 인물만 지우려면 프레임마다 손으로 지워야 해서 시간이 오래 걸립니다. 영상 속 얼굴을 모두 찾아 사람별로 묶고, 사용자가 고른 사람만 추적해 지운 뒤 배경을 채우는 과정을 하나로 이었습니다.

What I Did

  • InsightFace로 프레임마다 얼굴을 찾고, 얼굴마다 특징 벡터(임베딩)를 뽑음
  • 이미 등록된 인물의 벡터와 코사인 유사도를 비교해 0.4보다 크면 같은 인물로, 아니면 새 인물 ID로 등록
  • 인물마다 등장한 프레임, 얼굴 위치, 얼굴 이미지를 저장하고, 가장 잘 인식된 얼굴을 골라 선택 화면에 보여 줌

Problem Solving

같은 사람이 여러 인물로 나뉠 수 있음

문제
고개를 돌리거나 표정과 조명이 바뀌면 처음 등록한 얼굴과 닮은 정도가 떨어져, 같은 사람이 새 인물 ID로 잡힐 수 있습니다.
해결
인물마다 대표 벡터를 새로 찾은 얼굴 쪽으로 10%씩 옮겨 갱신했습니다(이동 평균). 맞는 인물이 없을 때는 인물별로 모아 둔 최근 얼굴 벡터와 한 번 더 비교한 뒤에만 새 ID를 만들었습니다.
결과
선택 화면에는 인물마다 가장 잘 인식된 얼굴 한 장이 뜨고, 사용자는 그중 지울 사람을 고릅니다.

화면 밖으로 나갔다 들어오면 추적이 끊김 (팀 작업)

문제
정방향으로만 추적하면, 대상 인물이 화면 밖으로 나갔다가 다시 들어오는 구간에서 마스크가 빠졌습니다.
해결
프레임을 거꾸로 처리하는 역방향 추적을 더하고, 두 결과를 합쳤습니다.
결과
다시 등장하는 구간에서도 추적이 이어져 지운 결과가 안정됐습니다.

Note

코드는 팀 저장소에 함께 올라가 있습니다. 제가 맡은 얼굴 인식 부분은 utils/insight_face.py입니다.