File size: 1,999 Bytes
bdfa5cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import cv2
import gradio as gr
import numpy as np
from tensorflow.keras.models import load_model
import json

# Load the saved models
cnn_model = load_model('cnn_image_classifier.h5')
resnet_model = load_model('resnet_image_classifier.h5')

# Load label map (assuming you have it defined or loaded elsewhere)
# Replace with your actual loading method
with open('EuroSAT/label_map.json', 'r') as f:
    label_map = json.load(f)
label_map_inv = {v: k for k, v in label_map.items()}


def predict_image(image):
    # Preprocess the image (resize, normalize, etc.)
    image = cv2.resize(image, (64, 64))
    image = image / 255.0
    image = np.expand_dims(image, axis=0)

    # Make predictions with both models
    cnn_pred = cnn_model.predict(image)[0]
    resnet_pred = resnet_model.predict(image)[0]

    # Get top 5 predictions for CNN
    cnn_top5_indices = np.argsort(cnn_pred)[::-1][:5]
    cnn_top5 = {
        label_map_inv[idx]: float(cnn_pred[idx]) for idx in cnn_top5_indices
    }

    # Get top 5 predictions for ResNet
    resnet_top5_indices = np.argsort(resnet_pred)[::-1][:5]
    resnet_top5 = {
        label_map_inv[idx]: float(resnet_pred[idx]) for idx in resnet_top5_indices
    }

    # Final predictions
    cnn_final_prediction = label_map_inv[np.argmax(cnn_pred)]
    resnet_final_prediction = label_map_inv[np.argmax(resnet_pred)]

    return cnn_top5, cnn_final_prediction, resnet_top5, resnet_final_prediction


iface = gr.Interface(
    fn=predict_image,
    inputs=gr.Image(type="numpy"),
    outputs=[
        gr.Label(num_top_classes=5, label="CNN Top 5 Predictions"),
        gr.Textbox(label="CNN Final Prediction"),
        gr.Label(num_top_classes=5, label="ResNet Top 5 Predictions"),
        gr.Textbox(label="ResNet Final Prediction"),
    ],
    title="Image Classification with CNN and ResNet",
    description="Upload an image to classify using two different models.",
)

iface.launch(debug=True)