NutriScan.AI: 친구 데이브를 위해 오픈 소스로 만든 칼로리 및 동적 신진대사 스캐너 제작기
요약
이 글은 친구의 체중 감량 과정을 돕기 위해 개발된 오픈 소스 영양 스캐너 'NutriScan.AI'를 소개합니다. 기존 상업 앱들의 높은 비용, 식사 환경의 복잡성, 정적 계산의 오류, 그리고 AI 추정의 부정확성을 해결하는 것이 목표입니다. NutriScan.AI는 멀티모달 컴퓨터 비전과 USDA FoodData Central을 결합하고, TabPFN 기반 모델로 동적 대사를 예측하며, 음성 코칭까지 제공하여 주권적이고 과학적인 영양 관리를 가능하게 합니다.
핵심 포인트
- 상업용 앱의 높은 비용 문제를 해결한 오픈 소스 솔루션입니다.
- 단순 정적 계산 대신 활동량을 반영하는 '동적 신진대사 예측' 기능을 도입했습니다.
- 멀티모달 비전과 USDA 데이터베이스를 결합하여 정확도를 높였습니다.
- 개인 정보 보호에 중점을 두고, 오프라인 및 주권적인 방식으로 작동합니다.
This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
내가 만든 것 (What I Built)
나는 가까운 친구인 Dave를 위해 NutriScan.AI를 만들었다. Dave는 대학생으로, 중간고사 전에 체중을 **82.4 kg에서 건강하고 날씬한 75.0 kg (165.3 lbs)**까지 줄이겠다는 진지한 개인 목표를 세웠다.
현대 대학 캠퍼스에서 체중 감량을 관리하는 것은 서류상으로는 간단해 보이지만, 내가 Dave가 그것을 시도하는 것을 지켜보면서 현재의 소프트웨어 생태계가 매 순간 그를 실패하게 만든다는 것을 깨달았다:
- 월 $35 학생 예산 부담: Cal AI나 MyFitnessPal Premium 같은 상업용 칼로리 스캐닝 앱들은 점심 식사 그릇 사진을 찍거나 바코드를 스캔하는 것만으로도 월 $35 (연간 $400 이상)를 요구했다. 등록금, 월세, 교과서, 식료품 등을 감당해야 하는 대학생에게 기본적인 영양 관리를 추적하기 위해 연간 $400을 지불하는 것은 착취적이며 유지 불가능하게 느껴졌다.
- 식당 및 기숙사 주방의 혼란: 구내식단의 알 수 없는 볶음 요리, 서둘러 하는 기숙사 방 온판기 조리, 강의실 사이에서 간식을 먹는 식사 등으로 인해 Dave는 포션 무게를 빠르고 정확하게 파악하거나 자신의 몸에 실제로 무엇이 에너지를 공급하고 있는지 알 방법이 없었다.
- '정적 수학'의 오류와 캠퍼스 신진대사: Dave는 강의실 사이 캠퍼스를 매일 10,000~14,000보 걸었고, 도서관에서 밤늦게까지 공부하는 시간을 보냈으며, 캠퍼스 체육관에서 역기를 들었다. 표준적인 1990년대 정적 계산기(Mifflin-St Jeor)는 그의 유지 소비량이 하루 2,587 kcal에 불과하다고 주장했다. 하지만 실제로는 활동적인 캠퍼스 통학 및 변동하는 학생 스케줄로 인해 하루 3,150 kcal 이상을 소모했다. 교과서의 정적 공식만 따르는 것은 Dave를 만성적으로 피곤하게 만들었고, 오후 시험 중에는 브레인 포그(brain fog)에 시달리게 했으며, 모델링되지 않은 신진대사 적응으로 인해 갑작스러운 체중 정체기에 도달하게 했다.
생체 감시 및 생성적 환각 함정: 데이브가 무료 'AI 칼로리' 앱들을 사용해 봤을 때, 이 앱들은 LLM(대규모 언어 모델)에게 직접 칼로리를 추측하도록 유도했고, 그 결과 수치에 ±35%의 오차를 가진 환각(hallucination) 숫자를 만들어냈습니다. 게다가 데이브는 자신의 기숙사 식사 사진이나 개인 체중 측정 기록 같은 사적인 사진들을 데이터를 수집하고 상업적으로 이용하는 폐쇄적인 기업 클라우드에 업로드해야 한다는 생각 자체를 싫어했습니다.
저는 이 네 가지 딜레마를 모두 해결하는 주권적이고 수학적으로 근거한 영양 스튜디오인 NutriScan.AI를 만들었습니다. 이는 멀티모달 컴퓨터 비전(multimodal computer vision)을 오프라인 USDA FoodData Central 데이터베이스와 결합하고, Prior Labs의 TabPFN 테이블 기반 모델을 이용해 동적 대사 예측(dynamic metabolic forecasting) 기능을 추가했으며, 캠퍼스를 걸어 다니는 동안 그에게 음성으로 브리핑을 제공하는 AI 음성 코치까지 통합했습니다.
데모
실시간 프로덕션 애플리케이션: https://nutriscan-ai-fwn8.onrender.com/
모바일 및 데스크톱 인터랙티브 스튜디오: https://nutriscan-ai-fwn8.onrender.com/scan
비디오 데모: GitHub에서 전체 워크스루 시청하기
데이브를 위해 제가 구현한 주요 기능들:**
- 1회 터치 카메라 접시 스캐너 (1-Tap Camera Plate Scanner): 기숙사나 식당의 어떤 식사 사진이든 찍거나 업로드하여 분할된 재료, 추정 그램 무게, 그리고 신뢰도 점수를 추출합니다.
- 감사 등급 USDA 영양 기록부 (Audit-Grade USDA Nutrition Ledger): 생성형 환각(generative hallucination) 없이 칼로리, 단백질, 탄수화물, 지방을 계산하는 결정론적 산술 시스템입니다.
- 동적 28일 대사 궤적 스튜디오 (Dynamic 28-Day Metabolic Trajectory Studio): TabPFN을 기반으로 하며, 상호작용 가능한 칼로리 적자 슬라이더(1,600~3,000 kcal/day)를 통해 데이브가 정확히 몇 일 만에 75.0 kg에 도달할지 보여줍니다.
- 모바일 우선 칼 AI 스튜디오 (Mobile-First Cal AI Studio): 상호작용 가능한 칼로리 진행 링, 3개의 방사형 매크로 카드(단백질을 위한 오리 다리뼈, 탄수화물을 위한 밀, 지방을 위한 아보카도), 빠른 터치 수분 섭취 추적기(
+250ml/+500ml), 그리고 16:8 간헐적 단식 타이머를 제공합니다. - ElevenLabs AI 음성 코치 (ElevenLabs AI Voice Coach): 수업 사이를 걸어갈 때 데이브의 헤드폰으로 격려하는 맞춤형 오디오 브리핑(30초)을 합성하여 전달합니다.
코드
GitHub logo Blackwrld04 / Nutriscan.AI
🥗 NutriScan.AI
자율 음식 비전, 100% 결정론적 USDA 기반, Prior Labs TabPFN 인컨텍스트 대사 예측, 그리고 ElevenLabs 청각 브리핑.
NutriScan AI는 '칼로리 추정의 위기', 위험한 'AI 비전 환각 함정', 그리고 '정적 수학 오류'를 제거합니다. 상업용 음식 추적 애플리케이션들은 월 $35를 청구하면서 사적인 식사 사진과 생체 데이터를 중앙 집중식 기업 클라우드에 전송하며, 대사 적응(metabolic adaptation), 비운동 활동 열 발생(NEAT: non-exercise activity thermogenesis), 그리고 수분 저류를 전혀 고려하지 못하는 1990년대의 정적 공식(예: Mifflin-St Jeor)에 의존합니다. NutriScan AI는 오픈 가중치 Google Gemma 2 Vision과 100% 결정론적 USDA FoodData Central 기반 정보 및 세계 최고의 테이블형 파운데이션 모델인 Prior Labs의 TabPFN을 결합하여 사용자의 실제 동적 일일 에너지 소비량(TDEE: total daily energy expenditure)을 발견하고 베이즈 신뢰 구간(Bayesian confidence intervals)을 통해 정확한 28일간의 체중 변화 궤적을 예측합니다.
데모 시청하기
NutriScan.AI 동반기의 실제 기기 작동 과정을 보여주며, 실시간 카메라 스캔, 결정론적 USDA FoodData Central 영양소 기반 정보, TabPFN 동적 대사 예측, 그리고...
제작 과정
제가 데이브와 함께 NutriScan.AI를 설계할 때, 저는 엄격한 아키텍처 불변성(architectural invariant)을 확립했습니다:
대규모 언어 모델(LLM)은 절대로 칼로리 계산을 해서는 안 된다.
컴퓨터 비전은 반드시 그램 단위로 음식 부분을 분할해야 한다.
USDA 테이블은 결정론적 산술 연산을 수행해야 한다.
테이블형 파운데이션 모델은 인간의 대사를 예측해야 한다.
저는 다음 다섯 가지 핵심 오픈 소스 AI 및 엔지니어링 기둥을 중심으로 플랫폼을 설계했습니다:
1. Google Gemma 2 멀티모달 비전 (오픈 가중치)
저는 사적인 식사 사진을 상업 광고 네트워크로 전송하지 않기 위해, 오픈 가중치 비전 모델(Ollama를 통해 로컬 실행 또는 호스팅)을 오직 기하학적 장면 분해에만 사용했습니다: 음식 경계 식별, 품목 분류, 그리고 그램 단위의 부분 부피 추정입니다.
2. 결정론적 USDA FoodData Central 기반 정보
AI가 영양값을 추측하게 하는 대신, 저는 Gemma의 음식 감지 결과를 USDA FoodData Central의 오프라인 슬라이스에 매핑했습니다. 이 시스템은 인식된 항목을 검증된 참조 ID(FDC ID)와 일치시키고 순수 Python 산술을 사용하여 영양 밀도에 섭취량 그램 중량을 곱합니다:
$$\text{Nutrient}{\text{total}} = \sum{i=1}^{N} \left( \frac{\text{Portion Grams}_i}{100} \times \text{USDA Density per 100g}_i \right)$$
생성적 환각은 없습니다. 100% 검증 가능한 임상적 진실입니다.
3. Prior Labs의 TabPFN (Tabular Prior-Data Fitted Network)
이것이 NutriScan.AI의 기술적 핵심 보석입니다. TabPFN은 데이브를 정적인 1990년 인구 평균에 의존하게 하는 대신, 데이브의 30일간 누적 생체 체크인 데이터셋(dave_metabolic_log.csv - 일일 칼로리, 단백질, 탄수화물, 지방, 캠퍼스 걸음 수, 수면 시간 및 아침 체중을 추적)을 흡수합니다. 백전파 루프나 TabPFN의 미세 조정 없이 단 한 번의 순방향 전달(forward pass)만으로 TabPFN은 데이브의 비선형적인 체중 변화를 평가하고 그의 실제 역동적 소비량이 교과서 공식이 예측한 것보다 거의 600 kcal 높은 일일 3,152 kcal임을 발견했습니다! 이후 자신감 구간(confidence envelopes)을 포함하여 28일간의 베이지안 궤적 예측을 출력합니다.
4. ElevenLabs 신경 음성 코치 (Neural Voice Coach)
데이브가 캠퍼스를 걸어 다니는 동안 동기 부여를 유지하기 위해, 저는 ElevenLabs의 신경 텍스트-음성 변환(text-to-speech) API(Rachel 음성 모델)을 통합하여 그의 일일 매크로를 분석하고 중요한 성과 달성을 축하하는 지능적인 30초 오디오 브리핑을 합성했습니다.
5. Sentry 전체 추적 관측 가능성 (Full-Trace Observability)
시각적 추론부터 TabPFN 인컨텍스트 평가, 그리고 ElevenLabs 오디오 버퍼에 이르기까지 모든 파이프라인 단계는 분산 트레이싱(distributed tracing)으로 계측되어 초 단위의 신뢰성을 보장합니다.
개방 혁신은 왜 중요한가?
개방 혁신이야말로 NutriScan.AI가 존재하는 전적인 이유입니다. 다음은 폐쇄형 API로는 결코 불가능했던 것을 오픈 모델이 어떻게 가능하게 했는지에 대한 설명입니다:
- 학생들의 장벽 제거: 폐쇄형 플랫폼들은 기본적인 매크로 추적 기능을 월 $35의 유료 결제 장벽 뒤에 가둡니다. 오픈 웨이트(open weights)와 오픈 데이터셋을 활용하여, 저는 Dave에게 상업용 앱들을 완전히 능가하는 도구를 $0으로 제공할 수 있었습니다.
- 생물학적 데이터 주권: 폐쇄형 피트니스 플랫폼들은 학생들의 건강 데이터를 수익화하며, 체중 측정 기록과 식단 패턴을 보험사 및 데이터 브로커들에게 판매합니다. 오픈 혁신(Open innovation)은 저에게 데이터 유출이 전혀 없는, 전적으로 주권적인 인프라 위에서 실행되는 시스템을 설계할 수 있게 했습니다.
- 과학적 근거 대 확률적 추측: 폐쇄형 AI 앱들은 영양 정보를 환각하는 블랙박스 프롬프트(black-box prompts)를 사용합니다. 오픈 혁신은 제가 인식(Gemma 2), 산술(USDA), 그리고 표 형식 기초 모델링(TabPFN)을 분리하여 설명 가능하고 임상적으로 건전한 도구를 만들 수 있게 했습니다.
Dave의 솔직한 반응
제가 웹 애플리케이션을 Render에 배포하고, 급식 식사 시간에 Dave에게 휴대폰을 건넸을 때, 그의 반응은 즉각적이었습니다:
“진심이야? 주말 동안 이걸 만들었다고? 카메라 스캐너가 내가 먹은 구내식당 그릴 치킨과 밥을 즉시 인식했고, 칼로리가 USDA 라벨과 그램 단위까지 일치해. 그런데 정말 놀라운 건 28일 궤적(Trajectory) 차트야: 슬라이더를 2,100 kcal로 옮기자, 중간고사 주 직전에 75.0 kg에 도달할 거라고 알려주더라. 그리고 기숙사로 돌아오는 산책길 음성 브리핑은 마치 주머니 속 개인 피트니스 코치 같았어!”
나의 에이전트 세션
저는 고급 에이전트 AI 페어 프로그래밍(agentic AI pair programming)을 사용하여 저의 코딩 어시스턴트와 함께 NutriScan.AI를 구축하고 반복 개선했습니다. 전체 상호작용 개발 세션은 아래에서 확인하실 수 있습니다:
NutriScan.AI: Hacktoberfest를 위한 완전한 엔드투엔드 빌드 (친구를 위해 만들기)
당신
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기