본문 바로가기

MOBILE/project 회고

python openCV로 퍼스널 컬러 분석 웹 만들기

한 달이 다 되가는데 이제야 쓰는 웹 개발 후기 2020/11/25~2020/12/10

https://stoic-johnson-e2ed9d.netlify.app

 

웹 main 화면

 

1. Find your personal color

학기 중에 친구와 웹 프로젝트를 하기로 했음. 사람들이 다들 집에서 심리테스트, 색깔 테스트 이런 테스트들만 주구장창 하길래 (오죽하면 테스트들이 실검에 종일 떠 있을 정도) 우리도 트렌드를 따르기로 했음. 일단 맨 처음에 계획한 것은 퍼스널 컬러를 검사하고 그에 맞는 스타일을 추천해주는 서비스였는데 시간이 없어서 검사만 구현했다.

검사는 두가지 형태로 구현했다. 

 

1. openCV로 이미지에서 색상 추출 후 분석

2. 자가 진단 테스트

 

 

첫 컴퓨터비전 맛보기....

 

openCV는 python으로 알고리즘을 작성했기 때문에 웹 프레임워크도 python Flask를 사용했다.

node에서 python 불러올 수 있는데 굳이 하기 싫었다....귀찮아...

배포는 pythonanywhere에서 했다. domain 이름 변경이 안되는게 단점이지만 storage를 512MB까지는 무료로 제공함

2. 개발 과정

내가 맡은 부분은 이미지 분석 파트였음. 근데 github에 이미 좋은 알고리즘이 있어서 fork 후 약간 수정해서 사용했다.

기존 알고리즘은 봄, 가을 웜/ 여름, 겨울 쿨 부분으로 컬러감 뿐만 아니라 계절도 구분한 상태였는데, 계절까지는 필요 없기도 하고 정확성에 올인하자는 마음으로 컬러감만 구분하는 것으로 약간 수정했다.

그리고 사용자 이미지를 받아오는 것도 face detection까지 하기에는 배포할 때 무거워질까봐 그냥 color 추출만 하는 것으로 했다. 따라서 가중치 값도 지워버림. 웜/쿨의 표준치도 따로 학습시켜서 값을 업데이트 시켰다.

 

 

근데 실험결과 내가 수정한 알고리즘의 정확도가 더 높아지거나 정교해지지는 않았다... 이미 원본의 알고리즘이 완벽했기 때문에 나는 그냥 필요한 부분만 쓴 정도가 되어버림ㅋㅋㅋ 감사합니다....

 

어쨌든 알고리즘은 다 만들었고 어느 정도 정확성이 보장되고 나서야 프론트엔드를 시작했다.

근데 진짜 나는 UI 감각이 없는 것일까? 모바일은 어느정도 하겠는데 웹은 UI 진짜 못해먹겠다.

결국 디자인도 몇번을 갈아엎고 며칠을 밤새다가 결국 이렇게 만들었다.

 

 

으이구 인간아....디자인 공부 좀 하자

 

디자이너 없다고 티내는 웹이지만 어쩔 수 없다... 더 이상 이 웹을 위해 무언가를 하기 귀찮다

애초에 개발기간이 짧아서 디자인을 할 수 없었음(변명)

3. tools

웹 프레임워크로는 Flask를 사용했다. 원래 계획은 node를 사용하는 것이었으나 알고리즘을 python으로 작성하기도 했고, node에서 python 돌리는게 진짜 귀찮아서 그냥 flask를 쓰기로 했다. 진짜 파이썬 개발자도 풀스텍 하기 좋아졌다....

 

장고도 쓸 수 있었긴 한데, 애초에 만드는게 장고를 쓸 만큼 기능적이지 않았음. 무엇보다도 가볍게 가볍게 만들고 싶었다.

장고보다 가볍지만 기본적인 있을 건 다 있음. 그래서 정적 웹이나 간단한 것들을 구현할 때는 flask를 쓰면 좋을 듯 싶다.

 

처음 써봄

 

배포는 pythonanywhere에서 했다. 처음에는 heroku에 할려고 했는데 git push heroku master 할 때마다 오류가 나는 것임.... matplotlib 이었나 뭐였더라 하여튼 어떤 패키지를 지원을 안하는 것 같아서 포기했다. 나중에 배포하는 방법들 정리해서 올려야겠다....(이렇게 말하면 절대 안올릴 거 같긴 한데 어쨌든)

https://stoic-johnson-e2ed9d.netlify.app

아 방금 생각난 배포 과정 이슈들

배포 과정에서 가상환경을 설정해야 되는데 이 때 기존 가상환경을 쓰지 말고 새로 만들어서 필요한 패키지들만 설치한 후에 거기서 진행하기를 바란다.. 혹시 모를 오류를 최소화 할 수 있음

그리고 가상환경을 만든 후에 패키지를 설치해야 하는데, 애초부터 pip freeze로 패키지 리스트 파일을 만들고 그걸 설치하면 일일이 pip install 할 필요 없다.

4. 후기

 처음으로 뭔가 서비스를 제공하기 위한 웹을 만들어 봤는데 재밌다. 컴퓨터 비전쪽은 관심이 거의 없어서 잘 몰랐는데, 이 분야...진짜 매력있다. 물론 이제 맛보기만 했지만 openCV 툴이 재밌다. 활용하기에도 좋고 토이 플젝에도 유용하게 쓸 부분들이 많다. 그리고 python 뿐만 아니라 c++도 지원해서 나같이 c++을 오래 쓴 사람들에게 컴퓨터 비전을 맛보기에는 좋을 듯 싶다.