Skip to content

Commit d40837d

Browse files
Multicam Web Feature (#1658)
* multcam web planning document * Multicam web feature phase 1 (#1659) * model updates * dataset verification for multicam * multcam media and update media endpoints for multicam * tests and update plan * Multicam web features phase 2 (#1662) * multicam config for desktop init * update metadata requests for multicam data * implement tests and update plan * Multicam web features phase 3 (#1663) * Multicam web features phase 2 (#1660) * multcam web planning document * Multicam web feature phase 1 (#1659) * model updates * dataset verification for multicam * multcam media and update media endpoints for multicam * tests and update plan * multicam config for desktop init * update metadata requests for multicam data * implement tests and update plan * Revert "Multicam web features phase 2 (#1660)" (#1661) This reverts commit 0c2cc6e. * upload multicam in web utilities * upload/import updates for multicam * restructure some multicam functions * proper multicam icons * creating and importing multicam datasets * multicam display icon types * tests and updating the plan * linting * Bump idna from 3.13 to 3.15 in /server (#1664) Bumps [idna](https://github.com/kjd/idna) from 3.13 to 3.15. - [Release notes](https://github.com/kjd/idna/releases) - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md) - [Commits](kjd/idna@v3.13...v3.15) --- updated-dependencies: - dependency-name: idna dependency-version: '3.15' dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * restructuring and organization of the multicamdialog * prefer left camera first when importing multi * move additional files into subfolder layouts --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Multicam web features phase 4 (#1665) * Multicam web features phase 2 (#1660) * multcam web planning document * Multicam web feature phase 1 (#1659) * model updates * dataset verification for multicam * multcam media and update media endpoints for multicam * tests and update plan * multicam config for desktop init * update metadata requests for multicam data * implement tests and update plan * Revert "Multicam web features phase 2 (#1660)" (#1661) This reverts commit 0c2cc6e. * Bump idna from 3.13 to 3.15 in /server (#1664) Bumps [idna](https://github.com/kjd/idna) from 3.13 to 3.15. - [Release notes](https://github.com/kjd/idna/releases) - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md) - [Commits](kjd/idna@v3.13...v3.15) --- updated-dependencies: - dependency-name: idna dependency-version: '3.15' dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * discover stereo/multicam pipelines * support for multicam arguments when running tasks * add multicam logic for running multicam/stereo tasks * updating tests * update base planning document * manual docs deployment, or on changes in main (#1666) * fix docker image references (#1667) * fix pipeline categories and display * pipeline menu styling updates * Bump qs, body-parser and express in /client (#1668) Bumps [qs](https://github.com/ljharb/qs) to 6.15.2 and updates ancestor dependencies [qs](https://github.com/ljharb/qs), [body-parser](https://github.com/expressjs/body-parser) and [express](https://github.com/expressjs/express). These dependencies need to be updated together. Updates `qs` from 6.13.0 to 6.15.2 - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](ljharb/qs@v6.13.0...v6.15.2) Updates `body-parser` from 1.20.3 to 1.20.5 - [Release notes](https://github.com/expressjs/body-parser/releases) - [Changelog](https://github.com/expressjs/body-parser/blob/1.20.5/HISTORY.md) - [Commits](expressjs/body-parser@1.20.3...1.20.5) Updates `express` from 4.20.0 to 4.22.2 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/v4.22.2/History.md) - [Commits](expressjs/express@4.20.0...v4.22.2) --- updated-dependencies: - dependency-name: qs dependency-version: 6.15.2 dependency-type: indirect - dependency-name: body-parser dependency-version: 1.20.5 dependency-type: direct:development - dependency-name: express dependency-version: 4.22.2 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * linting * docuemtnation updates * stereoscopic support * revert common stereo changes * handling task locations * Bump tmp and ffmpeg-ffprobe-static in /client (#1669) Bumps [tmp](https://github.com/raszi/node-tmp) to 0.2.6 and updates ancestor dependency [ffmpeg-ffprobe-static](https://github.com/descriptinc/ffmpeg-ffprobe-static). These dependencies need to be updated together. Updates `tmp` from 0.2.5 to 0.2.6 - [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md) - [Commits](raszi/node-tmp@v0.2.5...v0.2.6) Updates `ffmpeg-ffprobe-static` from 4.4.0-rc.11 to 6.1.2-rc.1 - [Release notes](https://github.com/descriptinc/ffmpeg-ffprobe-static/releases) - [Commits](descriptinc/ffmpeg-ffprobe-static@b4.4.0-rc.11...b6.1.2-rc.1) --- updated-dependencies: - dependency-name: tmp dependency-version: 0.2.6 dependency-type: indirect - dependency-name: ffmpeg-ffprobe-static dependency-version: 6.1.2-rc.1 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * development overview (#1670) * update to allow video folder importing for stereoscopic video * stereoscopic calibration file imports * multicam import status * linting and tests * update rabbit mq timeouts (#1674) * Shortcut fix (#1676) * fix the shortcuts in the default view * fix select next/previous * fix virtual scrolling (#1678) * add VIAME csv generation to import assetStore testing (#1679) * allow non-utf characters in logs for multicam pipelines * icon alignment, return to data * update multicam toolbar functionality * update plan --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Multicam web features phase 5 (#1681) * cloning and exporting back-end * exporting multicam data * documentation update * disable multicam when training * disable training buttons for multicam datasets * formatting * fixing tests * support for importing zip multicam datasets * remove failed multicam imports * linting/formatting * remove the plan --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 parent cb558d6 commit d40837d

99 files changed

Lines changed: 7336 additions & 1302 deletions

File tree

Some content is hidden

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

client/dive-common/apispec.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,10 @@ interface FrameImage {
125125
}
126126

127127
export interface MultiCamImportFolderArgs {
128+
datasetName?: string; // Girder parent folder name (required on web)
128129
defaultDisplay: string; // In multicam the default camera to display
130+
/** Display order for cameras (matches sourceList / UI order). */
131+
cameraOrder?: string[];
129132
sourceList: Record<string, {
130133
sourcePath: string;
131134
trackFile: string;
@@ -154,6 +157,8 @@ interface MultiCamMedia {
154157
videoUrl: string;
155158
}>;
156159
defaultDisplay: string; // Default camera for displaying the MultiCamMedia
160+
/** Camera names in display order (import / UI order). */
161+
cameraOrder?: string[];
157162
}
158163

159164
interface MediaImportResponse {
@@ -223,6 +228,18 @@ interface Api {
223228
// Non-Endpoint shared functions
224229
openFromDisk(datasetType: DatasetType | 'bulk' | 'calibration' | 'annotation' | 'text' | 'zip', directory?: boolean):
225230
Promise<{canceled?: boolean; filePaths: string[]; fileList?: File[]; root?: string}>;
231+
/** Desktop: immediate child directory names under a parent folder (multicam subfolder import). */
232+
listImmediateSubfolders?(parentPath: string): Promise<string[]>;
233+
/** Desktop: subfolders or root-level video files under a parent folder (multicam import). */
234+
listParentFolderCameras?(
235+
parentPath: string,
236+
mediaType: 'image-sequence' | 'video',
237+
): Promise<{ name: string; sourcePath: string }[]>;
238+
/** Desktop: folder path for image-sequence, or first video file inside the folder for video. */
239+
resolveMulticamCameraSourcePath?(
240+
subfolderPath: string,
241+
mediaType: 'image-sequence' | 'video',
242+
): Promise<string>;
226243
getTiles?(itemId: string, projection?: string): Promise<StringKeyObject>;
227244
// eslint-disable-next-line @typescript-eslint/no-explicit-any
228245
getTileURL?(itemId: string, x: number, y: number, level: number, query: Record<string, any>):
Lines changed: 2 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,5 @@
11
<script lang="ts">
2-
import { defineComponent, ref } from 'vue';
2+
import ImportMultiCamAddType from 'dive-common/components/ImportMultiCamDialog/ImportMultiCamAddType.vue';
33
4-
export default defineComponent({
5-
name: 'ImportMultiCamAddType',
6-
props: {
7-
nameList: {
8-
type: Array,
9-
required: true,
10-
},
11-
},
12-
setup(props, { emit }) {
13-
const newSetName = ref('');
14-
const alphaNumeric = /^[a-zA-Z0-9]*$/;
15-
const enabled = ref(false);
16-
17-
const addNewSet = () => {
18-
emit('add-new', newSetName.value);
19-
newSetName.value = '';
20-
enabled.value = false;
21-
};
22-
return {
23-
enabled,
24-
newSetName,
25-
alphaNumeric,
26-
/* methods */
27-
addNewSet,
28-
};
29-
},
30-
});
4+
export default ImportMultiCamAddType;
315
</script>
32-
33-
<template>
34-
<v-row
35-
class="align-start"
36-
no-gutters
37-
style="height: 48px;"
38-
>
39-
<v-btn
40-
color="primary"
41-
class="mr-3"
42-
:disabled="enabled"
43-
@click="enabled = true"
44-
>
45-
Add Camera
46-
<v-icon class="ml-1">
47-
mdi-camera
48-
</v-icon>
49-
</v-btn>
50-
<template v-if="enabled">
51-
<v-text-field
52-
v-model="newSetName"
53-
:rules="[
54-
v => !!v || 'Name is required',
55-
v => alphaNumeric.test(v) || 'Letters and Numbers only',
56-
v => !v.includes(' ') || 'No spaces',
57-
v => !nameList.includes(v) || 'No duplicate Names']"
58-
label="name"
59-
placeholder="Choose a Camera Name"
60-
outlined
61-
persistent-hint
62-
dense
63-
hide-details="auto"
64-
/>
65-
<v-btn
66-
color="error"
67-
class="mx-3"
68-
@click="newSetName = ''; enabled = false;"
69-
>
70-
Cancel
71-
</v-btn>
72-
<v-btn
73-
color="success"
74-
@click="addNewSet"
75-
>
76-
Create
77-
</v-btn>
78-
</template>
79-
</v-row>
80-
</template>
81-
82-
<style scoped lang="scss">
83-
</style>
Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,5 @@
11
<script lang="ts">
2-
import { defineComponent } from 'vue';
2+
import ImportMultiCamCameraGroup from 'dive-common/components/ImportMultiCamDialog/ImportMultiCamCameraGroup.vue';
33
4-
export default defineComponent({
5-
props: {
6-
cameraName: String,
7-
showDelete: Boolean,
8-
},
9-
});
4+
export default ImportMultiCamCameraGroup;
105
</script>
11-
12-
<template>
13-
<v-card
14-
class="camera-group px-3 py-2"
15-
flat
16-
style="background-color: #2b2b2b;"
17-
>
18-
<v-row
19-
no-gutters
20-
class="align-center mb-2"
21-
>
22-
<h3>
23-
Camera {{ cameraName }}
24-
</h3>
25-
<v-btn
26-
v-if="showDelete"
27-
class="mx-3"
28-
icon
29-
small
30-
color="error"
31-
@click="$emit('delete')"
32-
>
33-
<v-icon>mdi-delete</v-icon>
34-
</v-btn>
35-
</v-row>
36-
<slot />
37-
</v-card>
38-
</template>
Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,5 @@
11
<script lang="ts">
2-
import { defineComponent } from 'vue';
2+
import ImportMultiCamChooseAnnotation from 'dive-common/components/ImportMultiCamDialog/ImportMultiCamChooseAnnotation.vue';
33
4-
export default defineComponent({
5-
props: {
6-
trackFile: String,
7-
cameraName: String,
8-
},
9-
});
4+
export default ImportMultiCamChooseAnnotation;
105
</script>
11-
12-
<template>
13-
<v-row
14-
class="align-center"
15-
no-gutters
16-
>
17-
<v-text-field
18-
label="Annotation File"
19-
:placeholder="`Annotation File (${cameraName})`"
20-
outlined
21-
dense
22-
hide-details
23-
clearable
24-
:value="trackFile"
25-
class="mr-3"
26-
@click:clear="$emit('clear')"
27-
/>
28-
<v-btn
29-
color="primary"
30-
@click="$emit('open')"
31-
>
32-
Open
33-
<v-icon class="ml-2">
34-
mdi-file-table
35-
</v-icon>
36-
</v-btn>
37-
</v-row>
38-
</template>
Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,5 @@
11
<script lang="ts">
2-
import { defineComponent, PropType } from 'vue';
3-
import { DatasetType } from 'dive-common/apispec';
2+
import ImportMultiCamChooseSource from 'dive-common/components/ImportMultiCamDialog/ImportMultiCamChooseSource.vue';
43
5-
export default defineComponent({
6-
props: {
7-
cameraName: {
8-
type: String,
9-
required: true,
10-
},
11-
dataType: {
12-
type: String as PropType<DatasetType>,
13-
required: true,
14-
},
15-
value: {
16-
type: String,
17-
required: true,
18-
},
19-
showDelete: {
20-
type: Boolean,
21-
default: false,
22-
},
23-
},
24-
});
4+
export default ImportMultiCamChooseSource;
255
</script>
26-
27-
<template>
28-
<v-row
29-
no-gutters
30-
class="align-center"
31-
>
32-
<v-text-field
33-
:placeholder="dataType === 'image-sequence'
34-
? 'Choose folder or image list' : 'Choose Video'
35-
"
36-
disabled
37-
outlined
38-
dense
39-
hide-details
40-
class="mr-3"
41-
:value="value"
42-
/>
43-
<v-btn
44-
color="primary"
45-
class="mr-3"
46-
@click="$emit('open')"
47-
>
48-
{{ dataType === 'image-sequence' ? 'Folder' : 'Open Video' }}
49-
<v-icon class="ml-2">
50-
{{ dataType === 'image-sequence' ? 'mdi-folder-open' : 'mdi-file-video' }}
51-
</v-icon>
52-
</v-btn>
53-
<v-btn
54-
v-if="dataType === 'image-sequence'"
55-
color="primary"
56-
@click="$emit('open-text')"
57-
>
58-
List File
59-
<v-icon class="ml-2">
60-
mdi-view-list-outline
61-
</v-icon>
62-
</v-btn>
63-
</v-row>
64-
</template>

0 commit comments

Comments
 (0)