Spaces:
Configuration error
Configuration error
| 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() | |