EcoSort-AI / app.py
Omkar654's picture
Create app.py
a6b2a82 verified
Raw
History Blame Contribute Delete
1.57 kB
import gradio as gr
from transformers import AutoImageProcessor, SiglipForImageClassification
from PIL import Image
import torch
# Load the model (this happens only once when the Space starts)
model_name = "prithivMLmods/Recycling-Net-11"
processor = AutoImageProcessor.from_pretrained(model_name)
model = SiglipForImageClassification.from_pretrained(model_name)
# Mapping to Recyclable / Non-Recyclable
recyclable_classes = {
"aluminium", "cardboard", "glass", "hard plastic",
"paper", "soft plastics", "takeaway cups"
}
def predict(image):
if image is None:
return "No image received", "0%"
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
predicted_idx = probs.argmax(-1).item()
confidence = probs[0][predicted_idx].item()
label = model.config.id2label[predicted_idx]
# Convert to binary decision
if label.lower() in recyclable_classes:
final = "Recyclable"
else:
final = "Non-Recyclable"
return final, f"{confidence:.1%}", label
# Create the interface
demo = gr.Interface(
fn=predict,
inputs=gr.Image(type="pil", label="Upload Plastic/Waste Image"),
outputs=[
gr.Textbox(label="Decision"),
gr.Textbox(label="Confidence"),
gr.Textbox(label="Original Class")
],
title="Plastic Segregation - Recyclable vs Non-Recyclable",
description="Upload one image of plastic waste"
)
demo.launch()