Skip to content

Commit c7fc70a

Browse files
authored
Merge pull request #178 from xtreme1-io/dev
Release v0.8.0
2 parents f9a1ce1 + 6395339 commit c7fc70a

File tree

157 files changed

+40583
-3544
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

157 files changed

+40583
-3544
lines changed

.ops/.gitlab-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ include:
44

55
variables:
66
APP_NAME: "xtreme1"
7-
APP_VERSION: "0.7.3"
7+
APP_VERSION: "0.8"

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div align="center">
22
<img width="386" alt="Xtreme1 logo" src="https://user-images.githubusercontent.com/84139543/190300943-98da7d5c-bd67-4074-a94f-b7405d29fb90.png">
33

4-
![](https://img.shields.io/badge/Release-v0.7.3-green)
4+
![](https://img.shields.io/badge/Release-v0.8-green)
55
![](https://img.shields.io/badge/License-Apache%202.0-blueviolet)
66
[![Slack](https://img.shields.io/badge/Join-Slack-orange.svg?logo=slack)](https://join.slack.com/t/xtreme1group/shared_invite/zt-1jhk36uzr-NpdpYXeQAEHN6rYJy5_6pg)
77
[![Twitter](https://img.shields.io/badge/Follow-Twitter-blue)](https://twitter.com/Xtreme1io)
@@ -66,8 +66,8 @@ Image Data Curation (Visualizing & Debug) - [MobileNetV3](https://github.com/xi
6666
Download the latest release package and unzip it.
6767

6868
```bash
69-
wget https://github.com/xtreme1-io/xtreme1/releases/download/v0.7.3/xtreme1-v0.7.3.zip
70-
unzip -d xtreme1-v0.7.3 xtreme1-v0.7.3.zip
69+
wget https://github.com/xtreme1-io/xtreme1/releases/download/v0.8/xtreme1-v0.8.zip
70+
unzip -d xtreme1-v0.8 xtreme1-v0.8.zip
7171
```
7272

7373
## Start all services

backend/Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ RUN apt update && \
99
apt install -y iputils-ping curl wget netcat python3 python3-pip git
1010
RUN pip3 install --upgrade --force-reinstall git+https://github.com/xtreme1-io/xtreme1-sdk.git@d0cf4cc
1111
WORKDIR /app
12-
COPY --from=build /build/target/xtreme1-backend-0.7.3-SNAPSHOT.jar ./app.jar
12+
COPY --from=build /build/target/xtreme1-backend-0.8-SNAPSHOT.jar ./app.jar
1313
RUN mkdir -p config
14-
RUN wget 'https://basicai-asset.s3.us-west-2.amazonaws.com/xtreme1/xtreme1-lidar-fusion-trial.zip' -O xtreme1-lidar-fusion-trial.zip
15-
RUN wget 'https://basicai-asset.s3.us-west-2.amazonaws.com/xtreme1/xtreme1-image-trial.zip' -O xtreme1-image-trial.zip
14+
RUN wget 'https://github.com/xtreme1-io/asset/raw/main/datasets/xtreme1-lidar-fusion-trial.zip' -O xtreme1-lidar-fusion-trial.zip
15+
RUN wget 'https://github.com/xtreme1-io/asset/raw/main/datasets/xtreme1-image-trial.zip' -O xtreme1-image-trial.zip
1616
EXPOSE 8080
1717
CMD java -jar app.jar

backend/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ cd backend
9292
mvn package
9393

9494
# Using local configuration to start application.
95-
java -Dspring.profiles.active=local -jar target/xtreme1-backend-0.7.3-SNAPSHOT.jar
95+
java -Dspring.profiles.active=local -jar target/xtreme1-backend-0.8-SNAPSHOT.jar
9696
```
9797

9898
Now you can access the backend service at `http://localhost:8080/`.

backend/pom.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
<groupId>ai.basic</groupId>
1515
<artifactId>xtreme1-backend</artifactId>
16-
<version>0.7.3-SNAPSHOT</version>
16+
<version>0.8-SNAPSHOT</version>
1717
<name>Xtreme1 Backend</name>
1818
<description></description>
1919

@@ -29,6 +29,7 @@
2929
<okhttp.version>4.8.1</okhttp.version>
3030
<fegin.version>11.7</fegin.version>
3131
<thumbnail.version>0.4.17</thumbnail.version>
32+
<webp-imageio-version>0.1.6</webp-imageio-version>
3233
</properties>
3334

3435
<dependencies>
@@ -164,6 +165,12 @@
164165
<version>${thumbnail.version}</version>
165166
</dependency>
166167

168+
<dependency>
169+
<groupId>org.sejda.imageio</groupId>
170+
<artifactId>webp-imageio</artifactId>
171+
<version>${webp-imageio-version}</version>
172+
</dependency>
173+
167174
</dependencies>
168175

169176
<build>

backend/src/main/java/ai/basic/x1/adapter/api/config/CommonConfig.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,5 +192,20 @@ public ModelRunRecordUseCase modelRunRecordUseCase() {
192192
return new ModelRunRecordUseCase();
193193
}
194194

195+
@Bean
196+
public UploadDataUseCase uploadDataUseCase() {
197+
return new UploadDataUseCase();
198+
}
199+
200+
@Bean
201+
public PointCloudUploadUseCase pointCloudUploadUseCase() {
202+
return new PointCloudUploadUseCase();
203+
}
204+
205+
@Bean
206+
public ImageUploadUseCase imageUploadUseCase() {
207+
return new ImageUploadUseCase();
208+
}
209+
195210

196211
}

backend/src/main/java/ai/basic/x1/adapter/api/controller/DataFlowController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public void markAsValid(@PathVariable Long dataId){
2929
dataFlowUseCase.changeDataStatus(dataId, DataStatusEnum.VALID);
3030
}
3131

32-
@PostMapping("/submit/{dataId}")
33-
public void submit(@PathVariable Long dataId){
34-
dataFlowUseCase.submit(dataId);
32+
@PostMapping("/submit/{itemId}")
33+
public void submit(@PathVariable Long itemId){
34+
dataFlowUseCase.submit(itemId);
3535
}
3636
}

backend/src/main/java/ai/basic/x1/adapter/api/controller/DataInfoController.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.io.InputStreamReader;
3434
import java.util.Collections;
3535
import java.util.List;
36+
import java.util.Map;
3637
import java.util.stream.Collectors;
3738

3839
/**
@@ -69,12 +70,15 @@ public class DataInfoController extends BaseDatasetController {
6970
@Autowired
7071
private DataClassificationOptionUseCase dataClassificationOptionUseCase;
7172

73+
@Autowired
74+
protected UploadDataUseCase uploadDataUseCase;
75+
7276
@PostMapping("upload")
7377
public String upload(@RequestBody @Validated DataInfoUploadDTO dto, @LoggedUser LoggedUserDTO userDTO) throws IOException {
7478
var dataInfoUploadBO = DefaultConverter.convert(dto, DataInfoUploadBO.class);
7579
assert dataInfoUploadBO != null;
7680
dataInfoUploadBO.setUserId(userDTO.getId());
77-
return String.valueOf(dataInfoUsecase.upload(dataInfoUploadBO));
81+
return String.valueOf(uploadDataUseCase.upload(dataInfoUploadBO));
7882
}
7983

8084
@GetMapping("findUploadRecordBySerialNumbers")
@@ -289,4 +293,10 @@ public List<DatasetModelResultDTO> getDataModelRunResult(@PathVariable Long data
289293
return DefaultConverter.convert(dataAnnotationObjectUseCase.getDataModelRunResult(dataId), DatasetModelResultDTO.class);
290294
}
291295

296+
@GetMapping("/getDataIdBySceneIds")
297+
public Map<Long, List<Long>> getDataIdBySceneIds(@NotNull(message = "datasetId cannot be null") @RequestParam(required = false) Long datasetId,
298+
@NotEmpty(message = "sceneIds cannot be null") @RequestParam(required = false) List<Long> sceneIds) {
299+
return dataInfoUsecase.getDataIdBySceneIds(datasetId, sceneIds);
300+
}
301+
292302
}

backend/src/main/java/ai/basic/x1/adapter/api/controller/DatasetController.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,7 @@ public Page<DatasetDTO> findByPage(@RequestParam(defaultValue = "1") Integer pag
9393
}
9494
if (CollectionUtil.isNotEmpty(datasetBO.getDatas())) {
9595
var dataInfoDTOS = new ArrayList<DataInfoDTO>();
96-
datasetBO.getDatas().forEach(dataInfoBO -> {
97-
dataInfoDTOS.add(convertDataInfoDTO(dataInfoBO));
98-
});
96+
datasetBO.getDatas().forEach(dataInfoBO -> dataInfoDTOS.add(convertDataInfoDTO(dataInfoBO)));
9997
datasetDTO.setDatas(dataInfoDTOS);
10098
}
10199
return datasetDTO;

backend/src/main/java/ai/basic/x1/adapter/api/job/converter/ModelCocoRequestConverter.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import java.util.List;
99

10+
import static ai.basic.x1.util.Constants.FILE;
11+
1012
/**
1113
* @author zhujh
1214
*/
@@ -22,7 +24,13 @@ public static ImageDetectionReqDTO convert(ModelMessageBO message) {
2224
if (CollUtil.isEmpty(fileNodes)) {
2325
throw new IllegalArgumentException("file is not found");
2426
}
25-
String url = fileNodes.get(0).getFile().getInternalUrl();
27+
var fileNodeBO = fileNodes.get(0);
28+
String url;
29+
if (fileNodeBO.getType().equals(FILE)) {
30+
url = fileNodeBO.getFile().getInternalUrl();
31+
} else {
32+
url = fileNodeBO.getFiles().get(0).getFile().getInternalUrl();
33+
}
2634
if (StrUtil.isEmpty(url)) {
2735
throw new IllegalArgumentException("file url is empty");
2836
}

backend/src/main/java/ai/basic/x1/adapter/api/job/converter/PointCloudDetectionModelReqConverter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ private static void traverFile(DataInfoBO.FileNodeBO fileNodeBO, DataInfo dataIn
4949
}
5050
String prePath = subPaths[subPaths.length - 2];
5151
//images
52-
if (prePath.startsWith(POINT_CLOUD_IMG)) {
52+
if (prePath.startsWith(CAMERA_IMAGE)) {
5353
if (CollUtil.isEmpty(dataInfo.getImageUrls())) {
5454
List<String> imageUrlList = new ArrayList<>();
5555
imageUrlList.add(fileNodeBO.getFile().getInternalUrl());
@@ -59,7 +59,7 @@ private static void traverFile(DataInfoBO.FileNodeBO fileNodeBO, DataInfo dataIn
5959
}
6060
}
6161
//pcd
62-
if (prePath.startsWith(POINT_CLOUD)) {
62+
if (prePath.startsWith(LIDAR_POINT_CLOUD)) {
6363
dataInfo.setPointCloudUrl(getFileBO(fileNodeBO.getFile()).getInternalUrl());
6464
}
6565
//cameraConfig

backend/src/main/java/ai/basic/x1/adapter/dto/DataAnnotateDTO.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ai.basic.x1.adapter.dto;
22

3+
import ai.basic.x1.entity.enums.ItemTypeEnum;
34
import lombok.AllArgsConstructor;
45
import lombok.Builder;
56
import lombok.Data;
@@ -21,6 +22,9 @@ public class DataAnnotateDTO {
2122
@NotNull(message = "not allow null")
2223
private Long datasetId;
2324

25+
@NotNull(message = "not allow null")
26+
private ItemTypeEnum operateItemType;
27+
2428
@NotEmpty(message = "not allow null")
2529
private List<Long> dataIds;
2630

backend/src/main/java/ai/basic/x1/adapter/dto/DataAnnotationRecordDTO.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ai.basic.x1.adapter.dto;
22

3+
import ai.basic.x1.entity.enums.ItemTypeEnum;
34
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
45
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
56
import lombok.AllArgsConstructor;
@@ -23,6 +24,8 @@ public class DataAnnotationRecordDTO {
2324
*/
2425
private Long datasetId;
2526

27+
private ItemTypeEnum itemType;
28+
2629
/**
2730
* Serial number
2831
*/

backend/src/main/java/ai/basic/x1/adapter/dto/DataEditDTO.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public class DataEditDTO {
2727
*/
2828
private Long annotationRecordId;
2929

30+
/**
31+
* Scene id
32+
*/
33+
private Long sceneId;
34+
3035
/**
3136
* Data id
3237
*/

backend/src/main/java/ai/basic/x1/adapter/dto/DataInfoDTO.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import ai.basic.x1.entity.enums.DataAnnotationStatusEnum;
44
import ai.basic.x1.entity.enums.DataStatusEnum;
5+
import ai.basic.x1.entity.enums.ItemTypeEnum;
56
import ai.basic.x1.entity.enums.SplitTypeEnum;
67
import cn.hutool.core.collection.CollectionUtil;
78
import cn.hutool.core.util.ObjectUtil;
@@ -42,11 +43,26 @@ public class DataInfoDTO {
4243
*/
4344
private String name;
4445

46+
/**
47+
* Sort data name
48+
*/
49+
private String orderName;
50+
4551
/**
4652
* Content (folder path, version information)
4753
*/
4854
private List<FileNodeDTO> content;
4955

56+
/**
57+
* Type (indicates continuous frames, non-consecutive frames)
58+
*/
59+
private ItemTypeEnum type;
60+
61+
/**
62+
* Parent ID (Scene ID)
63+
*/
64+
private Long parentId;
65+
5066
/**
5167
* Data status INVALID,VALID
5268
*/

backend/src/main/java/ai/basic/x1/adapter/dto/DataInfoQueryDTO.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public class DataInfoQueryDTO {
3232
@NotNull(message = "datasetId cannot be null")
3333
private Long datasetId;
3434

35+
36+
private Long parentId;
37+
3538
/**
3639
* Data name
3740
*/

backend/src/main/java/ai/basic/x1/adapter/dto/DataModelAnnotateDTO.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ai.basic.x1.adapter.dto;
22

33
import ai.basic.x1.adapter.api.annotation.valid.ValidStringEnum;
4+
import ai.basic.x1.entity.enums.ItemTypeEnum;
45
import ai.basic.x1.entity.enums.ModelCodeEnum;
56
import cn.hutool.json.JSONObject;
67
import lombok.AllArgsConstructor;
@@ -27,6 +28,8 @@ public class DataModelAnnotateDTO {
2728
@NotNull(message = "not allow null")
2829
private Long datasetId;
2930

31+
private ItemTypeEnum operateItemType;
32+
3033
/**
3134
* Data id collection
3235
*/

backend/src/main/java/ai/basic/x1/adapter/dto/request/ModelClassReqDTO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
public class ModelClassReqDTO {
1616

1717
/**
18-
* 模型id
18+
* Model id
1919
*/
2020
@NotNull(message = "Model id cannot be null")
2121
private Long modelId;
Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
package ai.basic.x1.adapter.dto.response;
2+
23
import ai.basic.x1.adapter.dto.DataAnnotationClassificationDTO;
34
import ai.basic.x1.adapter.dto.DataAnnotationObjectDTO;
45
import lombok.AllArgsConstructor;
@@ -18,20 +19,20 @@
1819
@AllArgsConstructor
1920
public class DataAnnotationResultDTO {
2021

21-
/**
22-
* 数据ID
23-
*/
24-
private Long dataId;
22+
/**
23+
* Data id
24+
*/
25+
private Long dataId;
2526

26-
/**
27-
* Classification 属性取值
28-
*/
29-
private List<DataAnnotationClassificationDTO> classificationValues;
27+
/**
28+
* Classification values
29+
*/
30+
private List<DataAnnotationClassificationDTO> classificationValues;
3031

31-
/**
32-
* Data 包含的 Object 列表
33-
*/
34-
private List<DataAnnotationObjectDTO> objects;
32+
/**
33+
* Object list
34+
*/
35+
private List<DataAnnotationObjectDTO> objects;
3536

3637

3738
}

backend/src/main/java/ai/basic/x1/adapter/port/dao/mybatis/mapper/DataAnnotationObjectMapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ public interface DataAnnotationObjectMapper extends ExtendBaseMapper<DataAnnotat
2121
List<DataAnnotationObject> listByScenario(@Param("scenarioQuery") ScenarioQuery scenarioQuery);
2222

2323
Page<DataAnnotationObject> findDataIdByScenarioPage(Page<DataAnnotationObject> page, @Param("scenarioQuery") ScenarioQuery scenarioQuery);
24+
25+
List<Long> findDataIdByScenario(@Param("scenarioQuery") ScenarioQuery scenarioQuery);
2426
}

backend/src/main/java/ai/basic/x1/adapter/port/dao/mybatis/mapper/DataInfoMapper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ Long findModelRunDataCount(@Param(Constants.WRAPPER) Wrapper<DataInfo> queryWrap
7878
*/
7979
Page<DataInfo> selectDataPage(Page<DataInfo> page, @Param(Constants.WRAPPER) Wrapper<DataInfo> queryWrapper, @Param("dataInfoQuery") DataInfoQuery dataInfoQuery);
8080

81+
82+
List<DataInfo> getExportData(@Param(Constants.WRAPPER) Wrapper<DataInfo> queryWrapper, @Param("dataInfoQuery") DataInfoQuery dataInfoQuery);
83+
8184
/**
8285
* This method overrides the deleteById method of baseMapper
8386
*
@@ -92,4 +95,14 @@ Long findModelRunDataCount(@Param(Constants.WRAPPER) Wrapper<DataInfo> queryWrap
9295
* @param datasetId Dataset id
9396
*/
9497
int deleteByDatasetId(@Param("datasetId") Long datasetId);
98+
99+
100+
/**
101+
* Query the first data ID of consecutive frames
102+
*
103+
* @param datasetId Dataset Id
104+
* @param sceneIds Continuous frame ID
105+
* @return
106+
*/
107+
List<Long> selectFirstDataIdBySceneIds(@Param("datasetId") Long datasetId, @Param("sceneIds") List<Long> sceneIds);
95108
}

0 commit comments

Comments
 (0)