블랙핑크 팬캠 서비스

스킬
Pandas Numpy LabelImg FastAPI AWS Modeling(YOLOv5) OpenCV
Date
2021/06/28 → 2021/07/30
프로젝트 타입
개인
블랙핑크 팬캠 서비스
플레이데이터
2021.06.28 ~ 2021.07.30 (4주, 4명)
Pandas Numpy LabelImg FastAPI AWS Modeling(YOLOv5) OpenCV

개요

소개

비전 기술을 활용하여 블랙핑크 멤버 별 직캠 영상 서비스 제공

과정

멤버들 얼굴 인식을 위해 무대 영상의 이미지를 수집, LabelImg로 라벨링 진행 YOLOv5 모델을 사용하여 멤버의 얼굴 탐지, 정확도 0.961 달성 멤버 별 동선을 트래킹하고 얼굴을 크롭하여 개인 직캠 비디오 생성 최종 결과물을 FastAPI 기반 웹 서비스로 제공

역할 및 담당

데이터 수집 및 라벨링, 비디오처리, 웹서비스, 발표

결과

FastAPI 기반 웹 서비스로 제공

데이터 수집 및 라벨링

라벨링은 머신러닝 모델 학습을 위해 데이터를 사람이 직접 분류하고 태그를 붙여주는 작업 1차 라벨링에서 2160장, 2차 라벨링에서는 화질 기준을 높여 1316장을 추가로 처리
라벨링 도구: Labelimg-master - 로제(0), 리사(1), 제니(2), 지수(3)
라벨링 기준:
1차 라벨링: 얼굴이 명확히 보이는 데이터, 총 2160장
2차 라벨링: 다양한 각도, 고화질(1080p) 데이터, 총 1316장

모델링 – YOLOv5

YOLO(You Only Look Once) 모델은 이미지에서 객체를 한 번의 신경망 계산으로 빠르고 효율적으로 탐지하는 실시간 객체 탐지 알고리즘 YOLOv 활용하여 멤버 별 얼굴을 탐지하고, bounding box와 좌표 데이터를 기반으로 직캠 영상을 생성
YOLOv5: 실시간 객체 탐지에 적합, 빠른 속도, Background의 오탐 낮음
정확도: 평균 0.961
아쉬운 점: 작은 객체 검출 한계, 의상 및 포지션 변화, 저화질 데이터 성능, 배경 오탐지

트래킹 비디오 생성

YOLOv5로 추출된 좌표를 사용해 멤버 얼굴을 크롭하고 이를 연결해 직캠 비디오를 생성 크롭 범위를 초과할 경우 영상 범위 내에서 최적화하여 비디오를 저장하는 알고리즘을 적용
final_w = 200 # output video width final_h = 630 # output video height fourcc = cv2.VideoWriter_fourcc(*'DIVX') output_video = cv2.VideoWriter("output.mp4", fourcc, fps, (final_w,final_h)) success, frame = input_video.read() count = 0 while success: mem = df.iloc[count] x = int(np.ceil(mem[2] * width)) - 80 y = int(np.ceil(mem[3] * height)) - 70
Bash
복사
좌표(xywh)추출:
YOLOv5 탐지 결과의 bounding box 좌표를 텍스트 파일에서 CSV 파일로 변환
결측치 처리:
뒷모습, 옆모습, 가려지는 경우 - 누락 된 좌표값은 선형 보간법과 이동평균 적용
트래킹 비디오 생성:
CSV 파일의 좌표 데이터 활용멤버별로 크롭된 이미지를 동영상(mp4) 형태로 생성

웹 서비스 – FastAPI

FastAPI는 Python 기반의 고성능 웹 프레임워크로, 직관적인 코드 작성과 빠른 API 개발을 지원 YOLOv5 모델의 결과를 웹 서비스로 제공하기 위해 FastAPI를 사용하고, AWS에 배포
FastAPI: 빠른성능, 간결한 코드 작성, Pytorch모델(.pt) 호환성
아쉬운점: 결과를 직접 서빙 못한 점, 파일크기로 동영상 화질 저하

데모영상