- 프로젝트 팀원
- DB ERD
- 홈페이지 구조도
- 사용한 API
- 페이지 구성
- AI 개발
- 기술적 이슈와 해결 과정
- 👨🎓 팀장 : 송원석 🖥️ [총괄,백엔드,프론트엔드]
🔹 AI, API사용, 메인페이지, 음식추천페이지 - 🙎♂️ 팀원 : 박상원 🖥️ [백엔드,프론트엔드,DBA]
🔹 로그인/회원가입/설문지 모달, DB연동 - 🙎♂️ 팀원 : 김지민 🖥️ [프론트엔드,DBA]
🔹 DB관리, DB연동, 달력페이지 - 🙎♂️ 팀원 : 문승신 🖥️ [데이터라벨링]
🔹 AI학습데이터 라벨링, 데이터 구상
-회원의 기본 정보를 저장합니다.
-first_login으로 최초 로그인 여부를 판단합니다.
-회원의 알러지 정보를 저장하는 테이블입니다.
-알러지 종류는 우유, 계란, 땅콩, 견과류, 해산물, 갑각류, 밀, 대두류로 총 8가지로 구성되어 있습니다.
-회원이 먹은 음식의 정보를 저장하는 테이블입니다.
-기초적인 음식 정보가 들어있는 테이블입니다.
-칼로리와 3대 영양소인 탄수화물, 단백질, 지방에 대한 값이 들어있습니다.

-Openweather API 홈페이지 : https://openweathermap.org/

-카카오 맵 API 홈페이지 : https://developers.kakao.com/
-현재 지역 날씨를 볼수 있고 주변 음식점을 지도로 확인할 수 있습니다.
-추천된 음식이 넘어오면 지도에서 해당 음식을 파는 음식점을 보여주고 만약 추천된 음식이 없으면 주변의 모든 식당을 보여줍니다.
▼이미지

-모달로 회원가입창을 띄웁니다.
-이메일이 이미 가입되어있는지 확인합니다.
▼이미지

-알러지 여부를 확인하는 설문지입니다. 최초 로그인시 화면에 모달로 띄우며 나중에 정보쪽에서 변경할 수 있습니다.
▼이미지

-음식 추천페이지에서 선호재료, 음식타입등을 입력받고 자동으로 현재 날씨와 알레르기 정보를 가져오고 모든 정보를 json형식으로 변환해 AI가 작동하고있는 flask 서버로 넘겨줍니다.
-AI가 추천한 음식을 json형식으로 가져오고 다시 string 형식으로 변환하여 추천된음식을 띄워줍니다.
-추천된 음식을 저장하면 메인화면으로 넘겨줍니다.
▼이미지

-음식추천에서 저장된 시간에 맞춰서 오늘 날짜의 아침,점심,저녁에 저장되고 하루마다 총 칼로리를 계산하고 또 한달마다 총 칼로리를 계산해서 보여줍니다. 해당 달력을 보면서 이용자는 오늘 하루 먹은 칼로리와 한달 칼로리를 확인할 수 있고 수정 삭제하면서 자신만의 음식달력을 만들어갈 수 있습니다.
▼이미지

pandas, tensorflow,sklearn 라이브러리 사용
알레르기 정보를 비트마스크로 인코딩하기 위해 allergy_map을 설정 (알레르기 정보를 정수형 값으로 변환하여 모델에서 처리)
알레르기 정보를 문자열에서 비트마스크로 변환, 알레르기 정보가 없는 경우 0으로 처리하여 데이터 손실을 방지
CSV 파일에서 데이터를 불러와 전처리를 수행
라벨 인코딩: weather_condition, season, cuisine_type, food_category 등 문자열 데이터를 정수형 값으로 변환
결측치 처리: 결측 데이터는 없음이라는 기본값으로 대체하여 모델이 모든 데이터를 처리가능
알레르기 데이터 인코딩: 위에서 정의한 encode_allergies 함수를 사용해 allergy_info 데이터를 인코딩
모델 학습을 위해 데이터를 입력(X)과 출력(y)으로 나누고, 학습 데이터와 테스트 데이터로 분리
데이터의 80%는 학습에, 20%는 테스트에 사용
모델 종류 : 딥러닝
날씨: weather_input
계절: season_input
알레르기 정보: allergy_input
요리 타입: cuisine_input
음식 카테고리: category_input
각 입력은 Embedding Layer를 통해 고차원 벡터로 변환
Concatenate 레이어로 모든 입력을 병합
Fully Connected Layer를 통해 예측값을 생성
Dropout과 Batch Normalization을 사용해 과적합 방지, 학습 속도 안정화
출력 : softmax 활성화 함수를 사용해 음식 이름의 확률을 계산
학습이 완료된 후 model.h5로 저장




