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!")