from transformers import DetrImageProcessor, DetrForObjectDetection import torch from PIL import Image import gradio as gr from huggingface_hub import InferenceClient # Tamaño esperado de la imagen para el modelo DETR target_size = 800 # Ajusta el tamaño según las especificaciones del modelo def detect_objects(image): # Asegúrate de que la imagen sea cuadrada y del tamaño esperado image = image.resize((target_size, target_size)) processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50", revision="no_timm") model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50", revision="no_timm") inputs = processor(images=image, return_tensors="pt") outputs = model(**inputs) # Convierte las salidas a formato COCO results = processor.post_process_object_detection(outputs, target_sizes=torch.tensor([image.size[::-1]]), threshold=0.9)[0] # Formatea los resultados formatted_results = format_detection_results(model, results) # Convierte los resultados en una cadena de texto separada por comas result = ", ".join(formatted_results) return result # Define la función para generar la respuesta con el modelo Zephyr def generate_response(result): result_str = str(result) # Convierte la imagen a cadena zephyrToDo = "clasificame la palabra " + result_str + " en persona, paisaje u objeto" prompt = "" history = [] # Puedes proporcionar un historial de conversaciones si es necesario response = generate(prompt, history) # Reemplaza esto con la función real que genera la respuesta return response def process(image): cadena=detect_objects(image) cadena2=generate_response(cadena) return cadena2 title = "Clasificación de imagenes en Persona, objeto o paisaje a partir de una imagen" description = "" articulo = """ ## Definición del problema Un modelo de lenguaje natural que pueda analizar el contenido de una imagen y clasificarlo en persona, objeto o paisaje: Proyecto: Modelo de lenguaje natural que pueda analizar el contenido de una imagen y clasificarlo en persona, objeto o paisaje. Descripción del proyecto: El objetivo de este proyecto es crear un modelo de lenguaje natural que pueda analizar el contenido de una imagen y clasificarlo en persona, objeto o paisaje. La solución propuesta combinará dos modelos preentrenados: un modelo de análisis de contenido de imágenes y un modelo de clasificación. El modelo de análisis de contenido de imágenes se utilizará para extraer características relevantes de la imagen, como objetos, personas etc. Estas características se utilizarán como entrada para el modelo de clasificación, que clasificará la imagen en persona, objeto o paisaje. Limitaciones: El modelo de análisis de contenido de imágenes puede tener dificultades para identificar objetos en imágenes complejas o abstractas. Además, el modelo de clasificación puede tener dificultades para clasificar correctamente si las características extraídas por el modelo de análisis son incorrectas o incompletas. """ # Define la interfaz de Gradio con entrada de imagen iface = gr.Interface( fn=process, # Cambia la función para que sea generate_response inputs=gr.Image(type="pil", label="Sube una imagen"), # Entrada de imagen outputs="text", # Salida de texto title=title, description=description, article = articulo, ) # Ejecuta la interfaz Gradio iface.launch()