一键执行评估+补救的便捷函数 这个函数整合了MetricEvaluator和RefinementProcessor的完整流程。 Args: elements: 已检测的元素列表 image_path: 原始图片路径 eval_config: MetricEvaluator配置(可选) refine_config: RefinementProcessor配置(可选) Returns: 字典包含: - elements: 最终元素列
(elements: List[ElementInfo],
image_path: str,
eval_config: Dict = None,
refine_config: Dict = None)
| 473 | return result.elements |
| 474 | |
| 475 | def evaluate_and_refine(elements: List[ElementInfo], |
| 476 | image_path: str, |
| 477 | eval_config: Dict = None, |
| 478 | refine_config: Dict = None) -> Dict[str, Any]: |
| 479 | """ |
| 480 | 一键执行评估+补救的便捷函数 |
| 481 | |
| 482 | 这个函数整合了MetricEvaluator和RefinementProcessor的完整流程。 |
| 483 | |
| 484 | Args: |
| 485 | elements: 已检测的元素列表 |
| 486 | image_path: 原始图片路径 |
| 487 | eval_config: MetricEvaluator配置(可选) |
| 488 | refine_config: RefinementProcessor配置(可选) |
| 489 | |
| 490 | Returns: |
| 491 | 字典包含: |
| 492 | - elements: 最终元素列表(包含原有+新增) |
| 493 | - evaluation: 评估结果字典 |
| 494 | - refinement: 补救结果字典(如果执行了的话) |
| 495 | |
| 496 | 使用示例: |
| 497 | result = evaluate_and_refine(elements, "test.png") |
| 498 | |
| 499 | print(f"评分: {result['evaluation']['overall_score']}/100") |
| 500 | print(f"新增元素: {result['refinement']['new_elements_count']}") |
| 501 | print(f"最终元素数: {len(result['elements'])}") |
| 502 | """ |
| 503 | from .metric_evaluator import MetricEvaluator |
| 504 | |
| 505 | # 1. 评估 |
| 506 | evaluator = MetricEvaluator(eval_config) |
| 507 | context = ProcessingContext( |
| 508 | image_path=image_path, |
| 509 | elements=elements.copy() |
| 510 | ) |
| 511 | eval_result = evaluator.process(context) |
| 512 | |
| 513 | result = { |
| 514 | 'evaluation': eval_result.metadata, |
| 515 | 'refinement': None, |
| 516 | 'elements': context.elements |
| 517 | } |
| 518 | |
| 519 | # 2. 如果需要refinement且有问题区域 |
| 520 | bad_regions = eval_result.metadata.get('bad_regions', []) |
| 521 | if eval_result.metadata.get('needs_refinement', False) and bad_regions: |
| 522 | context.intermediate_results['bad_regions'] = bad_regions |
| 523 | processor = RefinementProcessor(refine_config) |
| 524 | refine_result = processor.process(context) |
| 525 | |
| 526 | result['refinement'] = refine_result.metadata |
| 527 | result['elements'] = context.elements |
| 528 | |
| 529 | return result |
| 530 | |
| 531 | |
| 532 | def refine_from_rendered_comparison(elements: List[ElementInfo], |
nothing calls this directly
no test coverage detected