iamsuman's picture
added demo model for garbage classification
b8a7aa4
from ast import mod
import gradio as gr
from huggingface_hub import hf_hub_download
from PIL import Image
import numpy as np
import tensorflow as tf
# Load the pre-trained model from Hugging Face
model_name = "iamsuman/household-waste-EfficientNetV2M"
model_path = hf_hub_download(repo_id=model_name, filename="EfficientNetV2M.h5")
model = tf.keras.models.load_model(model_path)
# Define a manual mapping of label indices to human-readable labels
index_to_label = {
0: "battery",
1: "biological",
2: "cardboard",
3: "clothes",
4: "glass",
5: "metal",
6: "paper",
7: "plastic",
8: "shoes",
9: "trash"
}
def classify_image(image):
image = Image.fromarray(image.astype('uint8'), 'RGB')
image = image.resize((400, 400))
# Convert the PIL Image to a format compatible with the model
image = np.array(image)
image = np.expand_dims(image, axis=0) # Add batch dimension
image = tf.keras.applications.efficientnet.preprocess_input(image)
# Make prediction
preds = model.predict(image)
# Retrieve the highest probability class label index
predicted_class_idx = np.argmax(preds, axis=-1)[0]
# Convert the index to the model's class label
label = index_to_label.get(predicted_class_idx, "Unknown Label")
return label.capitalize()
# Create Gradio interface
iface = gr.Interface(fn=classify_image,
inputs=gr.Image(), # Accepts image of any size
outputs=gr.Label(),
title="Household Waste Classification with EfficientNetV2M",
description="Upload an image of household waste, and the model will classify it.")
# Launch the app
iface.launch()