숏폼 비디오 자동 생성 프로그램 사용 모델

윤서·2025년 11월 20일

AIProject

목록 보기
1/1

본 포스팅은 2024년 상반기 진행했던 프로젝트에서 사용했던 컴퓨터 비전 파이프라인과 DeepOCSort 알고리즘 모델에 대한 설명을 담은 글입니다. 이 시스템은 사용자가 업로드한 원본 동영상에서 특정 인물을 추적하고, 해당 인물을 중심으로 9:16 숏폼 비디오를 자동 생성하는 것을 목표로 합니다.

핵심 문제 및 Computer Vision 파이프라인 자동화

1.해결하고자 했던 문제

기존 수동 편집 방식에서는 동영상 전체를 보며 특정 인물을 지속적으로 중앙에 배치하고, 화면 비율에 맞게 크롭 영역을 수동으로 조정하는 과정이 시간 소모적인 문제였습니다. 우리 프로젝트는 이 과정을 인물 탐지 -> 인물 추적 -> 스마트 크롭의 3단계 computer vision 파이프라인으로 자동화하여 해결했습니다.

2. 파이프라인 구성
1. 인물 탐지 : 비디오 프레임마다 존재하는 모든 인물의 경계 상자의 좌표를 추출합니다. ( YOLOv5 사용)
2. 인물 추적 : 사용자가 선택한 특정 인물에 고유 ID를 부여하고, 프레임이 바뀌어도 해당 ID를 유지하며 추적합니다.
3. 스마트 크롭: 추적된 인물의 위치를 기반으로, 최종 숏폼 비디오의 화면 중앙에 인물이 자연스럽게 위치하도록 ROI(Region of Interest)를 동적으로 계산합니다.

3. DeepOCSort:인물 재식별 추적 알고리즘 구현
단순한 객체 탐지나 기본적인 추적 알고리즘은 인물이 프레임 밖으로 잠시 나갔다 들어오거나 다른 사람과 겹칠 때 ID가 바뀌는 한계가 있습니다. 이를 해결하기 위해 DeepOCSort 알고리즘을 최종 구현에 도입했습니다.

  1. 구성요소
    DeepOCSort (Deep Simple Online and Realtime Tracking)
  • 칼만 필터: 객체 다음의 위치를 예측하는데 사용되어 움직임 기반의 매칭 기초를 제공
  • Re-Id 네트워크: 딥러닝 모델을 사용하여 각 인물의 외관적 특징 벡터를 추출합니다. 이 벡트는 인물의 고유한 지문 역할을 하여, 인물이 가려지거나 잠시 사라져도 동일 인물임을 재식별하는데 결정적인 역할을 합니다.
  1. OSNET(Omni-Scle Network)
  • DeepSORT에서 외관 특징 추출기로 사용되는 강력한 Re-ID 모델입니다. 다중 스케일(Omni-Scale) 특징을 효과적으로 포착하여, 인물이 멀리 있거나(작게 보일 때) 가까이 있을 때(크게 보일 때) 모두 특징 벡터를 생성합니다.
  • DeepOCSort에서는 DeepSORT의 프레임워크 내에서 OSNET이 특징 추출자 역할을 수행함으로써 추적의 정확도(Identity Preservation)를 극대화합니다.

4. 스마트 크롭 알고리즘 설계 및 구현
DeepOCSort가 반환하는 특정 인물의 경계 상자 꼭짓점 좌표를 기반으로 , 최종 숏폼 비디오를 위한 최적의 크롭 영역을 동적으로 계산했습니다.

  • 동적 ROI 계산 로직
    추적 인물이 대상이 9:16화면의 중앙에 위치하고 화면에서 자연스러운 여백을 확보하는 것입니다.
    중심 좌표 계산: Cx=xmin+xmax2,Cy=ymin+ymax2C_x = \frac{x_{min} + x_{max}}{2}, \quad C_y = \frac{y_{min} + y_{max}}{2}크롭 영역의 크기 결정:원본 동영상의 화면 너비 WoW_o, 높이 HoH_o.최종 숏폼의 화면 비율은 9:169:16입니다.

  • 최종 RoI 좌표 계산:
    크롭 영역이 중심 좌표 (Cx,Cy)(C_x, C_y)를 중심으로 하도록 최종 RoI의 네 모서리 좌표 (Xstart,Ystart,Xend,Yend)(\mathbf{X}{start}, \mathbf{Y}{start}, \mathbf{X}{end}, \mathbf{Y}{end})를 계산합니다. 여백 계산 로직을 적용하여 화면을 벗어나지 않게 조정합니다 (예: XstartX_{start}가 0보다 작아지면 Xstart=0X_{start}=0으로 설정하고, XendX_{end}WoW_o를 초과하지 않도록 제한).

  • 스무딩 필터 적용 ( 떨림 방지 ):
    추적 좌표는 프레임마다 미세하게 흔들릴 수 있으며, 이로 인해 최종 크롭 화면이 '떨리는(Jittering)' 현상이 발생합니다.
    이를 방지하기 위해 RoI의 중심 좌표 (Cx,Cy)(C_x, C_y)지수 이동 평균(Exponential Moving Average, EMA) 스무딩 필터를 적용했습니다.

Smoothed Cxt=α×Cxt+(1α)×Smoothed Cxt1\text{Smoothed } C_x^t = \alpha \times C_x^t + (1 - \alpha) \times \text{Smoothed } C_x^{t-1}

여기서 α\alpha는 스무딩 계수로, α\alpha 값이 작을수록 움직임은 부드러워지지만 반응 속도는 느려집니다. 최적의 α\alpha 값을 튜닝하여 부드러운 화면 이동과 즉각적인 인물 추적 사이의 균형을 맞췄습니다.

5. 백엔드 파이프라인 구현 ( Flask & FFMPEG )
전체 AI 모델 파이프라인의 구동과 최종 비디오 렌더링은 Flask 기반의 백엔드 시스템을 통해 자동화되었습니다.

  • Flask API 엔드포인트 개발
    사용자로부터 원본 영상 파일을 업로드받는 API 엔드포인트를 개발했습니다.

업로드된 영상은 백엔드 서버에서 인물 탐지 → DeepOCSort 추적 → 스마트 크롭 계산 과정을 거칩니다.

AI 모델 파이프라인의 최종 결과는 각 프레임별 최적의 크롭 영역 좌표 (RoI) 데이터입니다.

  • FFMPEG을 활용한 자동 인코딩 및 렌더링
    AI 모델이 계산한 좌표값을 기반으로 실제로 숏폼 비디오 파일을 생성하는 데 FFMPEG 라이브러리를 활용했습니다.

데이터 전달: Flask API는 AI 모델에서 반환된 프레임별 RoI 좌표 리스트를 FFMPEG 명령에 전달할 수 있는 형태로 가공합니다.

FFMPEG 필터 적용: FFMPEG의 crop 필터 기능을 사용하되, 필터의 인수를 프레임별로 동적으로 변경할 수 있도록 구현했습니다. 이는 좌표 리스트를 기반으로 타임스탬프에 따라 크롭 영역이 부드럽게 전환되도록 명령어를 구성하는 핵심입니다.

자동 인코딩: FFMPEG은 이 명령을 받아 원본 동영상을 자동으로 읽어 들이고, 추적된 인물을 중앙에 배치하는 동적 크롭 및 9:16 비율 조정을 수행한 후, 최종 숏폼 비디오로 인코딩 및 렌더링합니다.

이 파이프라인 구축을 통해 프론트엔드에서의 영상 업로드 요청 하나로 AI 분석부터 최종 결과물 생성까지의 전 과정이 자동화되었습니다.

0개의 댓글