| | from infer_onnx import ONNX_Predict
|
| | import cv2
|
| | import time
|
| | import collections
|
| |
|
| | onnx_model = "edge_s_320_p2_resize.onnx"
|
| |
|
| |
|
| | providers = ["CPUExecutionProvider"]
|
| | predict = ONNX_Predict(onnx_model, providers=providers, use_letterbox=False)
|
| |
|
| |
|
| | img_size = 320
|
| | conf = 0.5
|
| | iou = 0.3
|
| | max_det = 300
|
| |
|
| | cap = cv2.VideoCapture("intersection.mp4")
|
| |
|
| | max_w = 800
|
| |
|
| |
|
| |
|
| | fps_history = collections.deque(maxlen=30)
|
| |
|
| | while True:
|
| |
|
| | ret, frame = cap.read()
|
| | start_time = time.time()
|
| | if not ret:
|
| | break
|
| |
|
| | h, w = frame.shape[:2]
|
| | if w > max_w:
|
| | scale = max_w / w
|
| | frame = cv2.resize(frame, (max_w, int(h * scale)), interpolation=cv2.INTER_LINEAR)
|
| |
|
| |
|
| | start_time_0 = time.time()
|
| |
|
| | boxes, scores, classes = predict.infer_image(
|
| | frame, img_size=img_size, conf=conf, iou=iou, max_det=max_det
|
| | )
|
| |
|
| | end_time_0 = time.time()
|
| |
|
| |
|
| | for (x1, y1, x2, y2), score, cls in zip(boxes, scores, classes):
|
| | x1, y1, x2, y2 = map(int, (x1, y1, x2, y2))
|
| | cv2.rectangle(frame, (x1, y1), (x2, y2), (0,255,0), 2)
|
| | cv2.putText(frame, f"{int(cls)} {score:.2f}", (x1, max(0, y1-5)),
|
| | cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)
|
| |
|
| | dt = time.time() - start_time
|
| | fps = 1.0 / dt if dt > 0 else 0.0
|
| | fps_history.append(fps)
|
| | fps_avg = sum(fps_history) / len(fps_history)
|
| |
|
| | cv2.putText(frame, f"edge_s 320x320 CPU FPS: {fps_avg:5.1f}",
|
| | (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2)
|
| |
|
| | cv2.imshow('test', frame)
|
| | key = cv2.waitKey(1)
|
| | print(f'Total: {fps_avg:5.1f} Inference:{(end_time_0-start_time_0)*1000:3.1f}ms')
|
| | if key == 13:
|
| | break
|
| |
|
| |
|
| |
|