feat(project): init

This commit is contained in:
2026-02-03 18:05:47 +08:00
commit f37a119eff
188 changed files with 29246 additions and 0 deletions

View 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),
})
}

View 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
}