@webex/ladon-ts 4.2.4 → 4.4.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 +19 -0
- package/build/module/index.d.ts +1 -0
- package/build/module/index.js +2 -1
- package/build/module/lib/config.d.ts +54 -18
- package/build/module/lib/config.js +58 -32
- package/build/module/lib/generator.d.ts +19 -10
- package/build/module/lib/generator.js +107 -79
- package/build/module/lib/pipeline.d.ts +38 -6
- package/build/module/lib/pipeline.js +68 -22
- package/build/module/lib/renderer/blur-renderer.d.ts +2 -2
- package/build/module/lib/renderer/blur-renderer.js +24 -34
- package/build/module/lib/renderer/ladon-renderer.d.ts +2 -2
- package/build/module/lib/renderer/passthrough-renderer.d.ts +2 -2
- package/build/module/lib/renderer/passthrough-renderer.js +1 -1
- package/build/module/lib/renderer/replacement-renderer.d.ts +2 -2
- package/build/module/lib/renderer/replacement-renderer.js +20 -14
- package/build/module/lib/renderer/webgl-renderer.js +8 -6
- package/build/module/lib/shared-resource-manager.d.ts +84 -0
- package/build/module/lib/shared-resource-manager.js +189 -0
- package/build/module/lib/util.d.ts +32 -10
- package/build/module/lib/util.js +139 -61
- package/build/module/lib/version.d.ts +1 -1
- package/build/module/lib/version.js +1 -1
- package/package.json +4 -3
|
@@ -8,12 +8,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import * as ort from 'onnxruntime-web';
|
|
11
|
-
import {
|
|
11
|
+
import { sharedResourceManager } from './shared-resource-manager';
|
|
12
12
|
export class LocalGenerator {
|
|
13
13
|
constructor(config) {
|
|
14
14
|
this.config = config;
|
|
15
15
|
this.last_mask_generation = 0;
|
|
16
|
-
this.
|
|
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
|
+
warm: false,
|
|
23
|
+
};
|
|
17
24
|
}
|
|
18
25
|
/**
|
|
19
26
|
* This method preprocesses an input Uint8ClampedArray to a Float32Array
|
|
@@ -25,14 +32,14 @@ export class LocalGenerator {
|
|
|
25
32
|
* @returns {Float32Array} - The processed data
|
|
26
33
|
*/
|
|
27
34
|
preprocess(input, alpha) {
|
|
35
|
+
var _a;
|
|
28
36
|
const { model_rank, input_size, output_size } = this.config.mask;
|
|
29
37
|
const { height, width } = input_size;
|
|
30
38
|
const numImagePixels = height * width;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
39
|
+
// Initialize the output buffer if it is not already set
|
|
40
|
+
(_a = this.output) !== null && _a !== void 0 ? _a : (this.output = new Float32Array(numImagePixels * model_rank));
|
|
34
41
|
// In-place modification of class-scoped output buffer
|
|
35
|
-
const channelFlipOffset =
|
|
42
|
+
const channelFlipOffset = 2;
|
|
36
43
|
const numInputPixels = input.length / 4;
|
|
37
44
|
// Loop over all color channels in the image
|
|
38
45
|
for (let channel = 0; channel < 3; channel++) {
|
|
@@ -44,81 +51,79 @@ export class LocalGenerator {
|
|
|
44
51
|
input[pixel * 4 + Math.abs(channelFlipOffset - channel)];
|
|
45
52
|
}
|
|
46
53
|
}
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.output[outputIdx] = normalizedValue;
|
|
64
|
-
}
|
|
54
|
+
// Scaling factors for width and height based on the ratio of output to input sizes
|
|
55
|
+
const widthScale = output_size.width / width;
|
|
56
|
+
const heightScale = output_size.height / height;
|
|
57
|
+
// Iterate over each pixel in the width of the input image
|
|
58
|
+
for (let x = 0; x < width; x++) {
|
|
59
|
+
const nearestNeighborX = Math.floor(x * widthScale);
|
|
60
|
+
// Iterate over each pixel in the height of the input image
|
|
61
|
+
for (let y = 0; y < height; y++) {
|
|
62
|
+
const nearestNeighborY = Math.floor(y * heightScale);
|
|
63
|
+
const maskIdx = nearestNeighborX + nearestNeighborY * output_size.width;
|
|
64
|
+
const outputIdx = x + y * width + 3 * numImagePixels;
|
|
65
|
+
// Normalize the alpha value to range between 0 and 1, and scale it to the range of 0-255
|
|
66
|
+
// This step is necessary because the rendering pipeline expects alpha values in the [0, 255] range
|
|
67
|
+
const normalizedValue = Math.min(Math.max(alpha[maskIdx], 0), 255);
|
|
68
|
+
// Assign the normalized value to the output at the computed index
|
|
69
|
+
this.output[outputIdx] = normalizedValue;
|
|
65
70
|
}
|
|
66
71
|
}
|
|
67
72
|
return this.output;
|
|
68
73
|
}
|
|
69
|
-
|
|
74
|
+
getLadonOutput(input) {
|
|
75
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
70
76
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
-
if (!this.
|
|
77
|
+
if (!this.maskModel) {
|
|
72
78
|
throw new Error('[ladon-ts] - mask model not loaded.');
|
|
73
79
|
}
|
|
74
80
|
const mask_generation_timeout = Date.now() - this.last_mask_generation > this.config.mask.generation_interval_ms;
|
|
75
81
|
if (!mask_generation_timeout) {
|
|
76
82
|
return {
|
|
77
|
-
data: this.
|
|
83
|
+
data: this.lastMask.data,
|
|
84
|
+
facesAndLandmarks: this.lastResult.facesAndLandmarks,
|
|
85
|
+
gesture: this.lastResult.gesture,
|
|
86
|
+
motion: this.lastResult.motion,
|
|
78
87
|
warm: false,
|
|
79
88
|
};
|
|
80
89
|
}
|
|
81
90
|
this.last_mask_generation = Date.now();
|
|
82
|
-
const
|
|
91
|
+
const imageTensor = new ort.Tensor('float32', this.preprocess(input, this.lastMask.data), [
|
|
83
92
|
1,
|
|
84
93
|
this.config.mask.model_rank,
|
|
85
94
|
this.config.mask.input_size.height,
|
|
86
95
|
this.config.mask.input_size.width,
|
|
87
96
|
]);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
prev_mask: this.last_mask,
|
|
99
|
-
});
|
|
100
|
-
this.last_mask = results.output_mask;
|
|
101
|
-
}
|
|
102
|
-
return {
|
|
103
|
-
data: this.last_mask.data,
|
|
97
|
+
const results = yield this.maskModel.run({ input: imageTensor });
|
|
98
|
+
this.lastMask = results.segmentation;
|
|
99
|
+
this.lastResult = {
|
|
100
|
+
data: (_a = this.lastMask.data) !== null && _a !== void 0 ? _a : new Float32Array(0),
|
|
101
|
+
facesAndLandmarks: {
|
|
102
|
+
data: (_c = (_b = results.faces_and_landmarks) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : new Float32Array(0),
|
|
103
|
+
dims: (_e = (_d = results.faces_and_landmarks) === null || _d === void 0 ? void 0 : _d.dims) !== null && _e !== void 0 ? _e : [],
|
|
104
|
+
},
|
|
105
|
+
gesture: (_g = (_f = results.gesture) === null || _f === void 0 ? void 0 : _f.data) !== null && _g !== void 0 ? _g : new Float32Array(0),
|
|
106
|
+
motion: (_j = (_h = results.motion) === null || _h === void 0 ? void 0 : _h.data[0]) !== null && _j !== void 0 ? _j : 0,
|
|
104
107
|
warm: true,
|
|
105
108
|
};
|
|
109
|
+
return this.lastResult;
|
|
106
110
|
});
|
|
107
111
|
}
|
|
108
112
|
load() {
|
|
113
|
+
var _a;
|
|
109
114
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
const modelUrl = yield sharedResourceManager.getModelUrl(this.config);
|
|
116
|
+
// Attempt to retrieve a preloaded InferenceSession from the shared resource manager.
|
|
117
|
+
this.maskModel = sharedResourceManager.getModelSession(modelUrl);
|
|
118
|
+
// If the model is not preloaded, load it from the provided model URL.
|
|
119
|
+
(_a = this.maskModel) !== null && _a !== void 0 ? _a : (this.maskModel = yield sharedResourceManager.preloadModel(this.config));
|
|
120
|
+
if (!this.maskModel) {
|
|
121
|
+
throw new Error('Failed to load the ONNX model.');
|
|
112
122
|
}
|
|
113
|
-
ort.env.wasm.numThreads = 1;
|
|
114
|
-
const modelUrl = yield getModelUrl(this.config);
|
|
115
|
-
this.mask_model = yield ort.InferenceSession.create(modelUrl, {
|
|
116
|
-
executionProviders: ['wasm'],
|
|
117
|
-
});
|
|
118
123
|
});
|
|
119
124
|
}
|
|
120
125
|
isLoaded() {
|
|
121
|
-
return !!this.
|
|
126
|
+
return !!this.maskModel;
|
|
122
127
|
}
|
|
123
128
|
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
|
|
124
129
|
postRender(_) {
|
|
@@ -133,13 +138,16 @@ export class LocalGenerator {
|
|
|
133
138
|
export class NullGenerator {
|
|
134
139
|
constructor(config) {
|
|
135
140
|
this.config = config;
|
|
136
|
-
this.
|
|
141
|
+
this.lastMask = new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width);
|
|
137
142
|
}
|
|
138
143
|
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
|
|
139
|
-
|
|
144
|
+
getLadonOutput(_) {
|
|
140
145
|
return __awaiter(this, void 0, void 0, function* () {
|
|
141
146
|
return {
|
|
142
|
-
data: this.
|
|
147
|
+
data: this.lastMask,
|
|
148
|
+
facesAndLandmarks: { data: new Float32Array(0), dims: [] },
|
|
149
|
+
gesture: new Float32Array(0),
|
|
150
|
+
motion: 0,
|
|
143
151
|
warm: false,
|
|
144
152
|
};
|
|
145
153
|
});
|
|
@@ -165,49 +173,69 @@ export class NullGenerator {
|
|
|
165
173
|
export class WorkerGenerator {
|
|
166
174
|
constructor(config) {
|
|
167
175
|
this.config = config;
|
|
168
|
-
this.
|
|
169
|
-
this.
|
|
176
|
+
this.newMask = true;
|
|
177
|
+
this.lastMask = new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width);
|
|
178
|
+
this.lastResult = {
|
|
179
|
+
data: this.lastMask,
|
|
180
|
+
facesAndLandmarks: { data: new Float32Array(0), dims: [] },
|
|
181
|
+
gesture: new Float32Array(0),
|
|
182
|
+
motion: 0,
|
|
183
|
+
warm: false,
|
|
184
|
+
};
|
|
170
185
|
}
|
|
171
186
|
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
|
|
172
|
-
|
|
187
|
+
getLadonOutput(_) {
|
|
173
188
|
return __awaiter(this, void 0, void 0, function* () {
|
|
174
189
|
const toReturn = {
|
|
175
|
-
data: this.
|
|
176
|
-
|
|
190
|
+
data: this.lastMask,
|
|
191
|
+
facesAndLandmarks: this.lastResult.facesAndLandmarks,
|
|
192
|
+
gesture: this.lastResult.gesture,
|
|
193
|
+
motion: this.lastResult.motion,
|
|
194
|
+
warm: this.newMask,
|
|
177
195
|
};
|
|
178
|
-
this.
|
|
196
|
+
this.newMask = false;
|
|
179
197
|
return toReturn;
|
|
180
198
|
});
|
|
181
199
|
}
|
|
182
200
|
load() {
|
|
201
|
+
var _a;
|
|
183
202
|
return __awaiter(this, void 0, void 0, function* () {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const
|
|
203
|
+
this.worker = sharedResourceManager.getWorker();
|
|
204
|
+
(_a = this.worker) !== null && _a !== void 0 ? _a : (this.worker = yield sharedResourceManager.initializeWorker(this.config));
|
|
205
|
+
if (!this.worker) {
|
|
206
|
+
throw new Error('[ladon-ts] - worker is not defined.');
|
|
207
|
+
}
|
|
208
|
+
const modelUrl = yield sharedResourceManager.getModelUrl(this.config);
|
|
209
|
+
const workerConfig = {
|
|
190
210
|
base_url: this.config.base_url,
|
|
191
211
|
input: this.config.input,
|
|
192
212
|
mask: Object.assign(Object.assign({}, this.config.mask), { model_url_resolver: modelUrl }),
|
|
193
213
|
wasm_uri: this.config.wasm_uri,
|
|
194
214
|
render: { type: 'passthrough' },
|
|
195
215
|
};
|
|
196
|
-
this.worker.postMessage(
|
|
197
|
-
let
|
|
216
|
+
this.worker.postMessage({ type: 'init', config: workerConfig });
|
|
217
|
+
let resolutionCb;
|
|
198
218
|
const result = new Promise((resolve) => {
|
|
199
|
-
|
|
219
|
+
resolutionCb = resolve;
|
|
200
220
|
});
|
|
201
221
|
this.worker.onmessage = (event) => {
|
|
202
|
-
if (event.data.
|
|
203
|
-
this.
|
|
204
|
-
this.
|
|
222
|
+
if (event.data.status === 'generated') {
|
|
223
|
+
this.lastMask = event.data.mask;
|
|
224
|
+
this.lastResult = {
|
|
225
|
+
data: event.data.mask,
|
|
226
|
+
facesAndLandmarks: event.data.facesAndLandmarks,
|
|
227
|
+
gesture: event.data.gesture,
|
|
228
|
+
motion: event.data.motion,
|
|
229
|
+
warm: true,
|
|
230
|
+
};
|
|
231
|
+
this.newMask = true;
|
|
205
232
|
}
|
|
206
233
|
else {
|
|
207
|
-
|
|
208
|
-
if (
|
|
209
|
-
|
|
234
|
+
const workerUrl = sharedResourceManager.getWorkerUrl();
|
|
235
|
+
if (workerUrl) {
|
|
236
|
+
URL.revokeObjectURL(workerUrl);
|
|
210
237
|
}
|
|
238
|
+
resolutionCb === null || resolutionCb === void 0 ? void 0 : resolutionCb();
|
|
211
239
|
}
|
|
212
240
|
};
|
|
213
241
|
return result;
|
|
@@ -223,13 +251,13 @@ export class WorkerGenerator {
|
|
|
223
251
|
throw new Error('[ladon-ts] - worker is not defined.');
|
|
224
252
|
}
|
|
225
253
|
this.worker.postMessage({
|
|
254
|
+
type: 'generate',
|
|
226
255
|
image: input,
|
|
227
256
|
}, [input.buffer]);
|
|
228
257
|
});
|
|
229
258
|
}
|
|
230
259
|
destroy() {
|
|
231
|
-
|
|
232
|
-
(_a = this.worker) === null || _a === void 0 ? void 0 : _a.terminate();
|
|
260
|
+
sharedResourceManager.terminateWorker();
|
|
233
261
|
}
|
|
234
262
|
}
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQztBQUd2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQXFCcEQsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFBNEIsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFIMUMseUJBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBSTdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUMzQixTQUFTLEVBQ1QsSUFBSSxZQUFZLENBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUMzRSxFQUNELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FDbEYsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLFVBQVUsQ0FBQyxLQUF3QixFQUFFLEtBQW1CO1FBQzVELE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFD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
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQztBQUd2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQTRCbEUsTUFBTSxPQUFPLGNBQWM7SUFPdkIsWUFBNEIsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFIMUMseUJBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBSTdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUMxQixTQUFTLEVBQ1QsSUFBSSxZQUFZLENBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUMzRSxFQUNELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FDbEYsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ3hCLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDMUQsT0FBTyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksRUFBRSxLQUFLO1NBQ2QsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLFVBQVUs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
|
|
@@ -1,20 +1,52 @@
|
|
|
1
1
|
import { PipelineConfig } from './config';
|
|
2
|
+
import { FacesAndLandmarks } from './generator';
|
|
3
|
+
export interface IFrameInferenceResult {
|
|
4
|
+
facesAndLandmarks: FacesAndLandmarks;
|
|
5
|
+
gesture: Float32Array;
|
|
6
|
+
motion: number;
|
|
7
|
+
skipped: boolean;
|
|
8
|
+
timestamp: number;
|
|
9
|
+
}
|
|
2
10
|
export interface IPipeline {
|
|
3
|
-
onFrame(): Promise<
|
|
11
|
+
onFrame(timestamp: number, maskNeeded?: boolean): Promise<IFrameInferenceResult>;
|
|
4
12
|
isLoaded(): boolean;
|
|
5
13
|
load(): Promise<void>;
|
|
6
14
|
destroy(): void;
|
|
7
15
|
}
|
|
8
16
|
export declare class Pipeline implements IPipeline {
|
|
9
|
-
private
|
|
10
|
-
private
|
|
17
|
+
private inputCanvas;
|
|
18
|
+
private outputCanvas;
|
|
11
19
|
readonly config: PipelineConfig;
|
|
12
20
|
private generator?;
|
|
13
21
|
private renderer?;
|
|
14
22
|
private loaded;
|
|
15
|
-
private
|
|
16
|
-
|
|
17
|
-
|
|
23
|
+
private inputCanvasCtx;
|
|
24
|
+
private lastMaskResult?;
|
|
25
|
+
constructor(inputCanvas: HTMLCanvasElement, outputCanvas: HTMLCanvasElement, config: PipelineConfig);
|
|
26
|
+
/**
|
|
27
|
+
* Processes a single frame and returns the inference result.
|
|
28
|
+
*
|
|
29
|
+
* @param timestamp - The timestamp of the frame.
|
|
30
|
+
* @param [performInference=true] - Flag to perform mask inference.
|
|
31
|
+
* @returns The result of the frame processing.
|
|
32
|
+
* @throws If the pipeline (generator or renderer) is not loaded.
|
|
33
|
+
*/
|
|
34
|
+
onFrame(timestamp: number, performInference?: boolean): Promise<IFrameInferenceResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Resizes the image data if the model expects a fixed size input.
|
|
37
|
+
*
|
|
38
|
+
* @param {Uint8ClampedArray} rawImageData - The raw image data.
|
|
39
|
+
* @returns {Uint8ClampedArray} - The processed mask image data.
|
|
40
|
+
*/
|
|
41
|
+
private getMaskImageData;
|
|
42
|
+
/**
|
|
43
|
+
* Creates the inference result object.
|
|
44
|
+
*
|
|
45
|
+
* @param {number} timestamp - The timestamp of the frame.
|
|
46
|
+
* @param {boolean} performedInference - Indicates if the inference was performed.
|
|
47
|
+
* @returns {IFrameInferenceResult} - The result object containing inference details.
|
|
48
|
+
*/
|
|
49
|
+
private createInferenceResult;
|
|
18
50
|
isLoaded(): boolean;
|
|
19
51
|
load(): Promise<void>;
|
|
20
52
|
destroy(): void;
|
|
@@ -7,42 +7,88 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { LocalGenerator, NullGenerator, WorkerGenerator } from './generator';
|
|
10
|
+
import { LocalGenerator, NullGenerator, WorkerGenerator, } from './generator';
|
|
11
11
|
import { BlurRenderer, PassthroughRenderer, ReplacementRenderer } from './renderer';
|
|
12
12
|
import { resizeImage } from './util';
|
|
13
13
|
export class Pipeline {
|
|
14
|
-
constructor(
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
14
|
+
constructor(inputCanvas, outputCanvas, config) {
|
|
15
|
+
this.inputCanvas = inputCanvas;
|
|
16
|
+
this.outputCanvas = outputCanvas;
|
|
17
17
|
this.config = config;
|
|
18
18
|
this.loaded = false;
|
|
19
|
-
const
|
|
19
|
+
const inputCanvasCtx = this.inputCanvas.getContext('2d', {
|
|
20
20
|
alpha: false,
|
|
21
21
|
willReadFrequently: true,
|
|
22
22
|
});
|
|
23
|
-
if (!
|
|
23
|
+
if (!inputCanvasCtx) {
|
|
24
24
|
throw new Error('[ladon-ts] - error getting input context 2d');
|
|
25
25
|
}
|
|
26
|
-
this.
|
|
26
|
+
this.inputCanvasCtx = inputCanvasCtx;
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Processes a single frame and returns the inference result.
|
|
30
|
+
*
|
|
31
|
+
* @param timestamp - The timestamp of the frame.
|
|
32
|
+
* @param [performInference=true] - Flag to perform mask inference.
|
|
33
|
+
* @returns The result of the frame processing.
|
|
34
|
+
* @throws If the pipeline (generator or renderer) is not loaded.
|
|
35
|
+
*/
|
|
36
|
+
onFrame(timestamp, performInference = true) {
|
|
29
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
30
38
|
if (!this.generator || !this.renderer) {
|
|
31
39
|
throw new Error('[ladon-ts] - pipeline is not loaded.');
|
|
32
40
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
// Get raw image data from the input canvas context.
|
|
42
|
+
const rawImageData = this.inputCanvasCtx.getImageData(0, 0, this.config.input.width, this.config.input.height).data;
|
|
43
|
+
// Get mask image data, resizing if necessary.
|
|
44
|
+
const maskImageData = this.getMaskImageData(rawImageData);
|
|
45
|
+
// Generate the mask if needed, otherwise reuse the previous mask.
|
|
46
|
+
if (performInference || !this.lastMaskResult) {
|
|
47
|
+
this.lastMaskResult = yield this.generator.getLadonOutput(maskImageData);
|
|
38
48
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
// Render the full-size video image in the background with the mask on top.
|
|
50
|
+
yield this.renderer.render(rawImageData, this.lastMaskResult);
|
|
51
|
+
// Cleanup the mask data if a new mask was generated.
|
|
52
|
+
if (performInference) {
|
|
53
|
+
yield this.generator.postRender(maskImageData);
|
|
54
|
+
}
|
|
55
|
+
// Return the inference result.
|
|
56
|
+
return this.createInferenceResult(timestamp, performInference);
|
|
44
57
|
});
|
|
45
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Resizes the image data if the model expects a fixed size input.
|
|
61
|
+
*
|
|
62
|
+
* @param {Uint8ClampedArray} rawImageData - The raw image data.
|
|
63
|
+
* @returns {Uint8ClampedArray} - The processed mask image data.
|
|
64
|
+
*/
|
|
65
|
+
getMaskImageData(rawImageData) {
|
|
66
|
+
// Check if resizing is needed based on configuration.
|
|
67
|
+
if (this.config.mask.input_size.width === this.config.input.width) {
|
|
68
|
+
return rawImageData;
|
|
69
|
+
}
|
|
70
|
+
// Resize the image data.
|
|
71
|
+
return resizeImage(rawImageData, this.config.input.width, this.config.input.height, this.config.mask.input_size.width, this.config.mask.input_size.height);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Creates the inference result object.
|
|
75
|
+
*
|
|
76
|
+
* @param {number} timestamp - The timestamp of the frame.
|
|
77
|
+
* @param {boolean} performedInference - Indicates if the inference was performed.
|
|
78
|
+
* @returns {IFrameInferenceResult} - The result object containing inference details.
|
|
79
|
+
*/
|
|
80
|
+
createInferenceResult(timestamp, performedInference) {
|
|
81
|
+
if (!this.lastMaskResult) {
|
|
82
|
+
throw new Error('[ladon-ts] - mask result not available.');
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
facesAndLandmarks: this.lastMaskResult.facesAndLandmarks,
|
|
86
|
+
gesture: this.lastMaskResult.gesture,
|
|
87
|
+
motion: this.lastMaskResult.motion,
|
|
88
|
+
skipped: !performedInference,
|
|
89
|
+
timestamp,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
46
92
|
isLoaded() {
|
|
47
93
|
return this.loaded;
|
|
48
94
|
}
|
|
@@ -50,13 +96,13 @@ export class Pipeline {
|
|
|
50
96
|
return __awaiter(this, void 0, void 0, function* () {
|
|
51
97
|
switch (this.config.render.type) {
|
|
52
98
|
case 'blur':
|
|
53
|
-
this.renderer = new BlurRenderer(this.
|
|
99
|
+
this.renderer = new BlurRenderer(this.outputCanvas, this.config);
|
|
54
100
|
break;
|
|
55
101
|
case 'passthrough':
|
|
56
|
-
this.renderer = new PassthroughRenderer(this.
|
|
102
|
+
this.renderer = new PassthroughRenderer(this.outputCanvas, this.config);
|
|
57
103
|
break;
|
|
58
104
|
case 'replacement':
|
|
59
|
-
this.renderer = new ReplacementRenderer(this.
|
|
105
|
+
this.renderer = new ReplacementRenderer(this.outputCanvas, this.config);
|
|
60
106
|
break;
|
|
61
107
|
default:
|
|
62
108
|
throw new Error('[ladon-ts] - renderer not implemented.');
|
|
@@ -89,4 +135,4 @@ export class Pipeline {
|
|
|
89
135
|
(_b = this.renderer) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
90
136
|
}
|
|
91
137
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE9BQU8sRUFHSCxjQUFjLEVBRWQsYUFBYSxFQUNiLGVBQWUsR0FDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFlBQVksRUFBaUIsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWlCckMsTUFBTSxPQUFPLFFBQVE7SUFRakIsWUFDWSxXQUE4QixFQUM5QixZQUErQixFQUN2QixNQUFzQjtRQUY5QixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQW1CO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBUmxDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFVbkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3JELEtBQUssRUFBRSxLQUFLO1lBQ1osa0JBQWtCLEVBQUUsSUFBSTtTQUMzQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUNsRTtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ1UsT0FBTyxDQUNoQixTQUFpQixFQUNqQixnQkFBZ0IsR0FBRyxJQUFJOztZQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQzthQUMzRDtZQUVELG9EQUFvRDtZQUNwRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FDakQsQ0FBQyxFQUNELENBQUMsRUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDM0IsQ0FBQyxJQUFJLENBQUM7WUFFUCw4Q0FBOEM7WUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTFELGtFQUFrRTtZQUNsRSxJQUFJLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzVFO1lBRUQsMkVBQTJFO1lBQzNFLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUU5RCxxREFBcUQ7WUFDckQsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNsRDtZQUVELCtCQUErQjtZQUMvQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRSxDQUFDO0tBQUE7SUFFRDs7Ozs7T0FLRztJQUNLLGdCQUFnQixDQUFDLFlBQStCO1FBQ3BELHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQy9ELE9BQU8sWUFBWSxDQUFDO1NBQ3ZCO1FBRUQseUJBQXlCO1FBQ3pCLE9BQU8sV0FBVyxDQUNkLFlBQVksRUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FDckMsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxxQkFBcUIsQ0FDekIsU0FBaUIsRUFDakIsa0JBQTJCO1FBRTNCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU87WUFDSCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQjtZQUN4RCxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPO1lBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU07WUFDbEMsT0FBTyxFQUFFLENBQUMsa0JBQWtCO1lBQzVCLFNBQVM7U0FDWixDQUFDO0lBQ04sQ0FBQztJQUVNLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVZLElBQUk7O1lBQ2IsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQzdCLEtBQUssTUFBTTtvQkFDUCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqRSxNQUFNO2dCQUNWLEtBQUssYUFBYTtvQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hFLE1BQU07Z0JBQ1YsS0FBSyxhQUFhO29CQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEUsTUFBTTtnQkFDVjtvQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7YUFDakU7WUFFRCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO2dCQUMzQyxpRkFBaUY7Z0JBQ2pGLDZHQUE2RztnQkFDN0csSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0gsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hDLEtBQUssT0FBTzt3QkFDUixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDakQsTUFBTTtvQkFDVixLQUFLLFFBQVE7d0JBQ1QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ2xELE1BQU07b0JBQ1Y7d0JBQ0ksTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO2lCQUNsRTthQUNKO1lBRUQsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7S0FBQTtJQUVNLE9BQU87O1FBQ1YsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxPQUFPLEVBQUUsQ0FBQztRQUMxQixNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7Q0FDSiJ9
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PipelineConfig } from '../config';
|
|
2
|
-
import {
|
|
2
|
+
import { LadonOutput } from '../generator';
|
|
3
3
|
import { LadonRenderer } from './ladon-renderer';
|
|
4
4
|
import { WebGLRenderer } from './webgl-renderer';
|
|
5
5
|
export declare class BlurRenderer extends WebGLRenderer implements LadonRenderer {
|
|
@@ -14,7 +14,7 @@ export declare class BlurRenderer extends WebGLRenderer implements LadonRenderer
|
|
|
14
14
|
private fragment_shader_pass_1_src;
|
|
15
15
|
fragment_shader_pass_2_src: string;
|
|
16
16
|
constructor(output_canvas: HTMLCanvasElement, config: PipelineConfig);
|
|
17
|
-
render(input: Uint8ClampedArray, mask:
|
|
17
|
+
render(input: Uint8ClampedArray, mask: LadonOutput): Promise<void>;
|
|
18
18
|
load(): Promise<void>;
|
|
19
19
|
destroy(): void;
|
|
20
20
|
private getBlurKernel;
|