File size: 1,221 Bytes
54dd6b7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
38
39
40
import tensorflow as tf
import numpy as np
from PIL import Image

# Load your trained CNN model
model = tf.keras.models.load_model("saved_model/Inception_V3_Animals_Classification.h5")

# Same label order you used when training (from LabelEncoder)
CLASS_NAMES = ["Cat", "Dog", "Snake"]

def preprocess_image(img: Image.Image, target_size=(256, 256)):
    """

    Preprocess a PIL image to match training pipeline:

    - Convert to RGB

    - Resize

    - Convert to float32

    - Normalize to [0,1]

    - Add batch dimension

    """
    img = img.convert("RGB")  # ensure 3 channels
    img = img.resize(target_size)
    img = np.array(img).astype("float32") / 255.0  # normalize
    img = np.expand_dims(img, axis=0)  # (1, 256, 256, 3)
    return img

def predict(img: Image.Image):
    # Apply preprocessing
    input_tensor = preprocess_image(img)

    # Model prediction
    preds = model.predict(input_tensor)
    probs = preds[0]

    class_idx = int(np.argmax(probs))
    confidence = float(np.max(probs))

    # Map all probabilities
    prob_dict = {CLASS_NAMES[i]: float(probs[i]) for i in range(len(CLASS_NAMES))}

    return CLASS_NAMES[class_idx], confidence, prob_dict