Skip to content

Commit

Permalink
OZZ v1.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
doongyeop committed Dec 2, 2024
1 parent 4718bd8 commit a29a8a5
Show file tree
Hide file tree
Showing 41 changed files with 70 additions and 1,589 deletions.
28 changes: 0 additions & 28 deletions .gitlab/issue_templates/feature.md

This file was deleted.

41 changes: 0 additions & 41 deletions .gitlab/merge_request_templates/default.md

This file was deleted.

8 changes: 0 additions & 8 deletions .idea/.gitignore

This file was deleted.

14 changes: 0 additions & 14 deletions .idea/compiler.xml

This file was deleted.

16 changes: 0 additions & 16 deletions .idea/gradle.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/inspectionProfiles/Project_Default.xml

This file was deleted.

30 changes: 0 additions & 30 deletions .idea/jarRepositories.xml

This file was deleted.

10 changes: 0 additions & 10 deletions .idea/misc.xml

This file was deleted.

9 changes: 0 additions & 9 deletions .idea/modules.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/vcs.xml

This file was deleted.

105 changes: 64 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,34 @@
# 옷짱 : OZZ

**2024.07.02 (월) ~ 2024.08.19 (금)**
**삼성 청년 소프트웨어 아카데미 11기 2학기 공통 프로젝트**
**삼성 청년 소프트웨어 아카데미 11기 2학기 공통 프로젝트**
**11기 공통 8반 우수 프로젝트**

## 팀원 구성

|   **이보연👑** |  **한수한** |  **김혜인**  |  **서종원**  |  **김하연**  |  **이동엽**  |
| :----------: | :------------: | :--------: | :---------: | :--------: | :--------: |
| **FRONT** | **BACK & INFRA** | **FRONT** | **BACK & AI** | **FRONT** | **BACK** |

|  **[이보연](https://github.com/btothey99)👑**  | **[김혜인](https://github.com/meinnn)** | **[서종원](https://github.com/styughjvbn)** | **[김하연](https://github.com/gimhyn)** | **[이동엽](https://github.com/doongyeop)** |
| :--------------: | :--------: | :-----------: | :--------: | :--------: |
| **FRONT & PM** | **FRONT** | **BACK & AI** | **FRONT** | **BACK** |

## 기획 배경

**개요**

- 한줄 설명 : 내 옷장에 있는 옷으로 가상 코디 해보기
- 서비스 명 : **옷짱 : OZZ**
- 한줄 설명 : 내 옷장에 있는 옷으로 가상 코디 해보기
- 서비스 명 : **옷짱 : OZZ**

**목적**

- **옷장은 가득 차 있는데, 오늘 무엇을 어떻게 입어야 할지 모르겠다**는 사용자들의 고민을 해결하기 위해 개발하였습니다.
- **옷장은 가득 차 있는데, 오늘 무엇을 어떻게 입어야 할지 모르겠다**는 사용자들의 고민을 해결하기 위해 개발하였습니다.

## 서비스 구조

### 아키텍쳐<hr>

![Architecture](img/Architecture.png)

### ERD<hr>

![ERD](img/ERD.png)

### 주요 기술<hr>
Expand Down Expand Up @@ -53,16 +56,17 @@
![Elasticsearch](https://img.shields.io/badge/Elasticsearch-005571?style=for-the-badge&logo=elasticsearch&logoColor=white)
![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)
![PyTorch](https://img.shields.io/badge/PyTorch-EE4C2C?style=for-the-badge&logo=pytorch&logoColor=white)
![Pandas](https://img.shields.io/badge/Pandas-150458?style=for-the-badge&logo=pandas&logoColor=white)
![Matplotlib](https://img.shields.io/badge/Matplotlib-003366?style=for-the-badge&logo=matplotlib&logoColor=white)
![Pandas](https://img.shields.io/badge/Pandas-150px458?style=for-the-badge&logo=pandas&logoColor=white)
![Matplotlib](https://img.shields.io/badge/Matplotlib-003366?style=for-the-badge&logo=matplotlib&logoColor=white)
![FastAPI](https://img.shields.io/badge/FastAPI-009688?style=for-the-badge&logo=fastapi&logoColor=white)
![MySQL](https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white)
![Redis](https://img.shields.io/badge/Redis-DC382D?style=for-the-badge&logo=redis&logoColor=white)

**AI**

[![YOLOv8](https://img.shields.io/badge/YOLOv8-FF6F00?style=for-the-badge&logo=dark&logoColor=white)](https://github.com/ultralytics/yolov8)
[![Segformer](https://img.shields.io/badge/Segformer-00A6A6?style=for-the-badge&logo=dark&logoColor=white)](https://github.com/NVlabs/SegFormer)
[![OpenAI](https://img.shields.io/badge/OpenAI-000000?style=for-the-badge&logo=openai&logoColor=white)](https://www.openai.com/)
**AI**
![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?style=for-the-badge&logo=ubuntu&logoColor=white)
![RabbitMQ](https://img.shields.io/badge/RabbitMQ-00A6A6?style=for-the-badge&logo=rabbitmq&logoColor=white)
![Segformer](https://img.shields.io/badge/Segformer-00A6A6?style=for-the-badge&logo=dark&logoColor=white)
![OpenAI](https://img.shields.io/badge/OpenAI-000000?style=for-the-badge&logo=openai&logoColor=white)

**CI/CD**

Expand All @@ -80,46 +84,65 @@
[![ERDCloud](https://img.shields.io/badge/ERDCloud-4285F4?style=for-the-badge&logo=cloud&logoColor=white)](https://www.erdcloud.com/d/HWmzKdqNndLE4H9ay)
[![Figma](https://img.shields.io/badge/Figma-F24E1E?style=for-the-badge&logo=figma&logoColor=white)](https://www.figma.com/design/7WUqXjKvUcDPLKYMUa9P4Y/%EC%98%B7%EC%A7%B1?node-id=0-1&t=K68NqokoRcvm5jnd-0)



## 서비스 기능
- 소셜 로그인
<img src="./img/Kakao Login.gif" />

- 개인 정보 변경 / 탈퇴
<img src='./img/Edit Profile.GIF' />

- 쇼핑몰 구매목록에서 옷 정보 가져와서 등록하기 (AI)


- 옷 직접 등록하기 (속성 추출하기, AI)
<img src='./img/AI Analysis.GIF' />

- 유의어 검색
<img src='./img/synonym search.gif' />

- 추천 코디 (AI)

- 직접 코디해보기
<img src='./img/Virtual Try on.GIF' />
**소셜 로그인**
<br>
<img src='./img/Kakao Login.gif' width='400'>
<br>

**개인 정보 변경**
<br>
<img src='./img/Edit Profile.GIF' width='400'>
<br>

**쇼핑몰 구매목록에서 옷 정보 가져와서 등록하기 (AI)**
<br>
<img src='./img/Musinsa Crawling.gif' width='400'>
<br>

**옷 직접 등록하기 (속성 추출하기, AI)**
<br>
<img src='./img/AI Analysis.GIF' width='400'>
<br>

**유의어 검색**
<br>
<img src='./img/synonym search.gif' width='400'>
<br>

**추천 코디 (AI)**
<br>
<img src='./img/Coordi Recommendation.GIF' width='400'>
<br>

**직접 코디해보기**
<br>
<img src='./img/Virtaul Tryon.GIF' width='400'>
<br>

## 후기

**보연**
> 이번 프로젝트는 높은 목표를 설정하고 시작했습니다. 수상을 목표로 했던 만큼, 충분한 경험을 쌓아야 한다는 생각이 강했습니다. 웹 프로젝트에 경험이 부족했었지만, 팀원들의 협조와 도움 덕분에 크게 성장할 수 있었습니다.<br><br>이번 공통 프로젝트를 통해 많은 것을 배웠습니다. 특히 개발자로서 중요한 것은 단순히 개발 실력뿐만 아니라, 프로젝트 스케줄링 능력도 필수적이라는 점을 깨달았습니다. 이번에 Jira를 활용해 체계적인 스케줄링 방법을 익히게 되어 매우 뜻깊었습니다. 또한, 매일 팀원들과 진행 상황을 공유한 것이 프로젝트의 진행 속도와 완성도를 높이는 데 큰 도움이 되었다고 생각합니다.<br><br>이번 프로젝트를 통해 많은 것을 배웠고, 성장할 수 있었습니다. 특히 팀장으로서 여러 부족한 점이 있었음에도 불구하고, 팀원들이 잘 따라와 주고 협력해 준 덕분에 좋은 결과를 얻을 수 있었습니다. 이 자리를 빌려 함께 노력해 준 팀원들에게 진심으로 감사의 마음을 전하고 싶습니다. 😀


**수한**
>
> 이번 프로젝트는 높은 목표를 설정하고 시작했습니다. 수상을 목표로 했던 만큼, 충분한 경험을 쌓아야 한다는 생각이 강했습니다. 웹 프로젝트에 경험이 부족했었지만, 팀원들의 협조와 도움 덕분에 크게 성장할 수 있었습니다.<br><br>이번 공통 프로젝트를 통해 많은 것을 배웠습니다. 특히 개발자로서 중요한 것은 단순히 개발 실력뿐만 아니라, 프로젝트 스케줄링 능력도 필수적이라는 점을 깨달았습니다. 이번에 Jira를 활용해 체계적인 스케줄링 방법을 익히게 되어 매우 뜻깊었습니다. 또한, 매일 팀원들과 진행 상황을 공유한 것이 프로젝트의 진행 속도와 완성도를 높이는 데 큰 도움이 되었다고 생각합니다.<br><br>이번 프로젝트를 통해 많은 것을 배웠고, 성장할 수 있었습니다. 특히 팀장으로서 여러 부족한 점이 있었음에도 불구하고, 팀원들이 잘 따라와 주고 협력해 준 덕분에 좋은 결과를 얻을 수 있었습니다. 이 자리를 빌려 함께 노력해 준 팀원들에게 진심으로 감사의 마음을 전하고 싶습니다. 😀

**혜인**

> 처음 사용하는 기술, 처음 함께하는 팀원들이라 걱정이 많았음에도, 좋은 결과물이 나와 주어 감개무량합니다. (ㅠㅠ) <br><br> 무엇보다 소통과 기록의 중요성을 느낄 수 있었던 6주였습니다. 기획과 설계서 등 개발적 공유 사항 외에도 회의, 매일 진행 정도를 기록하며 진행한 것이 전체 프로젝트 진행률을 파악하고 팀원끼리 소통하는 데에 많은 도움이 되었습니다. <br><br>새로운 기술을 제안해도 거부감 없이 받아들여 주고, 진행 내내 우쭈쭈 해준 우리 팀원들 정말 고맙습니다!! (❤)
**종원**

> 기술 스택에 익숙하지 않았지만, 새로운 도전을 통해 자신감을 얻을 수 있었습니다. 또한, 백엔드와 프론트엔드 간의 원활한 협업을 위해 목업과 API 설계서와 같은 문서 작성이 필수적임을 깨달았습니다. 이번 경험은 여러모로 많은 배움을 준 소중한 시간이었습니다.
**하연**
> 첫 프로젝트라 처음 해보는 것 투성이었지만 역량이 훌륭한 팀원들을 만나 멋진 결과물을 내놓을 수 있어 감사하고 뿌듯합니다. 하면서 어려움도 많았지만 긍정적인 팀원들 덕분에 잘 헤쳐나갈 수 있었던 것 같습니다. 부족한 팀원을 배려해준 팀원들 덕분에 많이 배우고 즐겁게 프로젝트 했습니다. 특히 발표 앞두고 35시간 동안 팀원들과 붙어있으며 마지막 마무리하던 경험은 정말 잊지 못할 것 같습니다. <br><br> 늘 굿모닝 인사로 아침을 열어주고 팀 스케줄링 잘 해준 팀장 보연, 멋진 디자인과 새로운 기술 불어 넣어준 혜인, 늘 유쾌한 분위기 만들어준 동엽, 코디 추천의 긴 여정 수고한 종원, ci/cd 해준 수한님 모두 고맙습니다. 커피4조 최고! 어디 손보여도 자랑스러운 OZZ 최고!

> 첫 프로젝트라 처음 해보는 것 투성이었지만 역량이 훌륭한 팀원들을 만나 멋진 결과물을 내놓을 수 있어 감사하고 뿌듯합니다. 하면서 어려움도 많았지만 긍정적인 팀원들 덕분에 잘 헤쳐나갈 수 있었던 것 같습니다. 부족한 팀원을 배려해준 팀원들 덕분에 많이 배우고 즐겁게 프로젝트 했습니다. 특히 발표 앞두고 35시간 동안 팀원들과 붙어있으며 마지막 마무리하던 경험은 정말 잊지 못할 것 같습니다. <br><br> 늘 굿모닝 인사로 아침을 열어주고 프론트뿐만 아니라 팀 전체 스케줄링 잘 해준 팀장 보연, 멋진 디자인과 새로운 기술 불어 넣어준 혜인, 늘 유쾌한 분위기 만들어주고 인증과 싸우느라 고생한 동엽, 기대를 저버리지 않고 코디 추천의 긴 여정 잘 해낸 종원 모두 고맙습니다. <br><br> ❤ 커피4조 최고! 어디 손보여도 자랑스러운 OZZ 최고! ❤
**동엽**
> 이번 프로젝트는 팀원들 모두가 뛰어난 실력을 갖추고 있어, 각자의 역량을 최대한 발휘하며 함께 성장할 수 있는 소중한 기회가 되었습니다. 덕분에 이 프로젝트는 단순한 개발을 넘어, 많은 것을 배우고 경험할 수 있는 의미 있는 시간이었습니다. <br><br> 이번 프로젝트에서 로그인 기능을 맡아, Spring Security, OAuth2, 그리고 JWT를 활용하여 보안 체계를 구현하였습니다. 이 과정에서 다양한 보안 기술과 인증 방식을 깊이 이해하고 적용할 수 있었습니다. 특히, Spring Security를 통해 강력한 보안 설정을 구현하고, OAuth2를 통해 사용자 인증을 효율적으로 처리하며, JWT를 사용하여 인증 토큰을 안전하게 관리하는 방법을 배웠습니다.<br><br> 이와 같은 기술적인 도전 외에도, 팀원들과의 협업과 소통을 통해 더 나은 결과를 도출해낼 수 있었습니다. 각자의 역할을 충실히 수행하면서도 서로의 의견을 존중하고, 문제를 함께 해결해 나가는 과정에서 큰 성장을 느낄 수 있었습니다.<br><br> **공통프로젝트를 함께해준 수한님, 보연님, 종원님, 혜인님 그리고 하연님 감사합니다.**

> 이번 프로젝트는 두 번째 도전이어서, 처음 시도하는 부분이 많아 기대와 걱정이 컸습니다. 하지만 훌륭한 팀원들을 만나 함께 협력하며 많은 것을 배우고 성장할 수 있었습니다.
> <br><br>
> 기획과 설계 단계에서 충분한 시간을 투자하고, 꼼꼼하게 문서화하는 과정이 초기에는 시간이 많이 걸리는 것처럼 느껴졌지만, 프로젝트를 흔들림 없이 진행하는 데 있어 매우 중요한 요소임을 다시 한번 깨달았습니다.
> <br><br>
> 처음 접해보는 Spring Security와 MSA에서 어려움이 있었지만, 팀원들의 도움으로 성공적으로 극복할 수 있었습니다.<br> 함께한 보연, 종원, 혜인 그리고 하연이 정말 고생 많았고, 감사의 마음을 전하고 싶습니다. :>
16 changes: 6 additions & 10 deletions backend/ai/app/services/recommend.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,18 +63,14 @@ def validate_outfit(self, items: list[int], id_2_clothes: dict[int, Clothes]):
outfit_category = []
print(str(items) + "검증 시작")
for item in items:
try:
clothes = id_2_clothes[item]
high_category = self.clothes_metadata.lowcategoryName_to_highcategoryId(clothes.subCategory)
if high_category is not None and high_category not in outfit_category:
outfit_category.append(high_category)
outfit_set.append((clothes.id, high_category, clothes.imgPath))
except Exception as e:
logging.error("id : "+str(item)+" 아이템을 찾을 수 없습니다. ChatGPT 의 id 인식 오류")
break
clothes = id_2_clothes[item]
high_category = self.clothes_metadata.lowcategoryName_to_highcategoryId(clothes.subCategory)
if high_category is not None and high_category not in outfit_category:
outfit_category.append(high_category)
outfit_set.append((clothes.id, high_category, clothes.imgPath))
if len(outfit_set) == len(items):
print(str(items) + str(outfit_set) + str(outfit_category) + "검증 성공")
return outfit_set
else:
print(str(items) + str(outfit_set) + str(outfit_category) + "검증 실패")
print(str(items) + str(outfit_set) + str(outfit_category) + "검증 성공")
return None
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ public Clothes toEntity(CategoryLow categoryLow, Long imageFileId, Long userId)
.imageFileId(imageFileId)
.userId(userId)
.extra(extra)
.processing(0)
.build();
}
}
Binary file modified img/Architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/Coordi Recommendation.GIF
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified img/Edit Profile.GIF
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified img/Kakao Login.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/Musinsa Crawling.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file renamed img/Virtual Try on.GIF → img/Virtaul Tryon.GIF
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified img/synonym search.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit a29a8a5

Please sign in to comment.