본문 바로가기

Computer Vision + Python/영상 처리 & 비디오 분석 (엔지니어)

딸아이의 유치원 영상, 파이썬 인물 모드(Portrait Mode)로 주인공만 선명하게 만들기

유치원 행사 영상 속에서 우리 아이만 찾아내고 싶었다

얼마 전 딸아이의 유치원 행사가 있었다. 아이의 소중한 순간을 담으려 카메라를 들었지만, 화면 속에는 우리 아이뿐만 아니라 수많은 사람으로 가득했다. 배경이 너무 복잡하다 보니 정작 주인공인 아이가 돋보이지 않아 속상했다.

비싼 DSLR의 아웃포커싱 효과를 파이썬 코딩으로 구현할 수 없을까 고민하다가 이번 프로젝트를 시작하게 되었다. 스마트폰 기본 앱도 좋지만, 내가 직접 제어하고 튜닝하는 '인물 모드'를 만들어보고 싶었다.


시작하기 전에 예상했던 것과 실제의 차이

이론적으로는 간단해 보였다. 배경을 분리하고(Segmentation), 그 부분만 흐리게(Blur) 만들면 끝이라고 생각했다.

  • 예상: AI가 사람의 형태를 완벽하게 따내고 배경만 깔끔하게 날려줄 것이다.
  • 현실: 휘날리는 머리카락 한 올까지 정교하게 분리하는 것은 불가능에 가까웠다. 특히 실시간으로 처리하려니 프레임이 뚝뚝 끊기는 현상이 발생했다.

**“완벽함보다는 자연스러운 타협점”**을 찾는 과정이 생각보다 길어졌다.

유치원 행사 현장의 복잡한 배경
유치원 행사 현장의 복잡한 배경 아이에게 집중하기 어려운 환경이다.


실습 과정에서 가장 먼저 막혔던 부분

가장 먼저 시간을 잡아먹은 건 **경계면 처리(Edge Smoothing)**였다. 배경 분리 모델을 돌리면 사람 테두리가 계단처럼 각지게 잘리는 현상이 나타났다. "이걸 그대로 쓰기엔 너무 가짜 같다"는 느낌이 들어, 경계면에 가우시안 블러를 살짝 섞어 부드럽게 만드는 로직을 추가했다.

그다음은 연산 속도 문제였다. 고화질 영상에 매 프레임 딥러닝 모델을 적용하니 처리 속도가 너무 느렸다. "한 번만 더 최적화하자"며 모델의 입력 해상도를 조정하고, 배경을 분리하는 주기와 흐림 효과를 입히는 주기를 다르게 설정하며 적정선을 찾았다.

인물 영역을 마스킹하고 배경을 분리하는 알고리즘 실행 화면 머리카락 경계 처리가 가장 큰 난관이었다


왜 이 방식(Python + MediaPipe/OpenCV)이었나

왜 이 조합을 선택했을까. 성능과 속도 사이에서 가장 현실적인 타협안이었기 때문이다. 딥러닝 모델 중에서도 비교적 가벼운 MediaPipe를 활용했고, 이미 익숙한 Python 환경에서 빠르게 프로토타입을 완성할 수 있었다.

누군가에게는 더 정교한 모델이 필요할지도 모른다. 하지만 내 상황에서는 실시간성을 확보하면서도 어느 정도의 감성을 담아낼 수 있는 이 방식이 최선이었다.


지금 시점에서의 개인적인 정리

이 방식은 빠르게 인물을 강조하는 효과를 시험해보고 싶은 경우에 적합하다. 반대로, 영화 속 한 장면 같은 완벽한 심도 표현을 기대한다면 하드웨어적 제약이 느껴질 수밖에 없다.

막상 해보니 기술적인 테크닉보다 중요한 건, **“아이를 더 선명하게 담고 싶은 마음”**을 기술로 어떻게 풀어내느냐였다. 아이의 영상을 보며 느꼈던 그 따뜻한 시선을 코드로 구현해 본 것은 분명 의미 있는 수확이었다.


마무리하며

아직도 경계면이 뭉개지는 걸 보면 더 나은 방법이 있을 것 같다는 생각은 든다. 다만 지금 상황에서는 이 선택이 가장 현실적이었다. 이 글이 정답이라기보다, 비슷한 고민을 하며 가족의 영상을 다듬고 싶은 분들께 하나의 참고 경험 정도로 읽혔으면 좋겠다.