Skip to content

Latest commit

 

History

History
149 lines (118 loc) · 9.02 KB

README.md

File metadata and controls

149 lines (118 loc) · 9.02 KB

쿡세이브 (COOK-SAVE)

식재료 관리를 통한 1인 가구의 식비 절감 지원 웹앱 서비스
https://www.cooksave.co.kr/

💚 기능 소개

010 011 012 013 014 015

💚 Architecture

016

BE FE AI
- Spring Boot
- MySQL
- EC2
- RDS
- ELB
- TypeScript + React
- Recoil
- Axios
- react-router-dom
- styled-components
- flask
- yolov8
- opencv
- tencent-cloud

💚 ABOUT SOURCE CODE

FE

src/assets - 이미지 파일 모음
src/components - UI 컴포넌트 모음
src/pages - 화면별 레이아웃 모음
src/router - 비로그인 유저 접근 제한 등의 라우팅 관련 코드
src/services/api - API 요청 함수 모음
src/services/store - Recoil 전역 상태 관리 함수 모음
src/style - 글로벌 스타일 및 CSS 기본 설정
src/type - 오브젝트 별 타입 지정

BE

scripts - 배포 스크립트
src/main/java/CookSave/CookSaveback/Heart - 레시피 저장 기능 코드
src/main/java/CookSave/CookSaveback/History - 요리 내역 관련 기능 코드
src/main/java/CookSave/CookSaveback/HistoryIngredient - 요리 내역의 재료 관련 기능 코드
src/main/java/CookSave/CookSaveback/Ingredient - 재료 관련 기능 코드
src/main/java/CookSave/CookSaveback/Member - 회원 관련 기능 코드
src/main/java/CookSave/CookSaveback/Recipe - 레시피 관련 기능 코드
src/main/java/CookSave/CookSaveback/RecipeTag - 레시피 재료 태그 관련 코드
src/main/java/CookSave/CookSaveback/Tag - 재료 태그 관련 코드
src/main/java/CookSave/CookSaveback/global - 기능에서 참고하는 코드
src/main/java/CookSave/CookSaveback/utils - jwt 관련 코드

AI

weights/ - best weight checkpoints이 저장되는 폴더
app.py - flask sever에 대한 코드
requirement.txt - pip install로 설치해야하는 라이브러리 모음
train.py - 모델 학습 코드
uwsgi - flask server connection을 위한 코드
yolov8n.pt - pre-trained model

web-view

안드로이드 웹뷰를 통해 구현한 웹을 안드로이드 앱 내에서 실행할 수 있도록 합니다.
app/src/main/java/com/example/cooksave_webview/MainActivity.kt - 디바이스로부터 이미지 업로드, 메타태그, 로컬 저장소 허용 등 관련 코드

💚 HOW TO BUILD

1. 프론트엔드 repo

  • git clone https://github.com/EWHA-CAPSTONE-COOKSAVE/cooksave-front 으로 프로젝트 폴더를 로컬에 다운로드합니다.
  • 다운받은 폴더를 에디터에서 열고, npm i 를 입력하여 필요한 패키지를 설치합니다.
  • npm start로 로컬에서 프로젝트를 실행합니다.

2. 백엔드 repo

  • git clone https://github.com/EWHA-CAPSTONE-COOKSAVE/cooksave-back 으로 프로젝트 폴더를 로컬에 다운로드합니다.
  • 다운로드 받은 폴더의 build.gradle 파일을 에디터에서 열고 build 하여 필요한 라이브러리들을 다운로드합니다.
  • 필요한 정보를 application.yml 파일에 작성합니다.
  • run으로 로컬에서 프로젝트를 실행합니다.

3. AI repo

[GPU 사용 시]

(1) 가상환경 세팅
cd {가상환경을 설치할 경로}
python -m venv {가상환경이름}
source ./venv/bin/activate

(2) 필요한 라이브러리 설치
pip install requirement.txt

(3) 데이터 셋 다운로드
(recommended) roboflow에서 costom data 제작 후 yolo format으로 불러오기

(4) 모델 학습 진행
python train.py

(5) AI flask server 실행
python app.py

4. 프론트엔드 안드로이드 웹뷰 repo

💚 HOW TO INSTALL

웹 사용 시

프로그레시브 웹앱 사용 시

안드로이드 앱 사용 시

  • APK 파일을 다운로드하여 안드로이드 디바이스에 설치합니다.

💚 HOW TO TEST

위의 환경 설치방법에 따라 서비스를 시작한뒤, 테스트 계정으로 로그인합니다.
ID: cookingmama PW: 1234
아래 첨부한 서비스 사용 설명서를 참조하여 각 기능을 테스트해봅니다. 123

💚 DESCRIPTION OF SAMPLE DATA

image
저희는 직접 식재료 데이터를 구글 이미지 검색 및 대형 온라인 몰에서 크롤링하여 제작하였습니다.
20가지의 식재료를 100장씩 크롤링 한 후 flip, 90 rotate, shear 등의 data augmentation을 통해 전체 20,000장으로 데이터를 증강시켰습니다.
image sample data로 양파와 당근이 함께 있는 사진을 input으로 주었을 때, 다음과 같이 잘 인식됨을 확인할 수 있습니다.

💚 DESCRIPTION OF OPEN SOURCE

1. Object Detection

🚀Yolo Model Github image

YOLO(You Only Look Once) 모델은 객체 탐지를 위해 사용되는 유명한 딥러닝 모델로, 매우 빠르고 정확하게 이미지를 분석하여 객체를 탐지할 수 있습니다. YOLO 모델은 크게 세 가지 특징을 가지고 있습니다:

  1. End-to-End 학습: YOLO는 이미지를 입력받아 단 한 번의 전방 패스를 통해 객체를 탐지합니다. 이는 다른 객체 탐지 모델들과 비교했을 때 매우 빠르며, 실시간 객체 탐지에 적합합니다.
  2. 전체 이미지 고려: YOLO는 이미지를 전체적으로 보고 예측을 하기 때문에 문맥을 잘 파악할 수 있습니다. 이는 작은 객체를 탐지하는 데 유리하며, 객체 간의 상호작용을 더 잘 이해할 수 있습니다.
  3. 단일 신경망: YOLO는 단일 신경망을 사용하여 경계 상자와 클래스 확률을 동시에 예측합니다. 이로 인해 모델이 간단하고 효율적입니다.

저희는 그 중 yolov5와 yolov8 모델을 custom dataset 비교 학습을 진행하였고, 학습 속도와 정확도가 더 높은 버전 8로 식재료 인식 기능을 개발하였습니다.

2. OCR

🍀Naver Clova AI image

네이버 클로바 영수증 모델은 영수증의 유형과 패턴을 자동 분석하여 매장 정보, 결제 내역, 지불 방식 등 영수증의 기재된 정보를 추출합니다.
클로바 ocr 모델 이외에도 easyocr, tesseractocr 등 다양한 ocr 모델을 비교하였고 한국어에 높은 정확도를 보이는 네이버 클로바 OCR을 선택하여 영수증 및 구매내역 인식 식재료 등록 기능을 개발하였습니다.


💚 팀원 소개

BE FE & DESIGN AI
차소연 송지민 최예은
Soyeon-Cha songing01 yenncye