README / app.py
vlithish's picture
Update app.py
2ac26ce verified
import gradio as gr
from PIL import Image
import random
# -------------------------------
# Classification logic
# -------------------------------
def classify_item(image, description):
categories = ["Recyclable", "Compostable", "Trash", "Harmful"]
if description:
desc = description.lower()
# Compostable: fruits & vegetables
if "banana" in desc or "apple" in desc or "fruit" in desc or "vegetable" in desc or "food" in desc or "peel" in desc or "leaf" in desc:
category = "Compostable"
# Harmful: medical + batteries
elif "syringe" in desc or "needle" in desc or "battery" in desc or "cell" in desc:
category = "Harmful"
# Recyclable
elif "plastic" in desc or "bottle" in desc or "can" in desc or "metal" in desc:
category = "Recyclable"
elif "paper" in desc and "greasy" not in desc:
category = "Recyclable"
# Trash
elif "pizza box" in desc or "styrofoam" in desc or "chip bag" in desc:
category = "Trash"
# Fallback
else:
category = random.choice(categories)
elif image:
# Placeholder – replace with ML image model later
category = random.choice(categories)
else:
return "No input", "⚠️ Please upload an image or type a description."
# Eco tips
tips = {
"Recyclable": "♻️ Rinse before recycling. Check local rules for plastics.",
"Compostable": "🌱 Add to compost bin or green waste collection.",
"Trash": "🗑️ Not recyclable. Consider reusable alternatives.",
"Harmful": "⚠️ Special disposal needed. Take syringes, needles, and batteries to hazardous waste collection centers."
}
return category, tips.get(category, "Check local disposal guidelines.")
# -------------------------------
# Gradio UI
# -------------------------------
with gr.Blocks() as demo:
gr.Markdown("# 🌍 EcoSort: Smart Waste Classifier")
gr.Markdown("Upload an **image** or type a **description** to check if it's Recyclable, Compostable, Trash, or Harmful.")
with gr.Row():
image_input = gr.Image(type="pil", label="Upload Image")
text_input = gr.Textbox(label="Or type a description (e.g., 'banana peel', 'plastic bottle', 'syringe')")
output_label = gr.Label(label="Prediction")
output_tip = gr.Textbox(label="Eco-Friendly Tip", interactive=False)
btn = gr.Button("Classify")
btn.click(fn=classify_item, inputs=[image_input, text_input], outputs=[output_label, output_tip])
demo.launch()