Giter Site home page Giter Site logo

boostcampaitech3 / final-project-level3-cv-10 Goto Github PK

View Code? Open in Web Editor NEW
15.0 15.0 6.0 720.14 MB

[부스트캠프 AI Tech 3기 / CV-10] 인물 기반 예능 숏폼 영상 생성기, #눈#사람 ⛄️ (22.05.16 - 22.06.15)

Jupyter Notebook 91.99% Python 7.22% JavaScript 0.73% HTML 0.04% CSS 0.02%
dlib face-clustering face-recognition fastapi react

final-project-level3-cv-10's People

Contributors

noisrucer avatar seungriyou avatar shimjoonkyo avatar sooya233 avatar wowo0709 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

final-project-level3-cv-10's Issues

[Feat] Frontend Baseline 구현

추가 기능

  • React를 이용하여 프론트엔드의 베이스라인을 구현한다.
  • GCP 서버에서 실행된다.
  • 영상을 업로드하면 FastAPI 서버의 로컬(files/[uuid])에 저장되고, select-person 페이지로 넘어간다.

추가 목적

  • 프론트엔드 구축

사용 방법

  • npm run start-dev로 실행하면 30002번 port로 열린다.

[Feat] Frontend 추가 수정

추가 기능

  • NavBar가 스크롤을 내려도 상단에 고정되고, 맨 앞에 위치하도록 한다.
  • NavBar의 글자 부분을 클릭하면 메인 페이지로 리다이렉트 되도록 한다.
  • PeoplePanel에서 인물 리스트 부분의 height를 video의 height와 같도록 설정한다.
  • PeoplePanel에서 인물을 선택하지 않고 완료 버튼을 누를 때 경고 모달 창이 뜨도록 한다.
  • PeoplePanel에서 인물 선택 후 timeline을 추출할 때, spinner가 panel의 가운데에 위치하도록 한다.

추가 목적

  • 프론트엔드 추가 수정 작업

사용 방법

[Feat] Laughter timeline Bug fix

추가 기능

laughter timeline 계산 시 zerodivision error 해결

추가 목적

사용 방법

model/laughter/laughter_detector/laughter_detector.py 에서 calculate_interest 함수 수정

[Bug] 실험 결과가 재현되지 않는 문제 해결

버그 설명

  • 같은 영상을 넣었음에도 불구하고 추출되는 인물이나 쇼츠의 개수가 달라지는 등 기존 실험 결과가 재현되지 않는 문제가 발생하였다.

Screenshots

  • 원래 나와야 하는 쇼츠 개수

  • 재현되지 않는 모습

[DEV] Person Clustering using face+cloth feature

추가 기능

  • face feature와 cloth feature를 함께 사용하여 person clustering을 수행하는 코드를 업로드합니다.

추가 목적

  • 영상의 등장 인물들을 특정하기 위한 person clustering

사용 방법

  • imagecluster 폴더 내에 있는 person_clustering.ipynb 파일을 실행하시면 영상에서 초반부에 등장하는 인물들을 clustering하는 전과정을 실행하실 수 있습니다.
  • 자세한 설명은 노션에 작성해놓겠습니다.

[Feat] Frontend 수정 사항

추가 기능

  • url 창에 그냥 /select-person, /select-video를 입력해서 들어오는 경우, 메인화면으로 리다이렉트 시킨다.
  • NavBar -> Header로 명칭을 변경한다.
  • Spin의 색깔과 아이콘을 변경한다.
  • Footer를 추가하고 GitHub repository 링크를 건다.
  • 버튼, Uploader 등 컴포넌트들의 색상 및 문구를 변경한다.
  • 최종 쇼츠 선택 화면에서 각 쇼츠의 keywords 부분을 제거한다.
  • Header, Footer, 그리고 각종 버튼 및 문구를 수정한다.
  • 어플리케이션의 이름을 변경한다.
  • favicon과 logo를 변경한다.

추가 목적

  • 프론트엔드 작업 마무리

사용 방법

[Feat] Laughter Detection 분리

추가 기능

  • Laughter Detection을 Face Clustering/Recognition과 분리하여 병렬적으로 실행되도록 한다.
  • laughterTimelinefaceTimeline이 각각 병렬적으로 추출된 이후 최종 finalTimeline을 추출하는 API에게 요청을 보내도록 한다.

추가 목적

  • 전 과정 소요 시간 단축

사용 방법

[Feat] Update latest modeling

추가 기능

  • Modeling 부분에서 update된 사항을 service에 업데이트 하였습니다.

추가 목적

사용 방법

[Feat] Backend 수정 사항

추가 기능

  • face 서버에서 모든 동작이 완료된 후 local에 저장된 uuid 폴더를 삭제하는 기능을 추가한다.
  • async를 삭제한다.
  • uvicornworkers를 추가한다.

추가 목적

  • 동시 요청 처리 및 용량 관리

사용 방법

[DEV] Refactor modeling code

추가 기능

experiment 폴더의 모델링 코드 수정

추가 목적

흥미도 계산 로직 수정, recognition threshold 수정 등 내부적인 부분 refactoring

사용 방법

[DEV] Refactor modeling code 06/05-2

추가 기능

face_extractor/face_extractor.py parameter 추가
imagecluster/face_classifier.py parameter 추가
final_shorts/final_timeline.py make_final_timeline 흥미도 계산에 person 등장비율 추가
demo 파일 수정

추가 목적

사용 방법

[DEV] Face Extractor pipeline

추가 기능

Input video를 입력받아 각 person에 해당하는 128-d embedding vector를 반환해주는 face extractor 모듈.

추가 목적

Face extractor와 face matching을 연결하여 time line추출을 위함

사용 방법

예시 코드 업로드

[FEAT] Cluster merging 코드 업로드

추가 기능

  • 1차 생성된 cluster들을 각 cluster의 평균 face/cloth feature를 기반으로 merge합니다.

추가 목적

  • Cluster 후처리
  • 1차 생성된 cluster들의 경우 threshold를 높게 주어 같은 인물이 다른 cluster로 분류되는 경우가 있는 편
  • 이를 유사도를 기반으로 merging하는 과정을 통해 동일한 인물을 하나의 cluster로 merge하여 좀 더 깔끔한 결과를 기대함

사용 방법

  • merge_clusters 함수 사용 (person_clustering.ipynb 맨 마지막에 작성되어 있음)
    • parameters: cluster_dict, fingerprints, iteration=1, FACE_THRESHOLD_HARD=0.18, CLOTH_THRESHOLD_HARD=0.12, FACE_THRESHOLD_SOFT=0.19, CLOTH_THRESHOLD_SOFT=0.15
    • return: merged_clusters (calc.cluster() 함수의 return 형태와 동일)
  • 자세한 내용은 notion에 적어놓겠습니다.

[DEV] 모델링 코드 업로드

추가 기능

하나의 파이프라인으로 완성된 모델링 코드를 업로드

추가 목적

모듈화된 코드 연결

사용 방법

demo 파일 참고

[Ext] Change folder names

주요 내용

기존 experiment 폴더를 model 폴더로 변경하고, experiment 폴더를 새로 생성하여 기존에 실험했던 내용을 업로드하도록 한다.

추가 설명

[Feat] 최종 쇼츠 제공 구현

추가 기능

  • 최종적으로, timeline들을 이용하여 최종 하이라이트에 해당하는 timeline을 제공하는 api를 구현하려고 한다.

추가 목적

사용 방법

[Style] 코드 정리 및 format 통일

주요 내용

  • 필요 없는 코드는 삭제한다.
  • indentation 등 소스코드의 format을 통일한다.

추가 설명

  • 우선 필요 없는 코드 삭제부터 진행한다. format은 일괄적으로 통일할 예정이다.

[Feat] Face Timeline 생성

추가 기능

  • face clustering이 진행된 후, 사용자가 특정 등장인물을 선택하면, 해당 등장인물의 timeline을 뽑아주는 기능을 구현하려고 한다.

추가 목적

  • timeline을 뽑은 후, laughter detection과 결합하여 최종 output을 산출한다.

사용 방법

[DEV] 이미지 사진 중 가장 선명한 사진 고르는 알고리즘

추가 기능

FFT 로 가장 덜 blur 한 사진을 찾는다. 가장 덜 blur 한 사진이 sharp 한 사진이라 기대

input으로 인물 사진이 저장되어 있는 폴더의 저장 위치를 넣으면 output으로 사진 한장 반환

추가 목적

클러스터링 이후, 사용자에게 제안할 사진 한 장을 고를 때 적절한 사진을 뽑기 위한 알고리즘

사용 방법

모듈화 진행 중..

[Feat] short timeline 계산 방식 업데이트

추가 기능

자체 실험을 통해 구한 쇼츠 타임라인 및 흥미도 계산 방법을 적용한 코드를 업로드

타임라인 생성) 기존 -10초 ~ +0.5초 -> -15초 ~ +0.5초
흥미도 계산) 웃음 구간 길이의 비율: 웃음 구간 소리 크기: 인물 등장 비율 을 기존 2:1:2 -> 3:2:1

추가 목적

사용 방법

[Feat] /upload-video, /show-people API 구현 및 모듈화

추가 기능

  • /upload-video : FE에서 BE로 원본 영상을 업로드 후 face clustering을 수행한다.
  • /show-people : face clustering 결과에서 각 cluster의 첫 번째 사진을 FE로 반환한다.
  • 기존에는 api.py 하나에만 모든 api를 작성했었으나, 이를 큰 기능별로 파일을 분리한다.

추가 목적

  1. FE -> BE : 원본 영상 업로드
  2. BE : face clustering 수행
  3. BE -> FE : face clustering 결과 반환

사용 방법

serving/backend/app에서 python main.py를 실행한다.

[Feat] Update Face Clustering

추가 기능

  • modeling에서 작업한 업데이트 된 face clustering을 api에 적용하였다.
  • 또한, 결과를 .npy로 저장하여 face recognition에서도 불러와서 사용할 수 있도록 하였다.

추가 목적

사용 방법

[Feat] Video Upload 구현

추가 기능

app.post를 통한 Video불러오기

추가 목적

gcp에서 Video를 보내줬을 때, Video를 가져와 이후 face clustering 및 다양한 작업이 가능하도록 한다.

사용 방법

[Feat] ffmpeg를 사용하여 쇼츠 생성하기

추가 기능

  • 속도 개선을 위하여, ffmpeg를 사용하여 쇼츠를 생성하기로 하였다.
  • 추후, face clustering이나 recognition 등 opencv를 활용한 모델에서도 활용할 수 있으면 좋을 것 같다.

추가 목적

  • shorts 생성 시간 단축

사용 방법

  • pip install ffmpeg-python을 사용하여 ffmpeg-python을 설치한다.
  • 자세한 내용은 코드 참조

[Feat] Scene Transition Detection

추가 기능

Scene transition detection

추가 목적

장면 전환한 이미지들로부터 face clustering을 수행하여 정확도 향상

[Feat] 오디오 파일 관련 Backend 수정

추가 기능 및 목적

  • STT를 위해 GCS에 original_audio.wav라는 이름으로 원본 영상의 오디오 파일을 저장한다.
  • app/ml/final_shorts/make_shorts.py에서 최종 쇼츠 영상 파일을 만들 때, 임시 오디오 파일인 [video-name]TEMP_MPY_wvf_snd.mp3 파일이 루트 디렉토리에 생성되는 문제점을 해결한다. (async로 여러 요청 동시에 처리 시 파일 이름이 겹치면 문제 발생 가능하므로)

[Refact] Exception handling in Service

주요 내용

  • 서비스를 진행하는데 있어서 발생할 수 있는 여러 예외적인 상황에 대하여, 이를 유연하게 처리할 수 있도록 코드를 수정하려 한다.

추가 설명

발생할 수 있는 문제 상황은 아래와 같다.

  1. 영상에서 추출할 수 있는 얼굴이 없을 때
  2. 소리가 없는 영상일 때
  3. 영상에서 웃음에 해당하는 영역이 없을 때
  4. 선택한 인물들에서 쇼츠가 생성되지 않을 때

이러한 상황들에 대해 대처할 수 있는 예외처리를 구현한다.

[Feat] 인물 선택 화면 구현

추가 기능

  • 사용자가 업로드한 영상의 face clustering 결과에서 인물을 선택할 수 있는 화면 및 컴포넌트를 구현한다.
  • 지금은 단순하게 cluster 마다 첫 번째 사진을 받아와 렌더링한다.

추가 목적

clustering 결과를 통해 사용자가 하이라이트 추출을 원하는 인물을 고를 수 있도록 한다.

사용 방법

npm run start-dev 시 30002번 포트로 열린다.

[Feat] Laughter Timeline API 구현 및 프론트 추가

추가 기능

  • 사용자가 영상을 업로드하면 laughter detection을 수행하여 웃음 구간의 타임라인을 반환한다.

추가 목적

  • laughter detection으로 뽑은 타임라인과 face recognition으로 뽑은 타임라인을 projection 하여 최종 쇼츠의 타임라인을 구하기 위함이다.

사용 방법

  • 우선은 face clustering과 동시에 진행되도록 구현할 것이므로, 영상을 업로드하면 laughter timeline이 생성된다.

[Feat] 최종 쇼츠 선택 화면 구현

추가 기능

  • 최종적으로 생성된 쇼츠를 확인하고 선택하여 다운로드할 수 있는 페이지를 구현한다.

추가 목적

  • 사용자가 쇼츠를 확인하고 원하는 쇼츠를 선택하여 다운받을 수 있도록 한다.

사용 방법

[DEV] Backend Baseline Development

추가 기능

가장 기초적으로, fastapi를 활용하여 gcp서버와 통신하는 backend를 구축하려고 한다.

추가 목적

gcp서버에서의 frontend와 통신하는 backend api 구축

사용 방법

서버 내에서

python main.py

를 실행시키고, {서버ip} : 30001 를 통하여 접근이 가능하다.

[Feat] Update Face Recognition

추가 기능

  • Face Recognition을 업데이트하고, face timeline을 따로 저장하여 이를 참조하도록 하였다.

추가 목적

사용 방법

[Refact] Backend Code 리팩토링

주요 내용

  • Backend에 대한 코드 리팩토링을 진행하고자 한다.

추가 설명

  • 리팩토링과 함께, docstring도 함께 작성하여 추가적인 작업에 도움이 되도록 한다.

[Feat] config를 이용한 Frontend url 관리

추가 기능

  • url을 관리하는 config 파일을 만든다.

추가 목적

  • frontend에서 API 요청을 보내는 url들을 config 파일 하나를 이용하여 관리하도록 한다.

사용 방법

  • 각자 개발 환경에서 사용하는 url로 내용 변경 후 사용한다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.