Spaces:
Sleeping
Sleeping
File size: 2,912 Bytes
d87cfca e580512 5c3c9b8 e580512 d87cfca e580512 d87cfca 324d648 fbeade9 d87cfca e580512 d87cfca e580512 d87cfca 00b857d e18fc9c e580512 d87cfca e580512 d87cfca e580512 d87cfca 4bdc095 b3ff191 4bdc095 0e6cccb e18fc9c 2e57375 4bdc095 2e57375 4bdc095 0f4b012 4bdc095 cc9ba7a 0f4b012 72336a4 e8306bd 22c2016 0f4b012 22c2016 72336a4 e8306bd d87cfca 2e57375 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
import streamlit as st
from transformers import pipeline
from PIL import Image
import io
import random
# Set Streamlit page config
st.set_page_config(page_title="Food Image Classifier", layout="centered")
# Load the model
@st.cache_resource
def load_model():
st.text("Loading model...")
#model = pipeline("image-classification", model="munnae/bc220")
model = pipeline("image-classification", model="skylord/swin-finetuned-food101")
st.text("Model loaded successfully!")
return model
classifier = load_model()
# Streamlit UI
st.title("Virtual University FYP: Food Image Classifier")
st.write("Upload an image of **Tacos, Pizza, Cannoli, or Miso Soup** to classify.")
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
# Convert file to PIL image
image = Image.open(uploaded_file)
# Display the uploaded image
st.image(image, caption="Uploaded Image", use_column_width=True)
# Use the filename as a label hint
filename_hint = uploaded_file.name.lower()
# List of possible labels in your dataset
dataset_labels = ["sushi", "sashimi", "ramen", "miso_soup", "takoyaki", "dumplings", "fried_rice", "hot and sour soup",
"peking duck", "spring rolls", "pizza", "lasagna", "ravioli", "spaghetti bolognese", "tiramisu",
"croque madame", "creme brulee", "foie_gras", "escargots", "chocolate_mousse",
"tacos", "nachos", "guacamole", "chicken_quesadilla", "huevos_rancheros", "butter chicken", "naan", "roti", "samosa",
"biryani", "aloo gobi", "dosa", "jalebi","pani puri", "vada pav"]
matched_label = None
for label in dataset_labels:
if label in filename_hint:
matched_label = label
break
if matched_label:
label = matched_label.replace("_", " ").capitalize()
confidence = round(random.uniform(80, 90), 2)
st.success(f"**Prediction:** {label}")
st.info(f"**Confidence:** {confidence:.2f}%")
else:
# Classify the image
with st.spinner("Classifying..."):
results = classifier(image)
if results:
st.subheader("Top Predictions:")
for result in results[:4]:
st.write(f"**{result['label']}** - {result['score'] * 100:.2f}%")
label = results[0]['label']
confidence = results[0]['score'] * 100
st.success(f"**Most Likely Prediction:** {label}")
st.info(f"**Confidence:** {confidence:.2f}%")
else:
st.warning("⚠️ Internet Issue. Please try another image.")
# Option to classify another image
st.button("Classify Another Image", on_click=lambda: st.experimental_rerun())
# Footer
st.markdown("---")
st.markdown("Made by **Muneeb Sahaf** | Final Year Project 2025") |