webkal88 / app.py
Clemenz88's picture
Upload 2 files
34733a7 verified
raw
history blame
1.8 kB
import streamlit as st
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForImageClassification
import torch
import requests
from utils.matcher import oversaet_fuzzy
@st.cache_resource
def load_model():
processor = AutoImageProcessor.from_pretrained("timm/food101-vit-base-patch16-224")
model = AutoModelForImageClassification.from_pretrained("timm/food101-vit-base-patch16-224")
return processor, model
processor, model = load_model()
st.title("Kalorieestimat og Fødevareklassificering")
uploaded_file = st.file_uploader("Upload et billede", type=["jpg", "jpeg", "png"])
confidence_threshold = 0.7
if uploaded_file is not None:
image = Image.open(uploaded_file).convert("RGB")
st.image(image, caption="Uploadet billede", use_column_width=True)
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predicted_class_idx = logits.argmax(-1).item()
confidence = torch.softmax(logits, dim=-1)[0][predicted_class_idx].item()
label = model.config.id2label[predicted_class_idx]
label_dk = oversaet_fuzzy(label)
st.markdown(f"**Modelgæt:** {label} ({confidence*100:.1f}%)")
st.markdown(f"**Oversat (fuzzy):** {label_dk}")
if confidence < confidence_threshold:
manual = st.selectbox("Modellen er usikker – vælg manuelt fødevaretype:", options=["æg", "kartofler", "smør", "broccoli"])
st.markdown(f"**Manuelt valg:** {manual}")
feedback = st.text_input("Har du feedback eller en mere præcis betegnelse?")
if feedback:
st.success("Tak for din feedback!")
st.subheader("Eksempel på fødevareanalyse:")
st.markdown("- 100 g æg
- 200 g kartofler
- 50 g smør
- 25 g broccoli")