trs's picture
Update app.py
18f5b95 verified
import gradio as gr
import cv2
import numpy as np
from tensorflow.keras.models import load_model
import gradio as gr
import cv2
import numpy as np
from tensorflow.keras.models import load_model
class_folders = ["Ajloun Castle", "Jeresh", "Petra", "Roman amphitheater", "Umm_Qais", "Wadi_Rum"]
Inception_path='./Models/new_efficientnet.h5'
VGGNet_path='./Models/new_vgg_16.hdf5'
ResNet_path= './Models/new_resnet50.hdf5'
EfficientNet_path= './Models/efficientnet-saved-model-06-val_acc-0.98.hdf5'
Inception_model = load_model(Inception_path)
VGGNet_model = load_model(VGGNet_path)
ResNet_model = load_model(ResNet_path)
Efficient_model = load_model(EfficientNet_path)
history=[]
def classify_selected_model(image, model_name):
try:
img = cv2.imread(image)
img = cv2.resize(img, (150, 150))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = np.expand_dims(img, axis=0)
models = {
"ResNet": ResNet_model,
"EfficientNet": Efficient_model,
"VGGNet": VGGNet_model,
"InceptionV3": Inception_model
}
all_predictions = {}
for model_key, model in models.items():
predictions = model.predict(img)
class_index = np.argmax(predictions[0])
class_name = class_folders[class_index]
probability = round(max(predictions[0]) * 100, 2)
all_predictions[model_key] = probability
min_probability = min(all_predictions.values())
if min_probability < 70: # Adjust the threshold as needed
result_str = "Can't detect this image. Please try another one."
return None, None, result_str
else:
class_index = np.argmax(predictions[0])
class_name = class_folders[class_index]
max_probability = round(max(predictions[0]) * 100, 2)
result_str = f"{model_name}: {class_name} {max_probability}%"
history.append(result_str)
return class_name, max_probability,None, result_str
# best_model = max(all_predictions, key=all_predictions.get)
# class_name = class_folders[np.argmax(models[best_model].predict(img)[0])]
# probability = all_predictions[best_model]
# result_str = f"{best_model}: {class_name} {probability}%"
# history.append(result_str)
# return class_name, probability, history[-3:-1]
except Exception as e:
error_message = f"Error: {str(e)}"
return None, None, [error_message]
image_input = gr.Image(type='filepath', label="Input Image")
model_dropdown = gr.Dropdown(["ResNet", "EfficientNet", "VGGNet", "InceptionV3"], label="Select Model")
result_textbox = gr.Textbox("Results", label="Error Message")
iface = gr.Interface(
fn=classify_selected_model,
inputs=[image_input, model_dropdown],
outputs=[
gr.Label(value="Archaeological Site"),
gr.Label(value="Probability"),
result_textbox
],
examples=[
["Sites/Ajloun.png"],
["Sites/Jeresh.png"],
["Sites/Umm Qais.png"],
["Sites/Petra.png"],
["Sites/Roman Amphitheater.png"],
["Sites/Wadi Rum.png"]
],
live=True,
title="Image Classification for Archaeological Sites Interface"
)
iface.launch(debug=True, share=True)