sdqp's picture
Update app.py
4537938 verified
Raw
History Blame Contribute Delete
1.76 kB
import gradio as gr
import pathlib
import random
import tensorflow as tf
from PIL import Image
from timeit import default_timer as timer
from keras.models import load_model
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Load the model
model = load_model('MyResNet101Model_final.keras')
# Define label mappings based on your dataset
label2id = {'Hispa': 0, 'Bercak Coklat': 1, 'Blast Daun': 2, 'Sehat': 3}
class_names = list(label2id.keys())
# Function to predict an image
def predict(img):
start = timer()
img = img.resize((224, 224)) # Ensure size matches the model's expected input
img_array = tf.keras.preprocessing.image.img_to_array(img)
img_array = tf.expand_dims(img_array, 0) # Create batch dimension
# Normalize image
img_array /= 255.0
# Prediction
predictions = model.predict(img_array)
pred_prob = tf.nn.softmax(predictions[0])
pred_dict = {class_names[i]: float(pred_prob[i]) for i in range(len(class_names))}
pred_time = round(timer() - start, 5)
return pred_dict, pred_time
# Example images for demonstration
example_paths = list(pathlib.Path('examples').glob("*/*.jpg"))
example_list = [[str(filepath)] for filepath in random.sample(example_paths, k=4)]
# Set up the Gradio interface
title = 'Klasifikasi Penyakit Daun Padi'
description = 'Upload gambar daun padi untuk mengklasifikasikan penyakitnya.'
demo = gr.Interface(
fn=predict,
inputs=gr.Image(type='pil'),
outputs=[
gr.Label(num_top_classes=4, label='Prediksi'),
gr.Number(label="Waktu prediksi (detik)")
],
description=description,
title=title,
allow_flagging='never',
examples=example_list
)
if __name__ == "__main__":
demo.launch(debug=True)