|
|
from tools.infer_onnx import ONNX_Predict
|
|
|
import cv2
|
|
|
import time
|
|
|
import collections
|
|
|
|
|
|
onnx_model = "edge_s_640_resize.onnx"
|
|
|
|
|
|
|
|
|
providers = ["CPUExecutionProvider"]
|
|
|
predict = ONNX_Predict(onnx_model, providers=providers, use_letterbox=False)
|
|
|
|
|
|
|
|
|
img_size = 640
|
|
|
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 640x640 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
|
|
|
|
|
|
|
|
|
|