|
import uvicorn |
|
import json |
|
import requests |
|
import numpy as np |
|
import tensorflow as tf |
|
from io import BytesIO |
|
from tensorflow import keras |
|
from fastapi import FastAPI |
|
from PIL import Image |
|
from pydantic import BaseModel |
|
|
|
race_file = open('race_names.json', 'r') |
|
race_names = json.load(race_file) |
|
|
|
image_size = (180, 180) |
|
|
|
app = FastAPI() |
|
|
|
model = keras.models.load_model('naive_model') |
|
|
|
|
|
@app.get("/prediction") |
|
def get_prediction(q: str): |
|
response = requests.get(q) |
|
img = Image.open(BytesIO(response.content)).resize((180, 180)) |
|
img_array = keras.preprocessing.image.img_to_array(img) |
|
img_array = tf.expand_dims(img_array, 0) |
|
|
|
predictions = model.predict(img_array) |
|
|
|
top4 = predictions.argsort()[0, -1:-5:-1] |
|
|
|
breakdown = [] |
|
for race, acc in zip(np.array(race_names)[top4], predictions[0, top4]): |
|
breakdown.append(f'{race} at {acc:.2%}') |
|
return breakdown |
|
|
|
|
|
if __name__ == "__main__": |
|
uvicorn.run("fastapi:app") |
|
|