import gradio as gr import tensorflow as tf from tensorflow.keras.applications.mobilenet_v2 import preprocess_input from tensorflow.keras.models import load_model from tensorflow.keras.preprocessing import image import numpy as np from PIL import Image #Load the model model = load_model("keras_model.h5", compile=False) # Load the labels class_names = open("labels.txt", "r").readlines() def predict_image(img): # Resize the image img = Image.fromarray(img.astype('uint8'), 'RGB') img = img.resize((224, 224), resample=Image.BILINEAR) # Preprocess the image img_array = image.img_to_array(img) img_array = preprocess_input(img_array) # Expand the dimensions to create a batch of size 1 img_batch = tf.expand_dims(img_array, axis=0) # Predict the class probabilities preds = model.predict(img_batch) class_idx = tf.argmax(preds, axis=1)[0] class_name = class_names[class_idx].strip() confidence_score = float(preds[0][class_idx]) #convert to float if class_idx == 5: return "We couldn't detect anything from this image. Please try with a different image." elif confidence_score >= 0.70: return f"There is a {confidence_score*100:.2f}% chance for this image to be in {class_name}. Even though it has good accuracy, please consult a doctor for confirmation." elif 0.50 <= confidence_score < 0.70: return f"There is a {confidence_score*100:.2f}% chance for this image to be in {class_name}, but considering the accuracy, it's better to consult a doctor before using our service." else: return f"There is a {confidence_score*100:.2f}% chance for this image to be in {class_name}. Since the accuracy is very low, please consider a doctor's advice and we recommend you not to rely on our predictions." # Launch the Gradio interfac iface = gr.Interface(fn=predict_image, inputs="image", outputs="text", title="Bee4Med - Skin Disease Classifier", description="""This is a machine learning model that predicts skin disease from an image(limited dataset). Which is -->Acne and Rosacea category -->Eczema(most probably atopic dermatitis) category -->Bullous Disease category -->Eczema category -->Alopecia, Fungus, and other Nail Diseases category However, please note that there are chances that the predictions may go wrong, and we strongly recommend you to consult a doctor for confirmation. Please provide a closer pic for better accuracy""") # Launch the interface iface.launch()