eval / pytorch_inf.py
dev-deg
Fixed bug
03605b3
from ultralytics import YOLO
import pandas as pd
from habitat_classification import classify_habitat, get_inconclusive
import time
import cv2
def get_habitat_data(class_names, species_data):
if not class_names:
inconclusive_res = get_inconclusive()
return inconclusive_res[0], inconclusive_res[1]
else:
habitat_res = classify_habitat(class_names, species_data)
return habitat_res[0], habitat_res[1]
def display_detections(frame, results):
detections = []
annotations = []
for result in results:
if result.boxes.data.nelement() != 0:
for detection in result.boxes.data:
x1, y1, x2, y2, conf, cls = detection.cpu().numpy()
class_name = result.names[int(cls)]
detections.append([class_name, conf])
annotations.append(((int(x1), int(y1), int(x2), int(y2)), class_name))
outframe = result.plot()
return frame, outframe, annotations, pd.DataFrame(detections, columns=["Class", "Confidence"])
print("No detections")
return frame, None, [], pd.DataFrame(columns=["Class", "Confidence"])
def process_image(input_image, model):
corrected_image_rgb = cv2.cvtColor(input_image, cv2.COLOR_BGR2RGB)
results = model(corrected_image_rgb, stream=True)
return display_detections(corrected_image_rgb, results)
def run_pytorch_inference(input_image, pt_model, species_data):
model = YOLO(pt_model)
model.conf = 0.2
start_time = time.time()
frame, outframe, annotations, detections = process_image(input_image, model)
if detections.empty:
habitat, probabilities = get_inconclusive()
detections = pd.DataFrame(columns=["Class", "Confidence"])
else:
habitat, probabilities = get_habitat_data(detections['Class'].tolist(),species_data)
end_time = time.time()
duration = end_time - start_time
return f"Executed in {duration:.2f}s", (frame, annotations), habitat, probabilities, outframe, detections