Spaces:
Sleeping
Sleeping
File size: 3,167 Bytes
04f475a e73380c 04f475a 7b63336 f825898 04f475a f825898 800f4d4 04f475a f825898 7013cc6 a27e928 7013cc6 a27e928 7013cc6 a27e928 7013cc6 a27e928 7013cc6 a27e928 7013cc6 800f4d4 7013cc6 3500d25 800f4d4 3500d25 7013cc6 3500d25 4bfa63a 7013cc6 3500d25 ffd7ae2 7013cc6 7b63336 ff3533c 94c304e 7b63336 800f4d4 ff3533c 800f4d4 7013cc6 94c304e 04f475a 800f4d4 04f475a f825898 800f4d4 f825898 94c304e 800f4d4 f825898 7013cc6 f825898 7b63336 |
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 77 78 79 80 81 82 83 84 85 86 87 88 |
import streamlit as st
from transformers import pipeline
from PIL import Image
import os
# Load the image classification pipeline
@st.cache_resource
def load_image_classification_pipeline():
"""
Load the image classification pipeline using a pretrained model.
"""
return pipeline("image-classification", model="Shresthadev403/food-image-classification")
pipe_classification = load_image_classification_pipeline()
# Load the BLOOM model for ingredient generation
@st.cache_resource
def load_bloom_pipeline():
"""
Load the BLOOM model for ingredient generation.
"""
return pipeline("text-generation", model="bigscience/bloom-1b7")
pipe_bloom = load_bloom_pipeline()
# Function to generate ingredients using BLOOM
def get_ingredients_bloom(food_name):
"""
Generate a list of ingredients for the given food item using BLOOM.
Returns a clean, comma-separated list of ingredients.
"""
prompt = (
f"List only the main ingredients typically used to prepare {food_name}. "
"Provide the ingredients as a simple, comma-separated list such as: ingredient1, ingredient2, ingredient3."
)
try:
response = pipe_bloom(prompt, max_length=50, num_return_sequences=1)
generated_text = response[0]["generated_text"].strip()
# Post-process to extract only the list of ingredients
ingredients = generated_text.split(":")[-1].strip() # Handle cases like "Ingredients: ..."
ingredients = ingredients.replace(".", "").strip() # Remove periods and extra spaces
# Ensure the response is a proper list format
if "," not in ingredients: # If the model didn't output a list, fallback to generic handling
ingredients = "No ingredients found or response unclear."
return ingredients
except Exception as e:
return f"Error generating ingredients: {e}"
# Streamlit app setup
st.title("Food Image Recognition with Ingredients")
# Add banner image
st.image("IR_IMAGE.png", caption="Food Recognition Model", use_column_width=True)
# Sidebar for model information
st.sidebar.title("Model Information")
st.sidebar.write("**Image Classification Model**: Shresthadev403/food-image-classification")
st.sidebar.write("**LLM for Ingredients**: bigscience/bloom-1b7")
# Upload image
uploaded_file = st.file_uploader("Choose a food image...", type=["jpg", "png", "jpeg"])
if uploaded_file is not None:
# Display the uploaded image
image = Image.open(uploaded_file)
st.image(image, caption="Uploaded Image", use_column_width=True)
st.write("Classifying...")
# Make predictions
predictions = pipe_classification(image)
# Display only the top prediction
top_food = predictions[0]['label']
st.header(f"Food: {top_food}")
# Generate and display ingredients for the top prediction
st.subheader("Ingredients")
try:
ingredients = get_ingredients_bloom(top_food)
st.write(ingredients)
except Exception as e:
st.error(f"Error generating ingredients: {e}")
# Footer
st.sidebar.markdown("Created with ❤️ using Streamlit and Hugging Face.") |