@webex/ladon-ts 4.3.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,30 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [4.5.0](https://github.com/beyonddunbar/ladon-ts/compare/v4.4.0...v4.5.0) (2024-10-22)
6
+
7
+
8
+ ### Features
9
+
10
+ * mask and frame syncing ([#13](https://github.com/beyonddunbar/ladon-ts/issues/13)) ([8a08404](https://github.com/beyonddunbar/ladon-ts/commit/8a08404afaf1479b82cd403ac45a3ecac64e94a1))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * lint ([6a05d3d](https://github.com/beyonddunbar/ladon-ts/commit/6a05d3d3f36e4d631f5e87530d654645c536bc57))
16
+
17
+ ## [4.4.0](https://github.com/beyonddunbar/ladon-ts/compare/v4.3.0...v4.4.0) (2024-09-03)
18
+
19
+
20
+ ### Features
21
+
22
+ * 0.7.7.1 model updates and mask edge fix ([#12](https://github.com/beyonddunbar/ladon-ts/issues/12)) ([00c5584](https://github.com/beyonddunbar/ladon-ts/commit/00c5584b6f2f86803ddb70027c010d2ef00f79db))
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * lint ([e19d2de](https://github.com/beyonddunbar/ladon-ts/commit/e19d2de5146da979dcba82b659ab2802b9c8ea49))
28
+
5
29
  ## [4.3.0](https://github.com/beyonddunbar/ladon-ts/compare/v4.2.4...v4.3.0) (2024-03-25)
6
30
 
7
31
 
@@ -2,8 +2,22 @@ export declare const BASE_URL = "https://models.intelligence.webex.com/ladon";
2
2
  export declare const LOCAL_BASE_URL = "https://localhost";
3
3
  export declare const LOCAL_WORKER_URI = "/segmentation.js";
4
4
  export declare const LOCAL_PORT = 1235;
5
- export declare const MODEL_VERSION = "1.0.0";
5
+ export declare const MODEL_VERSION = "0.7.7.1";
6
6
  export declare const WASM_URI = "/wasm/1.15.1b/";
7
+ export declare enum Quality {
8
+ TINY = "TINY",
9
+ LOW = "LOW",
10
+ MEDIUM = "MEDIUM",
11
+ HIGH = "HIGH",
12
+ ULTRA = "ULTRA"
13
+ }
14
+ export declare enum BlurStrength {
15
+ WEAK = "WEAK",
16
+ MODERATE = "MODERATE",
17
+ STRONG = "STRONG",
18
+ STRONGER = "STRONGER",
19
+ STRONGEST = "STRONGEST"
20
+ }
7
21
  export declare type SizeConfig = {
8
22
  readonly height: number;
9
23
  readonly width: number;
@@ -34,10 +48,12 @@ export declare type BaseMaskConfig = {
34
48
  readonly worker_uri: string;
35
49
  readonly input_size?: SizeConfig;
36
50
  readonly output_size?: SizeConfig;
51
+ readonly upscaled_size?: SizeConfig;
37
52
  };
38
53
  export declare type MaskConfig = BaseMaskConfig & {
39
54
  readonly input_size: SizeConfig;
40
55
  readonly output_size: SizeConfig;
56
+ readonly upscaled_size: SizeConfig;
41
57
  };
42
58
  export declare type PreloadConfig = {
43
59
  readonly base_url?: string;
@@ -51,20 +67,6 @@ export declare type PipelineConfig = {
51
67
  readonly input: InputConfig;
52
68
  readonly mask: MaskConfig;
53
69
  };
54
- export declare enum Quality {
55
- TINY = "TINY",
56
- LOW = "LOW",
57
- MEDIUM = "MEDIUM",
58
- HIGH = "HIGH",
59
- ULTRA = "ULTRA"
60
- }
61
- export declare enum BlurStrength {
62
- WEAK = "WEAK",
63
- MODERATE = "MODERATE",
64
- STRONG = "STRONG",
65
- STRONGER = "STRONGER",
66
- STRONGEST = "STRONGEST"
67
- }
68
70
  export declare const getBlurConfig: (blur_strength: BlurStrength, horizontal_mirror?: boolean) => BlurConfig;
69
71
  export declare const getPreloadConfig: (quality?: Quality, generator?: Generator, model_url_resolver?: ModelUrlResolver, base_url?: string, useLocalWorker?: boolean) => {
70
72
  mask: {
@@ -76,6 +78,7 @@ export declare const getPreloadConfig: (quality?: Quality, generator?: Generator
76
78
  worker_uri: string;
77
79
  input_size?: SizeConfig | undefined;
78
80
  output_size?: SizeConfig | undefined;
81
+ upscaled_size?: SizeConfig | undefined;
79
82
  };
80
83
  base_url?: string | undefined;
81
84
  wasm_uri?: string | undefined;
@@ -89,6 +92,7 @@ export declare const getConfig: (height: number, width: number, quality?: Qualit
89
92
  mask: {
90
93
  input_size: SizeConfig;
91
94
  output_size: SizeConfig;
95
+ upscaled_size: SizeConfig;
92
96
  generator: Generator;
93
97
  generation_interval_ms: number;
94
98
  model_rank: number;
@@ -4,7 +4,7 @@ export const BASE_URL = 'https://models.intelligence.webex.com/ladon';
4
4
  export const LOCAL_BASE_URL = 'https://localhost';
5
5
  export const LOCAL_WORKER_URI = '/segmentation.js';
6
6
  export const LOCAL_PORT = 1235;
7
- export const MODEL_VERSION = '1.0.0';
7
+ export const MODEL_VERSION = '0.7.7.1';
8
8
  export const WASM_URI = '/wasm/1.15.1b/';
9
9
  export var Quality;
10
10
  (function (Quality) {
@@ -68,12 +68,15 @@ export const getPreloadConfig = (quality = Quality.LOW, generator = 'local', mod
68
68
  base_url,
69
69
  wasm_uri: WASM_URI,
70
70
  mask: {
71
- generation_interval_ms: 48,
72
71
  generator,
72
+ generation_interval_ms: 48,
73
+ model_uri: `/models/${model_version}/tiny-256x144-256x144.onnx`,
74
+ input_size: { height: 144, width: 256 },
75
+ output_size: { height: 144, width: 256 },
76
+ upscaled_size: { height: 360, width: 640 },
77
+ model_rank: 4,
73
78
  model_url_resolver,
74
- model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_mn3sm100.onnx`,
75
79
  worker_uri,
76
- model_rank: 3,
77
80
  },
78
81
  };
79
82
  let mask_quality_config = {};
@@ -81,34 +84,51 @@ export const getPreloadConfig = (quality = Quality.LOW, generator = 'local', mod
81
84
  case Quality.TINY:
82
85
  mask_quality_config = {
83
86
  generation_interval_ms: 48,
84
- model_uri: `/models/${model_version}/tiny_model.onnx`,
87
+ model_uri: `/models/${model_version}/tiny-256x144-256x144.onnx`,
85
88
  input_size: { height: 144, width: 256 },
86
- output_size: { height: 360, width: 640 },
89
+ output_size: { height: 144, width: 256 },
90
+ upscaled_size: { height: 144, width: 256 },
87
91
  model_rank: 4,
88
92
  };
89
93
  break;
90
94
  case Quality.LOW:
91
95
  mask_quality_config = {
92
96
  generation_interval_ms: 48,
93
- model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_mn3sm100.onnx`,
97
+ model_uri: `/models/${model_version}/low-256x144-256x144.onnx`,
98
+ input_size: { height: 144, width: 256 },
99
+ output_size: { height: 144, width: 256 },
100
+ upscaled_size: { height: 360, width: 640 },
101
+ model_rank: 4,
94
102
  };
95
103
  break;
96
104
  case Quality.MEDIUM:
97
105
  mask_quality_config = {
98
106
  generation_interval_ms: 24,
99
- model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_mn3sm100.onnx`,
107
+ model_uri: `/models/${model_version}/medium-256x144-256x144.onnx`,
108
+ input_size: { height: 144, width: 256 },
109
+ output_size: { height: 144, width: 256 },
110
+ upscaled_size: { height: 360, width: 640 },
111
+ model_rank: 4,
100
112
  };
101
113
  break;
102
114
  case Quality.HIGH:
103
115
  mask_quality_config = {
104
116
  generation_interval_ms: 36,
105
- model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_full_depth_2.onnx`,
117
+ model_uri: `/models/${model_version}/medium-640x360-256x144.onnx`,
118
+ input_size: { height: 360, width: 640 },
119
+ output_size: { height: 360, width: 640 },
120
+ upscaled_size: { height: 360, width: 640 },
121
+ model_rank: 4,
106
122
  };
107
123
  break;
108
124
  case Quality.ULTRA:
109
125
  mask_quality_config = {
110
126
  generation_interval_ms: 0,
111
- model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_full_depth_2.onnx`,
127
+ model_uri: `/models/${model_version}/medium-640x360-256x144.onnx`,
128
+ input_size: { height: 360, width: 640 },
129
+ output_size: { height: 360, width: 640 },
130
+ upscaled_size: { height: 360, width: 640 },
131
+ model_rank: 4,
112
132
  };
113
133
  break;
114
134
  default:
@@ -126,6 +146,6 @@ export const getConfig = (height, width, quality = Quality.LOW, generator = 'loc
126
146
  const maskConfig = basePreloadConfig.mask;
127
147
  return Object.assign(Object.assign({}, basePreloadConfig), { render: renderConfig, input: { height, width }, mask: Object.assign(Object.assign({}, maskConfig), {
128
148
  // Need to ensure we don't override the tiny model's input and output sizes.
129
- input_size: maskConfig.input_size || { height, width }, output_size: maskConfig.output_size || { height, width } }) });
149
+ input_size: maskConfig.input_size || { height, width }, output_size: maskConfig.output_size || { height, width }, upscaled_size: maskConfig.upscaled_size || { height, width } }) });
130
150
  };
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyw2Q0FBNkMsQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQztBQWdFekMsTUFBTSxDQUFOLElBQVksT0FNWDtBQU5ELFdBQVksT0FBTztJQUNmLHdCQUFhLENBQUE7SUFDYixzQkFBVyxDQUFBO0lBQ1gsNEJBQWlCLENBQUE7SUFDakIsd0JBQWEsQ0FBQTtJQUNiLDBCQUFlLENBQUE7QUFDbkIsQ0FBQyxFQU5XLE9BQU8sS0FBUCxPQUFPLFFBTWxCO0FBRUQsTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUNwQiw2QkFBYSxDQUFBO0lBQ2IscUNBQXFCLENBQUE7SUFDckIsaUNBQWlCLENBQUE7SUFDakIscUNBQXFCLENBQUE7SUFDckIsdUNBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQU5XLFlBQVksS0FBWixZQUFZLFFBTXZCO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQ3pCLGFBQTJCLEVBQzNCLGlCQUEyQixFQUNqQixFQUFFO0lBQ1osSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVmLFFBQVEsYUFBYSxFQUFFO1FBQ25CLEtBQUssWUFBWSxDQUFDLElBQUk7WUFDbEIsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNoQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsTUFBTTtRQUNWLEtBQUssWUFBWSxDQUFDLFFBQVE7WUFDdEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsTUFBTTtRQUNWLEtBQUssWUFBWSxDQUFDLE1BQU07WUFDcEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsTUFBTTtRQUNWLEtBQUssWUFBWSxDQUFDLFFBQVE7WUFDdEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsTUFBTTtRQUNWLEtBQUssWUFBWSxDQUFDLFNBQVM7WUFDdkIsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsTUFBTTtRQUNWO1lBQ0ksTUFBTTtLQUNiO0lBRUQsT0FBTztRQUNILElBQUksRUFBRSxNQUFNO1FBQ1osaUJBQWlCO1FBQ2pCLFdBQVc7UUFDWCxLQUFLO0tBQ1IsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQzVCLFVBQW1CLE9BQU8sQ0FBQyxHQUFHLEVBQzlCLFlBQXVCLE9BQU8sRUFDOUIscUJBQXVDLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQzFELE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUN4RCxRQUFRLEdBQUcsUUFBUSxFQUNuQixjQUFjLEdBQUcsS0FBSyxFQUN4QixFQUFFO0lBQ0EsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3BDLE1BQU0sWUFBWSxHQUFHLEdBQUcsY0FBYyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDL0QsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjO1FBQ25DLENBQUMsQ0FBQyxnQkFBZ0I7UUFDbEIsQ0FBQyxDQUFDLElBQUksV0FBVyx5QkFBeUIsQ0FBQztJQUMvQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFbEUsTUFBTSxXQUFXLEdBQWtCO1FBQy9CLFFBQVE7UUFDUixRQUFRLEVBQUUsUUFBUTtRQUNsQixJQUFJLEVBQUU7WUFDRixzQkFBc0IsRUFBRSxFQUFFO1lBQzFCLFNBQVM7WUFDVCxrQkFBa0I7WUFDbEIsU0FBUyxFQUFFLFdBQVcsYUFBYSx3REFBd0Q7WUFDM0YsVUFBVTtZQUNWLFVBQVUsRUFBRSxDQUFDO1NBQ2hCO0tBQ0osQ0FBQztJQUVGLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0lBQzdCLFFBQVEsT0FBTyxFQUFFO1FBQ2IsS0FBSyxPQUFPLENBQUMsSUFBSTtZQUNiLG1CQUFtQixHQUFHO2dCQUNsQixzQkFBc0IsRUFBRSxFQUFFO2dCQUMxQixTQUFTLEVBQUUsV0FBVyxhQUFhLGtCQUFrQjtnQkFDckQsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUN2QyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ3hDLFVBQVUsRUFBRSxDQUFDO2FBQ2hCLENBQUM7WUFDRixNQUFNO1FBQ1YsS0FBSyxPQUFPLENBQUMsR0FBRztZQUNaLG1CQUFtQixHQUFHO2dCQUNsQixzQkFBc0IsRUFBRSxFQUFFO2dCQUMxQixTQUFTLEVBQUUsV0FBVyxhQUFhLHdEQUF3RDthQUM5RixDQUFDO1lBQ0YsTUFBTTtRQUNWLEtBQUssT0FBTyxDQUFDLE1BQU07WUFDZixtQkFBbUIsR0FBRztnQkFDbEIsc0JBQXNCLEVBQUUsRUFBRTtnQkFDMUIsU0FBUyxFQUFFLFdBQVcsYUFBYSx3REFBd0Q7YUFDOUYsQ0FBQztZQUNGLE1BQU07UUFDVixLQUFLLE9BQU8sQ0FBQyxJQUFJO1lBQ2IsbUJBQW1CLEdBQUc7Z0JBQ2xCLHNCQUFzQixFQUFFLEVBQUU7Z0JBQzFCLFNBQVMsRUFBRSxXQUFXLGFBQWEsNERBQTREO2FBQ2xHLENBQUM7WUFDRixNQUFNO1FBQ1YsS0FBSyxPQUFPLENBQUMsS0FBSztZQUNkLG1CQUFtQixHQUFHO2dCQUNsQixzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QixTQUFTLEVBQUUsV0FBVyxhQUFhLDREQUE0RDthQUNsRyxDQUFDO1lBQ0YsTUFBTTtRQUNWO1lBQ0ksTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsR0FBRyxPQUFPLENBQUMsQ0FBQztLQUMxRTtJQUVELHVDQUNPLFdBQVcsS0FDZCxJQUFJLGtDQUFPLFdBQVcsQ0FBQyxJQUFJLEdBQUssbUJBQW1CLEtBQ3JEO0FBQ04sQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQ3JCLE1BQWMsRUFDZCxLQUFhLEVBQ2IsVUFBbUIsT0FBTyxDQUFDLEdBQUcsRUFDOUIsWUFBdUIsT0FBTyxFQUM5QixlQUE4RDtJQUMxRCxJQUFJLEVBQUUsTUFBTTtJQUNaLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsV0FBVyxFQUFFLEVBQUU7SUFDZixLQUFLLEVBQUUsRUFBRTtDQUNaLEVBQ0QsbUJBQXFDLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQ3hELE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUN4RCxPQUFPLEdBQUcsUUFBUSxFQUNsQixjQUFjLEdBQUcsS0FBSyxFQUN4QixFQUFFO0lBQ0EsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FDdEMsT0FBTyxFQUNQLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGNBQWMsQ0FDakIsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUUxQyx1Q0FDTyxpQkFBaUIsS0FDcEIsTUFBTSxFQUFFLFlBQVksRUFDcEIsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUN4QixJQUFJLGtDQUNHLFVBQVU7WUFDYiw0RUFBNEU7WUFDNUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQ3RELFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUU5RDtBQUNOLENBQUMsQ0FBQyJ9
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyw2Q0FBNkMsQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQztBQUV6QyxNQUFNLENBQU4sSUFBWSxPQU1YO0FBTkQsV0FBWSxPQUFPO0lBQ2Ysd0JBQWEsQ0FBQTtJQUNiLHNCQUFXLENBQUE7SUFDWCw0QkFBaUIsQ0FBQTtJQUNqQix3QkFBYSxDQUFBO0lBQ2IsMEJBQWUsQ0FBQTtBQUNuQixDQUFDLEVBTlcsT0FBTyxLQUFQLE9BQU8sUUFNbEI7QUFFRCxNQUFNLENBQU4sSUFBWSxZQU1YO0FBTkQsV0FBWSxZQUFZO0lBQ3BCLDZCQUFhLENBQUE7SUFDYixxQ0FBcUIsQ0FBQTtJQUNyQixpQ0FBaUIsQ0FBQTtJQUNqQixxQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBdUIsQ0FBQTtBQUMzQixDQUFDLEVBTlcsWUFBWSxLQUFaLFlBQVksUUFNdkI7QUFrRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQ3pCLGFBQTJCLEVBQzNCLGlCQUEyQixFQUNqQixFQUFFO0lBQ1osSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVmLFFBQVEsYUFBYSxFQUFFO1FBQ25CLEtBQUssWUFBWSxDQUFDLElBQUk7WUFDbEIsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNoQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsTUFBTTtRQUNWLEtBQUssWUFBWSxDQUFDLFFBQVE7WUFDdEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsTUFBTTtRQUNWLEtBQUssWUFBWSxDQUFDLE1BQU07WUFDcEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsTUFBTTtRQUNWLEtBQUssWUFBWSxDQUFDLFFBQVE7WUFDdEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsTUFBTTtRQUNWLEtBQUssWUFBWSxDQUFDLFNBQVM7WUFDdkIsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsTUFBTTtRQUNWO1lBQ0ksTUFBTTtLQUNiO0lBRUQsT0FBTztRQUNILElBQUksRUFBRSxNQUFNO1FBQ1osaUJBQWlCO1FBQ2pCLFdBQVc7UUFDWCxLQUFLO0tBQ1IsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQzVCLFVBQW1CLE9BQU8sQ0FBQyxHQUFHLEVBQzlCLFlBQXVCLE9BQU8sRUFDOUIscUJBQXVDLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQzFELE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUN4RCxRQUFRLEdBQUcsUUFBUSxFQUNuQixjQUFjLEdBQUcsS0FBSyxFQUN4QixFQUFFO0lBQ0EsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3BDLE1BQU0sWUFBWSxHQUFHLEdBQUcsY0FBYyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDL0QsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjO1FBQ25DLENBQUMsQ0FBQyxnQkFBZ0I7UUFDbEIsQ0FBQyxDQUFDLElBQUksV0FBVyx5QkFBeUIsQ0FBQztJQUMvQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFbEUsTUFBTSxXQUFXLEdBQWtCO1FBQy9CLFFBQVE7UUFDUixRQUFRLEVBQUUsUUFBUTtRQUNsQixJQUFJLEVBQUU7WUFDRixTQUFTO1lBQ1Qsc0JBQXNCLEVBQUUsRUFBRTtZQUMxQixTQUFTLEVBQUUsV0FBVyxhQUFhLDRCQUE0QjtZQUMvRCxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDdkMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUMxQyxVQUFVLEVBQUUsQ0FBQztZQUNiLGtCQUFrQjtZQUNsQixVQUFVO1NBQ2I7S0FDSixDQUFDO0lBRUYsSUFBSSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7SUFDN0IsUUFBUSxPQUFPLEVBQUU7UUFDYixLQUFLLE9BQU8sQ0FBQyxJQUFJO1lBQ2IsbUJBQW1CLEdBQUc7Z0JBQ2xCLHNCQUFzQixFQUFFLEVBQUU7Z0JBQzFCLFNBQVMsRUFBRSxXQUFXLGFBQWEsNEJBQTRCO2dCQUMvRCxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ3ZDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDeEMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUMxQyxVQUFVLEVBQUUsQ0FBQzthQUNoQixDQUFDO1lBQ0YsTUFBTTtRQUNWLEtBQUssT0FBTyxDQUFDLEdBQUc7WUFDWixtQkFBbUIsR0FBRztnQkFDbEIsc0JBQXNCLEVBQUUsRUFBRTtnQkFDMUIsU0FBUyxFQUFFLFdBQVcsYUFBYSwyQkFBMkI7Z0JBQzlELFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDdkMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUN4QyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQzFDLFVBQVUsRUFBRSxDQUFDO2FBQ2hCLENBQUM7WUFDRixNQUFNO1FBQ1YsS0FBSyxPQUFPLENBQUMsTUFBTTtZQUNmLG1CQUFtQixHQUFHO2dCQUNsQixzQkFBc0IsRUFBRSxFQUFFO2dCQUMxQixTQUFTLEVBQUUsV0FBVyxhQUFhLDhCQUE4QjtnQkFDakUsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUN2QyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ3hDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDMUMsVUFBVSxFQUFFLENBQUM7YUFDaEIsQ0FBQztZQUNGLE1BQU07UUFDVixLQUFLLE9BQU8sQ0FBQyxJQUFJO1lBQ2IsbUJBQW1CLEdBQUc7Z0JBQ2xCLHNCQUFzQixFQUFFLEVBQUU7Z0JBQzFCLFNBQVMsRUFBRSxXQUFXLGFBQWEsOEJBQThCO2dCQUNqRSxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ3ZDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDeEMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUMxQyxVQUFVLEVBQUUsQ0FBQzthQUNoQixDQUFDO1lBQ0YsTUFBTTtRQUNWLEtBQUssT0FBTyxDQUFDLEtBQUs7WUFDZCxtQkFBbUIsR0FBRztnQkFDbEIsc0JBQXNCLEVBQUUsQ0FBQztnQkFDekIsU0FBUyxFQUFFLFdBQVcsYUFBYSw4QkFBOEI7Z0JBQ2pFLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDdkMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUN4QyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQzFDLFVBQVUsRUFBRSxDQUFDO2FBQ2hCLENBQUM7WUFDRixNQUFNO1FBQ1Y7WUFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0tBQzFFO0lBRUQsdUNBQ08sV0FBVyxLQUNkLElBQUksa0NBQU8sV0FBVyxDQUFDLElBQUksR0FBSyxtQkFBbUIsS0FDckQ7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FDckIsTUFBYyxFQUNkLEtBQWEsRUFDYixVQUFtQixPQUFPLENBQUMsR0FBRyxFQUM5QixZQUF1QixPQUFPLEVBQzlCLGVBQThEO0lBQzFELElBQUksRUFBRSxNQUFNO0lBQ1osaUJBQWlCLEVBQUUsS0FBSztJQUN4QixXQUFXLEVBQUUsRUFBRTtJQUNmLEtBQUssRUFBRSxFQUFFO0NBQ1osRUFDRCxtQkFBcUMsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FDeEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQ3hELE9BQU8sR0FBRyxRQUFRLEVBQ2xCLGNBQWMsR0FBRyxLQUFLLEVBQ3hCLEVBQUU7SUFDQSxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUN0QyxPQUFPLEVBQ1AsU0FBUyxFQUNULGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsY0FBYyxDQUNqQixDQUFDO0lBQ0YsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBRTFDLHVDQUNPLGlCQUFpQixLQUNwQixNQUFNLEVBQUUsWUFBWSxFQUNwQixLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQ3hCLElBQUksa0NBQ0csVUFBVTtZQUNiLDRFQUE0RTtZQUM1RSxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFDdEQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQ3hELGFBQWEsRUFBRSxVQUFVLENBQUMsYUFBYSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUVsRTtBQUNOLENBQUMsQ0FBQyJ9
@@ -4,22 +4,31 @@ declare global {
4
4
  url: string;
5
5
  }
6
6
  }
7
- export interface MaskResult {
7
+ export interface FacesAndLandmarks {
8
8
  data: Float32Array;
9
+ dims: readonly number[];
10
+ }
11
+ export interface LadonOutput {
12
+ data: Float32Array;
13
+ facesAndLandmarks: FacesAndLandmarks;
14
+ gesture: Float32Array;
15
+ motion: number;
16
+ timestamp: number;
9
17
  warm: boolean;
10
18
  }
11
19
  export interface MaskGenerator {
12
- getMask(input: Uint8ClampedArray): Promise<MaskResult>;
20
+ getLadonOutput(input: Uint8ClampedArray, timestamp: number): Promise<LadonOutput>;
13
21
  load(): Promise<void>;
14
22
  isLoaded(): boolean;
15
- postRender(input: Uint8ClampedArray): Promise<void>;
23
+ postRender(input: Uint8ClampedArray, timestamp: number): Promise<void>;
16
24
  destroy(): void;
17
25
  }
18
26
  export declare class LocalGenerator implements MaskGenerator {
19
27
  readonly config: PipelineConfig;
20
- private last_mask;
21
- private mask_model?;
22
- private last_mask_generation;
28
+ private lastResult;
29
+ private lastMask;
30
+ private maskModel?;
31
+ private lastMaskGenerationTime;
23
32
  private output?;
24
33
  constructor(config: PipelineConfig);
25
34
  /**
@@ -32,7 +41,8 @@ export declare class LocalGenerator implements MaskGenerator {
32
41
  * @returns {Float32Array} - The processed data
33
42
  */
34
43
  private preprocess;
35
- getMask(input: Uint8ClampedArray): Promise<MaskResult>;
44
+ getTimeSinceLastGeneration(): number;
45
+ getLadonOutput(input: Uint8ClampedArray, timestamp: number): Promise<LadonOutput>;
36
46
  load(): Promise<void>;
37
47
  isLoaded(): boolean;
38
48
  postRender(_: Uint8ClampedArray): Promise<void>;
@@ -40,9 +50,9 @@ export declare class LocalGenerator implements MaskGenerator {
40
50
  }
41
51
  export declare class NullGenerator implements MaskGenerator {
42
52
  readonly config: PipelineConfig;
43
- private last_mask;
53
+ private lastMask;
44
54
  constructor(config: PipelineConfig);
45
- getMask(_: Uint8ClampedArray): Promise<MaskResult>;
55
+ getLadonOutput(_: Uint8ClampedArray): Promise<LadonOutput>;
46
56
  load(): Promise<void>;
47
57
  isLoaded(): boolean;
48
58
  postRender(_: Uint8ClampedArray): Promise<void>;
@@ -50,13 +60,14 @@ export declare class NullGenerator implements MaskGenerator {
50
60
  }
51
61
  export declare class WorkerGenerator implements MaskGenerator {
52
62
  readonly config: PipelineConfig;
53
- private last_mask;
63
+ private lastMask;
64
+ private newMask;
54
65
  private worker?;
55
- private new_mask;
66
+ private lastResult;
56
67
  constructor(config: PipelineConfig);
57
- getMask(_: Uint8ClampedArray): Promise<MaskResult>;
68
+ getLadonOutput(_: Uint8ClampedArray): Promise<LadonOutput>;
58
69
  load(): Promise<void>;
59
70
  isLoaded(): boolean;
60
- postRender(input: Uint8ClampedArray): Promise<void>;
71
+ postRender(input: Uint8ClampedArray, timestamp: number): Promise<void>;
61
72
  destroy(): void;
62
73
  }
@@ -12,8 +12,16 @@ import { sharedResourceManager } from './shared-resource-manager';
12
12
  export class LocalGenerator {
13
13
  constructor(config) {
14
14
  this.config = config;
15
- this.last_mask_generation = 0;
16
- this.last_mask = new ort.Tensor('float32', new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width), [1, 1, this.config.mask.output_size.height, this.config.mask.output_size.width]);
15
+ this.lastMaskGenerationTime = 0;
16
+ this.lastMask = new ort.Tensor('float32', new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width), [1, 1, this.config.mask.output_size.height, this.config.mask.output_size.width]);
17
+ this.lastResult = {
18
+ data: this.lastMask.data,
19
+ facesAndLandmarks: { data: new Float32Array(0), dims: [] },
20
+ gesture: new Float32Array(0),
21
+ motion: 0,
22
+ timestamp: 0,
23
+ warm: false,
24
+ };
17
25
  }
18
26
  /**
19
27
  * This method preprocesses an input Uint8ClampedArray to a Float32Array
@@ -25,14 +33,14 @@ export class LocalGenerator {
25
33
  * @returns {Float32Array} - The processed data
26
34
  */
27
35
  preprocess(input, alpha) {
36
+ var _a;
28
37
  const { model_rank, input_size, output_size } = this.config.mask;
29
38
  const { height, width } = input_size;
30
39
  const numImagePixels = height * width;
31
- if (!this.output) {
32
- this.output = new Float32Array(numImagePixels * model_rank);
33
- }
40
+ // Initialize the output buffer if it is not already set
41
+ (_a = this.output) !== null && _a !== void 0 ? _a : (this.output = new Float32Array(numImagePixels * model_rank));
34
42
  // In-place modification of class-scoped output buffer
35
- const channelFlipOffset = model_rank === 4 ? 2 : 0;
43
+ const channelFlipOffset = 2;
36
44
  const numInputPixels = input.length / 4;
37
45
  // Loop over all color channels in the image
38
46
  for (let channel = 0; channel < 3; channel++) {
@@ -44,63 +52,66 @@ export class LocalGenerator {
44
52
  input[pixel * 4 + Math.abs(channelFlipOffset - channel)];
45
53
  }
46
54
  }
47
- // If the model_rank is 4, an additional alpha channel needs to be set
48
- if (model_rank === 4) {
49
- // Scaling factors for width and height based on the ratio of output to input sizes
50
- const widthScale = output_size.width / width;
51
- const heightScale = output_size.height / height;
52
- // Iterate over each pixel in the width of the input image
53
- for (let x = 0; x < width; x++) {
54
- const nearestNeighborX = Math.floor(x * widthScale);
55
- // Iterate over each pixel in the height of the input image
56
- for (let y = 0; y < height; y++) {
57
- const nearestNeighborY = Math.floor(y * heightScale);
58
- const maskIdx = nearestNeighborX + nearestNeighborY * output_size.width;
59
- const outputIdx = x + y * width + 3 * numImagePixels;
60
- // Normalize the alpha value to range between 0 and 1, and scale it to the range of 0-255
61
- const normalizedValue = Math.min(Math.max(alpha[maskIdx], 0), 1) * 255;
62
- // Assign the normalized value to the output at the computed index
63
- this.output[outputIdx] = normalizedValue;
64
- }
55
+ // Scaling factors for width and height based on the ratio of output to input sizes
56
+ const widthScale = output_size.width / width;
57
+ const heightScale = output_size.height / height;
58
+ // Iterate over each pixel in the width of the input image
59
+ for (let x = 0; x < width; x++) {
60
+ const nearestNeighborX = Math.floor(x * widthScale);
61
+ // Iterate over each pixel in the height of the input image
62
+ for (let y = 0; y < height; y++) {
63
+ const nearestNeighborY = Math.floor(y * heightScale);
64
+ const maskIdx = nearestNeighborX + nearestNeighborY * output_size.width;
65
+ const outputIdx = x + y * width + 3 * numImagePixels;
66
+ // Normalize the alpha value to range between 0 and 1, and scale it to the range of 0-255
67
+ // This step is necessary because the rendering pipeline expects alpha values in the [0, 255] range
68
+ const normalizedValue = Math.min(Math.max(alpha[maskIdx], 0), 255);
69
+ // Assign the normalized value to the output at the computed index
70
+ this.output[outputIdx] = normalizedValue;
65
71
  }
66
72
  }
67
73
  return this.output;
68
74
  }
69
- getMask(input) {
75
+ getTimeSinceLastGeneration() {
76
+ return Date.now() - this.lastMaskGenerationTime;
77
+ }
78
+ getLadonOutput(input, timestamp) {
79
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
70
80
  return __awaiter(this, void 0, void 0, function* () {
71
- if (!this.mask_model) {
81
+ if (!this.maskModel) {
72
82
  throw new Error('[ladon-ts] - mask model not loaded.');
73
83
  }
74
- const mask_generation_timeout = Date.now() - this.last_mask_generation > this.config.mask.generation_interval_ms;
75
- if (!mask_generation_timeout) {
84
+ if (this.getTimeSinceLastGeneration() < this.config.mask.generation_interval_ms) {
76
85
  return {
77
- data: this.last_mask.data,
86
+ data: this.lastMask.data,
87
+ facesAndLandmarks: this.lastResult.facesAndLandmarks,
88
+ gesture: this.lastResult.gesture,
89
+ motion: this.lastResult.motion,
90
+ timestamp: this.lastResult.timestamp,
78
91
  warm: false,
79
92
  };
80
93
  }
81
- this.last_mask_generation = Date.now();
82
- const image_tns = new ort.Tensor('float32', this.preprocess(input, this.last_mask.data), [
94
+ this.lastMaskGenerationTime = Date.now();
95
+ const imageTensor = new ort.Tensor('float32', this.preprocess(input, this.lastMask.data), [
83
96
  1,
84
97
  this.config.mask.model_rank,
85
98
  this.config.mask.input_size.height,
86
99
  this.config.mask.input_size.width,
87
100
  ]);
88
- if (this.config.mask.model_rank === 4) {
89
- // This feed uses the new model input params for the tiny model.
90
- const results = yield this.mask_model.run({ input: image_tns });
91
- this.last_mask = results.segmentation;
92
- }
93
- else {
94
- const results = yield this.mask_model.run({
95
- input_image: image_tns,
96
- prev_mask: this.last_mask,
97
- });
98
- this.last_mask = results.output_mask;
99
- }
100
- return {
101
- data: this.last_mask.data,
101
+ const results = yield this.maskModel.run({ input: imageTensor });
102
+ this.lastMask = results.segmentation;
103
+ this.lastResult = {
104
+ data: (_a = this.lastMask.data) !== null && _a !== void 0 ? _a : new Float32Array(0),
105
+ facesAndLandmarks: {
106
+ data: (_c = (_b = results.faces_and_landmarks) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : new Float32Array(0),
107
+ dims: (_e = (_d = results.faces_and_landmarks) === null || _d === void 0 ? void 0 : _d.dims) !== null && _e !== void 0 ? _e : [],
108
+ },
109
+ gesture: (_g = (_f = results.gesture) === null || _f === void 0 ? void 0 : _f.data) !== null && _g !== void 0 ? _g : new Float32Array(0),
110
+ motion: (_j = (_h = results.motion) === null || _h === void 0 ? void 0 : _h.data[0]) !== null && _j !== void 0 ? _j : 0,
111
+ timestamp,
102
112
  warm: true,
103
113
  };
114
+ return this.lastResult;
104
115
  });
105
116
  }
106
117
  load() {
@@ -108,16 +119,16 @@ export class LocalGenerator {
108
119
  return __awaiter(this, void 0, void 0, function* () {
109
120
  const modelUrl = yield sharedResourceManager.getModelUrl(this.config);
110
121
  // Attempt to retrieve a preloaded InferenceSession from the shared resource manager.
111
- this.mask_model = sharedResourceManager.getModelSession(modelUrl);
122
+ this.maskModel = sharedResourceManager.getModelSession(modelUrl);
112
123
  // If the model is not preloaded, load it from the provided model URL.
113
- (_a = this.mask_model) !== null && _a !== void 0 ? _a : (this.mask_model = yield sharedResourceManager.preloadModel(this.config));
114
- if (!this.mask_model) {
124
+ (_a = this.maskModel) !== null && _a !== void 0 ? _a : (this.maskModel = yield sharedResourceManager.preloadModel(this.config));
125
+ if (!this.maskModel) {
115
126
  throw new Error('Failed to load the ONNX model.');
116
127
  }
117
128
  });
118
129
  }
119
130
  isLoaded() {
120
- return !!this.mask_model;
131
+ return !!this.maskModel;
121
132
  }
122
133
  /* eslint-disable-next-line @typescript-eslint/no-unused-vars */
123
134
  postRender(_) {
@@ -132,13 +143,17 @@ export class LocalGenerator {
132
143
  export class NullGenerator {
133
144
  constructor(config) {
134
145
  this.config = config;
135
- this.last_mask = new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width);
146
+ this.lastMask = new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width);
136
147
  }
137
148
  /* eslint-disable-next-line @typescript-eslint/no-unused-vars */
138
- getMask(_) {
149
+ getLadonOutput(_) {
139
150
  return __awaiter(this, void 0, void 0, function* () {
140
151
  return {
141
- data: this.last_mask,
152
+ data: this.lastMask,
153
+ facesAndLandmarks: { data: new Float32Array(0), dims: [] },
154
+ gesture: new Float32Array(0),
155
+ motion: 0,
156
+ timestamp: 0,
142
157
  warm: false,
143
158
  };
144
159
  });
@@ -164,17 +179,29 @@ export class NullGenerator {
164
179
  export class WorkerGenerator {
165
180
  constructor(config) {
166
181
  this.config = config;
167
- this.new_mask = true;
168
- this.last_mask = new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width);
182
+ this.newMask = true;
183
+ this.lastMask = new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width);
184
+ this.lastResult = {
185
+ data: this.lastMask,
186
+ facesAndLandmarks: { data: new Float32Array(0), dims: [] },
187
+ gesture: new Float32Array(0),
188
+ motion: 0,
189
+ timestamp: 0,
190
+ warm: false,
191
+ };
169
192
  }
170
193
  /* eslint-disable-next-line @typescript-eslint/no-unused-vars */
171
- getMask(_) {
194
+ getLadonOutput(_) {
172
195
  return __awaiter(this, void 0, void 0, function* () {
173
196
  const toReturn = {
174
- data: this.last_mask,
175
- warm: this.new_mask,
197
+ data: this.lastMask,
198
+ facesAndLandmarks: this.lastResult.facesAndLandmarks,
199
+ gesture: this.lastResult.gesture,
200
+ motion: this.lastResult.motion,
201
+ timestamp: this.lastResult.timestamp,
202
+ warm: this.newMask,
176
203
  };
177
- this.new_mask = false;
204
+ this.newMask = false;
178
205
  return toReturn;
179
206
  });
180
207
  }
@@ -200,9 +227,17 @@ export class WorkerGenerator {
200
227
  resolutionCb = resolve;
201
228
  });
202
229
  this.worker.onmessage = (event) => {
203
- if (event.data.mask) {
204
- this.last_mask = event.data.mask;
205
- this.new_mask = true;
230
+ if (event.data.status === 'generated') {
231
+ this.lastMask = event.data.mask;
232
+ this.lastResult = {
233
+ data: event.data.mask,
234
+ facesAndLandmarks: event.data.facesAndLandmarks,
235
+ gesture: event.data.gesture,
236
+ motion: event.data.motion,
237
+ timestamp: event.data.timestamp,
238
+ warm: true,
239
+ };
240
+ this.newMask = true;
206
241
  }
207
242
  else {
208
243
  const workerUrl = sharedResourceManager.getWorkerUrl();
@@ -218,7 +253,7 @@ export class WorkerGenerator {
218
253
  isLoaded() {
219
254
  return !!this.worker;
220
255
  }
221
- postRender(input) {
256
+ postRender(input, timestamp) {
222
257
  return __awaiter(this, void 0, void 0, function* () {
223
258
  // claim ownership of the input tensor's buffer and forward to worker
224
259
  if (!this.worker) {
@@ -227,6 +262,7 @@ export class WorkerGenerator {
227
262
  this.worker.postMessage({
228
263
  type: 'generate',
229
264
  image: input,
265
+ timestamp,
230
266
  }, [input.buffer]);
231
267
  });
232
268
  }
@@ -234,4 +270,4 @@ export class WorkerGenerator {
234
270
  sharedResourceManager.terminateWorker();
235
271
  }
236
272
  }
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQztBQUd2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQXFCbEUsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFBNEIsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFIMUMseUJBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBSTdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUMzQixTQUFTLEVBQ1QsSUFBSSxZQUFZLENBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUMzRSxFQUNELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FDbEYsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLFVBQVUsQ0FBQyxLQUF3QixFQUFFLEtBQW1CO1FBQzVELE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxJQUFJ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
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQztBQUd2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQTZCbEUsTUFBTSxPQUFPLGNBQWM7SUFPdkIsWUFBNEIsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFIMUMsMkJBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBSS9CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUMxQixTQUFTLEVBQ1QsSUFBSSxZQUFZLENBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUMzRSxFQUNELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FDbEYsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ3hCLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDMUQsT0FBTyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLEVBQUUsQ0FBQztZQUNULFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxFQUFFLEtBQUs7U0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7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