|
|
@@ -220,8 +220,37 @@ class DualCameraSystem:
|
|
|
# 启动球机视频流(校准需要球机画面做特征匹配)
|
|
|
if not self.ptz_camera.start_stream_rtsp():
|
|
|
logger.warning("球机RTSP视频流启动失败,校准将无法进行特征匹配")
|
|
|
- if not self.ptz_camera.start_stream():
|
|
|
- logger.error("无法启动球机视频流,校准将仅依赖运动检测")
|
|
|
+
|
|
|
+ # 等待视频流稳定,确保帧数据可用
|
|
|
+ logger.info("等待视频流稳定...")
|
|
|
+ max_wait = 15
|
|
|
+ for i in range(max_wait):
|
|
|
+ pan_frame = self.panorama_camera.get_frame()
|
|
|
+ ptz_frame = self.ptz_camera.get_frame() if self.ptz_camera else None
|
|
|
+
|
|
|
+ if pan_frame is not None:
|
|
|
+ logger.info(f"全景帧就绪 ({pan_frame.shape}), 等待中...")
|
|
|
+ break
|
|
|
+ time.sleep(1)
|
|
|
+ if (i + 1) % 3 == 0:
|
|
|
+ logger.info(f"等待全景帧... ({i + 1}/{max_wait}秒)")
|
|
|
+
|
|
|
+ # 再等几秒让流完全稳定
|
|
|
+ ptz_ready = False
|
|
|
+ for i in range(10):
|
|
|
+ ptz_frame = self.ptz_camera.get_frame() if self.ptz_camera else None
|
|
|
+ if ptz_frame is not None:
|
|
|
+ ptz_ready = True
|
|
|
+ logger.info(f"球机帧就绪 ({ptz_frame.shape})")
|
|
|
+ break
|
|
|
+ time.sleep(1)
|
|
|
+
|
|
|
+ if not ptz_ready:
|
|
|
+ logger.warning("球机帧未就绪,校准可能仅依赖运动检测")
|
|
|
+
|
|
|
+ final_frame = self.panorama_camera.get_frame()
|
|
|
+ if final_frame is None:
|
|
|
+ logger.error("5秒后仍无法获取全景帧,校准可能失败")
|
|
|
|
|
|
# 创建校准器 - 支持视野重叠发现
|
|
|
self.calibrator = CameraCalibrator(
|