flask классификация изображений Реализация API модели ML - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь реализовать 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

Так что я хочу вызвать эту заливку, как только я загружу изображение. Мне интересно, как я могу сделать его более элегантным. Я никогда не делал ничего подобного.

...