Orphen2024 commited on
Commit
3443a2f
1 Parent(s): 59a8147

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -34
app.py CHANGED
@@ -1,47 +1,47 @@
1
  import gradio as gr
2
- from transformers import AutoModel, AutoFeatureExtractor, AutoConfig
3
  import torch
 
4
  from PIL import Image
 
5
 
6
- # Carga el modelo y el extractor de características
7
- model_name = "CarPeAs/reconocimiento-facial"
 
8
 
9
- # Intentar cargar la configuración del modelo primero
10
- config = AutoConfig.from_pretrained(model_name)
11
 
12
- # Imprimir la configuración del modelo para verificar su contenido
13
- print(config)
 
14
 
15
- # Usar la clase correcta basada en la configuración del modelo
16
- if config.model_type in ['vit', 'beit', 'deit', 'resnet', 'convnext', 'swin']:
17
- model = AutoModelForImageClassification.from_pretrained(model_name)
18
- else:
19
- model = AutoModel.from_pretrained(model_name)
20
 
21
- feature_extractor = AutoFeatureExtractor.from_pretrained(model_name)
 
 
 
 
 
22
 
23
- # Función de inferencia
24
- def reconocer_emocion(image):
25
- # Convierte la imagen a tensor
26
- inputs = feature_extractor(images=image, return_tensors="pt")
27
  with torch.no_grad():
28
- outputs = model(**inputs)
29
- # Asumiendo que las emociones están en las etiquetas de salida del modelo
30
- logits = outputs.logits
31
- emotion = torch.argmax(logits, dim=-1).item()
32
- emociones = ["Feliz", "Triste", "Enojado", "Sorprendido", "Neutral"]
33
- return emociones[emotion]
34
-
35
- # Interfaz de Gradio
36
  iface = gr.Interface(
37
- fn=reconocer_emocion,
38
- inputs=gr.inputs.Image(type="pil"),
39
- outputs=gr.outputs.Textbox(label="Emoción Reconocida"),
40
- title="Reconocimiento Facial de Emociones",
41
- description="Carga una imagen y el modelo reconocerá la emoción expresada en el rostro."
42
  )
43
 
44
- # Ejecuta la aplicación
45
- if __name__ == "__main__":
46
- iface.launch()
47
-
 
1
  import gradio as gr
 
2
  import torch
3
+ from torchvision import models, transforms
4
  from PIL import Image
5
+ import json
6
 
7
+ # Cargar la configuración
8
+ with open("reconocimiento_facial/config.json") as f:
9
+ config = json.load(f)
10
 
11
+ # Definir las etiquetas de las clases
12
+ class_labels = ["Angry", "Disgust", "Fear", "Happy", "Sad", "Surprise", "Neutral"]
13
 
14
+ # Crear el modelo y ajustar la última capa
15
+ model = models.resnet50()
16
+ model.fc = torch.nn.Linear(model.fc.in_features, len(class_labels)) # len(class_labels) = 7
17
 
18
+ # Cargar los pesos del modelo
19
+ model.load_state_dict(torch.load("reconocimiento_facial/pytorch_model.bin"))
20
+ model.eval()
 
 
21
 
22
+ # Preprocesamiento de imágenes
23
+ transform = transforms.Compose([
24
+ transforms.Resize((config["image_size"], config["image_size"])),
25
+ transforms.ToTensor(),
26
+ transforms.Normalize(mean=config["transformations"]["Normalize"]["mean"], std=config["transformations"]["Normalize"]["std"])
27
+ ])
28
 
29
+ def predict(image):
30
+ image = transform(image).unsqueeze(0)
 
 
31
  with torch.no_grad():
32
+ output = model(image)
33
+ _, predicted = torch.max(output, 1)
34
+ predicted_class = class_labels[predicted.item()]
35
+ return predicted_class
36
+
37
+ # Crear la interfaz de Gradio
 
 
38
  iface = gr.Interface(
39
+ fn=predict,
40
+ inputs=gr.Image(type="pil"),
41
+ outputs=gr.Textbox(label="Predicted Expression"),
42
+ title="Reconocimiento Facial de Expresiones",
43
+ description="Sube una imagen de una cara para clasificar la expresión facial en una de las siete categorías: Enfadado, Disgustado, Miedo, Feliz, Triste, Sorprendido y Neutral."
44
  )
45
 
46
+ # Ejecutar la interfaz
47
+ iface.launch()