二次处理模块(Fallback补救) 对MetricEvaluator识别出的问题区域进行二次处理。 核心策略(保守): - 直接裁剪问题区域作为picture - 转成base64嵌入XML - 保证"所见即所得",不丢失任何内容 可选扩展(TODO): - 激进策略:对问题区域再次调用SAM3 - VLM增强:获取更精确的prompt - 局部高清化:提升小图质量
| 101 | |
| 102 | |
| 103 | class RefinementProcessor(BaseProcessor): |
| 104 | """ |
| 105 | 二次处理模块(Fallback补救) |
| 106 | |
| 107 | 对MetricEvaluator识别出的问题区域进行二次处理。 |
| 108 | |
| 109 | 核心策略(保守): |
| 110 | - 直接裁剪问题区域作为picture |
| 111 | - 转成base64嵌入XML |
| 112 | - 保证"所见即所得",不丢失任何内容 |
| 113 | |
| 114 | 可选扩展(TODO): |
| 115 | - 激进策略:对问题区域再次调用SAM3 |
| 116 | - VLM增强:获取更精确的prompt |
| 117 | - 局部高清化:提升小图质量 |
| 118 | """ |
| 119 | |
| 120 | # 默认配置参数 |
| 121 | DEFAULT_CONFIG = { |
| 122 | 'min_region_area': 100, # 最小区域面积(像素),太小跳过 |
| 123 | 'min_region_ratio': 0.0005, # 最小区域面积比例(0.05%),太小跳过 |
| 124 | 'default_confidence': 0.5, # 新元素的默认置信度 |
| 125 | 'expand_margin': 5, # 裁剪时向外扩展的边距(像素)- 增加边距避免切边 |
| 126 | 'skip_if_mostly_white': True, # 是否跳过大部分为白色的区域 |
| 127 | 'white_threshold': 0.95, # 白色像素占比阈值 - 放宽到95%,只跳过真正纯白区域 |
| 128 | } |
| 129 | |
| 130 | def __init__(self, config=None): |
| 131 | super().__init__(config) |
| 132 | # 合并用户配置和默认配置 |
| 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 |
no outgoing calls
no test coverage detected