Clemenz88 commited on
Commit
81441d7
·
verified ·
1 Parent(s): cbd7eaa

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +37 -27
  2. requirements.txt +5 -0
app.py CHANGED
@@ -1,41 +1,51 @@
1
 
2
  import streamlit as st
3
- from utils.image_utils import load_image, detect_hand_and_food_area
4
- from utils.model import load_model, classify_food
5
- from utils.matcher import oversæt_fuzzy
 
 
6
 
7
  @st.cache_resource
8
- def load_model_cached():
9
- return load_model()
 
 
10
 
11
- st.title("Kalorieestimering fra billede")
 
 
 
 
12
 
13
- uploaded_file = st.file_uploader("Upload et billede", type=["jpg", "jpeg", "png"])
14
  if uploaded_file:
15
- image = load_image(uploaded_file)
16
  st.image(image, caption="Dit billede", use_column_width=True)
17
 
18
- with st.spinner("Analyserer billede..."):
19
- hand_img, food_area = detect_hand_and_food_area(image)
20
- processor, model = load_model_cached()
21
- prediction, confidence = classify_food(food_area, processor, model)
 
 
 
22
 
23
- if confidence < 0.7:
24
- st.warning("Modelen er ikke sikker – vælg manuelt:")
25
- prediction = st.selectbox("Vælg fødevare", ["æg", "kartoffel", "smør", "broccoli"])
26
- else:
27
- st.success(f"Modelen gættede: {prediction} ({confidence*100:.1f}%)")
28
 
29
- gram = st.number_input(f"Hvor mange gram {prediction}?", min_value=1, max_value=1000, value=100)
30
 
31
- # Analyse
32
- st.markdown("### Analyse af måltid:")
33
- st.markdown(f"- {gram} g {prediction}")
 
34
 
35
- # Feedback
36
- st.markdown("### Giv feedback")
37
- feedback = st.radio("Er gættet korrekt?", ["Ja", "Nej"])
38
- kommentar = st.text_input("Evt. kommentar")
39
 
40
- if st.button("Send feedback"):
41
- st.success("Tak for din feedback!")
 
 
 
 
1
 
2
  import streamlit as st
3
+ from PIL import Image
4
+ import torch
5
+ from torchvision import transforms
6
+ from transformers import AutoImageProcessor, AutoModelForImageClassification
7
+ import io
8
 
9
  @st.cache_resource
10
+ def load_model():
11
+ processor = AutoImageProcessor.from_pretrained("microsoft/beit-base-patch16-224")
12
+ model = AutoModelForImageClassification.from_pretrained("microsoft/beit-base-patch16-224")
13
+ return processor, model
14
 
15
+ processor, model = load_model()
16
+
17
+ st.title("Kalorieestimering med AI")
18
+
19
+ uploaded_file = st.file_uploader("Upload et billede af din mad", type=["jpg", "jpeg", "png"])
20
 
 
21
  if uploaded_file:
22
+ image = Image.open(uploaded_file).convert("RGB")
23
  st.image(image, caption="Dit billede", use_column_width=True)
24
 
25
+ inputs = processor(images=image, return_tensors="pt")
26
+ with torch.no_grad():
27
+ outputs = model(**inputs)
28
+
29
+ logits = outputs.logits
30
+ probs = torch.nn.functional.softmax(logits, dim=1)
31
+ top_probs, top_labels = torch.topk(probs, k=1)
32
 
33
+ confidence = top_probs[0].item() * 100
34
+ label = model.config.id2label[top_labels[0].item()]
 
 
 
35
 
36
+ st.markdown(f"### Identificeret: **{label}** ({confidence:.1f}% sikkerhed)")
37
 
38
+ if confidence < 70:
39
+ st.warning("Usikker klassificering vælg manuelt")
40
+ manual = st.selectbox("Vælg fødevare manuelt", sorted(model.config.id2label.values()))
41
+ label = manual
42
 
43
+ st.markdown("### Antaget portionsstørrelse og estimeret energiindhold")
44
+ st.markdown(f"- 1 portion **{label}** (ca. 200g)")
45
+ st.markdown("- Estimeret energi: **~300 kcal** *(eksempelværdi)*")
 
46
 
47
+ feedback = st.radio("Er forslaget korrekt?", ["Ja", "Nej", "Ved ikke"])
48
+ if feedback == "Nej":
49
+ korrekt_label = st.text_input("Hvad forestiller billedet egentlig?")
50
+ if korrekt_label:
51
+ st.success(f"Tak for dit input: *{korrekt_label}* gemt.")
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ streamlit
2
+ torch
3
+ torchvision
4
+ transformers
5
+ pillow