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)} |