기존의 닮은 배우(or 연예인) 찾기 서비스가 실제 사용자와 크게 닮지 않다는 점에서 착안
- 사용자가 배우와 닮았다고 느낄 수 있도록 개선한 서비스를 웹으로 제공
- Efficientnet과 BeautyGAN을 사용하여 최소한의 서비스를 구현
final-project-level3-cv-03
├── 📁 Crawiling_Part⋮
│ └── ⋮
├── 📁 Model_Part
│ └── ⋮
├── 📁 Tools
│ └── ⋮
├── 📁 Web_Part
│ ├── 📁 back_fastapi
│ │ └── 📁 app
│ │ ├── 💾 __main__.py
│ │ ├── 💾 main.py
│ │ ├── 📁 routers
│ │ │ ├── 💾 face_classifier.py
│ │ │ └── 💾 face_makeup.py
│ │ ├── 💾 storage.py
│ │ └── 💾 utils.py
│ ├── 📁 front_streamlit
│ │ ├── 💾 app.py
│ │ ├── 💾 utils.py
│ │ └── ⋮
│ ├── 📁 kakaotalk_share
│ │ ├── 💾 __init__.py
│ │ └── 💾 index.html
│ ├── 📁 log
│ │ └── ⋮
│ ├── 📁 models
│ │ ├── 📁 beautygan
│ │ │ ├── 💾 beautygan_model.py
│ │ │ └── 📁 weights
│ │ └── 📁 efficientnet
│ │ ├── 💾 efficientnet_model.py
│ │ └── 📁 weights
│ ├── 💾 actor.json
│ ├── 💾 config.yaml
│ ├── 💾 logger.py
│ └── 💾 Makefile
└── 💾 requirements.txt
- 총 51221장 → 배우 별 8:2의 비율로 train set과 valid set구성
- mtcnn을 이용해 얼굴이 하나만 탐지된 사진 중 일정한 화질 이상의 이미지를 수집
- 배우 이름, 시사회, 화보등 키워드를 검색에 이용, 배우 당 500개의 이미지를 크롤링
- 선글라스 착용, 2개 이상의 얼굴, 옆모습 제외
- JPEG 형식 통일
- Insight face를 사용
- 다수의 얼굴이 detect 되는 경우 제외
- 얼굴 부분이 너무 작거나 없는 경우 제외
- algin, crop
- 사용자가 이미지를 업로드할 인터페이스
- 닮은 배우 이미지, 일치율, 배우 이름 출력
- 카카오톡 공유 버튼
- 각종 UI 디자인
- 도메인 주소 할당
- 1.user가 이미지 업로드 → 2. server에 detect 요청 → 전처리 → 3. client에 결과 반환 → 4. client는 얼굴이 감지된 경우와 감지되지 않은 경우를 분기처리 → 5. server는 classification 수행 시 닮은 배우 이름을 통해 GCP storage에서 배우 이미지를 가져와 client로 보냄
- 1.client에서 user이미지, 배우 이미지와 함께 server에 makeup요청 → 2. server가 전처리 후 makeup transfer 수행 → 3. 배우의 화장이 입혀진 user 이미지를 client로 보냄
- Google Cloud Bigquery를 사용하여 로깅 구축
- 수집 데이터 목록
- user와 닮은 배우의 이름
- user와 배우와의 일치율
- backend에서 BeautyGAN inference시간
- frontend에서 makeup-transfer request-response 시간
- 사용자가 image로 결과를 보기까지의 시간
- 전처리 과정에서 user 사진에서 detect된 얼굴의 수
- backend에서 classification inference시간
- frontend에서 classification request-response 시간
- github action을 통해 간단한 배포 자동화 구축
- github main으로 push event 발생 시 google compute engine에 배포를 요청
-
Python requirements
Python
: 3.7.13 -
Installation
-
가상 환경을 설정합니다
-
프로젝트의 의존성을 설치합니다
-
requirements.txt
를 사용하여 라이브러리를 설치합니다.
> pip install -r requirements.txt
-
-
아래 url에 들어가서 beautygan의 가중치는 Web_Part/models/beautygan/weights 폴더 안으로, efficientnet의 가중치는 Web_Part/models/efficientnet/weights 다운받습니다.
-
> cd Web_Part
-
Frontend(Streamlit)와 Server(FastAPI)를 같이 실행합니다
> make -j 2 run_app
-
-
notion
- notion을 활용해 1차 기능 구현 계획을 세우고 각 part별로 업무를 작성
- project kanban board를 통해 업무, part, 진행률, 담당자를 명시하여 서로의 작업 상황을 공유
- bittcoin notion link
-
github
- 전체적으로 github flow를 사용하여 repo 관리
- release branch를 통해 2.0.1까지 총 4가지 버전 배포