| import gradio as gr |
| import torch |
| import torch.nn as nn |
| import torch.nn.functional as F |
| import torchvision.transforms as transforms |
| from PIL import Image |
| import io |
|
|
|
|
| class Net(nn.Module): |
| def __init__(self): |
| super(Net, self).__init__() |
| self.conv1 = nn.Conv2d(3, 6, 5) |
| self.pool = nn.MaxPool2d(2, 2) |
| self.conv2 = nn.Conv2d(6, 16, 5) |
| self.fc1 = nn.Linear(16 * 5 * 5, 120) |
| self.fc2 = nn.Linear(120, 84) |
| self.fc3 = nn.Linear(84, 10) |
|
|
| def forward(self, x): |
| x = self.pool(F.relu(self.conv1(x))) |
| x = self.pool(F.relu(self.conv2(x))) |
| x = x.view(-1, 16 * 5 * 5) |
| x = F.relu(self.fc1(x)) |
| x = F.relu(self.fc2(x)) |
| x = self.fc3(x) |
| return x |
|
|
| |
| net = Net() |
| net.load_state_dict(torch.load('model.pth', map_location=torch.device('cpu'))) |
| net.eval() |
|
|
| def predict(image): |
| transform = transforms.Compose([ |
| transforms.Resize((32, 32)), |
| transforms.ToTensor(), |
| transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) |
|
|
| |
| image = Image.fromarray(image.astype('uint8'), 'RGB') |
| image = transform(image).unsqueeze(0) |
| |
| with torch.no_grad(): |
| outputs = net(image) |
| _, predicted = torch.max(outputs, 1) |
| classes = ('plane', 'car', 'bird', 'cat', 'deer', |
| 'dog', 'frog', 'horse', 'ship', 'truck') |
| return classes[predicted[0]] |
|
|
| iface = gr.Interface(fn=predict, inputs="image", outputs="text", |
| description="Upload an image to classify it into one of the CIFAR-10 classes.") |
| iface.launch() |