kalwebapp / app.py
Clemenz88's picture
Upload 3 files
616b687 verified
import streamlit as st
from PIL import Image
from transformers import pipeline
import pandas as pd
# Load calorie data
df = pd.read_csv("kaloriedata.csv")
food_list = df["navn"].tolist()
# Load zero-shot pipeline for image classification
@st.cache_resource
def get_classifier():
return pipeline("zero-shot-image-classification", model="openai/clip-vit-base-patch32")
classifier = get_classifier()
st.title("🍽️ WebKalorier – Kalorieestimering via CLIP")
uploaded = st.file_uploader("Upload billede af mad", type=["jpg", "jpeg", "png"])
if uploaded:
image = Image.open(uploaded).convert("RGB")
st.image(image, caption="Uploadet billede", use_column_width=True)
with st.spinner("Analyserer..."):
outputs = classifier(image, candidate_labels=food_list)
# outputs: list of dicts with labels and scores
best = outputs[0]
label = best['labels'][0]
score = best['scores'][0]
st.markdown(f"**Modelgæt:** {label} ({score:.1%} sikkerhed)")
# fallback
if score < 0.7:
label = st.selectbox("Modellen er usikker – vælg manuelt:", food_list, index=food_list.index(label))
# grams input
gram = st.number_input(f"Angiv mængde af {label} i gram:", 1, 2000, 100)
# lookup calories
kcal_per_100g = df.loc[df["navn"] == label, "kcal_pr_100g"].iloc[0]
kcal = gram * kcal_per_100g / 100
st.subheader("🔍 Analyse af måltid")
st.write(f"- **{gram} g {label}** → **{kcal:.1f} kcal**")
# feedback
feedback = st.text_input("Feedback eller korrektion (valgfrit)")
if st.button("Send feedback"):
with open("feedback_log.csv", "a") as f:
f.write(f"{label},{score:.2f},{feedback}\n")
st.success("Tak for din feedback!")