Spaces:
Sleeping
Sleeping
import gradio as gr | |
import torch | |
import asyncio | |
from transformers import pipeline | |
from diffusers import StableDiffusionPipeline | |
# Check if GPU is available | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
# Load models with optimized settings | |
image_classifier = pipeline("image-classification", model="google/vit-base-patch16-224", device=0 if torch.cuda.is_available() else -1) | |
text_generator = pipeline("text-generation", model="google/flan-t5-small", device=0 if torch.cuda.is_available() else -1) # Faster model | |
image_generator = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1-base", torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32) | |
image_generator.to(device) # Move to GPU if available | |
async def process_image(image): | |
try: | |
# Run classification asynchronously | |
classification_task = asyncio.to_thread(image_classifier, image) | |
classification = await classification_task | |
object_name = classification[0]["label"] | |
# Generate reuse idea asynchronously | |
prompt = f"Suggest a creative way to reuse a {object_name} in a useful manner." | |
text_task = asyncio.to_thread(text_generator, prompt, max_length=50) | |
idea = (await text_task)[0]["generated_text"] | |
# Generate image asynchronously | |
image_task = asyncio.to_thread(image_generator, prompt) | |
generated_image = (await image_task).images[0] | |
return object_name, idea, generated_image | |
except Exception as e: | |
return "Error", f"An error occurred: {str(e)}", None | |
# Create Gradio interface | |
iface = gr.Interface( | |
fn=process_image, | |
inputs=gr.Image(type="pil"), | |
outputs=["text", "text", "image"], | |
title="AI-Powered Waste Reuse", | |
description="Upload an image of a waste item, and AI will suggest reuse ideas along with an AI-generated image." | |
) | |
iface.launch() | |