working
This commit is contained in:
parent
a519dea130
commit
16842186c7
2 changed files with 24 additions and 11 deletions
|
|
@ -222,7 +222,17 @@ class StreamConnection:
|
||||||
# The frame in result["frame"] is preprocessed (resized, normalized)
|
# The frame in result["frame"] is preprocessed (resized, normalized)
|
||||||
# We need the original frame for visualization
|
# We need the original frame for visualization
|
||||||
frame_ref = result["metadata"].get("frame_ref")
|
frame_ref = result["metadata"].get("frame_ref")
|
||||||
frame_tensor = frame_ref.rgb_tensor if frame_ref else None
|
|
||||||
|
# CRITICAL: Clone the frame tensor BEFORE freeing frame_ref
|
||||||
|
# The frame_ref will be freed at the end, so we need a copy
|
||||||
|
if frame_ref:
|
||||||
|
frame_tensor = frame_ref.rgb_tensor.clone()
|
||||||
|
logger.debug(
|
||||||
|
f"Cloned frame tensor for {self.stream_id}: {frame_tensor.shape}"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
frame_tensor = None
|
||||||
|
logger.warning(f"No frame_ref in metadata for {self.stream_id}")
|
||||||
|
|
||||||
# Create tracking result
|
# Create tracking result
|
||||||
tracking_result = TrackingResult(
|
tracking_result = TrackingResult(
|
||||||
|
|
@ -231,7 +241,7 @@ class StreamConnection:
|
||||||
tracked_objects=tracked_objects,
|
tracked_objects=tracked_objects,
|
||||||
detections=detections,
|
detections=detections,
|
||||||
frame_shape=result["metadata"].get("shape"),
|
frame_shape=result["metadata"].get("shape"),
|
||||||
frame_tensor=frame_tensor, # Original frame, not preprocessed
|
frame_tensor=frame_tensor, # Cloned original frame
|
||||||
metadata=result["metadata"],
|
metadata=result["metadata"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,10 @@ def main_multi_stream():
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
stats_lock = threading.Lock()
|
stats_lock = threading.Lock()
|
||||||
|
|
||||||
|
# Buffer for latest frames (for display in main thread)
|
||||||
|
latest_frames = {}
|
||||||
|
frames_lock = threading.Lock()
|
||||||
|
|
||||||
# Create windows for each stream if display enabled
|
# Create windows for each stream if display enabled
|
||||||
if ENABLE_DISPLAY:
|
if ENABLE_DISPLAY:
|
||||||
for stream_id, _ in camera_urls:
|
for stream_id, _ in camera_urls:
|
||||||
|
|
@ -121,13 +125,6 @@ def main_multi_stream():
|
||||||
"""Callback for tracking results - called automatically per stream"""
|
"""Callback for tracking results - called automatically per stream"""
|
||||||
nonlocal total_results
|
nonlocal total_results
|
||||||
|
|
||||||
# Debug: Check if we have frame tensor
|
|
||||||
has_frame = result.frame_tensor is not None
|
|
||||||
frame_shape = result.frame_tensor.shape if has_frame else None
|
|
||||||
print(
|
|
||||||
f"[CALLBACK] Got result for {result.stream_id}, has_frame={has_frame}, shape={frame_shape}, detections={len(result.detections)}"
|
|
||||||
)
|
|
||||||
|
|
||||||
with stats_lock:
|
with stats_lock:
|
||||||
total_results += 1
|
total_results += 1
|
||||||
stream_id = result.stream_id
|
stream_id = result.stream_id
|
||||||
|
|
@ -203,8 +200,9 @@ def main_multi_stream():
|
||||||
2,
|
2,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Display
|
# Store frame for display in main thread (OpenCV requires this)
|
||||||
cv2.imshow(stream_id, frame_bgr)
|
with frames_lock:
|
||||||
|
latest_frames[stream_id] = frame_bgr
|
||||||
|
|
||||||
# Connect all streams in parallel using threads
|
# Connect all streams in parallel using threads
|
||||||
print(f"\n[3/3] Connecting {len(camera_urls)} streams in parallel...")
|
print(f"\n[3/3] Connecting {len(camera_urls)} streams in parallel...")
|
||||||
|
|
@ -259,6 +257,11 @@ def main_multi_stream():
|
||||||
# Keep main thread alive and process OpenCV events
|
# Keep main thread alive and process OpenCV events
|
||||||
while True:
|
while True:
|
||||||
if ENABLE_DISPLAY:
|
if ENABLE_DISPLAY:
|
||||||
|
# Display latest frames from all streams
|
||||||
|
with frames_lock:
|
||||||
|
for stream_id, frame_bgr in latest_frames.items():
|
||||||
|
cv2.imshow(stream_id, frame_bgr)
|
||||||
|
|
||||||
# Process OpenCV events to keep windows responsive
|
# Process OpenCV events to keep windows responsive
|
||||||
if cv2.waitKey(1) & 0xFF == ord("q"):
|
if cv2.waitKey(1) & 0xFF == ord("q"):
|
||||||
break
|
break
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue