DawnC commited on
Commit
6074c5d
·
verified ·
1 Parent(s): 3357fb4

Upload enhanced_scene_describer.py

Browse files
Files changed (1) hide show
  1. enhanced_scene_describer.py +18 -33
enhanced_scene_describer.py CHANGED
@@ -123,7 +123,7 @@ class EnhancedSceneDescriber:
123
  def generate_description(self, scene_type: str, detected_objects: List[Dict], confidence: float,
124
  lighting_info: Dict, functional_zones: List[str], enable_landmark: bool = True,
125
  scene_scores: Optional[Dict] = None, spatial_analysis: Optional[Dict] = None,
126
- image_dimensions: Optional[Tuple[int, int]] = None, # 改為 Tuple
127
  places365_info: Optional[Dict] = None,
128
  object_statistics: Optional[Dict] = None) -> str:
129
  try:
@@ -815,47 +815,36 @@ class EnhancedSceneDescriber:
815
  max_categories_to_return: Optional[int] = None,
816
  max_total_objects: Optional[int] = None) -> List[Dict]:
817
  """
818
- 獲取最重要的物件
819
-
820
- Args:
821
- detected_objects: 檢測到的物件列表
822
- min_prominence_score: 最小重要性分數閾值,預設為0.5
823
- max_categories_to_return: 可選的最大返回類別數量限制
824
- max_total_objects: 可選的最大返回物件總數限制
825
-
826
- Returns:
827
- List[Dict]: 重要物件列表
828
  """
829
  try:
830
- # 傳遞所有參數
831
  prominent_objects = self.object_description_generator.get_prominent_objects(
832
  detected_objects,
833
  min_prominence_score,
834
- max_categories_to_return
835
  )
836
 
837
- # 如果指定了最大物件總數限制,進行額外過濾
838
  if max_total_objects is not None and max_total_objects > 0:
839
- # 限制總物件數量,保持重要性排序
840
  prominent_objects = prominent_objects[:max_total_objects]
841
 
842
- # 如果指定了最大類別數量限制,則進行額外過濾
843
  if max_categories_to_return is not None and max_categories_to_return > 0:
844
- # 按類別分組物件
845
  categories_seen = set()
846
  filtered_objects = []
847
 
848
  for obj in prominent_objects:
849
  class_name = obj.get("class_name", "unknown")
 
 
850
  if class_name not in categories_seen:
851
- categories_seen.add(class_name)
852
- filtered_objects.append(obj)
853
-
854
- # 如果已達到最大類別數量,停止添加新類別
855
- if len(categories_seen) >= max_categories_to_return:
856
- break
857
- elif class_name in categories_seen:
858
- # 如果是已見過的類別,仍然添加該物件
859
  filtered_objects.append(obj)
860
 
861
  return filtered_objects
@@ -1033,9 +1022,11 @@ class EnhancedSceneDescriber:
1033
 
1034
  Returns:
1035
  模板內容
1036
- """
 
1037
  return self.template_manager.get_template(category, key)
1038
 
 
1039
  def get_viewpoint_confidence(self, detected_objects: List[Dict]) -> Tuple[str, float]:
1040
  """
1041
  獲取視角檢測結果及其信心度
@@ -1105,12 +1096,6 @@ class EnhancedSceneDescriber:
1105
  self.logger.warning(f"Error getting text statistics: {str(e)}")
1106
  return {"characters": 0, "words": 0, "sentences": 0}
1107
 
1108
- def reload_templates(self):
1109
- """
1110
- 重新載入所有模板
1111
- """
1112
- self.template_manager.reload_templates()
1113
-
1114
  def get_configuration(self) -> Dict[str, Any]:
1115
  """
1116
  獲取當前配置信息
@@ -1138,4 +1123,4 @@ class EnhancedSceneDescriber:
1138
  region_analyzer=self.region_analyzer
1139
  )
1140
  except Exception as e:
1141
- self.logger.error(f"Fallback component initialization failed: {str(e)}")
 
123
  def generate_description(self, scene_type: str, detected_objects: List[Dict], confidence: float,
124
  lighting_info: Dict, functional_zones: List[str], enable_landmark: bool = True,
125
  scene_scores: Optional[Dict] = None, spatial_analysis: Optional[Dict] = None,
126
+ image_dimensions: Optional[Tuple[int, int]] = None,
127
  places365_info: Optional[Dict] = None,
128
  object_statistics: Optional[Dict] = None) -> str:
129
  try:
 
815
  max_categories_to_return: Optional[int] = None,
816
  max_total_objects: Optional[int] = None) -> List[Dict]:
817
  """
818
+ 獲取最重要的物件,避免重複過濾邏輯
 
 
 
 
 
 
 
 
 
819
  """
820
  try:
821
+ # 第一步:獲取基礎的重要物件
822
  prominent_objects = self.object_description_generator.get_prominent_objects(
823
  detected_objects,
824
  min_prominence_score,
825
+ max_categories_to_return=None
826
  )
827
 
828
+ # 第二步:應用總數限制
829
  if max_total_objects is not None and max_total_objects > 0:
 
830
  prominent_objects = prominent_objects[:max_total_objects]
831
 
832
+ # 第三步:應用objects限制
833
  if max_categories_to_return is not None and max_categories_to_return > 0:
 
834
  categories_seen = set()
835
  filtered_objects = []
836
 
837
  for obj in prominent_objects:
838
  class_name = obj.get("class_name", "unknown")
839
+
840
+ # 如果是新類別且未達到限制
841
  if class_name not in categories_seen:
842
+ if len(categories_seen) < max_categories_to_return:
843
+ categories_seen.add(class_name)
844
+ filtered_objects.append(obj)
845
+ # 如果已達到類別限制,跳過新類別的物件
846
+ else:
847
+ # 直接添加已見過的objects
 
 
848
  filtered_objects.append(obj)
849
 
850
  return filtered_objects
 
1022
 
1023
  Returns:
1024
  模板內容
1025
+ """
1026
+
1027
  return self.template_manager.get_template(category, key)
1028
 
1029
+
1030
  def get_viewpoint_confidence(self, detected_objects: List[Dict]) -> Tuple[str, float]:
1031
  """
1032
  獲取視角檢測結果及其信心度
 
1096
  self.logger.warning(f"Error getting text statistics: {str(e)}")
1097
  return {"characters": 0, "words": 0, "sentences": 0}
1098
 
 
 
 
 
 
 
1099
  def get_configuration(self) -> Dict[str, Any]:
1100
  """
1101
  獲取當前配置信息
 
1123
  region_analyzer=self.region_analyzer
1124
  )
1125
  except Exception as e:
1126
+ self.logger.error(f"Fallback component initialization failed: {str(e)}")