File size: 788 Bytes
908b0df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import torch
from PIL import Image
from model import CnnNet

# Index order used in training: 0 = background, 1 = helicopter, 2 = drone
CLASS_NAMES = ["background", "helicopter", "drone"]

model = CnnNet()
model.load_state_dict(torch.load("weightsfilefromspectrogram.pth", map_location="cpu"))
model.eval()

def predict(image_path):
    # Spectrograms are single-channel, 480x640, pixel values scaled to 0-1
    img = Image.open(image_path).convert("L").resize((640, 480))
    x = torch.tensor(np.array(img) / 255.0, dtype=torch.float32)
    x = x.unsqueeze(0).unsqueeze(0)  # shape [1, 1, 480, 640]
    with torch.no_grad():
        probs = torch.exp(model(x))[0]  # the model outputs log-probabilities
    return {name: float(p) for name, p in zip(CLASS_NAMES, probs)}