File size: 1,185 Bytes
877fccf
 
 
 
 
27c2212
 
877fccf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import gradio as gr
import tensorflow as tf
import numpy as np
from PIL import Image

# Load the fine‑tuned model (now from root directory)
model = tf.keras.models.load_model("O_R_tlearn_fine_tune_vgg16.keras")

# Class names
CLASS_NAMES = ["Organic (O)", "Recyclable (R)"]

def predict_image(image):
    """
    image: PIL Image or numpy array (H, W, 3)
    Returns: label string and confidence score
    """
    # Resize to 150x150 (the model's input size)
    img = image.resize((150, 150))
    img_array = np.array(img) / 255.0          # rescale as during training
    img_array = np.expand_dims(img_array, axis=0)  # add batch dimension

    pred = model.predict(img_array)[0][0]      # sigmoid output
    confidence = pred if pred > 0.5 else 1 - pred
    label = CLASS_NAMES[0] if pred < 0.5 else CLASS_NAMES[1]
    return f"{label} (confidence: {confidence:.2f})"

# Gradio interface
iface = gr.Interface(
    fn=predict_image,
    inputs=gr.Image(type="pil"),
    outputs="text",
    title="Waste Classifier (Organic vs Recyclable)",
    description="Upload an image of waste to classify it as Organic (O) or Recyclable (R)."
)

if __name__ == "__main__":
    iface.launch()