pipeline in linea single thread

This commit is contained in:
administrator
2026-05-19 08:52:44 +02:00
parent 98b43ce903
commit f728524ee6
43 changed files with 5245 additions and 154 deletions

View File

@@ -53,13 +53,15 @@ class NavigationDemoEngine:
def __init__(self, args):
self.args = args
nav.require_file(args.weights, "modello Ultralytics")
self.detector = nav.UltralyticsDetector(args.weights, args.ultralytics_device)
self.detector = nav.UltralyticsDetector(args.weights, args.ultralytics_device, args.yolo_half)
self.cap, self.source_name = nav.open_capture(args.video)
if not self.cap.isOpened():
raise RuntimeError(f"impossibile aprire sorgente video: {self.source_name}")
video_fps = self.cap.get(cv2.CAP_PROP_FPS)
preview_fps = args.preview_fps if args.preview_fps and args.preview_fps > 0 else video_fps
self.video_fps = video_fps
self.preview_fps = preview_fps
if args.preview_fps and args.preview_fps > 0 and (args.video is None or str(args.video).isdigit()):
self.cap.set(cv2.CAP_PROP_FPS, float(args.preview_fps))
self.frame_delay = (
@@ -82,6 +84,7 @@ class NavigationDemoEngine:
self.next_yolo_time = self.start_time
self.last_yolo_ms = 0.0
self.gaylords: list[nav.Detection] = []
self.labels: list[nav.Detection] = []
self.tracks: list[nav.Track] = []
self.stop_reason = ""
@@ -123,6 +126,10 @@ class NavigationDemoEngine:
det for det in detections
if det.class_name.strip().lower() == self.args.target_class.strip().lower()
]
self.labels = [
det for det in detections
if det.class_name.strip().lower() == self.args.label_class.strip().lower()
]
self.tracks = self.tracker.update(self.gaylords, self.frame_id, frame.shape[1])
if (
@@ -140,6 +147,7 @@ class NavigationDemoEngine:
frame,
self.frame_id,
timestamp,
self.labels,
)
if snapshot is not None:
new_snapshots.append(snapshot)
@@ -149,17 +157,19 @@ class NavigationDemoEngine:
elapsed = max(time.perf_counter() - self.start_time, 0.001)
fps_text = (
f"frame={self.frame_id} fps={self.frame_id / elapsed:.1f} "
f"yolo_fps={self.yolo_cycles / elapsed:.1f} yolo={self.last_yolo_ms:.0f}ms "
f"det={len(self.gaylords)} tracks={len(self.tracks)} "
f"frame={self.frame_id} src_fps={nav.format_fps_value(self.video_fps)} "
f"preview_target={nav.format_fps_value(self.preview_fps)} fps={self.frame_id / elapsed:.1f} "
f"yolo_target={nav.format_fps_value(self.args.yolo_fps)} yolo_fps={self.yolo_cycles / elapsed:.1f} "
f"yolo={self.last_yolo_ms:.0f}ms det={len(self.gaylords)} labels={len(self.labels)} "
f"tracks={len(self.tracks)} "
f"snap={self.navigator.snapshot_counter}"
)
display = nav.draw_navigation_debug(
frame,
self.tracks,
self.args,
self.navigator.last_command_text,
fps_text,
self.labels,
self.navigator.label_movement_arrow,
)
return DemoFrameState(
@@ -335,7 +345,7 @@ class NavigationDemoGui:
def bgr_to_rgba_float(frame: np.ndarray) -> np.ndarray:
rgba = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
rgba = nav.cuda_cvt_color(frame, cv2.COLOR_BGR2RGBA)
return np.asarray(rgba, dtype=np.float32).ravel() / 255.0