File size: 1,963 Bytes
5f5ed57
806a1b9
 
 
5f5ed57
806a1b9
5f5ed57
9f50754
806a1b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5f5ed57
806a1b9
 
5f5ed57
9f50754
 
 
806a1b9
5f5ed57
9f50754
5f5ed57
 
 
 
 
 
806a1b9
 
 
5f5ed57
 
 
806a1b9
 
5f5ed57
806a1b9
5f5ed57
9f50754
806a1b9
 
9f50754
806a1b9
 
5f5ed57
806a1b9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import torch
import torch.nn as nn
from torchvision import models, transforms
from PIL import Image
import numpy as np
import gradio as gr

# Definizione del modello pre-addestrato
class PretrainedModel(nn.Module):
    def __init__(self, num_classes=19):
        super(PretrainedModel, self).__init__()
        
        weights = models.ResNet50_Weights.IMAGENET1K_V2
        self.model = models.resnet50(weights=weights)
        
        # Congela i layer iniziali
        for param in self.model.parameters():
            param.requires_grad = False
            
        # Sostituisci l'ultimo layer
        num_features = self.model.fc.in_features
        self.model.fc = nn.Linear(num_features, num_classes)
    
    def forward(self, x):
        return self.model(x)

# Crea un'istanza del modello
model = PretrainedModel(num_classes=19)

# Carica i pesi con `weights_only=True` per evitare problemi di sicurezza
state_dict = torch.load('model_v11.pt', map_location=torch.device('cpu'), weights_only=True)
model.load_state_dict(state_dict)
model.eval()  # Imposta il modello in modalità valutazione

# Trasformazioni per l'immagine
preprocess = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

def classify_image(img):
    # Preprocessa l'immagine
    img_tensor = preprocess(img).unsqueeze(0)  # Aggiunge una dimensione per il batch
    with torch.no_grad():
        output = model(img_tensor)
        probabilities = torch.softmax(output, dim=1)
        predicted_class_index = probabilities.argmax().item()
        predicted_probability = probabilities[0][predicted_class_index].item()
        
    return f"Class {predicted_class_index}, Confidence: {predicted_probability:.4f}"

# Configura Gradio con l'API aggiornata
iface = gr.Interface(
    fn=classify_image,
    inputs=gr.Image(type="pil"),
    outputs="text"
)

iface.launch()