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 | |