处理入口 - 对问题区域进行Fallback补救 Args: context: 处理上下文 Returns: ProcessingResult,新增的元素会被添加到context.elements中
(self, context: ProcessingContext)
| 133 | self.refine_config = {**self.DEFAULT_CONFIG, **(config or {})} |
| 134 | |
| 135 | def process(self, context: ProcessingContext) -> ProcessingResult: |
| 136 | """ |
| 137 | 处理入口 - 对问题区域进行Fallback补救 |
| 138 | |
| 139 | Args: |
| 140 | context: 处理上下文 |
| 141 | |
| 142 | Returns: |
| 143 | ProcessingResult,新增的元素会被添加到context.elements中 |
| 144 | """ |
| 145 | self._log("开始二次处理(Fallback补救)") |
| 146 | |
| 147 | # 获取问题区域 |
| 148 | bad_regions = context.intermediate_results.get('bad_regions', []) |
| 149 | |
| 150 | if not bad_regions: |
| 151 | self._log("没有问题区域需要处理") |
| 152 | return ProcessingResult( |
| 153 | success=True, |
| 154 | elements=context.elements, |
| 155 | canvas_width=context.canvas_width, |
| 156 | canvas_height=context.canvas_height, |
| 157 | metadata={ |
| 158 | 'new_elements_count': 0, |
| 159 | 'regions_processed': 0, |
| 160 | 'regions_skipped': 0 |
| 161 | } |
| 162 | ) |
| 163 | |
| 164 | # 加载原图 |
| 165 | if not context.image_path or not os.path.exists(context.image_path): |
| 166 | return ProcessingResult( |
| 167 | success=False, |
| 168 | error_message="图片路径无效" |
| 169 | ) |
| 170 | |
| 171 | original_image = Image.open(context.image_path).convert("RGB") |
| 172 | img_width, img_height = original_image.size |
| 173 | img_area = img_width * img_height |
| 174 | |
| 175 | # 加载CV2图像用于白色检测 |
| 176 | cv2_image = None |
| 177 | if self.refine_config.get('skip_if_mostly_white', True): |
| 178 | cv2_image = cv2.imread(context.image_path) |
| 179 | |
| 180 | # 处理问题区域 |
| 181 | new_elements = [] |
| 182 | skipped_count = 0 |
| 183 | start_id = len(context.elements) |
| 184 | |
| 185 | # 获取配置参数 |
| 186 | min_area = self.refine_config.get('min_region_area', 100) |
| 187 | min_ratio = self.refine_config.get('min_region_ratio', 0.0005) |
| 188 | |
| 189 | for i, region in enumerate(bad_regions): |
| 190 | try: |
| 191 | bbox = region.get('bbox', []) |
| 192 | if len(bbox) != 4: |
no test coverage detected