|
|
|
import streamlit as st |
|
from utils.image_utils import load_image, detect_hand_and_food_area |
|
from utils.model import load_model, classify_food |
|
from utils.matcher import oversæt_fuzzy |
|
|
|
@st.cache_resource |
|
def load_model_cached(): |
|
return load_model() |
|
|
|
st.title("Kalorieestimering fra billede") |
|
|
|
uploaded_file = st.file_uploader("Upload et billede", type=["jpg", "jpeg", "png"]) |
|
if uploaded_file: |
|
image = load_image(uploaded_file) |
|
st.image(image, caption="Dit billede", use_column_width=True) |
|
|
|
with st.spinner("Analyserer billede..."): |
|
hand_img, food_area = detect_hand_and_food_area(image) |
|
processor, model = load_model_cached() |
|
prediction, confidence = classify_food(food_area, processor, model) |
|
|
|
if confidence < 0.7: |
|
st.warning("Modelen er ikke sikker – vælg manuelt:") |
|
prediction = st.selectbox("Vælg fødevare", ["æg", "kartoffel", "smør", "broccoli"]) |
|
else: |
|
st.success(f"Modelen gættede: {prediction} ({confidence*100:.1f}%)") |
|
|
|
gram = st.number_input(f"Hvor mange gram {prediction}?", min_value=1, max_value=1000, value=100) |
|
|
|
|
|
st.markdown("### Analyse af måltid:") |
|
st.markdown(f"- {gram} g {prediction}") |
|
|
|
|
|
st.markdown("### Giv feedback") |
|
feedback = st.radio("Er gættet korrekt?", ["Ja", "Nej"]) |
|
kommentar = st.text_input("Evt. kommentar") |
|
|
|
if st.button("Send feedback"): |
|
st.success("Tak for din feedback!") |
|
|