Spaces:
Runtime error
Runtime error
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) | |