处理入口 Args: context: 处理上下文 Returns: ProcessingResult
(self, context: ProcessingContext)
| 1367 | self.enable_cv_detection = enable_cv_detection |
| 1368 | |
| 1369 | def process(self, context: ProcessingContext) -> ProcessingResult: |
| 1370 | """ |
| 1371 | 处理入口 |
| 1372 | |
| 1373 | Args: |
| 1374 | context: 处理上下文 |
| 1375 | |
| 1376 | Returns: |
| 1377 | ProcessingResult |
| 1378 | """ |
| 1379 | self._log("开始处理基本图形") |
| 1380 | |
| 1381 | if not context.image_path or not os.path.exists(context.image_path): |
| 1382 | return ProcessingResult( |
| 1383 | success=False, |
| 1384 | error_message="图片路径无效" |
| 1385 | ) |
| 1386 | |
| 1387 | cv2_image = cv2.imread(context.image_path) |
| 1388 | if cv2_image is None: |
| 1389 | return ProcessingResult( |
| 1390 | success=False, |
| 1391 | error_message="无法读取图片" |
| 1392 | ) |
| 1393 | |
| 1394 | # 筛选基本图形 |
| 1395 | elements_to_process = self._get_elements_to_process(context.elements) |
| 1396 | |
| 1397 | # 计算画布面积,用于判断大面积元素 |
| 1398 | canvas_area = context.canvas_width * context.canvas_height |
| 1399 | |
| 1400 | processed_count = 0 |
| 1401 | for elem in elements_to_process: |
| 1402 | try: |
| 1403 | self._process_element(elem, cv2_image, canvas_area) |
| 1404 | processed_count += 1 |
| 1405 | except Exception as e: |
| 1406 | elem.processing_notes.append(f"处理失败: {str(e)}") |
| 1407 | self._log(f"元素{elem.id}处理失败: {e}") |
| 1408 | |
| 1409 | # CV补充检测 |
| 1410 | cv_added_count = 0 |
| 1411 | if self.enable_cv_detection: |
| 1412 | cv_added_count = self._run_cv_detection(context, cv2_image) |
| 1413 | |
| 1414 | self._log(f"处理完成: {processed_count}个SAM3图形, {cv_added_count}个CV补充") |
| 1415 | |
| 1416 | return ProcessingResult( |
| 1417 | success=True, |
| 1418 | elements=context.elements, |
| 1419 | canvas_width=context.canvas_width, |
| 1420 | canvas_height=context.canvas_height, |
| 1421 | metadata={ |
| 1422 | 'processed_count': processed_count, |
| 1423 | 'cv_added_count': cv_added_count, |
| 1424 | 'total_to_process': len(elements_to_process) |
| 1425 | } |
| 1426 | ) |
no test coverage detected