import asyncio try: asyncio.get_event_loop() except RuntimeError: asyncio.set_event_loop(asyncio.new_event_loop()) import gradio as gr import torch from transformers import ( AutoFeatureExtractor, AutoModelForImageClassification, T5Tokenizer, T5ForConditionalGeneration ) # ------------------ LOAD CLASSIFIER ------------------ cls_model_name = "Aalaa/Fine_tuned_Vit_trash_classification" feature_extractor = AutoFeatureExtractor.from_pretrained(cls_model_name) cls_model = AutoModelForImageClassification.from_pretrained(cls_model_name) id2label = cls_model.config.id2label def classify_image(image): inputs = feature_extractor(images=image, return_tensors="pt") with torch.no_grad(): outputs = cls_model(**inputs) logits = outputs.logits probs = torch.nn.functional.softmax(logits, dim=-1)[0] top3 = probs.topk(3).indices.tolist() return {id2label[i]: float(probs[i]) for i in top3} # ------------------ LOAD FLAN-T5 ------------------ tokenizer = T5Tokenizer.from_pretrained("google/flan-t5-large") chat_model = T5ForConditionalGeneration.from_pretrained("google/flan-t5-large") def explain_recycling(class_label): prompt = f""" You are a waste management expert. The waste item is classified as: **{class_label}** Provide a 2-paragraph explanation including: 1. **How to dispose of {class_label} correctly** 2. **How {class_label} is recycled or processed** 3. **Optional tips for reducing waste or reusing {class_label}** """ inputs = tokenizer(prompt, return_tensors="pt").input_ids outputs = chat_model.generate( inputs, max_length=250, do_sample=True, top_p = 0.9,) return tokenizer.decode(outputs[0]) # ------------------ PIPELINE ------------------ def full_pipeline(image): predictions = classify_image(image) top_label = max(predictions, key=predictions.get) explanation = explain_recycling(top_label) return predictions, explanation # ------------------ GRADIO UI ------------------ with gr.Blocks() as demo: gr.Markdown("