فهرست منبع

fix(paired_image_saver): 修复 OSS 上传器初始化及日志输出问题

- 优化 OSS 启用判断,优先考虑配置模块中的开关状态
- 增加初始化时 OSS 上传器及配置信息的详细日志输出
- 调整 OSS 上传器启动流程,确保启动状态被正确记录和输出
- 异常处理时添加警告日志,便于排查配置模块导入失败问题
- 新增上传功能调用前的日志,提升上传流程可观测性
- 优化代码注释与文档说明,明确配置合并逻辑和上传流程
wenhongquan 3 هفته پیش
والد
کامیت
41a9ce4b5a
1فایلهای تغییر یافته به همراه50 افزوده شده و 20 حذف شده
  1. 50 20
      dual_camera_system/paired_image_saver.py

+ 50 - 20
dual_camera_system/paired_image_saver.py

@@ -85,36 +85,43 @@ class PairedImageSaver:
         # 从配置模块读取 OSS 和设备配置(确保即使外部不传也能正确配置)
         try:
             from config import S3_COMPATIBLE_CONFIG, DEVICE_CONFIG
-            
+
             # OSS 配置:优先使用传入参数,否则从配置模块读取
-            if enable_oss or (not enable_oss and S3_COMPATIBLE_CONFIG.get('enabled', False)):
+            oss_enabled_in_config = S3_COMPATIBLE_CONFIG.get('enabled', False)
+            if enable_oss or (not enable_oss and oss_enabled_in_config):
                 self.enable_oss = True
             else:
                 self.enable_oss = enable_oss
-            
+
+            logger.info(f"[配对保存] OSS配置: enable_oss={enable_oss}, config_enabled={oss_enabled_in_config}, 最终启用={self.enable_oss}")
+
             # OSS 上传器:优先使用传入的实例,否则从全局获取
             if oss_uploader is not None:
                 self.oss_uploader = oss_uploader
+                logger.info("[配对保存] 使用传入的 OSS 上传器")
             elif self.enable_oss:
                 try:
                     from oss_uploader import get_oss_uploader
                     self.oss_uploader = get_oss_uploader()
+                    logger.info(f"[配对保存] 获取 OSS 上传器: enabled={self.oss_uploader.enabled}, running={getattr(self.oss_uploader, 'running', False)}")
                     if not self.oss_uploader.running:
                         self.oss_uploader.start()
+                        logger.info("[配对保存] OSS 上传器已启动")
                 except Exception as e:
                     logger.warning(f"[配对保存] OSS 上传器初始化失败: {e}")
                     self.oss_uploader = None
                     self.enable_oss = False
             else:
                 self.oss_uploader = None
-            
+
             # 设备配置:合并传入参数和配置模块
             self.device_config = DEVICE_CONFIG.copy()
             if device_config:
                 self.device_config.update(device_config)
-                
-        except ImportError:
+
+        except ImportError as e:
             # 配置模块不可用时使用传入参数
+            logger.warning(f"[配对保存] 配置模块导入失败: {e}")
             self.enable_oss = enable_oss
             self.oss_uploader = oss_uploader
             self.device_config = device_config or {}
@@ -240,8 +247,12 @@ class PairedImageSaver:
             )
             
             # 上传全景图到 OSS
+            logger.info(f"[配对保存] 开始新批次: enable_oss={self.enable_oss}, uploader={self.oss_uploader}, path={panorama_path}")
             if self.enable_oss and panorama_path and self.oss_uploader:
+                logger.info(f"[配对保存] 准备上传全景图到 OSS: {panorama_path}")
                 self._upload_panorama_to_oss(batch_id, panorama_path)
+            else:
+                logger.warning(f"[配对保存] OSS未启用或上传器不可用: enable_oss={self.enable_oss}, uploader={self.oss_uploader}")
             
             return batch_id
     
@@ -398,8 +409,9 @@ class PairedImageSaver:
                         self._stats['total_ptz_images'] += 1
                     
                     logger.info(f"[配对保存] 球机图已保存: {filepath}, BBox={ptz_bbox}")
-                    
+
                     # 上传球机图到 OSS
+                    logger.info(f"[配对保存] 准备上传球机图到 OSS: enable_oss={self.enable_oss}, uploader={self.oss_uploader}")
                     if self.enable_oss and self.oss_uploader:
                         self._upload_ptz_to_oss(batch_id, person_index, str(filepath))
                 else:
@@ -414,7 +426,10 @@ class PairedImageSaver:
     
     def _upload_panorama_to_oss(self, batch_id: str, panorama_path: str):
         """上传全景图到 OSS"""
+        logger.info(f"[OSS] _upload_panorama_to_oss 被调用: batch_id={batch_id}, path={panorama_path}")
+
         def on_upload_complete(result):
+            logger.info(f"[OSS] 全景图上传完成回调: success={result.success}, url={result.oss_url}")
             # 更新上传状态(即使 _current_batch 已切换也能正确记录)
             self._upload_status[batch_id]['panorama'] = True
             self._upload_status[batch_id]['panorama_url'] = result.oss_url
@@ -425,6 +440,7 @@ class PairedImageSaver:
             logger.info(f"[OSS] 全景图上传成功: {result.oss_url}")
 
         def on_upload_error(result):
+            logger.error(f"[OSS] 全景图上传失败回调: {result.error}")
             self._upload_status[batch_id]['panorama'] = False
             self._upload_status[batch_id]['panorama_url'] = None
             with self._stats_lock:
@@ -433,21 +449,29 @@ class PairedImageSaver:
 
         # 包装回调,同时处理成功和失败
         def on_upload_done(result):
+            logger.info(f"[OSS] 全景图上传结果: success={result.success}")
             if result.success:
                 on_upload_complete(result)
             else:
                 on_upload_error(result)
 
-        self.oss_uploader.upload_image(
-            local_path=panorama_path,
-            batch_id=batch_id,
-            image_type='panorama',
-            callback=on_upload_done
-        )
+        try:
+            oss_key = self.oss_uploader.upload_image(
+                local_path=panorama_path,
+                batch_id=batch_id,
+                image_type='panorama',
+                callback=on_upload_done
+            )
+            logger.info(f"[OSS] 全景图已加入上传队列: oss_key={oss_key}")
+        except Exception as e:
+            logger.error(f"[OSS] 全景图上传异常: {e}")
     
     def _upload_ptz_to_oss(self, batch_id: str, person_index: int, ptz_path: str):
         """上传球机图到 OSS"""
+        logger.info(f"[OSS] _upload_ptz_to_oss 被调用: batch_id={batch_id}, person={person_index}, path={ptz_path}")
+
         def on_upload_complete(result):
+            logger.info(f"[OSS] 球机图上传完成回调: person={person_index}, success={result.success}, url={result.oss_url}")
             # 更新上传状态(即使 _current_batch 已切换也能正确记录)
             self._upload_status[batch_id]['ptz'][person_index] = result.oss_url
             if self._current_batch and self._current_batch.batch_id == batch_id:
@@ -458,6 +482,7 @@ class PairedImageSaver:
             logger.info(f"[OSS] 球机图上传成功 (person_{person_index}): {result.oss_url}")
 
         def on_upload_error(result):
+            logger.error(f"[OSS] 球机图上传失败回调: person={person_index}, error={result.error}")
             self._upload_status[batch_id]['ptz'][person_index] = None
             with self._stats_lock:
                 self._stats['oss_upload_failed'] += 1
@@ -465,18 +490,23 @@ class PairedImageSaver:
 
         # 包装回调,同时处理成功和失败
         def on_upload_done(result):
+            logger.info(f"[OSS] 球机图上传结果: person={person_index}, success={result.success}")
             if result.success:
                 on_upload_complete(result)
             else:
                 on_upload_error(result)
 
-        self.oss_uploader.upload_image(
-            local_path=ptz_path,
-            batch_id=batch_id,
-            image_type='ptz',
-            person_index=person_index,
-            callback=on_upload_done
-        )
+        try:
+            oss_key = self.oss_uploader.upload_image(
+                local_path=ptz_path,
+                batch_id=batch_id,
+                image_type='ptz',
+                person_index=person_index,
+                callback=on_upload_done
+            )
+            logger.info(f"[OSS] 球机图已加入上传队列: person={person_index}, oss_key={oss_key}")
+        except Exception as e:
+            logger.error(f"[OSS] 球机图上传异常: {e}")
     
     def _finalize_batch(self, batch: DetectionBatch):
         """完成批次处理"""