Я пытаюсь реализовать API для предварительно обученного пере snet (модель машинного обучения). Таким образом, сервер может принять один действительный файл изображения в запросе для анализа. Возвращает результат запуска изображения для модели.
Мне интересно, как выглядит общая структура моего API. Пока у меня есть
app api init .py (для чертежа) errors.py (для исключений) main resnet18.py (для фактической модели и классификации pi c)
В моем resnet18.py:
import torchvision.models as models
import torch
from torchvision import transforms
resnet18 = models.resnet18(pretrained=True)
transform = transforms.Compose([
transforms.Resize(256), # resize the image to 256*256
transforms.CenterCrop(224), # crop the image to 224*224 pixels about the center
transforms.ToTensor(), # convert the image to PyTorch Tensor data type
transforms.Normalize(mean=[0.485, 0.456, 0.406], # Normalize the image by setting its mean and standard deviation to the specified values
std=[0.229, 0.224, 0.225])
])
from PIL import Image
img = Image.open('dog.jpg')
img_t = transform(img)
batch_t = torch.unsqueeze(img_t, 0)
out = resnet18(batch_t)
with open('imagenet_classes.txt') as f:
classes = [line.strip() for line in f.readlines()]
_, index = torch.max(out, 1)
percentage = torch.nn.functional.softmax(out, dim=1)[0] * 100
# print(classes[index[0]], percentage[index[0]].item())
most_likely = classes[index[0]]
confidence = percentage[index[0]].item()
# _, indices = torch.sort(out, descending=True)
# [(classes[idx], percentage[idx].item()) for idx in indices[0][:5]]
def to_json():
json_prediction = {
'most_likely': most_likely,
'confidence': confidence
}
return json_prediction
Так что я хочу вызвать эту заливку, как только я загружу изображение. Мне интересно, как я могу сделать его более элегантным. Я никогда не делал ничего подобного.