import { Result } from "../../core/helper/result"; import makeAutoObservable from "mobx-store-inheritance"; export enum ProcessStatus { END = "END", ERROR = "ERROR", NEW = "NEW", RUN = "RUN", NONE = "none", } export interface IDatasetModel { _id: string; dataSetObjects: string[]; processStatus: ProcessStatus; projectId: string; name: string; formBuilder: FormBuilderValidationModel; unixTime: number; datasetType: string; local_path: string; __v: number; processLogs: string; } export interface Dataset { name: string; local_path: string; dataSetObjects: string[]; unixDate: number; formBuilder: FormBuilderValidationModel; } export interface Asset { name: string; mesh: string; image: string; } export class FormBuilderValidationModel { public result: string; public context: string; public form: string[]; public output: any; constructor(context: string, result: string, form: string[], output: string) { this.context = context; this.result = result; this.form = form; this.output = output; } static isEmpty = (formBuilderValidationModel: FormBuilderValidationModel) => formBuilderValidationModel.context.isEmpty() && formBuilderValidationModel.result.isEmpty() && formBuilderValidationModel.form.isEmpty(); static datasetEmpty() { return new FormBuilderValidationModel(datasetFormMockContext, datasetFormMockResult, [], defaultFormValue); } static empty() { return new FormBuilderValidationModel("", "", [], ""); } static emptyTest() { return new FormBuilderValidationModel(``, ``, [], defaultFormValue); } static creteDataSetTest() { return new FormBuilderValidationModel(``, scene, [], ""); } static vision(): FormBuilderValidationModel { return new FormBuilderValidationModel( `ENUM PRETRAIN = "true","false";`, `{ "numberOfEpochs": \${numberOfEpochs:number:10}, "selectDataset": \${:OBJECT:{"dataset": {}}, "pretrain": \${pretrain:Enum:true} }`, [], "" ); } } export const scene = `{ "center_shell": [\${CENTER_SHELL_1:number:0}, \${CENTER_SHELL_2:number:0}, \${CENTER_SHELL_3:number:0}], "scene":\${:OBJECT:{"details": []} }`; export class DataSetModel { dataSetObjects: string[]; datasetType: string; name: string; formBuilder: FormBuilderValidationModel = FormBuilderValidationModel.datasetEmpty(); project?: string; processStatus?: string; isNew: boolean; _id?: string; constructor( dataSetObjects: string[], datasetType = datasetTypes[0], datasetName: string, isNew = true, id: string | undefined = undefined ) { this.dataSetObjects = dataSetObjects; this.datasetType = datasetType; this.name = datasetName; this.isNew = isNew; this._id = id; makeAutoObservable(this); } static empty() { return new DataSetModel([], "", "", true); } isValid(): Result { if (this.project === undefined) { return Result.error("project is unknow"); } if (this.dataSetObjects.isEmpty()) { return Result.error("Не выделены детали"); } if (this.name.isEmpty()) { return Result.error("ВВедите имя датасета"); } return Result.ok(); } static fromIDatasetModel(model: IDatasetModel) { const dataSetModel = new DataSetModel(model.dataSetObjects, model.datasetType, model.name, false, model._id); dataSetModel.formBuilder = model.formBuilder; return dataSetModel; } } export const datasetTypes = ["Object Detection - YOLOv8", "Pose Estimation - DOPE"]; export const datasetFormMockResult = ` { "typedataset": \${typedataset:Enum:ObjectDetection}, "models_randomization":{ "loc_range_low": [\${LOC_RANGE_LOW_1:number:-1}, \${LOC_RANGE_LOW_2:number:-1},\${LOC_RANGE_LOW_3:number:0}], "loc_range_high": [\${LOC_RANGE_HIGH_1:number:1}, \${LOC_RANGE_HIGH_2:number:1},\${LOC_RANGE_HIGH_3:number:2}] }, "selectParts":\${:OBJECT:{"details": []}, "scene":{ "objects": \${OBJECTS_SCENE:Array:[]}, "lights": \${LIGHTS:Array:[]} }, "camera_position":{ "center_shell": [\${CENTER_SHELL_1:number:0}, \${CENTER_SHELL_2:number:0}, \${CENTER_SHELL_3:number:0}], "radius_range": [\${RADIUS_RANGE_1:number:1}, \${RADIUS_RANGE_2:number:1.4}], "elevation_range": [\${ELEVATION_RANGE_1:number:10}, \${ELEVATION_RANGE_2:number:90}] }, "generation":{ "n_cam_pose": \${N_CAM_POSE:number:5}, "n_sample_on_pose": \${N_SAMPLE_ON_POSE:number:3}, "n_series": \${N_SERIES:number:100}, "image_format": \${image_format:Enum:JPEG}, "image_size_wh": [\${IMAGE_SIZE_WH_1:number:640}, \${IMAGE_SIZE_WH_2:number:480}] } } `; export const datasetFormMockContext = ` ENUM T = "ObjectDetection","PoseEstimation"; ENUM L = "POINT","SUN"; ENUM F = "JPEG","PNG"; ENUM COLLISION_SHAPE = "SHAPE","COLLISION"; type OBJECTS_SCENE = { "name": \${NAME:string:default}, "collision_shape": \${collision_shape:Enum:BOX}, "loc_xyz": [\${LOC_XYZ_1:number:0}, \${LOC_XYZ_2:number:0}, \${LOC_XYZ_3:number:0}], "rot_euler": [\${ROT_EULER_1:number:0},\${ROT_EULER_2:number:0}, \${ROT_EULER_3:number:0}], "material_randomization": { "specular": [\${SPECULAR_1:number:0}, \${SPECULAR_2:number:1}], "roughness": [\${ROUGHNESS_1:number:0}, \${ROUGHNESS_2:number:1}], "metallic": [\${METALLIC_1:number:0}, \${METALLIC_2:number:1}], "base_color": [ [ \${BASE_COLOR_1:number:0}, \${BASE_COLOR_2:number:0}, \${BASE_COLOR_3:number:0}, \${BASE_COLOR_4:number:1} ], [ \${BASE_COLOR_5:number:1}, \${BASE_COLOR_6:number:1}, \${BASE_COLOR_7:number:1}, \${BASE_COLOR_8:number:1} ] ] } }; type LIGHTS = { "id": \${ID:number:1}, "type": \${type:Enum:POINT}, "loc_xyz": [\${LOC_XYZ_1:number:5}, \${LOC_XYZ_2:number:5}, \${LOC_XYZ_3:number:5}], "rot_euler": [\${ROT_EULER_1:number:-0.06}, \${ROT_EULER_2:number:0.61}, \${ROT_EULER_3:number:-0.19}], "color_range_low": [\${COLOR_RANGE_LOW_1:number:0.5}, \${COLOR_RANGE_LOW_2:number:0.5}, \${COLOR_RANGE_LOW_3:number:0.5}], "color_range_high":[\${COLOR_RANGE_HIGH_1:number:1}, \${COLOR_RANGE_HIGH_2:number:1}, $\{COLOR_RANGE_HIGH_3:number:1}], "energy_range":[\${ENERGY_RANGE_1:number:400},\${ENERGY_RANGE_2:number:900}] }; `; export const defaultFormValue: any = { typedataset: "PoseEstimation", models_randomization: { loc_range_low: [-1, -1, 0], loc_range_high: [1, 1, 2] }, scene: { objects: [], lights: [] }, camera_position: { center_shell: [0, 0, 0], radius_range: [1, 1.4], elevation_range: [10, 90] }, generation: { n_cam_pose: 5, n_sample_on_pose: 3, n_series: 100, image_format: "JPEG", image_size_wh: [640, 480] }, }; `{ "robot_name": \${CAMERA_NAME:string: }, "dof": \${CAMERA_NAMESPACE:number: } }`;