Repository navigation
Expand file tree
/
Copy pathbuild_manifest.js
More file actions
66 lines (52 loc) · 1.99 KB
/
Copy pathbuild_manifest.js
File metadata and controls
66 lines (52 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const fs = require("fs/promises");
const path = require("path");
const ROOT = __dirname;
const DATASET_DIR = path.join(ROOT, "dataset_test");
const OUTPUT_PATH = path.join(ROOT, "manifest.js");
const CAMERAS = ["CAM_BACK", "CAM_BACK_LEFT", "CAM_BACK_RIGHT", "CAM_FRONT", "CAM_FRONT_LEFT", "CAM_FRONT_RIGHT"];
const IMAGE_PATTERN = /\.(jpg|jpeg|png|webp)$/i;
const PRIMARY_CAMERA = "CAM_BACK";
async function main() {
const manifest = await buildManifest();
const output = `window.DATASET_MANIFEST = ${JSON.stringify(manifest, null, 2)};\n`;
await fs.writeFile(OUTPUT_PATH, output, "utf8");
console.log(`Wrote ${OUTPUT_PATH} with ${manifest.photos.length} photo groups.`);
}
async function buildManifest() {
return scanDataset();
}
async function scanDataset() {
await fs.access(DATASET_DIR);
const originalsDir = path.join(DATASET_DIR, "0_originals");
await fs.access(originalsDir);
const cameraFiles = new Map();
for (const camera of CAMERAS) {
const cameraDir = path.join(originalsDir, camera);
const filenames = await fs.readdir(cameraDir);
cameraFiles.set(
camera,
filenames
.filter((filename) => IMAGE_PATTERN.test(filename))
.sort()
);
}
const groupCount = Math.max(...CAMERAS.map((camera) => cameraFiles.get(camera)?.length ?? 0));
const primaryFiles = cameraFiles.get(PRIMARY_CAMERA) ?? [];
const photos = Array.from({ length: groupCount }, (_, index) => {
const originals = CAMERAS.reduce((cameraAccumulator, camera) => {
cameraAccumulator[camera] = cameraFiles.get(camera)?.[index] ?? null;
return cameraAccumulator;
}, {});
const primaryFilename = primaryFiles[index] ?? null;
const group = primaryFilename ? stripExtension(primaryFilename) : `photo-${String(index + 1).padStart(3, "0")}`;
return { group, originals };
});
return { photos };
}
function stripExtension(filename) {
return filename.replace(/\.[^.]+$/, "");
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});