매일 식단 고민, "냠냠"이 함께 해드릴게요는 사용자 음식 섭취를 추적하고, 각 음식의 칼로리와 영양 성분을 계산하여 건강한 식습관을 유지하는 데 도움을 주는 스마트 시스템입니다.
| 마일스톤 | 목표 날짜 | 세부 설명 |
|---|---|---|
| 주제 선정 | 2025-01-15 (수) | 프로젝트 주제 선정 및 프로젝트 진행 일정 관련 계획 작성 |
| 세부 계획 작성 및 데이터 조사 시작 | 2025-01-16 (목) | 프로젝트 관련 세부 계획 작성 및 필요 데이터 수집 |
| 데이터 조사 및 기능 구현 | 2025-01-17 (금) ~ 2025-01-21 (화) | 프로젝트에 필요한 데이터 조사 후 프로젝트 기반을 위한 기능 구현 |
| 발표 자료 제작 | 2025-01-22 (수) ~ 2025-01-23 (목) | 기능 구현 결과를 바탕으로 발표 자료 제작 후 디자인 진행 |
| 발표 준비 및 피드백 및 프로젝트 마무리 | 2025-01-24 (금) | 발표 자료 디자인 완성 및 최종 확인 후 발표 리허설과 피드백 진행 |
| 최종 발표 | 2025-01-25 (토) | 발표 자료 기반으로 프로젝트 최종 발표 |
- 공개된 음식 데이터셋 다운로드 (CSV, Excel 등)
- 주요 데이터: 음식 이름, 칼로리, 영양 성분, 음식 카테고리
- AI HUB를 활용하여 음식 이미지 데이터를 수집
- 사용자가 입력할 데이터 정의:
- CSV, pickle을 통해 건강 목표, 선호 음식, 기피 음식 입력
- 당뇨 유무 정보 등 추가 옵션 포함
- 입력받은 데이터를 pickle 또는 CSV 형식으로 저장하여 분석에 활용
- 도구: pandas, numpy
- 음식 데이터와 사용자 데이터를 정리하고 누락값 처리.
- 칼로리와 영양 성분을 표준화하여 분석 및 모델 입력에 활용.
- OpenCV를 활용한 이미지 전처리:
- 이미지 크기 조정, 색상 보정 등
- YOLOv5를 활용한 음식 객체 탐지:
- 음식 객체 탐지 및 라벨링 데이터 준비
- YOLOv5 모델 학습 후 정확도 검증
- 식단 추천 시스템:
- 입력: 사용자 개인 정보, 신체 정보, 당뇨 유무, 음식 사진
- 출력: 맞춤형 식단 추천(아침, 점심, 저녁)
- 대체 음식 추천:
- 사용자가 기호를 반영한 대체 옵션 생성
- 사용자 입력 데이터를 CSV 또는 텍스트 파일로 받아 저장
- 추천 결과를 streamlit 시각화
- matplotlib 및 seaborn을 활용한 시각화:
- 추천 식단의 칼로리 분포와 영양소 그래프를 이미지 파일로 저장(예:
graph.png)
- 추천 식단의 칼로리 분포와 영양소 그래프를 이미지 파일로 저장(예:
- 입력 음식 데이터를 처리한 후 모델이 정확한 결과를 반환하는지 검증
- 다양한 음식 데이터를 활용하여 모델 성능 테스트
- 테스트 결과를 기반으로 피드백
- 피드백을 기반으로 모델 재학습 및 알고리즘 수정
- 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 3.8 이상
- 개발 환경: Visual Studio Code, Jupyter Notebook
pandaspickle: 데이터 직렬화 및 역직렬화pathlib: 파일 및 경로 처리datetime: 날짜 및 시간 처리os: 운영 체제 관련 작업
torch(PyTorch)
Pillow(PIL)
matplotlibpyplotmplrc
difflib: 유사 문자열 매칭
platform: 시스템 정보 확인random: 랜덤 선택
✅ 음식 인식 및 칼로리 계산의 예시 화면
✅ 식단 추천의 예시 화면
✅ 일일 식단 분석의 예시 화면
- 다양한 음식 데이터 추가: 더 많은 음식 종류와 칼로리 정보를 데이터베이스에 추가하여 인식 범위를 확장.
- 모바일 앱 연동: 모바일 앱에서 실시간 음식 추적 및 칼로리 계산 기능을 제공하여 언제 어디서나 사용 가능.
- AI 학습 개선: 음식 인식 정확도를 높이기 위해 더 많은 데이터를 사용하여 AI 모델을 지속적으로 학습시킵니다.
- 실시간 영상 분석 기능: 사용자의 편의를 위하여 실시간 영상처리를 통한 음식의 분석합니다.
- 건강 관리 시스템: 사용자의 TDEE(kcal) 초과분에 따라 운동 시간을 할당하여 제공합니다.
- 음식 양 추정: 음식 이미지에서 양을 추정하는 기능을 추가하여 정확한 칼로리를 제공합니다.
처음에는 YOLOv5의 사전 학습된 모델을 사용했지만, 음식 인식 정확도가 낮았습니다. 이를 개선하기 위해 데이터셋을 커스터마이즈하고 Fine-tuning을 진행하여 모델의 정확도를 높였습니다. 하지만 프로젝트 기간 내 모델의 학습 완료를 위해 축소된 데이터 수와 낮은 epoch를 채택하여 모델의 정확도를 끌어 올리기에 한계가 있었습니다.
A: 모델의 정확도를 높이기 위해 Fine-tuning이 필요할 수 있습니다. 데이터셋을 추가하거나 YOLO 모델을 재학습하여 개선할 수 있습니다.
A: 음식 크기와 양을 계산하기 위해 참조 객체(예: 표준 크기의 물체)와 함께 이미지를 제공하여 향후 버전에 3D 분석 모델이 추가되면 사용할 수 있습니다.
A: 기본적으로 데이터는 사용자가 업데이트하도록 설계되어 있습니다. 그러나 새로운 음식 데이터가 추가되면 업데이트된 CSV 파일이 프로젝트와 함께 배포될 예정입니다.
A: 사용자가 제공한 정보(예: 신체 정보, 선호 음식, 기피 음식, 건강 목표)를 기반으로 추천 알고리즘이 맞춤형 식단을 생성합니다. 사용자는 선호도 데이터를 업데이트하여 추천 결과를 조정할 수 있습니다.
A: 네, YOLO 모델 외에도 SSD, Faster R-CNN, EfficientDet 같은 객체 탐지 모델을 활용할 수 있습니다. 모델 교체 시, 해당 모델에 맞는 데이터 전처리와 학습 과정이 필요합니다.
A: 현재는 Streamlit에서 실행되도록 설계되어 있지만 AWS, Google Cloud Platform과 같은 클라우드 플랫폼에서 배포할 수 있습니다. 향후 배포 및 클라우드 호스팅 지원이 추가될 수 있습니다.
| 데이터베이스 | 출처 | 제공하는 정보 |
|---|---|---|
| 통합_식품영양성분DB.csv | 식품안전나라 | 음식 칼로리, 영양 성분 |
| 한국 이미지(음식) 데이터 셋 | AI HUB | 음식 이미지, 라벨 정보 |
이 프로젝트에 기여하고 싶다면 다음 절차를 따르세요:
- 저장소를 Fork 합니다.
- 새로운 기능을 추가하거나 버그를 수정합니다.
- Pull Request를 생성하여 기여 사항을 제출합니다.
- 새로운 기능 추가: 새로운 기능을 추가할 때는 각 기능에 대한 문서도 함께 작성해 주세요.
- 코드 스타일: 코딩 스타일 가이드에 맞춰 작성해 주세요. Python PEP 8 스타일을 따르세요.
- 테스트 작성: 기능을 추가한 후에는 반드시 해당 기능에 대한 테스트 코드를 작성해 주세요.
프로젝트에 기여하고 싶다면, 다음 절차를 따라주세요:
- 원격 저장소에서 새로운 브랜치를 생성합니다. (
git branch feature-branch) - 생성한 브랜치로 이동합니다. (
git checkout feature-branch) - 작업을 완료한 후, 해당 브랜치에 커밋과 푸시를 수행합니다.
- 팀원들과 협의 후
main브랜치에 병합합니다.
프로젝트의 기본 폴더 구조는 다음과 같습니다:
Machine_learning_project/
│
├── .gitinore # Git에서 제외할 파일 목록
├── EX1_re2.py # 메인 실행 파일
├── best.pt # YOLOv5 학습된 모델
├── images.JPG # STREAMLIT 도메인 사진
├── requirements.txt # 필요한 라이브러리 목록
├── README.md # 프로젝트 설명 파일
├── 냠냠_최종.pptx # 프로젝트 최종 발표자료
└── 통합_식품영양성분DB.csv # 음식 칼로리 및 영양 정보
| 이름 | 역할 | 주요 업무 | GitHub 프로필 |
|---|---|---|---|
| 김소은 | 팀장 | 발표, 전체 일정 관리, 데이터 조사 | |
| 김성규 | 팀원 | 발표 자료 제작, 데이터 조사 | |
| 김사무엘 | 팀원 | 발표 자료 제작, 데이터 조사 | |
| 송창우 | 팀원 | 코드 구현 | |
| 조재원 | 팀원 | 코드 구현 |