From 3d33a8ce968c5b13cf6cb949a03965f2469e557d Mon Sep 17 00:00:00 2001
From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com>
Date: Sun, 24 Nov 2024 11:03:01 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E6=A0=87=E6=B3=A8?=
=?UTF-8?q?=E5=BA=95=E5=B1=82api=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dataset/AnnotationTaskAnnotatorMap.java | 25 +++
.../domain/dataset/AnnotationTaskEntity.java | 2 +
.../resources/mapper/AnnotationTaskMapper.xml | 149 ++++++++++++------
sql/bonus_ai.sql | 2 +-
4 files changed, 127 insertions(+), 51 deletions(-)
create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskAnnotatorMap.java
diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskAnnotatorMap.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskAnnotatorMap.java
new file mode 100644
index 0000000..ad3224c
--- /dev/null
+++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskAnnotatorMap.java
@@ -0,0 +1,25 @@
+package com.bonus.ai.domain.dataset;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class AnnotationTaskAnnotatorMap {
+
+ private Long annotatorId; // 标注人员
+ private Long reviewerId; // 审核人员
+ private Long taskId; // 任务ID
+ private Long fileId; // 文件ID
+ private String description; // 描述
+ private String annotationStatus; // 标注状态
+ private String annotationResult; // 标注结果 (JSON串)
+ private String annotationResource; // 标注资源类型
+ private String delFlag; // 删除标记
+ private Date annotationTime; // 标注时间
+ private Date reviewTime; // 审核时间
+ private String auditFailedReason; // 审核驳回原因
+ private String createBy; // 创建者
+ private String updateBy; // 更新者
+ private Date updateTime; // 更新时间
+ private Date createTime; // 创建时间
+}
\ No newline at end of file
diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskEntity.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskEntity.java
index 5e7a126..ec22caf 100644
--- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskEntity.java
+++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskEntity.java
@@ -16,6 +16,8 @@ public class AnnotationTaskEntity extends BaseEntity {
private Long datasetId;
/**标注团队id,为0表示未启用标注团队,1启用标注团队*/
private String isStartTeam;
+
+ private String taskUuid;
/**任务名称*/
private String taskName;
/**任务描述*/
diff --git a/bonus-modules/bonus-ai/src/main/resources/mapper/AnnotationTaskMapper.xml b/bonus-modules/bonus-ai/src/main/resources/mapper/AnnotationTaskMapper.xml
index 05d5b07..e51e92e 100644
--- a/bonus-modules/bonus-ai/src/main/resources/mapper/AnnotationTaskMapper.xml
+++ b/bonus-modules/bonus-ai/src/main/resources/mapper/AnnotationTaskMapper.xml
@@ -4,62 +4,41 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
- INSERT INTO ai_annotation_task (dataset_id, task_name, task_uuid, description,
- annotation_scene, annotation_type, labels, is_annotation,
- annotation_status, project_id, del_flag, create_by, create_time, update_by, update_time)
- VALUES (#{datasetId}, #{taskName}, #{taskUuid}, #{taskDesc},
- #{annotateScene}, #{annotateType}, #{labels}, #{isStartTeam},
- #{annotateTaskStatus}, #{projectId}, #{delFlag}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime})
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- UPDATE ai_annotation_task
- SET dataset_id = #{datasetId},
- task_name = #{taskName},
- task_uuid = #{taskUuid},
- description = #{taskDesc},
- annotation_scene = #{annotateScene},
- annotation_type = #{annotateType},
- labels = #{labels},
- is_annotation = #{isStartTeam},
- annotation_status = #{annotateTaskStatus},
- project_id = #{projectId},
- del_flag = #{delFlag},
- create_by = #{createBy},
- create_time = #{createTime},
- update_by = #{updateBy},
- update_time = #{updateTime}
- WHERE task_id = #{taskId}
-
+
+ select distinct t.task_id, t.task_uuid, t.task_name, t.description, t.annotation_scene, t.annotation_type,
+ FROM ai_annotation_task t
+ left join ai_annotation_task_annotator_map a on t.task_id = a.task_id
+
-
-
- UPDATE ai_annotation_task
- SET del_flag = '1'
- WHERE task_id = #{taskId}
-
+
-
-
+
+
+
+ INSERT INTO ai_annotation_task
+
+ dataset_id,
+ task_name,
+ task_uuid,
+ description,
+ annotation_scene,
+ annotation_type,
+ labels,
+ is_annotation_team,
+ annotation_status,
+ project_id,
+ del_flag,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+
+
+ #{datasetId},
+ #{taskName},
+ #{taskUuid},
+ #{taskDesc},
+ #{annotateScene},
+ #{annotateType},
+ #{labels},
+ #{isStartTeam},
+ #{annotateTaskStatus},
+ #{projectId},
+ #{delFlag},
+ #{createBy},
+ sysdate(),
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+
+
+ UPDATE ai_annotation_task
+
+ dataset_id = #{datasetId},
+ task_name = #{taskName},
+ task_uuid = #{taskUuid},
+ description = #{taskDesc},
+ annotation_scene = #{annotateScene},
+ annotation_type = #{annotateType},
+ labels = #{labels},
+ is_annotation_team = #{isStartTeam},
+ annotation_status = #{annotateTaskStatus},
+ project_id = #{projectId},
+ del_flag = #{delFlag},
+ update_by = #{updateBy},
+ update_time = sysdate(),
+
+ WHERE task_id = #{taskId}
+
+
+
+
+ UPDATE ai_annotation_task
+ SET del_flag = '1'
+ WHERE task_id = #{taskId}
+
+
+
+
diff --git a/sql/bonus_ai.sql b/sql/bonus_ai.sql
index b005ece..6acb561 100644
--- a/sql/bonus_ai.sql
+++ b/sql/bonus_ai.sql
@@ -12,7 +12,7 @@ create table ai_annotation_task
annotation_scene char(1) comment '标注场景(对应数据集的数据类型)',
annotation_type char(2) comment '标注类型(不同数据类型有不同的标注类型,如图片:图像分类,物体检测等)',
labels varchar(200) comment '允许的标签集',
- is_annotation char(1) comment '标注团队id(0未启用,1启用团队)',
+ is_annotation_team char(1) comment '标注团队id(0未启用,1启用团队)',
annotation_status char(1) default '0' comment '0未标注,1正在标注,2已标注,3正在审核,4已审核',
del_flag char(1) default '0' comment '是否删除(0代表存在,1代表删除)',
create_by varchar(64) default '' comment '创建者',
From 1fbbf738b53c0215bd3356cd15a7b2131e70af2c Mon Sep 17 00:00:00 2001
From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com>
Date: Sun, 24 Nov 2024 11:57:24 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E6=A0=87=E6=B3=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../bonus/ai/client/OnlineAnnotateUtil.java | 40 +++++++++++++++++++
.../dataset/AnnotationTaskController.java | 5 ++-
.../dataset/AnnotationTaskServiceImpl.java | 12 ++++++
3 files changed, 56 insertions(+), 1 deletion(-)
create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/OnlineAnnotateUtil.java
diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/OnlineAnnotateUtil.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/OnlineAnnotateUtil.java
new file mode 100644
index 0000000..541cc89
--- /dev/null
+++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/OnlineAnnotateUtil.java
@@ -0,0 +1,40 @@
+package com.bonus.ai.client;
+
+import java.util.List;
+
+public class OnlineAnnotateUtil {
+ /**
+ * 替换 View 中的 Label 标签内容
+ * @param template 原始字符串模板
+ * @param labels 要替换的 labels 列表
+ * @return 替换后的字符串
+ */
+ public static String rectangleImageLabels(String template, List labels) {
+ if (labels == null || labels.isEmpty()){
+ return "";
+ }
+ // 构建新的 Label 标签内容
+ StringBuilder labelBuilder = new StringBuilder();
+ String[] colors = {"#FFA39E", "#D4380D", "#36CFC9", "#FF85C0", "#FFD666"}; // 颜色数组
+ int colorIndex = 0;
+
+ for (String label : labels) {
+ // 循环使用颜色
+ String color = colors[colorIndex % colors.length];
+ labelBuilder.append(" \n");
+ colorIndex++;
+ }
+
+ // 替换模板中的内容
+ return template.replaceAll(
+ ".*?",
+ "\n" + labelBuilder + " "
+ );
+ }
+
+
+}
diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/dataset/AnnotationTaskController.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/dataset/AnnotationTaskController.java
index a0f9b9c..079c098 100644
--- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/dataset/AnnotationTaskController.java
+++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/dataset/AnnotationTaskController.java
@@ -53,7 +53,7 @@ public class AnnotationTaskController extends BaseController {
/**
* 查看由我创建的任务列表和我参与的或全部任务列表
* 统一获取文件列表
- * @param type 参数类型:myCreated - 由我创建的任务列表, myParticipated - 由我参与的任务列表, all - 用户创建和公共文件
+ * @param type 参数类型:myCreated - 由我创建的任务列表, myParticipated - 分配给我的标注任务表, all - 用户创建和公共文件
* @return 返回满足条件的任务列表
*/
@GetMapping("/list")
@@ -61,6 +61,7 @@ public class AnnotationTaskController extends BaseController {
return AjaxResult.success();
}
+
/**
* 根据任务编号获取任务详情,如果是标注人员获取分配的文件列表,如果是审核人员获取所有分配的文件列表,如果是管理员获取所有文件列表
* @param taskId 任务编号
@@ -92,4 +93,6 @@ public class AnnotationTaskController extends BaseController {
return AjaxResult.success();
}
+
+
}
diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/dataset/AnnotationTaskServiceImpl.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/dataset/AnnotationTaskServiceImpl.java
index aa24b0f..b3df0e9 100644
--- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/dataset/AnnotationTaskServiceImpl.java
+++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/dataset/AnnotationTaskServiceImpl.java
@@ -1,6 +1,9 @@
package com.bonus.ai.service.Impl.dataset;
+import com.bonus.ai.client.OnlineAnnotateUtil;
import com.bonus.ai.client.OnlineAnnotationService;
+import com.bonus.ai.client.ProjectParam;
+import com.bonus.ai.client.TaskParam;
import com.bonus.ai.config.MinioConfig;
import com.bonus.ai.config.OnlineAnnotateConfig;
import com.bonus.ai.domain.dataset.AnnotationSubTaskEntity;
@@ -28,6 +31,15 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
*/
@Override
public int createTask(AnnotationTaskEntity task) {
+ // TODO 调用label studio 接口获取其project id
+ ProjectParam lSProject = new ProjectParam();
+ lSProject.setTitle(task.getTaskName());
+ lSProject.setDescription(task.getTaskDesc());
+ //需要将标签转换为json格式
+ lSProject.setLabelConfig(task.getLabels());
+ onlineAnnotationService.createProject(lSProject, onlineAnnotateConfig.getApikey());
+ //TODO 根据标注任务file list 和标注人信息自动分配
+ // 获取project id以后调用AnnotationTaskMapper 和AnnotationTaskAnnotatorMapper 插入数据集
return 0;
}