| from io import BytesIO |
|
|
| import numpy as np |
| import tensorflow as tf |
| from PIL import Image |
| |
| from tensorflow.keras.models import load_model |
| import os |
|
|
|
|
| model = None |
|
|
| def load_model2(): |
| model = load_model('application/models/Tumor_VGG_model.h5') |
| print("Model loaded") |
| return model |
|
|
|
|
| def predict(image: Image.Image): |
| global model |
| if model is None: |
| model = load_model2() |
|
|
| image = np.asarray(image.resize((224, 224)))[..., :3] |
| image = np.expand_dims(image, 0) |
| image = image / 127.5 - 1.0 |
|
|
| result = model.predict(image) |
| probability = result[0] |
| |
| if probability[0] > 0.8: |
| brainTum_pred = str('%.2f' % (probability[0]*100) + '% Brain Tumor Present') |
| else: |
| brainTum_pred = str('%.2f' % ((1-probability[0])*100) + '% No Brain Tumor') |
|
|
| response = [] |
| for i, res in enumerate(result): |
| resp = {} |
| resp["prediction"] = brainTum_pred |
| |
|
|
| response.append(resp) |
|
|
| return response |
|
|
|
|
| def read_imagefile(file) -> Image.Image: |
| image = Image.open(BytesIO(file)) |
| return image |
|
|