| import numpy as np |
| from tensorflow.keras.applications.resnet50 import ( |
| ResNet50, |
| decode_predictions, |
| preprocess_input, |
| ) |
| from tensorflow.keras.preprocessing import image |
|
|
| |
| model = ResNet50(include_top=True, weights="imagenet") |
|
|
|
|
| def predict_image(img): |
| """ |
| Preprocesses an image and runs a pre-trained ResNet50 model to get a prediction. |
| |
| Parameters |
| ---------- |
| img : PIL.Image |
| The image object to classify. |
| |
| Returns |
| ------- |
| class_name, pred_probability : tuple(str, float) |
| The model's predicted class as a string and the corresponding confidence |
| score as a number. |
| """ |
| |
| img = img.resize((224, 224)) |
|
|
| |
| x = image.img_to_array(img) |
|
|
| |
| x_batch = np.expand_dims(x, axis=0) |
|
|
| |
| x_batch = preprocess_input(x_batch) |
|
|
| |
| predictions = model.predict(x_batch, verbose=0) |
|
|
| |
| top_pred = decode_predictions(predictions, top=1)[0][0] |
| _, class_name, pred_probability = top_pred |
|
|
| |
| pred_probability = round(float(pred_probability), 4) |
|
|
| return class_name, pred_probability |
|
|