feat: 完善数据标注导出格式兼容性验证

- 后端:添加 YOLO 格式对 TEXT 数据集的限制验证
- 后端:统一 COCO/YOLO 兼容性校验规则(仅允许图像类或目标检测类数据集)
- 后端:修复 datasetType 字段传递,在任务列表响应中补充 dataset_type
- 前端:在导出对话框中禁用 TEXT 数据集的 COCO/YOLO 选项
- 前端:添加 datasetType 和 labelingType 字段传递
- 前端:对齐前后端 COCO/YOLO 兼容性规则
- 前端:优化提示文案,明确说明格式适用范围

修改文件:
- runtime/datamate-python/app/module/annotation/service/export.py
- runtime/datamate-python/app/module/annotation/service/mapping.py
- runtime/datamate-python/app/module/annotation/schema/mapping.py
- frontend/src/pages/DataAnnotation/Home/ExportAnnotationDialog.tsx
- frontend/src/pages/DataAnnotation/Home/DataAnnotation.tsx
- frontend/src/pages/DataAnnotation/annotation.const.tsx
This commit is contained in:
2026-02-07 16:05:27 +08:00
parent 36b410ba7b
commit 3dd4035005
6 changed files with 73 additions and 19 deletions

View File

@@ -84,7 +84,7 @@ DATASET_TYPE_IMAGE = "IMAGE"
DATASET_TYPE_OBJECT_DETECTION = "OBJECT_DETECTION"
LABELING_TYPE_CONFIG_KEY = "labeling_type"
LABELING_TYPE_OBJECT_DETECTION = "OBJECT_DETECTION"
COCO_COMPATIBLE_DATASET_TYPES = {
DETECTION_COMPATIBLE_DATASET_TYPES = {
DATASET_TYPE_IMAGE,
DATASET_TYPE_OBJECT_DETECTION,
}
@@ -236,7 +236,7 @@ class AnnotationExportService:
project: LabelingProject,
format_type: ExportFormat,
) -> None:
if format_type != ExportFormat.COCO:
if format_type not in (ExportFormat.COCO, ExportFormat.YOLO):
return
dataset_type = self._normalize_type_value(
@@ -249,11 +249,11 @@ class AnnotationExportService:
if dataset_type == DATASET_TYPE_TEXT:
raise HTTPException(
status_code=400,
detail="导出格式 COCO 不支持文本类数据集(TEXT),请改用 JSON/JSONL/CSV 格式",
detail=f"导出格式 {format_type.value.upper()} 不支持文本类数据集(TEXT),请改用 JSON/JSONL/CSV 格式",
)
if (
dataset_type in COCO_COMPATIBLE_DATASET_TYPES
dataset_type in DETECTION_COMPATIBLE_DATASET_TYPES
or labeling_type == LABELING_TYPE_OBJECT_DETECTION
):
return
@@ -261,7 +261,7 @@ class AnnotationExportService:
raise HTTPException(
status_code=400,
detail=(
"导出格式 COCO 仅适用于图像类或目标检测类数据集,"
f"导出格式 {format_type.value.upper()} 仅适用于图像类或目标检测类数据集,"
f"当前数据集类型: {dataset_type or 'UNKNOWN'}"
f"标注类型: {labeling_type or 'UNKNOWN'}"
),