You've already forked DataMate
* feat(auto-annotation): initial setup * chore: remove package-lock.json * chore: 清理本地测试脚本与 Maven 设置 * chore: change package-lock.json
74 lines
3.5 KiB
Python
74 lines
3.5 KiB
Python
"""Schemas for Auto Annotation tasks"""
|
|
from __future__ import annotations
|
|
|
|
from typing import List, Optional, Dict, Any
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field, ConfigDict
|
|
|
|
|
|
class AutoAnnotationConfig(BaseModel):
|
|
"""自动标注任务配置(与前端 payload 对齐)"""
|
|
|
|
model_size: str = Field(alias="modelSize", description="模型规模: n/s/m/l/x")
|
|
conf_threshold: float = Field(alias="confThreshold", description="置信度阈值 0-1")
|
|
target_classes: List[int] = Field(
|
|
default_factory=list,
|
|
alias="targetClasses",
|
|
description="目标类别ID列表,空表示全部类别",
|
|
)
|
|
output_dataset_name: Optional[str] = Field(
|
|
default=None,
|
|
alias="outputDatasetName",
|
|
description="自动标注结果要写入的新数据集名称(可选)",
|
|
)
|
|
|
|
model_config = ConfigDict(populate_by_name=True)
|
|
|
|
|
|
class CreateAutoAnnotationTaskRequest(BaseModel):
|
|
"""创建自动标注任务的请求体,对齐前端 CreateAutoAnnotationDialog 发送的结构"""
|
|
|
|
name: str = Field(..., min_length=1, max_length=255, description="任务名称")
|
|
dataset_id: str = Field(..., alias="datasetId", description="数据集ID")
|
|
config: AutoAnnotationConfig = Field(..., description="任务配置")
|
|
file_ids: Optional[List[str]] = Field(None, alias="fileIds", description="要处理的文件ID列表,为空则处理数据集中所有图像")
|
|
|
|
model_config = ConfigDict(populate_by_name=True)
|
|
|
|
|
|
class AutoAnnotationTaskResponse(BaseModel):
|
|
"""自动标注任务响应模型(列表/详情均可复用)"""
|
|
|
|
id: str = Field(..., description="任务ID")
|
|
name: str = Field(..., description="任务名称")
|
|
dataset_id: str = Field(..., alias="datasetId", description="数据集ID")
|
|
dataset_name: Optional[str] = Field(None, alias="datasetName", description="数据集名称")
|
|
source_datasets: Optional[List[str]] = Field(
|
|
default=None,
|
|
alias="sourceDatasets",
|
|
description="本任务实际处理涉及到的所有数据集名称列表",
|
|
)
|
|
config: Dict[str, Any] = Field(..., description="任务配置")
|
|
status: str = Field(..., description="任务状态")
|
|
progress: int = Field(..., description="任务进度 0-100")
|
|
total_images: int = Field(..., alias="totalImages", description="总图片数")
|
|
processed_images: int = Field(..., alias="processedImages", description="已处理图片数")
|
|
detected_objects: int = Field(..., alias="detectedObjects", description="检测到的对象总数")
|
|
output_path: Optional[str] = Field(None, alias="outputPath", description="输出路径")
|
|
error_message: Optional[str] = Field(None, alias="errorMessage", description="错误信息")
|
|
created_at: datetime = Field(..., alias="createdAt", description="创建时间")
|
|
updated_at: Optional[datetime] = Field(None, alias="updatedAt", description="更新时间")
|
|
completed_at: Optional[datetime] = Field(None, alias="completedAt", description="完成时间")
|
|
|
|
model_config = ConfigDict(populate_by_name=True, from_attributes=True)
|
|
|
|
|
|
class AutoAnnotationTaskListResponse(BaseModel):
|
|
"""自动标注任务列表响应,目前前端直接使用数组,这里预留分页结构"""
|
|
|
|
content: List[AutoAnnotationTaskResponse] = Field(..., description="任务列表")
|
|
total: int = Field(..., description="总数")
|
|
|
|
model_config = ConfigDict(populate_by_name=True)
|