feat(project): init
This commit is contained in:
139
components/label/api/label/index.ts
Normal file
139
components/label/api/label/index.ts
Normal file
@@ -0,0 +1,139 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import {
|
||||
LabelResult,
|
||||
LoginInfo,
|
||||
RequestLabelResult,
|
||||
ServerResponse,
|
||||
} from "./typing"
|
||||
import { usePermissionStore } from "../../store/auth"
|
||||
|
||||
export const BASE_LABEL_API = "https://label.cowarobot.com"
|
||||
|
||||
// 获取标注结果
|
||||
export const getLabelResult = (task_id: number) => {
|
||||
return httpFetch<{
|
||||
task_id: number
|
||||
results: LabelResult[]
|
||||
}>({
|
||||
url:
|
||||
BASE_LABEL_API +
|
||||
`/api/v1/label_server/task/label_result?task_id=${task_id}`,
|
||||
method: "get",
|
||||
headerAttr: {
|
||||
["Token"]: usePermissionStore.getState().token,
|
||||
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
export const saveLabelResult = (data: RequestLabelResult) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/task/label_result",
|
||||
method: "post",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
export const getServerImage = async (data: {
|
||||
data_names: string[]
|
||||
/**
|
||||
* 0-图片 1-点云
|
||||
*/
|
||||
data_type: number
|
||||
flag?: number
|
||||
project_id: number
|
||||
}) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
httpFetch<ServerResponse>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/data/list",
|
||||
method: "post",
|
||||
body: JSON.stringify(data),
|
||||
headerAttr: {
|
||||
["Token"]: usePermissionStore.getState().token,
|
||||
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
|
||||
},
|
||||
}).then((res) => {
|
||||
if (res.proxy) {
|
||||
reject({ proxy: res.proxy, params: data })
|
||||
} else {
|
||||
if (res.data_list && res.data_list.length) {
|
||||
const { image_data } = res.data_list[0]
|
||||
resolve({ image_data })
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
.then(({ image_data }: any) => {
|
||||
return image_data
|
||||
})
|
||||
.catch(async ({ proxy, params }) => {
|
||||
try {
|
||||
const res = await httpFetch<ServerResponse>({
|
||||
url: `/http://${proxy}:9112/api/v1/label_sync/get_data_list`,
|
||||
method: "post",
|
||||
body: JSON.stringify(params),
|
||||
})
|
||||
return res.data.data_list?.[0].image_data || ""
|
||||
} catch (error: unknown) {
|
||||
console.log(error)
|
||||
const res = await httpFetch<ServerResponse>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/data/list",
|
||||
method: "post",
|
||||
body: JSON.stringify({ ...params, flag: 1 }),
|
||||
headerAttr: {
|
||||
["Token"]: usePermissionStore.getState().token,
|
||||
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
|
||||
},
|
||||
})
|
||||
return res.data_list?.[0].image_data || ""
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取标注图片
|
||||
export const getLabelImage = (activeImage: string, path: string) => {
|
||||
return httpFetch<any>({
|
||||
url:
|
||||
BASE_LABEL_API +
|
||||
`/api/v1/label_server/data/image?data_name=${encodeURIComponent(
|
||||
activeImage
|
||||
)}&project_path=${encodeURIComponent(path)}`,
|
||||
method: "get",
|
||||
headerAttr: {
|
||||
responseType: "blob",
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// 辅助标注
|
||||
export const getAuxiliaryAnnotation = (data: any) => {
|
||||
return httpFetch<any>({
|
||||
url: BASE_LABEL_API + "/api/model_server/sam2/sa",
|
||||
method: "post",
|
||||
body: JSON.stringify(data),
|
||||
headerAttr: {
|
||||
responseType: "arraybuffer",
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// 模型标注 追踪
|
||||
export const getTrackingAuxiliaryAnnotation = (data: any) => {
|
||||
return httpFetch<any>({
|
||||
url: BASE_LABEL_API + "/api/model_server/sam2/vos",
|
||||
method: "post",
|
||||
body: JSON.stringify(data),
|
||||
headerAttr: {
|
||||
responseType: "arraybuffer",
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// 用户登录
|
||||
export const userLogin = (data: { name: string; password: string }) => {
|
||||
return httpFetch<LoginInfo>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/user/login",
|
||||
method: "post",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
167
components/label/api/label/typing.ts
Normal file
167
components/label/api/label/typing.ts
Normal file
@@ -0,0 +1,167 @@
|
||||
export interface LabelResult {
|
||||
data_name: string
|
||||
image_objects?: ImageObjects
|
||||
pc_box_objects?: { [key: string]: any }[]
|
||||
pc_segment_objects?: { [key: string]: any }[]
|
||||
pc_vegetation_objects?: { [key: string]: any }[]
|
||||
}
|
||||
|
||||
export interface ImageObjects {
|
||||
annotations: Annotation[]
|
||||
categories: Category[]
|
||||
desc?: Desc
|
||||
image_groups: ImageGroups
|
||||
images: Images
|
||||
key_frame?: boolean
|
||||
label1_ts?: number
|
||||
label1_uid?: number
|
||||
review1_ts?: number
|
||||
review1_uid?: number
|
||||
review2_ts?: number
|
||||
review2_uid?: number
|
||||
}
|
||||
|
||||
export interface Annotation {
|
||||
bbox?: number[]
|
||||
category_id: number
|
||||
comment?: Comment[]
|
||||
create_timestamp: number
|
||||
first_modified_timestamp: number
|
||||
first_modified_uid: number
|
||||
hollow_segmentation?: Array<Array<number[]>>
|
||||
id: number
|
||||
image_id: number
|
||||
key_points?: KeyPoint[]
|
||||
last_modified_timestamp: number
|
||||
last_modified_uid: number
|
||||
line_segment?: Array<Array<number[]>>
|
||||
prelabel: boolean
|
||||
rect?: number[]
|
||||
segmentation?: Array<Array<number[]>>
|
||||
sub_attributes?: { [key: string]: any }
|
||||
uid: number
|
||||
}
|
||||
|
||||
export interface Comment {
|
||||
check_box_comments: string[]
|
||||
comment_type: number
|
||||
date: number
|
||||
scene_info: SceneInfo
|
||||
text_comments: string[]
|
||||
times: number
|
||||
turn: number
|
||||
uid: number
|
||||
}
|
||||
|
||||
export interface SceneInfo {
|
||||
phi?: number
|
||||
point_idx?: number[]
|
||||
theta?: number
|
||||
type: number
|
||||
vfov_factor?: number
|
||||
x?: number
|
||||
x_offset?: number
|
||||
y?: number
|
||||
y_offset?: number
|
||||
z?: number
|
||||
zoom?: number
|
||||
}
|
||||
|
||||
export interface KeyPoint {
|
||||
attributes?: { [key: string]: any }
|
||||
point: [number, number]
|
||||
}
|
||||
|
||||
export interface Category {
|
||||
id: number
|
||||
name: string
|
||||
supercategory: string
|
||||
}
|
||||
|
||||
export interface Desc {
|
||||
meta_operation: string[]
|
||||
other_desc: string
|
||||
}
|
||||
|
||||
export interface ImageGroups {
|
||||
// "01J4GZMQ2G8KKQVF52S6EXBGRA": string;
|
||||
}
|
||||
|
||||
export interface Images {
|
||||
file_name: string
|
||||
height: number
|
||||
id: number
|
||||
width: number
|
||||
}
|
||||
|
||||
export interface RequestLabelResult {
|
||||
label_object_size: { [key: string]: any }
|
||||
results: LabelResult[]
|
||||
task_id: number
|
||||
uid: number
|
||||
work_load: WorkLoad
|
||||
work_time: { [key: string]: any }
|
||||
}
|
||||
|
||||
export interface WorkLoad {
|
||||
comment_size: number
|
||||
dynamic_size: { [key: number]: number }
|
||||
key_frame_size: { [key: number]: number }
|
||||
object_size: { [key: number]: number }
|
||||
prelabel_modify_size: { [key: number]: number }
|
||||
question_size: { [key: number]: number }
|
||||
review_dynamic_size: { [key: number]: number }
|
||||
review_key_frame_size: { [key: number]: number }
|
||||
review_question_size: { [key: number]: number }
|
||||
review_size: number
|
||||
review_static_size: { [key: number]: number }
|
||||
static_size: { [key: number]: number }
|
||||
work_time: number
|
||||
}
|
||||
|
||||
export interface ServerResponse {
|
||||
data_list?: DataList[]
|
||||
proxy?: string
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface DataList {
|
||||
data_name: string
|
||||
data_type: string
|
||||
image_data?: string
|
||||
pointcloud_data?: PointcloudDatum[]
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface PointcloudDatum {
|
||||
intensity: number
|
||||
time_offset: number
|
||||
x: number
|
||||
y: number
|
||||
z: number
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface AuxiliaryParams {
|
||||
project_id: number
|
||||
file_name: string
|
||||
image_hw: [number, number]
|
||||
points_and_box: Array<[number, number]>
|
||||
tags: number[]
|
||||
clear_previous_state?: boolean
|
||||
}
|
||||
|
||||
interface UserInfo {
|
||||
uid: number
|
||||
name: string
|
||||
all_projects: { [x: number]: number[] }
|
||||
collect_projects: number[]
|
||||
group_name: string
|
||||
work_status: number
|
||||
base_city: string
|
||||
}
|
||||
|
||||
export interface LoginInfo extends UserInfo {
|
||||
token: string
|
||||
refresh_token: string
|
||||
}
|
||||
Reference in New Issue
Block a user