Spaces:
Paused
Paused
| from transformers import DetrImageProcessor, DetrForObjectDetection | |
| from io import BytesIO | |
| from PIL import Image | |
| import requests | |
| import torch | |
| class Generador(): | |
| def __init__(self, configuraciones): | |
| self.modelo = configuraciones.get('model') | |
| self.tokenizer = configuraciones.get('tokenizer') | |
| def generar_prediccion(self, imagen_bytes): | |
| # @title **Ejemplo práctico** | |
| prediccion = str() | |
| try: | |
| # Inicializamos los procesadores y el modelo | |
| procesador = DetrImageProcessor.from_pretrained(self.tokenizer) | |
| modelo = DetrForObjectDetection.from_pretrained(self.modelo) | |
| # Procesamos nuestra imagen y objetos | |
| inputs = procesador(images=imagen_bytes, return_tensors="pt") | |
| outputs = modelo(**inputs) | |
| objetos = torch.tensor([imagen_bytes.size[::-1]]) | |
| # filtramos objetos con probabilidad mayor al 90% | |
| resultados = procesador.post_process_object_detection( | |
| outputs, target_sizes=objetos, threshold=0.9)[0] | |
| # imprimimos cada resultado con su probabilidad | |
| for probabilidad, etiqueta, ubicacion in zip(resultados["scores"], resultados["labels"], resultados["boxes"]): | |
| ubicacion = [round(i, 2) for i in ubicacion.tolist()] | |
| _text = f"Encontrado:\t {modelo.config.id2label[etiqueta.item()]}\nProbabilidad: {round(probabilidad.item(), 3)} en ubicación: {ubicacion}." | |
| prediccion = prediccion + _text | |
| except Exception as error: | |
| print(f"No es Chems\n{error}") | |
| prediccion = str(error) | |
| finally: | |
| self.prediccion = prediccion | |