waste-classifier / inference.py
Nanny7's picture
Package model repo: add README/inference, remove Space app files
ecde677
"""Local inference helper for waste classification model."""
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.efficientnet import preprocess_input
IMG_SIZE = 224
MODEL_PATH = os.path.join(os.getcwd(), "waste_classifier.keras")
CLASS_NAMES = ["dry_waste", "other_waste", "wet_waste"]
CLASS_DISPLAY = {
"dry_waste": "โ™ป๏ธ Dry Waste",
"other_waste": "๐Ÿ”ถ Other Waste",
"wet_waste": "๐Ÿƒ Wet Waste",
}
CLASS_ACTIONS = {
"dry_waste": "Can be recycled โ†’ Paper, plastic, metal recovery",
"other_waste": "Needs special handling โ†’ Hazardous / e-waste processing",
"wet_waste": "Compostable โ†’ Organic composting / biogas generation",
}
model = tf.keras.models.load_model(MODEL_PATH)
def predict(image_path: str):
"""Predict waste class for an image path."""
img = image.load_img(image_path, target_size=(IMG_SIZE, IMG_SIZE))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array)
predictions = model.predict(img_array, verbose=0)[0]
index = int(np.argmax(predictions))
class_name = CLASS_NAMES[index]
confidence = float(predictions[index] * 100)
all_predictions = {
CLASS_NAMES[i]: round(float(predictions[i] * 100), 1)
for i in range(len(CLASS_NAMES))
}
return {
"class": class_name,
"display_name": CLASS_DISPLAY.get(class_name, class_name),
"confidence": round(confidence, 1),
"action": CLASS_ACTIONS.get(class_name, ""),
"all_predictions": all_predictions,
}