| import gradio as gr | |
| import tensorflow as tf | |
| from PIL import Image | |
| import numpy as np | |
| # Load the pre-trained model | |
| model = tf.keras.models.load_model('pokemon_transferlearning.keras') | |
| def classify_image(img): | |
| if isinstance(img, np.ndarray): | |
| img = Image.fromarray(img.astype('uint8'), 'RGB') | |
| # Preprocess the image to fit the model's input requirements | |
| img = img.resize((150, 150)) # Resize the image using PIL, which is intended here | |
| img_array = np.array(img) # Convert the resized PIL image to a numpy array | |
| img_array = img_array / 255.0 # Normalize pixel values to [0, 1] | |
| img_array = np.expand_dims(img_array, axis=0) # Expand dimensions to fit model input shape | |
| # Make prediction | |
| prediction = model.predict(img_array) | |
| # prediction = np.round(float(tf.sigmoid(prediction)), 2) | |
| # p_cat = (1 - prediction) | |
| # p_dog = prediction | |
| # return {'cat': p_cat, 'dog': p_dog} | |
| print(prediction) | |
| probabilities = tf.sigmoid(prediction).numpy() # Convert tensor to numpy array if using | |
| # Formatting the probabilities | |
| class_names = ['Hitchoman', 'Pikachu', 'Charmeleon'] | |
| results = {class_names[i]: float(prediction[0][i]) for i in range(3)} # Convert each probability to float | |
| return results | |
| # Create Gradio interface | |
| iface = gr.Interface(fn=classify_image, | |
| inputs=gr.Image(), | |
| outputs=gr.Label(num_top_classes=3), | |
| title="Pokemon Classifier", | |
| description="Upload an image of a pokemon classify.") | |
| # Launch the application | |
| iface.launch(share=True) | |