머리 문제가 아니조 - 미용실 헤어스타일 추천 키오스크

MIE capstone
이동: 둘러보기, 검색

프로젝트 소개

프로젝트 명

프린세스메이커 - 미용실 키오스크

프로젝트 기간

2023.3~2023.6

팀 소개

서울시립대학교 기계정보공학과 (20204300**) (이*은) (팀장)
서울시립대학교 기계정보공학과 (20184300**) (선*진)
서울시립대학교 기계정보공학과 (20184300**) (신*훈)
서울시립대학교 기계정보공학과 (20184300**) (이*현)

프로젝트 개요

프로젝트 요약

사용자에게 헤어스타일을 추천해주고 미리 체험 가능한 미용실에서 사용할 수 있는 키오스크인 '프린세스 메이커'를 제작한다. 프린세스메이커는 연결된 카메라를 통해 사용자 얼굴을 인식하고 AI모델이 사용자의 얼굴형을 판단하여 얼굴형에 따라 맞춤 헤어스타일을 추천해주는 역할을 한다. 또한 사용자가 터치스크린을 통해 헤어스타일을 선택하면 이를 AI모델이 사용자의 얼굴과 자연스럽게 합성하여 미리 결과물을 볼 수 있게 화면에 표시하여 사용자의 헤어스타일 선택에 도움을 준다. 이후에는 예약 가능한 시간에 디자이너를 정하여 예약을 할 수 있고 예약이 완료되면 디자이너에게 카카오톡으로 예약 내역을 전송하여 사용자와 디자이너에게 간편하게 예약 시스템을 제공한다.

프로젝트의 배경 및 기대효과

  • 배경
2020년에 나온 기사에 따르면 구직자 10명 중 7명이 외모를 스펙으로 생각한다고 한다. 또한 통계청에서 조사한 인생에서 외모의 중요도에 따르면 중요하다고 응답한 사람이 85%를 넘어갔다. 게다가 이 비율은 점점 증가하고 있다. 이처럼 외모에 대한 관심도가 높아지고 있는 가운데 얼굴을 아름답게 표현하려면 얼굴과 인접해 있는 헤어스타일의 역할이 무척 중요하다. 분명 개인의 얼굴형과 맞지 않는 헤어스타일이 존재하지만, 이를 사전에 확인할 방법이 없기에 헤어스타일을 변경하지 못하거나 단순히 유명 인플루언서들의 사진을 미용사에게 가져다주며 스타일을 요청하거나 머리를 하고나서야 후회하는 사례가 SNS나 인터넷 커뮤니티 사이에서 많이 보인다. 이러한 결과는 스타일링을 받는 고객이나 머리를 해줘야 하는 미용사 모두에게 큰 스트레스가 되는데도 불구하고, 이를 해결해줄 마땅한 대책이 현재 없다. ‘헤어핏’이라는 어플리케이션이나 ‘미러로이드' 서비스는 현재 이러한 문제를 해결하고자 제품을 개발했지만, 아직은 어색한 사진 합성 기능과 얼굴형을 고려하지 않은 헤어스타일 추천으로 인해 실용성이 낮다. 따라서 이번 프로젝트를 통해 대면 주문에 대해 불편함을 줄이고, 전문가의 판단이 필요한 헤어스타일 추천 기능과 자연스러운 합성으로 기존 어플리케이션 및 제품의 부족한 부분을 보완하려고 한다. 프로젝트를 마친 후 임베디드 개발에 대한 이해도를 높이는 실습을 진행할 수 있을 것으로 생각된다.
  • 기대효과
프린세스메이커는 미용실을 사용하는 고객뿐 아니라 고객과 미용사 모두의 스트레스를 낮춰줄 수 있을 것이라 기대하고 있다. 고객의 입장에서는 소심한 고객의 경우 본인의 의사를 미용사에게 전달하는 것 또한 부담으로 느낄 수 있는데 본인의 의사를 구두로 전달할 필요 없이 본인이 원하는 스타일을 미용사에게 전송할 수 있으므로 부담을 크게 덜어줄 수 있다. 또한 소통의 오류로 인해 헤어스타일을 망치는 경우도 방지할 수 있으므로 사용자의 위험부담을 줄일 수 있다. 미용사의 입장에서는 고객이 원하는 헤어스타일을 명확하게 사진으로 전달받아 이를 확인하여 다시 한번 점검하고 작업을 시작할 수 있고 예약 내역도 편리하게 카카오톡으로 전송받기 때문에 업무 스트레스를 크게 줄일 수 있다. 또한 자신에게 어울리는 헤어스타일을 알지 못해 그저 관성적으로 해왔던 스타일을 고수했던 사람들도 다양한 헤어스타일을 미리 체험해볼 수 있기 때문에 좀 더 다양한 사람들도 헤어스타일에 대한 관심을 높일 수 있을 것으로 기대된다. 이번 프로젝트가 성공적으로 진행된다면 지속적인 개발을 통해 머리 뿐만 아니라 화장 혹은 성형까지 확장할 수 있을 것이라 생각된다.

프로젝트 개발 목표


목적계통도


  • 편의성
(1) 직관성
미용사와 직접 소통을 통해 헤어 스타일링을 받아야 하는 기존 시스템과는 다르게 키오스크를 통해 원하는 헤어스타일을 UI를 클릭하면서 직관적으로 확인할 수 있어야 한다. 별도의 어플리케이션 설치 없이 미용실을 이용하는 고객이 현장에서 바로 헤어스타일을 체험해볼 수 있어야 하고, 미용사 역시 본인의 스마트폰을 통해 편리하게 고객이 원하는 스타일을 받아볼 수 있도록 한다.
(2) 접근성
다른 입력장치를 사용하는 것이 아니라 터치 스크린을 이용해서 키오스크를 조작하기 때문에, 사용자가 쉽고 편리하게 사용할 수 있도록 한다.
  • 기능성
(1) 선명도
작지만 고해상도의 스펙8을 지닌 라즈베리 파이 카메라와 7인치로 작은 크기이지만 선명한 디스플레이를 사용하여 카메라 입력이나 화면의 출력이 정상적으로 작동하도록 한다.
(2) 신속성
Firebase Cloud Database를 사용하여 고객의 데이터를 처리하는 과정에서 프로그램의 결과물이 빠른 시간 안에 출력 혹은 전송이 가능하도록 한다.
  • 실용성
(1) 공간효율성
미용실의 공간을 고려하여 키오스크를 소형화하여 어느 위치에 설치해도 불편함이 없도록 한다.
(2) 경제성
키오스크는 라즈베리파이, 터치 스크린, 카메라, 그리고 이 둘을 고정할 프레임만을 필요로 하기 때문에 유지비용이 적고, 값비싼 프레임을 사용하지 않고 3D 프린팅을 통해 프레임을 제작하기 때문에, 다른 키오스크들보다 간단하고, 재료 비용이 적게 들기 때문에 가격 경쟁력에서 우위를 점할 수 있도록 한다.

동작 시나리오

동작 시나리오

역할분담 및 개발 일정

역할분담

이*은

[프로젝트 총괄, 전체 페이지 프레임 구현, 헤어스타일 이미지 정립]

git에서 다른 브랜치를 마스터에서 합성하여 통합하였다. 키오스크 UI 프레임을 전반적으로 개발하였고, 서버와 라즈베리파이 통신에서 헤어스타일과 모드을 전송하고, 사진을 송수신하는 부분을 작업하였다. 헤어스타일과 헤어컬러 사진을 정리하고, 여자 얼굴형과 퍼스널컬러에 맞는 추천 헤어스타일을 정립하였다.

선*진

[헤어스타일 합성 및 염색 AI 모델 총괄]

멀티프로세싱을 활용한 Rpi와 Server 사이 connection flow를 설계하고 Server에서 헤어스타일을 합성하고 염색을 하는 과정을 설계하였다. 전체적인 코드 흐름을 살펴보며 다양한 상황에서 발생하는 오류에 대한 디버깅을 주도하였다.

신*훈

[키오스크 하우징 출력, 카카오톡 전송, 헤어스타일 이미지 정립]

키오스크를 감싸는 하우징을 설계하여 3D프린터를 사용하여 출력하고, 예약내역과 합성된 헤어스타일을 고객과 디자이너에게 카카오톡을 통하여 전송하는 부분을 구현하였다. 남자 얼굴형과 퍼스널컬러에 맞는 추천 헤어스타일을 정립하였다.

이*현

[Firebase Database 구축, 미용사 예약 시스템 구현, 키오스크 UI 디자인]

키오스크에 사용되는 데이터를 저장하기 위한 Firebase Database 관련 작업을 진행했다. 미용사별로 예약할 수 있는 시스템을 구축하고 UI 프레임을 개발하였다. 화면으로 보이는 키오스크 UI 디자인 작업을 맡아 진행했다. 마지막으로 최종 포스터, GitHub README, 캡스톤 위키 작성을 주도적으로 진행하였다.

개발 일정

개발 일정표

구현 내용

하드웨어 설계 및 UI 화면 구성

키오스크 하우징

25.6cm * 16.8cm의 키오스크 모니터를 보호, 지지해주기 위해 키오스크의 하우징은 총 크기를 35cm * 20cm로 설계하였으나, 3D 프린터의 출력 크기 제약으로 인하여 전면부 2개, 후면부 2개 총 4개의 part로 나누어서 설계했다. 베젤의 크기를 고려하여 하우징이 터치를 위한 모니터의 화면을 제외한 모든 부분을 보호할 수 있도록 만들었고 각 모서리의 직선적인 투박함을 줄이기 위해 edge fillet을 주어 모서리를 부드럽게 만들었다. 또한 터치 시 키오스크의 흔들림이나 part의 분리를 방지하기 위해 접합부를 결합할 수 있게 만들어 흔들림과 분리 위험을 줄였고, 하우징은 아래로 갈수록 두꺼운 형태를 갖기에 디스플레이 터치시에 흔들리거나 뒤로 넘어가지 않고 잘 지지할 수 있도록 설계했다.


나누어진 총 4개의 part는 아래와 같다.


  • 전면 상단 part
  • 전면 하단 part
  • 후면 상단 part
  • 후면 상단 part


위의 part들을 각각 출력하여 완성된 키오스크의 모습은 아래와 같다.

  • 완성된 키오스크 정면
  • 완성된 키오스크 측면

UI 화면 구성

main 내에서 MainUI 클래스를 호출하여 UI 인스턴스를 생성한다. 특정 페이지는 초기화 작업 중에 프레임을 미리 생성하고, 프레임을 불러올 때 tkinter 모듈에서 제공하는 tkraise()를 호출하여 가장 앞 화면으로 올라오게 된다. 사용자가 입력, 선택, 받기를 수행하는 프레임은 미리 생성하지 않고, 순차적으로 진행함에 따라 실행하게 된다. 사용자 인터페이스를 구성하는 데 사용되는 메서드, 함수, 라이브러리의 API 호출, UI 위젯의 생성 및 설정, 이벤트 핸들러 함수 등은 아래와 같다.

Frame_init 메서드: 프레임 초기 설정

  • 카메라 초기화, 스타트 프레임, 로그인 프레임, 서비스 선택 프레임을 시작한다.
  • 스타트 프레임을 가장 위에 띄운다.


시작 페이지


open_win1 메서드: 로그인과 회원가입 선택 페이지

  • 회원가입 버튼을 클릭하면 open_win2을, 로그인 버튼을 클릭하면 open_win3을 실행한다.


로그인 선택 페이지


open_win2 메서드: 회원가입 페이지

  • onboard 키보드 띄우기 : 한글 출력은 되지만, 입력이 안되는 오류 발생했다. 대안으로 키가 눌릴 때마다 영어->한글로 변환하는 함수 실행하고, 프레임이 생성되고 커서가 입력 부분에 갈 수 있도록 focus_set() 설정하여 사용자가 이름 입력에 헷갈리지 않도록 함.
  • check_duplicate_id 함수: ID 중복 확인
  • submit 함수: 사용자로부터 이름, ID, 비밀번호, 전화번호, 성별을 입력받아 데이터베이스에 고객 정보를 저장하고, ID로 고객을 판별하고 firebase에 고객 정보 업로드
  • 개인정보 동의 항목이 체크 되면 submit 버튼 활성화
  • 회원가입 완료하면 onboard 키보드 종료


회원가입 페이지


open_win3 메서드: 로그인 페이지

  • onboard 키보드 띄우기
  • self.db.collection('customers').document(id) 리턴값을 get() 하여 doc 변수에 저장
  • 로그인 시도시 빈칸 입력 시 오류 출력 후 페이지 넘어가지 않음
  • 로그인 시도시 FIrebase Database에 저장된 고객의 정보와 비교, 저장된 고객 데이터의 아이디와 비밀번호가 일치하는지 확인
  • 로그인이 되면 고객 이름을 카카오톡 채팅 목록에서 검색하여 윈도우 전환하고 프레임 destroy()


로그인 페이지

open_win4 메서드: 서비스 선택 페이지

  • button_reg을 누르면 baro()를 호출하여 self.isBaro를 참으로 바꾼 뒤 바로 예약 페이지 메서드를 호출
  • self.isBaro가 참으로 설정될 시 사진 합성 과정을 생략하기에 이후 카카오톡 메세지 전송 환경에서 사진을 따로 보내지 않음
  • button_login을 누르면 사진 촬영 페이지 메서드를 호출


서비스 선택 페이지

open_win5 메서드: 사진 촬영 페이지

  • 이 프레임을 시작하면 self.Baro = False로 변경
  • count_down(num), Capture(win,picam), AfterCapture(frame), Showfeed() 함수를 사용해서 picam으로부터 프레임을 읽어들여 사진 촬영 후 라벨에 이미지로 표시
  • imageBrowse(bucket,name), AfterBrowse(image) 함수를 사용해서 Firebase Storage로부터 고객 사진을 다운로드 받아 라벨에 이미지로 표시
  • tg_img(label,btn) 함수로부터 선택한 버튼에 따라 정의된 모드 속성과 이미지 속성을 바꾸고, 리스트 속성에 선택한 버튼 저장
  • AfterSelect(mode,image_name,image) 함수에서 리스트 속성이 있을 경우 모드와 이미지 속성을 서버로 전송
  • 서버에서 사용자의 얼굴형을 파악하여 Firebase에 업로드하면 헤어스타일 선택 페이지 메서드 호출 후 프레임 종료


사진 촬영 페이지

open_win6 메서드: 헤어스타일 선택 페이지

  • select_personal(self,img) 메서드를 통해 전송했던 서버로부터 사진의 배경이 지워진 사진을 받아 퍼스널컬러를 확인해볼 수 있는 4가지 배경에 붙여서 이미지 라벨에 추가
  • append_list(self,img_path,img_list,img_name) 메서드, select_personal(self,img) 메서드, make_btn(self, frame, img_path,page) 메서드, recommend_style 메서드를 사용해 각 이미지 프레임별로 원하는 사진 버튼을 배열하고 구축
  • 이미지 버튼을 클릭할 때 toggle_border(self, button)에서 변수를 결정하고 이를 인자로 받는 toggle_change(self,button,dict_var,page) 메서드로 컬러와 헤어스타일이 한 개씩만 선택될 수 있도록 설정
  • send_styles 메서드로 선택된 style은 self.dict1 딕셔너리에 저장된 첫 번재 키에 해당한 값의 text, color는 self.dict2 딕셔너리에 저장된 첫 번재 키에 해당한 값의 text를 받아 [style, color] 리스트를 서버에게 전송한다. 이후 합성 결과 확인 페이지 메서드 호출
  • 헤어스타일이나 염색 추천 시스템은 아래의 유튜브를 참고하여 설계하였다.


헤어스타일 선택 페이지

open_win11 메서드: 합성 결과 확인 페이지

  • 서버로부터 받은 합성 결과 이미지를 라벨에 표시
  • 결과가 마음에 들지 않는다면 관련 버튼을 눌러 다시 촬영을 시도 (다시 찍기)
  • 전 페이지로 돌아가 헤어스타일을 재선택 (헤어스타일 재선택)
  • 이 경우 서버에게 동작 페이지를 알려주기 위해 5나 6을 모드로 전송
  • 합성된 결과대로 시술을 예약하고 싶다면 예약하기 버튼을 클릭하여 미용사 선택 페이지로 이동


합성 결과 확인 페이지

open_win12 메서드: 예약 페이지

  • designer 클래쓰를 통해 미용사 인스턴스를 생성하고, 미용사별로 read_reservation(self,db) 메서드로 Firebase Storage로부터 예약 내역을 확인하여 버튼을 생성
  • make_reservation(designer_list) 함수로 예약 정보를 Firestore에 저장하며, 여러 시간, 여러 미용사를 선택하지 않도록 함
  • 선택된 미용사와 고객 이름을 바탕으로 예약 내역과 합성 결과 이미지를 카카오톡 전송 후 예약 완료 알림 페이지 호출


예약 페이지


open_win13 메서드: 종료 페이지

  • 예약이 완료되었다는 텍스트를 보여주고 2초 뒤에 초기 화면으로 돌아가며 이전 프레임은 종료하여 키오스크 초기화


종료 페이지

소프트웨어 설계 및 구현

헤어스타일 합성 모델

헤어스타일 합성은 아래와 같은 방법으로 진행된다.

전체 헤어스타일 합성 과정


  • 얼굴형 인식
얼굴형 인식을 할 경우 dlib의 landmark 기능을 사용하여 진행하였다.
진행을 위해 얼굴형에 따른 랜드마크 대조군이 필요했는데 이를 구성하기 위하여 명확한 기준을 정하여 얼굴형 별로 분류한 데이터셋을 생성하였다.
얼굴형은 남자 여자 모두 둥근형, 각진형, 계란형, 긴얼굴형 4가지로 하여 기준을 정하였다. 얼굴형에 대한 기준은 황금비율 마스크를 사용해서 정하였고 아래와 같다.
  • 황금비율 마스크
  • 랜드마크
  1. 둥근형 : 황금비율 마스크 바깥쪽으로 턱 바로 옆에서 볼까지 돌출된 형상이 둥금.
  2. 각진형 : 하관이 두드러지고 광대뼈도 튀어나옴. 황금비율 마스크에 제일 잘 맞음.
  3. 계란형 : 전체적으로 마스크 바깥쪽으로 나와있지만 둥글고 부드럽게 나와있음.
  4. 긴얼굴형 : 마스크 바깥으로 턱이 살짝 돌출된 얼굴형이면서 마스크에 빈공간이 많음.


기준에 맞는 얼굴 사진 중 정면을 보고 있는 사진을 선별하여 얼굴형별로 20장씩 데이터셋을 구성하였다.
만든 데이터셋으로 사진을 Align하여 같은 크기로 만들어주고 얼굴 외각 landmark를 추출하여 각 랜드마크를 평균을 내어 대조군을 완성하였다.
이 대조군의 landmark와 사용자 사진의 landmark의 차를 error로 정의하고 가장 error가 작은 얼굴형이 output이 되도록 설계하였다.


  • Style-your-hair
"Style Your Hair: Latent Optimization for Pose-Invariant Hairstyle Transfer via Local-Style-Aware Hair Alignment (ECCV 2022)"에서 사용된 모델이다. source image의 얼굴과 target style의 머리스타일을 합성한 결과를 보여주는 모델로 BiseNet과 Style Gan2를 응용하여 만들어졌다. 프린세스 메이커 프로젝트는 고객의 사진을 사용하여 실시간으로 고객에게 결과를 보여주는 프로젝트로 보안과 속도가 매우 중요한 요인 중 하나이다. 하지만 Style-your-hair 모델은 Realtime이 목적이 아니라 source와 target 이미지로 좋은 퀄리티 사진을 만들어 내는것에 초점을 두어서 초기 시간이 RTX-3090 환경에서 Inference time이 약 6분 이상 걸리는 문제가 존재하였다. 또한 코드가 합성을 할때 파일을 저장하고 이를 불러오는 방식으로 대부분 구성이 되어있어 고객의 정보가 Server에 그대로 저장되었다.
Style_Your_Hair


이 문제점을 해결하기 위하여 여러가지 방법을 활용하였다.


해결 방안 1) 임베딩 과정
Style-your-hair는 Image generation 모델이 입력받은 이미지를 생성할 수 있도록 weight를 수정해주는 Embedding 과정이 존재한다. 5분 중 이 Embedding 시간이 6분 이상을 차지하고 이후 합성 시간은 20초 내외에 불가하다는 점을 발견하였다. 따라서 Embedding에 걸리는 시간을 줄이는 것이 필수적이였다. 먼저 Style은 이미 정해진 사진을 사용자에게 합성하는 과정이므로 미리 Embedding을 진행하여 DB에 저장해두었다. 사용자가 만약 스타일을 선택하게 된다면 DB에서 Embedding 데이터를 가져와 사용하게 된다. 이러한 방식으로 Embedding 시간을 절반으로 줄일 수 있었다.
또한 Embedding 과정을 살펴본 결과 300회 이상 학습이 되는 경우 이후 사진은 비슷한 품질을 보여주는 것을 확인하여 기존 1900회로 설정되어있던 Embedding parameter를 수정하였다.
아래는 기존 Embedding 결과와 수정 후 Embedding 결과를 비교한 사진이다.
임베딩 과정
수정전에 Embedding 시간은 총 3분 10초가 소요되었지만 수정후에는 30초로 시간을 크게 줄이면서 비슷한 퀄리티의 사진을 받을 수 있게 되었다.


해결 방안 2) 파일 저장
Style-your-hair는 대부분의 과정이 파일을 직접 저장하고 저장한 파일을 불러오는 방식으로 동작하게 되어있다. 파일을 저장하지 않아도 동작하도록 코드를 수정하여 고객의 개인정보가 서버에 남아있지 않도록 수정해주었다.


  • 염색
염색을 하는 과정은 BiseNet과 Opencv를 활용하여 진행하였다. 합성 이미지를 BiseNet에 넣어서 Segmentation data를 받고 이중 Hair 부분만 opencv로 염색을 진행하였다.
Segmentation 과정

데이터 베이스

Firebase Cloud Service를 이용하여 고객의 데이터, 미용사의 예약시간, 헤어 스타일 정보, 염색 정보 등 프로젝트와 관련된 데이터를 정리한다.

  • Collection_customers
Collection_customers
Document Field 설명 형식
고객의 ID gender 고객의 성별 지정
'남자' 혹은 '여자' 값만 저장
string
- id 고객의 ID
중복 허용하지 않음
string
- name 고객의 이름 저장 string
- password 고객의 password 저장 string
- phoneNumber 고객의 전화번호 저장 string
- shape 고객의 얼굴형 저장
이는 사진 촬영 후 분석 후에 저장된다.
string
'customers' collection은 키오스크 사용에 있어서 전체 고객의 데이터를 저장한다. 이는 추후에 '회원가입', '로그인' 기능 뿐만 아니라 키오스크 사용에 있어서 고객의 정보를 가져올 때 다양하게 사용된다.


  • Collection_hairdresser
Collection_hairdresser
Document Field 설명
미용사의 이름 reservation_time 고객이 선택한 예약시간 저장
'hairdresser' collection은 '미용사 예약하기' 기능 사용에 활용되며, 예약시간 중복이나 이미 지나간 시간에 대해 비활성화할 때 사용된다.
Cloud FireStore
  • Storage
Storage에는 남성/여성의 헤어스타일 정보와 염색 정보를 저장한다.
  • Storage
  • Storage

카카오톡 전송

예약시스템을 완성 시키기 위해서는 예약 내역과 고객이 선택한 헤어스타일이 합성된 사진을 고객과 미용사에게 전송해야 했고, 이를 카카오톡으로 전송하기로 하였다. 카카오톡 전송은 python의 selenium모듈을 통한 웹크롤링을 통하여 구현하였다. "프린세스메이커" 전용 플러스친구 채널을 따로 만들어 사용자들이 이 채널을 친구추가 하면 채널을 통해 카카오톡 전송이 가능하다. 고객이 키오스크를 통해 로그인을 하면 데이터베이스에서 받아온 고객의 이름을 통하여 플러스친구의 고객 명단에서 사용자의 이름을 검색하고 고객이 원하는 헤어스타일을 적용한 후에 예약을 하면 헤어스타일이 합성된 사진과 예약 시간을 각각 첨부하여 고객에게 전송하고, 이를 선택한 디자이너에게도 보낸다.


"프린세스메이커" 카카오톡 플러스친구 채널


  • 고객에게 전송된 사진과 예약내역
  • 디자이너에게 전송된 사진과 예약내역

프로젝트 결과

최종 결과물

  • 완성된 키오스크 정면
  • 완성된 키오스크 측면
  • 시작 페이지
  • 로그인 선택 페이지
  • 회원가입 페이지
  • 로그인 페이지
  • 서비스 선택 페이지
  • 사진 촬영 페이지
  • 헤어스타일 선택 페이지
  • 합성 결과 확인 페이지
  • 예약 페이지
  • 종료 페이지


시연 영상

파일:프린세스메이커 시연영상.mp4

발표 포스터

발표 포스터

미구현 내용

  • 사용자 만족도 실시간 피드백
사용 이후 바로 사용자들로 부터 피드백을 받아 헤어스타일에 가중치를 적용하여 추천을 바꾸는 기능
  • 일부 오류 처리
일부 기능이 실행되기 전에 페이지를 빠르게 이동하는 등 사용자가 시나리오대로 진행하지 않았을 때 발생하는 오류에 대해 오류 처리가 안 된 부분이 존재
  • 예약 초기화
하루가 지나면 예약이 초기화되는 기능

프로젝트 평가

평가항목

프로젝트를 평가하는 기준으로는 개념설계할 당시의 결과물 요구사항을 토대로 '하드웨어', 'DB/시스템', '헤어스타일 시스템 결과물', 'UI'로 항목을 나누어 설문조사지를 작성하여 실제 결과물에 대한 사용자의 만족도를 평가하였다. 세부 요소로는 프로젝트가 '미용'에 관련이 큰 만큼 최대한 사용자의 입장에서 평가를 받기위한 요소를 채워 넣었다.


  • 결과물 요구사항


  • 설문조사 1페이지
  • 설문조사 2페이지

평가결과

설문조사 결과 전체적으로 높은 점수대의 결과를 얻었지만, 아쉽게도 헤어스타일 합성 부분에서 상대적으로 낮은 점수를 얻은 모습을 볼 수 있다.
이는 라즈베리파이 성능에 맞춰 임베딩, 합성 시간을 최대한 줄이기 위해 합성 모델 성능을 타협했기에 사용자 입장에서도 충분히 느낄 수 있는 부분이라 생각된다.
추후에 기기 성능을 높이거나 더 좋은 모델을 사용해 개선을 한다면 더 만족스러운 결과를 얻을 수 있을 것이다.


부문별 만족도 조사 평균


  • 헤어스타일 합성 만족도
  • 염색 만족도
  • 합성 소요 시간 만족도

느낀점

선*진

처음 주제를 선정하였을 땐 open source들을 잘 활용하면 약간의 수정만으로 좋은 퀄리티의 프로젝트를 완성할 수 있을거라 생각되는 주제였습니다. 주제도 또한 평소에 직접 고민했던 내용이여서 흥미를 가지고 접근했습니다. 하지만 코드가 생각처럼 움직여주지 않았고 실제로 개발하다보니 다양한 상황에서 여러가지 변수가 발생해서 이를 통제하는 것이 매우 어려운 작업이였습니다. 만약 같이하는 팀원이 없었다면 절대로 완성하지 못할 프로젝트라고 생각합니다. 모두가 한달동안 다른일 재쳐두고 최선을 다해 열심히 프로젝트에 몰두하였고 뜻대로 잘 되지 않을때에도 포기하지 않고 방법을 찾아 결국에는 불가능할 것 같았던 최종 프로젝트가 완료가 되었습니다. 그동안 많은 프로젝트를 해보았다고 생각을 했지만 이번 프로젝트는 앞으로 잊지 못할 소중한 경험이 될 것 같습니다. 힘들것이라고 예상했고 그만큼 힘들었지만 힘든것과 비교할 수 없을 많큼 배운 프로젝트였습니다.

신*훈

다른 팀들의 주제에 비해서 소프트웨어에 치중되고 하드웨어적인 부분이 부족한 주제여서 결과물을 보이기 힘들고 현실성이 떨어진다 생각했습니다. 처음에는 이게 정말 가능할까 의심도 많이 했습니다. 하지만 학부 과정 중에 배웠던 내용을 통해 시간이 지날수록 하나씩 해결되며 점점 나아지고 눈에 보이는 결과물에 뿌듯한 시간을 보낼 수 있었던 것 같습니다. 좋은 팀원들을 만나 즐겁게 프로젝트 할 수 있었던 것 같아 감사하고 잘 이끌어주시고 조언 해주신 조교님들과 교수님께도 감사한 프로젝트였습니다.

이*은

소프트웨어와 하드웨어를 동시에 배우고 경험해볼 수 있을 것이라는 기대를 안고 임베디드시스템 과목을 수강하였습니다. 전반적인 기능을 구현한 후 피드백을 받기 위한 설문조사를 진행하면서, 반복된 작업으로 인해 시야가 좁아졌고, 저의 의도대로 시나리오가 진행될 것이라는 인식 오류를 인지했다는 점에서 의미 있는 프로젝트였습니다. 사용자가 편리하게 서비스를 이용할 수 있는 인터페이스를 구성했다고 생각했지만, 처음 접하는 사용자 입장에서는 어려울 수 있는 부분이 존재했습니다. 이를 극복하고자 사용자의 요구와 피드백을 수집하고 분석하여, 더 나은 사용자 경험을 제공할 수 있는 방향으로 기능과 디자인을 수정하였습니다. 이번 프로젝트를 토대로 다음에 사용자 친화적인 서비스를 개발할 때 초기 단계부터 사용자의 의견을 수렴하고, 사용자 중심의 설계와 개발을 진행할 수 있을 것이라고 생각합다. 그렇지만 키오스크를 주제로 선정하여 하드웨어적으로 구현할 것이 많이 없었고, 사용 부품이 단순하여 설계나 전기 제어 경험을 쌓지 못한 것은 아쉬운 부분입니다. 한편 팀장으로서 주도적으로 프로젝트를 이끌지 못했음에도 팀원 모두 각자 맡은 파트를 잘 마치고, 적극적으로 참여한 것에 감사드립니다. 또한 프로젝트 진행에 많은 관심을 보이시고, 잘 이끌어주셨던 교수님과 조교님들께도 감사의 인사를 드립니다.

이*현

지금까지 학부 과정에서 진행했던 프로젝트 중에 가장 길게 진행했던 프로젝트였습니다. 기반부터 시작해서 완성까지 처음부터 진행했어야 했기에 주제를 정하는 과정부터 팀원들과 많은 의견을 주고 받아야 했으며, 몇몇 좋은 아이디어를 보낸 끝에 현재 프로젝트를 시작할 수 있었습니다. 프로젝트 진행은 지금까지 학부에서 배운 내용을 적용해 볼 수 있는 기회였고, 실제로 진행하면서 스스로 부족한 부분과 강점을 지니는 부분을 다시 되돌아 볼 수 있는 기회를 가질 수 있었습니다. 다른 팀들과 달리 하드웨어적인 부분보다 소프트웨어적인 부분을 강점을 내세워야 했기에, 사소한 부분에서 에러가 발생하는 것 역시 쉽게 지나칠 수 없었으며, 이를 해결하기 위해 팀원들과 밤을 새가며 코드 화면을 보고 있던 기억이 가장 많이 남는거 같습니다. 진행 과정 속에서 과연 완성할 수 있을까 하는 의문점이 생기기도 했지만, 중간 중간 교수님과 조교님들의 피드백을 통해 가닥을 잡을 수 있었으며, 프로젝트가 진행되가며 점차 하나씩 완성되는 것을 보며 성취감을 느낄 수 있었습니다. 프로젝트를 마무리하고 되돌아보면서 물론 아쉬운 점이 남긴 하지만, 최선을 다해 프로젝트를 진행한 팀원들과 저에게 고생했다는 말을 남기고 싶습니다.