Spaces:
Build error
Build error
import gradio as gr | |
import tensorflow as tf | |
import numpy as np | |
models = [ | |
{"name": "my_model_2.h5", "size": 512}, | |
{"name": "my_model.h5", "size": 224}, | |
] | |
def preprocess_image(image): | |
temp_file = tempfile.NamedTemporaryFile(suffix=".png", delete=False) | |
temp_file.write(image.read()) | |
temp_file.close() | |
return temp_file.name | |
def classify_image(image_path, model_name): | |
model_config = next(m for m in models if m["name"] == model_name) | |
model = tf.keras.models.load_model(model_name) | |
image = Image.open(image_path).convert("RGB") | |
image = image.resize((model_config["size"], model_config["size"])) | |
image = np.array(image) / 255.0 | |
input_image = np.expand_dims(image, axis=0) | |
prediction = model.predict(input_image).flatten() | |
if len(prediction) > 1: | |
probability = 100 * np.exp(prediction[0]) / (np.exp(prediction[0]) + np.exp(prediction[1])) | |
else: | |
probability = round(100. / (1 + np.exp(-prediction[0])), 2) | |
if probability > 45: | |
label = "Glaucoma" | |
elif probability > 25: | |
label = "Unclear" | |
else: | |
label = "Not glaucoma" | |
return label, probability | |
inputs = [ | |
gr.inputs.Image(shape=(224, 224), label="Eye image"), | |
gr.inputs.Dropdown(choices=[m["name"] for m in models], label="Model"), | |
] | |
outputs = [ | |
gr.outputs.Textbox(label="Predicted label"), | |
gr.outputs.Textbox(label="Probability of glaucoma (0-100)"), | |
] | |
examples = [ | |
[np.zeros((224, 224, 3)), "my_model.h5"], | |
[np.ones((224, 224, 3)) * 255, "my_model_2.h5"], | |
] | |
gr.Interface(classify_image, inputs, outputs, examples=examples).launch() | |