Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Emotion-based food recommendation web application
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AI-Powered Facial Emotion Recognition & Food Recommendation Web Application
FaceFood is a full-stack web application that analyzes a user's facial expression through their camera, classifies it into one of four supported emotion categories, and recommends food, drinks, ingredients, and fruits suited to that category.README 전문 보기 ↗AI-Powered Facial Emotion Recognition & Food Recommendation Web Application
FaceFood is a full-stack web application that analyzes a user's facial expression through their camera, classifies it into one of four supported emotion categories, and recommends food, drinks, ingredients, and fruits suited to that category.
Food choices are often influenced by mood, but most food-discovery apps ignore that signal entirely. FaceFood explores a different entry point: instead of asking the user what they want, it analyzes their facial expression, classifies it into one of four emotion categories, and surfaces food recommendations mapped to that category — food, drinks, ingredients, and fruit — along with basic nutrition information for each item.
This is a 2-person university project built to explore the full pipeline end-to-end: training and serving a facial emotion recognition model, wiring it into a REST API, and building a camera-based web experience around it.
Camera Feed
→ Face Detection (Haar Cascade)
→ Emotion Classification (ResNet18 + Multi-head Attention)
→ Emotion Category Result
→ Food Recommendation Lookup (Firebase Realtime Database)
→ Nutrition Information Display
FaceFood analyzes facial expressions and classifies them into one of four supported emotion categories: Anger, Happiness, Neutral, and Sadness. That classification result is what drives which food category is recommended — the system does not claim to know a user's actual internal emotional state, only the visual category their expression was classified into.
Next.js Frontend → Flask REST API → Emotion Recognition Model (PyTorch)
→ Firebase Realtime Database (food/menu data)
[Architecture Diagram – to be added]
src/lib/api.ts)./api/analyze, /api/recommendations) exposing the emotion model and recommendation lookups. Also serves a legacy server-rendered UI (templates/) from earlier in the project.GCS_MODEL_BUCKET) — used so the ~48MB weight file doesn't need to be baked into the deploy image or committed to git.Dockerfile built for Google Cloud Run (gunicorn, PORT=8080, .gcloudignore) and a Procfile. The frontend's .gitignore includes Vercel-specific entries, indicating Vercel was used for frontend deployment, but no live URL is present in the repo to confirm the current deployment — [needs user confirmation].Frontend
Backend
AI / Machine Learning
torch, torchvision)Database
firebase-admin SDK)Deployment / Infrastructure
nn.MultiheadAttention (8 heads) applied over the embedding → fully-connected classification head (Linear → BatchNorm → ReLU → Dropout → Linear).Training scripts/notebooks are not part of this repository; only the trained weights, class list, and evaluation artifacts (confusion matrix, training curves) are included.
Evaluated on a held-out test set:
Test Accuracy: ~90.5% Weighted F1-score: ~90.5% (derived from the confusion matrix below — no separate saved classification report exists in the repository)
Confusion Matrix:
Training History (accuracy & loss):
| Home | Analyze / Camera |
|---|---|
docs/screenshots/home.png (not yet added) | docs/screenshots/analyze.png (not yet added) |
| Emotion Result | Food Recommendation |
|---|---|
docs/screenshots/result.png (not yet added) | docs/screenshots/recommendations.png (not yet added) |
| Error State |
|---|
docs/screenshots/error.png (not yet added) |
Screenshots to be added.
FaceFood/
├── backend/ # Flask API, emotion model, Firebase integration
├── frontend/ # Next.js web application
├── DEPLOY_CHECKLIST.md # Internal pre-deploy checklist
└── README.md
Primary API used by the frontend (see backend/app.py):
| Method | Endpoint | Purpose |
|---|---|---|
POST | /api/analyze | Accepts a base64-encoded camera frame, runs face detection + emotion classification, returns the classified emotion category and confidence scores |
POST | /api/recommendations | Returns food/drink/ingredient/fruit recommendations for a given emotion category, pulled from Firebase |
Error responses use a structured { "success": false, "error": { "code", "message" } } shape, with codes including INVALID_REQUEST, INVALID_IMAGE, NO_FACE_DETECTED, MODEL_ERROR, INVALID_EMOTION, DATABASE_ERROR.
The backend also serves a small set of legacy server-rendered routes (/, /analyze, /menu, etc.) from an earlier iteration of the project, alongside the JSON API used by the current Next.js frontend.
Team size: 2 (university project)
My responsibilities:
Frontend implementation was primarily handled by my teammate.
cd frontend
npm install
cp .env.example .env.local
npm run dev
Runs at http://localhost:3000. Requires the backend to be running separately — there is currently no mock-data mode implemented.
cd backend
pip install -r requirements.txt
python app.py
Runs at http://localhost:5000 by default. Requires the trained model weights (backend/models/best_resnet18_attention_emotion.pth) to be present locally, or GCS_MODEL_BUCKET configured to fetch them from Cloud Storage, plus Firebase credentials configured (see Environment Variables below).
Frontend — see frontend/.env.example:
NEXT_PUBLIC_API_BASE_URLNEXT_PUBLIC_API_TIMEOUT_MSBackend — configured via environment variables (no backend/.env.example exists yet; recommended as a follow-up):
FIREBASE_KEY_PATH — path to the Firebase service account credentialsALLOWED_ORIGINS — comma-separated CORS whitelistGCS_MODEL_BUCKET — Cloud Storage bucket to download model weights from, if not present locallyFLASK_SECRET_KEY — Flask session secretFLASK_DEBUG — enables Flask debug mode (defaults to off)No secret values are included here or anywhere in this repository.
Backend: containerized with Docker and built for Google Cloud Run (gunicorn, PORT=8080). Model weights are loaded from Google Cloud Storage at container startup rather than baked into the image.
Frontend: configured for Vercel deployment (inferred from repo .gitignore entries).
Live Demo: [URL to be confirmed]
low-light, distance) exist in the UI but are not yet wired up to real detection logic on either the frontend or backend.low-light/distance client error states to real detection logicFaceFood is an academic/educational project built for a university course/internship portfolio. It is not a clinical or diagnostic tool: it classifies facial expressions into one of four fixed categories and does not diagnose mental health conditions or determine a user's true emotional state. Food recommendations are informational only — not medical, psychological, or nutritional treatment advice.
MIT — see LICENSE.