Spaces:
Runtime error
Runtime error
import streamlit as st | |
from PIL import Image | |
import pandas as pd | |
from transformers import pipeline | |
st.set_page_config(page_title="WebKalorier") | |
st.title("🍽️ WebKalorier – Kalorieestimering via Billede") | |
def get_classifier(): | |
return pipeline("image-classification", model="eslamxm/vit-base-food101") | |
classifier = get_classifier() | |
# Load calorie data | |
df = pd.read_csv("kaloriedata.csv") | |
food_list = df["navn"].tolist() | |
uploaded_file = st.file_uploader("Upload et billede af din mad", type=["jpg","jpeg","png"]) | |
if uploaded_file: | |
image = Image.open(uploaded_file).convert("RGB") | |
st.image(image, caption="Analyserer...", use_column_width=True) | |
with st.spinner("Klassificerer billede..."): | |
results = classifier(image, top_k=3) | |
# Display top result | |
top = results[0] | |
label = top["label"] | |
score = top["score"] | |
st.markdown(f"**Modelgæt:** {label} ({score*100:.1f}% sikkerhed)") | |
if score < 0.7: | |
chosen = st.selectbox("Modellen er usikker – vælg fødevare manuelt:", food_list) | |
else: | |
# Fuzzy matching could be added via utils/matcher.py | |
chosen = label.replace('_', ' ').lower() | |
gram = st.number_input(f"Hvor mange gram {chosen}?", min_value=1, max_value=2000, value=100) | |
kcal_per_100g = float(df.loc[df['navn']==chosen, 'kcal_pr_100g'].squeeze()) if chosen in df['navn'].values else 0 | |
kcal = gram * kcal_per_100g / 100 | |
st.markdown("### Analyse af måltid") | |
st.write(f"- {gram} g **{chosen}** = {kcal:.1f} kcal") | |
feedback = st.text_input("Har du feedback eller rettelse?") | |
if st.button("Send feedback"): | |
st.success("Tak for din feedback!") |