Skip to content

Repository files navigation

🍏 매일 식단 고민, "냠냠"이 함께 해드릴게요! 🍽️

📝 프로젝트 소개

매일 식단 고민, "냠냠"이 함께 해드릴게요는 사용자 음식 섭취를 추적하고, 각 음식의 칼로리와 영양 성분을 계산하여 건강한 식습관을 유지하는 데 도움을 주는 스마트 시스템입니다.


프로젝트 세부 계획

일정 및 마일스톤

마일스톤 목표 날짜 세부 설명
주제 선정 2025-01-15 (수) 프로젝트 주제 선정 및 프로젝트 진행 일정 관련 계획 작성
세부 계획 작성 및 데이터 조사 시작 2025-01-16 (목) 프로젝트 관련 세부 계획 작성 및 필요 데이터 수집
데이터 조사 및 기능 구현 2025-01-17 (금) ~ 2025-01-21 (화) 프로젝트에 필요한 데이터 조사 후 프로젝트 기반을 위한 기능 구현
발표 자료 제작 2025-01-22 (수) ~ 2025-01-23 (목) 기능 구현 결과를 바탕으로 발표 자료 제작 후 디자인 진행
발표 준비 및 피드백 및 프로젝트 마무리 2025-01-24 (금) 발표 자료 디자인 완성 및 최종 확인 후 발표 리허설과 피드백 진행
최종 발표 2025-01-25 (토) 발표 자료 기반으로 프로젝트 최종 발표

📂 개발 프로세스

✅ 1단계: 데이터 준비 및 수집

1. 음식 데이터 수집

  • 공개된 음식 데이터셋 다운로드 (CSV, Excel 등)
  • 주요 데이터: 음식 이름, 칼로리, 영양 성분, 음식 카테고리
  • AI HUB를 활용하여 음식 이미지 데이터를 수집

2. 사용자 데이터 설계

  • 사용자가 입력할 데이터 정의:
    • CSV, pickle을 통해 건강 목표, 선호 음식, 기피 음식 입력
    • 당뇨 유무 정보 등 추가 옵션 포함
  • 입력받은 데이터를 pickle 또는 CSV 형식으로 저장하여 분석에 활용

3. 데이터 전처리

  • 도구: pandas, numpy
  • 음식 데이터와 사용자 데이터를 정리하고 누락값 처리.
  • 칼로리와 영양 성분을 표준화하여 분석 및 모델 입력에 활용.

✅ 2단계: 모델 개발

1. 음식 이미지 분석

  • OpenCV를 활용한 이미지 전처리:
    • 이미지 크기 조정, 색상 보정 등
  • YOLOv5를 활용한 음식 객체 탐지:
    • 음식 객체 탐지 및 라벨링 데이터 준비
    • YOLOv5 모델 학습 후 정확도 검증

2. 추천 알고리즘 개발

  • 식단 추천 시스템:
    • 입력: 사용자 개인 정보, 신체 정보, 당뇨 유무, 음식 사진
    • 출력: 맞춤형 식단 추천(아침, 점심, 저녁)
  • 대체 음식 추천:
    • 사용자가 기호를 반영한 대체 옵션 생성

✅ 3단계: 시스템 구현

1. 파일 기반 데이터 처리

  • 사용자 입력 데이터를 CSV 또는 텍스트 파일로 받아 저장
  • 추천 결과를 streamlit 시각화

2. 결과 시각화

  • matplotlibseaborn을 활용한 시각화:
    • 추천 식단의 칼로리 분포와 영양소 그래프를 이미지 파일로 저장(예: graph.png)

✅ 4단계: 테스트 및 피드백

1. 시스템 테스트

  • 입력 음식 데이터를 처리한 후 모델이 정확한 결과를 반환하는지 검증
  • 다양한 음식 데이터를 활용하여 모델 성능 테스트

2. 사용자 피드백 반영

  • 테스트 결과를 기반으로 피드백
  • 피드백을 기반으로 모델 재학습 및 알고리즘 수정

✅ 5단계: 배포

1. 로컬(Streamlit) 환경 배포

  • Streamlit 기반으로 작동하는 간단한 시스템으로 배포
  • Flask 또는 Django는 사용하지 않고, 데이터를 파일 입출력으로 처리

💻 기능 명세서

핵심 기능 리스트

기능 이름 설명 우선순위 (High/Medium/Low) 담당자
음식 인식 및 분류 음식 이미지를 분석하여 음식 인식, 종류 분류 High 김사무엘
칼로리 계산 음식 중량과 양 기반 칼로리 계산하여 사용자에게 표시 High 김성규
영양 성분 추적 칼로리 이외의 탄수화물, 단백질, 지방 등의 영양 성분 추적 High 김소은
추천 시스템 사용자의 신체, 건강 목표 등의 데이터와 섭취 데이터 기반 건강한 음식, 식단 추천 High 송창우
음식 양 추정 음식의 크기와 양을 분석/입력, 실제 섭취량 추정 Medium 조재원
음식 섭취 기록 및 시각화 사용자의 일일, 주간 섭취 데이터 기록, 트렌드 분석 및 시각화 Low -
알림 시스템 사용자 음식 섭취 시 실시간 알림 통해 섭취 칼로리 알림, 일별, 주간, 월간으로 표시 Low -
실시간 카메라 추적 음식 이미지가 아닌 카메라를 통하여 음식 인식 Low -

📈 플로우 차트

플로우 차트


⚡ 주요 기능

🍔 음식 인식

  • 음식 사진 입력을 통해 음식 객체를 인식합니다.
  • YOLOv5 객체 탐지 모델을 사용하여 음식 종류를 정확하게 식별합니다.

🍎 칼로리 계산

  • 각 음식에 대한 칼로리와 영양 정보를 계산하여 사용자에게 제공합니다.
  • 전국통합식품영양성분정보(음식)표준데이터를 기반으로 한 음식 칼로리 데이터베이스 사용.

🧑‍⚕️ 영양 성분 추적

  • 각 음식의 영양 성분을 추적하여 사용자가 섭취한 칼로리 외에도 탄수화물, 단백질, 지방 등의 영양 상태를 관리할 수 있도록 합니다.

🛎️ 주간 식단 관리 시스템

  • 사용자의 음식 섭취를 주 단위로 일 별 시각화하여 권장 섭취량 달성도를 확인 할 수 있습니다.
  • 예: 에너지(㎉): "2401.02 / 2660.81 (적정)", "단백질(g): 141.75 / 99.20 (과잉)".

🚧 일 별 식단 추천 시스템

  • 사용자의 신체 데이터로 일 별 적정 TDEE(kcal), 영양성분의 권장 섭취량을 추적하여 최적의 식단을 제공합니다.
  • 사용자의 기호 식품과 기피 식품 데이터를 추천 알고리즘에 추가하여, 기호 식품의 추천 등장 확률을 높이며, 기피 식품은 제한 합니다.

💻 시스템 요구 사항

Python Version PyTorch Streamlit


🔧 언어 및 환경

  • 언어: Python 3.8 이상
  • 개발 환경: Visual Studio Code, Jupyter Notebook

📦 사용된 라이브러리 및 모듈

데이터 분석 및 처리

  • pandas
  • pickle: 데이터 직렬화 및 역직렬화
  • pathlib: 파일 및 경로 처리
  • datetime: 날짜 및 시간 처리
  • os: 운영 체제 관련 작업

머신러닝 및 딥러닝

  • torch (PyTorch)

이미지 처리

  • Pillow (PIL)

데이터 시각화

  • matplotlib
    • pyplot
    • mpl
    • rc

텍스트 및 문자열 처리

  • difflib: 유사 문자열 매칭

기타 유틸리티

  • platform: 시스템 정보 확인
  • random: 랜덤 선택

📸 데모

✅ 음식 인식 및 칼로리 계산의 예시 화면

음식 인식 및 칼로리 계산의 예시 화면


✅ 식단 추천의 예시 화면

식단 추천의 예시 화면


✅ 일일 식단 분석의 예시 화면

일일 식단 분석의 예시 화면


📈 발전 방향

  • 다양한 음식 데이터 추가: 더 많은 음식 종류와 칼로리 정보를 데이터베이스에 추가하여 인식 범위를 확장.
  • 모바일 앱 연동: 모바일 앱에서 실시간 음식 추적 및 칼로리 계산 기능을 제공하여 언제 어디서나 사용 가능.
  • AI 학습 개선: 음식 인식 정확도를 높이기 위해 더 많은 데이터를 사용하여 AI 모델을 지속적으로 학습시킵니다.
  • 실시간 영상 분석 기능: 사용자의 편의를 위하여 실시간 영상처리를 통한 음식의 분석합니다.
  • 건강 관리 시스템: 사용자의 TDEE(kcal) 초과분에 따라 운동 시간을 할당하여 제공합니다.
  • 음식 양 추정: 음식 이미지에서 양을 추정하는 기능을 추가하여 정확한 칼로리를 제공합니다.

🚧 문제 해결과 도전 과제

객체 인식 정확도 향상

처음에는 YOLOv5의 사전 학습된 모델을 사용했지만, 음식 인식 정확도가 낮았습니다. 이를 개선하기 위해 데이터셋을 커스터마이즈하고 Fine-tuning을 진행하여 모델의 정확도를 높였습니다. 하지만 프로젝트 기간 내 모델의 학습 완료를 위해 축소된 데이터 수와 낮은 epoch를 채택하여 모델의 정확도를 끌어 올리기에 한계가 있었습니다.


❓ 자주 묻는 질문 (FAQ)

Q: 음식 인식이 정확하지 않아요.

A: 모델의 정확도를 높이기 위해 Fine-tuning이 필요할 수 있습니다. 데이터셋을 추가하거나 YOLO 모델을 재학습하여 개선할 수 있습니다.


Q: 음식의 크기나 양이 계산되지 않아요.

A: 음식 크기와 양을 계산하기 위해 참조 객체(예: 표준 크기의 물체)와 함께 이미지를 제공하여 향후 버전에 3D 분석 모델이 추가되면 사용할 수 있습니다.


Q: 데이터 업데이트는 얼마나 자주 이루어지나요?

A: 기본적으로 데이터는 사용자가 업데이트하도록 설계되어 있습니다. 그러나 새로운 음식 데이터가 추가되면 업데이트된 CSV 파일이 프로젝트와 함께 배포될 예정입니다.


Q: 개인화된 추천은 어떻게 작동하나요?

A: 사용자가 제공한 정보(예: 신체 정보, 선호 음식, 기피 음식, 건강 목표)를 기반으로 추천 알고리즘이 맞춤형 식단을 생성합니다. 사용자는 선호도 데이터를 업데이트하여 추천 결과를 조정할 수 있습니다.


Q: YOLO 모델 이외에 다른 모델도 사용할 수 있나요?

A: 네, YOLO 모델 외에도 SSD, Faster R-CNN, EfficientDet 같은 객체 탐지 모델을 활용할 수 있습니다. 모델 교체 시, 해당 모델에 맞는 데이터 전처리와 학습 과정이 필요합니다.


Q: 프로젝트를 클라우드에서 실행할 수 있나요?

A: 현재는 Streamlit에서 실행되도록 설계되어 있지만 AWS, Google Cloud Platform과 같은 클라우드 플랫폼에서 배포할 수 있습니다. 향후 배포 및 클라우드 호스팅 지원이 추가될 수 있습니다.


🔗 링크


🍽️ 음식 데이터베이스 비교

데이터베이스 출처 제공하는 정보
통합_식품영양성분DB.csv 식품안전나라 음식 칼로리, 영양 성분
한국 이미지(음식) 데이터 셋 AI HUB 음식 이미지, 라벨 정보

📝 Contributing

이 프로젝트에 기여하고 싶다면 다음 절차를 따르세요:

  1. 저장소를 Fork 합니다.
  2. 새로운 기능을 추가하거나 버그를 수정합니다.
  3. Pull Request를 생성하여 기여 사항을 제출합니다.

컨트리뷰팅 절차

  1. 새로운 기능 추가: 새로운 기능을 추가할 때는 각 기능에 대한 문서도 함께 작성해 주세요.
  2. 코드 스타일: 코딩 스타일 가이드에 맞춰 작성해 주세요. Python PEP 8 스타일을 따르세요.
  3. 테스트 작성: 기능을 추가한 후에는 반드시 해당 기능에 대한 테스트 코드를 작성해 주세요.

📈 기여 방법

프로젝트에 기여하고 싶다면, 다음 절차를 따라주세요:

  1. 원격 저장소에서 새로운 브랜치를 생성합니다. (git branch feature-branch)
  2. 생성한 브랜치로 이동합니다. (git checkout feature-branch)
  3. 작업을 완료한 후, 해당 브랜치에 커밋과 푸시를 수행합니다.
  4. 팀원들과 협의 후 main 브랜치에 병합합니다.

📂 프로젝트 구조

프로젝트의 기본 폴더 구조는 다음과 같습니다:

Machine_learning_project/
│
├── .gitinore                        # Git에서 제외할 파일 목록
├── EX1_re2.py                       # 메인 실행 파일
├── best.pt                          # YOLOv5 학습된 모델
├── images.JPG                       # STREAMLIT 도메인 사진
├── requirements.txt                 # 필요한 라이브러리 목록
├── README.md                        # 프로젝트 설명 파일
├── 냠냠_최종.pptx                    # 프로젝트 최종  발표자료                      
└── 통합_식품영양성분DB.csv           # 음식 칼로리 및 영양 정보
     

🧑‍⚕️ 역할 분담

이름 역할 주요 업무 GitHub 프로필
김소은 팀장 발표, 전체 일정 관리, 데이터 조사 GitHub
김성규 팀원 발표 자료 제작, 데이터 조사 GitHub
김사무엘 팀원 발표 자료 제작, 데이터 조사 GitHub
송창우 팀원 코드 구현 GitHub
조재원 팀원 코드 구현 GitHub

About

2nd project for CodingOn Smart Factory course

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages