import gradio as gr import tensorflow as tf import numpy as np # Load the trained model denis_mnist_cnn_model_v4.h5 model = tf.keras.models.load_model("denis_mnist_cnn_model_v4.h5") # Preprocessing function for images def preprocess_image(image): # Resize the image to 28x28 as expected by the model image = tf.image.resize(image, (28, 28)) # Resize to 28x28 print(f"Image shape after resizing: {image.shape}") # Convert the image to grayscale (1 channel) directly image = tf.image.rgb_to_grayscale(image) # Convert RGB to grayscale print(f"Image shape after converting to grayscale: {image.shape}") # Normalize pixel values to [0, 1] image = tf.cast(image, tf.float32) / 255.0 # Add batch dimension (model expects batch of images) image = tf.expand_dims(image, axis=0) print(f"Image shape after adding batch dimension: {image.shape}") return image # Function to make predictions def predict(image): image = preprocess_image(image) prediction = model.predict(image) # Predict predicted_class = np.argmax(prediction, axis=-1)[0] # Get the predicted class class_confidence = np.max(prediction, axis=-1)[0] # Get the confidence score #return {"prediction": int(predicted_class), "confidence": class_confidence} return {"prediction": int(predicted_class)} # Create a Gradio interface interface = gr.Interface(fn=predict, inputs="image", outputs="json") # Launch the Gradio interface if __name__ == "__main__": interface.launch(share=True)