Skip to content

woojin-devv/final_project

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 

Repository files navigation

🍱 당뇨병 환우를 위한 개인 맞춤형 식단 관리 서비스 🍱

image

[목차]

1. 프로젝트 소개

본 프로젝트는 당뇨병 환우의 식단 이미지로부터 음식의 종류와 양을 분류하여 영양성분을 분석하고 개인 맞춤형 피드백을 제공하는 서비스입니다.

  • 배포 사이트

  • 예상 기대 효과

    • 단순 기록을 넘어, 실질적인 식단 피드백과 자가관리 지원이 가능한 서비스로 확장하는 것을 목표로 함.
    • 모바일 및 웹 환경(Colab&Streamlit)에서도 동작 가능한 경량 딥러닝 모델을 구축하고, 사용자 정보 기반의 혈당 예측 회귀 모델을 함께 개발함.

1.1 주요 기능

  1. 식단 이미지의 음식 인식 후 분류 (YoloV8)
  2. 인식한 음식의 양 추정(MobileNetV3, EfficientNet)
  3. 추정한 데이터들을 바탕으로 한 영양정보DB로 streamlit에서 결과분석 및 시각화
  4. Gemini API를 이용한 식단 피드백 제공

1.2 실행 예시 결과

  • 시연영상

구현 동영상 썸네일

2. 개발 기간

2025년 5월 13일 ~ 2025년 6월 22일

3. 기술 스택

3.1 개발 환경 & 툴

Windows macOS GitHub Git VSCode Colab Roboflow

3.2 언어 & 프레임워크

Python Flask Streamlit

3.3 배포

Docker GCP

4. 기술 아키텍처

4.1 flowchart

image

4.2 서비스 흐름

image

5 사용한 데이터 셋 & 모듈

- 음식분류 AI 데이터 영양DB.xlsx
- 양추정 : 양추정_이미지_VAL_0422_add.zip l 5.49 GB 
- 음식분류 : 음식분류_이미지_TRAIN_001_1223_add.zip l 27.44 GB

5.2 음식 분류 데이터셋 라벨링 프로젝트

  • 데이터 라벨링 프로젝트 : Roboflow :: opensource_final_yoon
  • 음식 클래스 수: 21종
  • 각 클래스 당 100장의 이미지르 Roboflow를 통해 수집 및 구성함
클래스별 이미지 수
Class Name 이미지 수
bakedpotato 103
bibimbap (비빔밥) 112
chickensteak 100
coldsoymilknoodles 100
crabstick 100
eeldonburi 100
grilledmackerel 100
grilledribs 100
japchae 100
jjajangmyeon 100
kimbap 101
kimchifriedrice 99
kimchistew 97
mungbeansprouts 98
noodles 100
pasta 100
roastedsweetpotato 100
scrambledegg 100
spinach 100
steamerice 100
tunasandwich 100

5.3 음식 분류 :: YOLOv8n 학습설정

5.4 양추정 :: MobileNetV3 & EfficientNet

  • 클래스 구조
김밥/
├── Q1 / (아주 적음)
├── Q2 /
├── Q3 /
├── Q4 /
└── Q5/ (매우 많음)
  • EfficientNet 모델 학습
    • 이미지 디렉터리, txt 디렉터리 구조 및 YOLO 형식 바운딩 박스 정보는 이전과 동일
    • 이미지 크기 (전처리) : 224 x 224 → Tensor 변환
    • 데이터 증강 : RandomResizedCrop 후 Resize로 크기 맞추기 전략
    • 모델의 전체 정확도는 약 30.4%로, 무작위 추정보다 크게 높지 않아 분류 성능이 전반적으로 낮음
  • MobileNetV3 모델 학습
    • 사전학습된 MobileNetV3-Small 모델을 불러온 뒤, 최종 분류 레이어를 5개의 섭취량 등급(Q1~Q5)으로 수정
    • 이미지 크기 (전처리) : 224 x 224 → Tensor 변환
    • epoch : 10회
  • 민지 :: MobileNetV3_amount_estimator.ipynb
  • 효정 :: EfficientNet_amount_estimator.ipynb

5.5 필수 라이브러리 설치

# PyTorch, torchvision, timm (MobileNetV3, EfficientNet 포함)
pip install torch torchvision timm

# YOLOv8 (ultralytics)
pip install ultralytics
  • Google Colab (T4 GPU)
  • 또는 로컬 GPU (CUDA 지원)

6. License

이 서비스는 다음의 오픈소스 AI 모델을 포함합니다.

YOLOv8 (Ultralytics): GPLv3 License

본 프로젝트는 Ultralytics의 YOLOv8을 기반으로 객체 탐지를 수행합니다.
YOLOv8은 GNU General Public License v3.0 (GPLv3)을 따르며, 이 라이선스를 존중합니다.

※ 해당 라이선스 조건에 따라, YOLOv8을 사용하는 모든 소스코드는 공개되어야 하며, 파생 프로젝트 역시 GPLv3을 따라야 할 수 있습니다.
EfficientNet (Google): Apache License 2.0

본 프로젝트는 Google의 EfficientNet 아키텍처를 기반으로 양 추정 모델 중 하나를 구현하였습니다.
EfficientNet은 Apache License 2.0을 따릅니다.

※ Apache 2.0 라이선스는 상업적 이용 및 수정이 가능합니다.(단, 라이선스 고지를 유지)
MobileNetV3 (Google): Apache License 2.0

본 프로젝트는 Google의 MobileNetV3 아키텍처를 기반으로 양 추정 모델 중 하나를 구현하였습니다.
MobileNetV3 역시 Apache License 2.0을 따릅니다.

※ Apache 2.0 라이선스는 상업적 사용과 수정이 자유롭고, 소스코드 공개 의무는 없습니다. (단, 라이선스 고지를 유지)

7. 팀원 소개

구민지 김효정 신지윤 최우진
Leader / 양추정 모델 (MobileNetV3) 양추정 모델 (EfficientNet) 음식 분류 모델(YoloV8) 음식 분류 모델(YoloV8)
@dreaminji99 @rb37lu71 @Yoon0221 @woojin-devv

About

오픈소스 최종 팀플 공간입니다.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Jupyter Notebook 100.0%