@webex/ladon-ts 5.4.5 → 5.4.6
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,13 @@
|
|
|
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
|
+
### 5.4.6 (2025-04-07)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **worker:** ensure preload completes before initializing ([#57](https://github.com/beyonddunbar/ladon-ts/issues/57)) ([7483c74](https://github.com/beyonddunbar/ladon-ts/commit/7483c748ae4f1f6f061821ba4b0e853719deb00f))
|
|
11
|
+
|
|
5
12
|
### 5.4.5 (2025-03-28)
|
|
6
13
|
|
|
7
14
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "5.4.
|
|
1
|
+
export declare const LIB_VERSION = "5.4.6";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sources":["../../../src/lib/version.ts"],"sourcesContent":["export const LIB_VERSION = '5.4.
|
|
1
|
+
{"version":3,"file":"version.js","sources":["../../../src/lib/version.ts"],"sourcesContent":["export const LIB_VERSION = '5.4.6';\n"],"names":["LIB_VERSION"],"mappings":"AAAO,MAAMA,IAAc;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cisco Ladon-TS
|
|
3
3
|
* Copyright (c) Cisco Systems, Inc. All rights reserved.
|
|
4
|
-
* Build timestamp:
|
|
4
|
+
* Build timestamp: April 7, 2025 at 03:24:33 PM UTC
|
|
5
5
|
*/
|
|
6
6
|
(function(){"use strict";var _documentCurrentScript=typeof document<"u"?document.currentScript:null;self.document={baseURI:location.origin};const originalConsoleLog=console.log,originalConsoleWarn=console.warn,originalConsoleError=console.error;console.log=(...t)=>{postMessage({type:"log",message:t.join(" "),severity:"log"}),originalConsoleLog(...t)},console.warn=(...t)=>{postMessage({type:"log",message:t.join(" "),severity:"warn"}),originalConsoleWarn(...t)},console.error=(...t)=>{postMessage({type:"log",message:t.join(" "),severity:"error"}),originalConsoleError(...t)};/*!
|
|
7
7
|
* ONNX Runtime Web v1.20.1
|
|
@@ -1828,5 +1828,5 @@ as ORT format: ${u}`)}}loadFromOnnxFormat(t,r){let o=Dp.onnx.ModelProto.decode(t
|
|
|
1828
1828
|
*
|
|
1829
1829
|
* SPDX-License-Identifier: Apache-2.0
|
|
1830
1830
|
*)
|
|
1831
|
-
*/const A=(t,r)=>!r||t.startsWith("http")?new URL(t).href:t?r.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):r;function b(t){if(t.startsWith("blob:"))return!0;try{return new URL(t),!0}catch{return!1}}async function U$1(t){const r=await caches.open("ladon-cache"),o=await r.match(t);if(o)return o.arrayBuffer();const i=await fetch(t);if(!i.ok)throw new Error(`Failed to fetch file: ${t}`);const u=i.headers.get("Content-Type")||"application/octet-stream";if(!u.includes("application/wasm")&&!u.includes("binary/octet-stream"))throw new Error(`Unexpected MIME type: ${u} for ${t}`);const n=await i.arrayBuffer(),a=new Response(n,{headers:{"Content-Type":u,"Content-Length":n.byteLength.toString()}});return await r.put(t,a),n}const k="ort-wasm-simd-threaded.wasm";class U{constructor(){this.modelSessions={},this.resolvedUriCache=new Map}async initializeWorker(r){if(typeof Worker>"u")throw new Error("[ladon-ts] web workers are not supported in this environment");const o=await this.resolveUri(r,r.mask.workerUri),i=await(await fetch(o,{cache:"force-cache"})).text();return this.workerUrl=URL.createObjectURL(new Blob([i],{type:"text/javascript"})),new Worker(this.workerUrl,{type:"module"})}terminateWorker(){this.worker&&(this.worker.terminate(),this.worker=void 0)}async loadModel(r){const{mask:o,executionProviders:i}=r;z.wasm.numThreads=1;const u=await this.resolveUri(r,r.wasmUri);if(u)try{z.wasm.wasmBinary=await U$1(u+k)}catch(d){console.warn("Failed to load or cache WASM file. Using WASM paths.",d),z.wasm.wasmPaths=u}const n=await this.resolveUri(r,o.modelUri);let a=this.modelSessions[n];if(!a){const d={executionProviders:i!=null&&i.length?i:["wasm"]};try{const c=await U$1(n);a=await Yd.create(c,d)}catch(c){console.warn("Failed to load or cache model file. Using model URL.",c),a=await Yd.create(n,d)}}return this.modelSessions[n]=a,await this.warmupModel(a,o.inputSize,o.modelRank),a}async preloadWorker(r){const o=await this.prepareWorkerConfig(r);this.worker=await this.initializeWorker(o),this.worker.postMessage({type:"preload",config:o})}async warmupModel(r,o={width:1280,height:720},i=3,u="float32"){const n=o.height*o.width,a=new Float32Array(i*n).fill(0),d=new yt(u,a,[1,i,o.height,o.width]),c={[r.inputNames[0]]:d};if(i===3){const e=new Float32Array(n).fill(0),l=new yt(u,e,[1,1,o.height,o.width]);c[r.inputNames[1]]=l}await r.run(c)}getModelSession(r){return this.modelSessions[r]}async resolveUri(r,o){if(!o)throw new Error("Asset URI is undefined.");if(this.resolvedUriCache.has(o))return this.resolvedUriCache.get(o);let i;if(b(o)?i=o:o.match(/\.[a-z0-9]+$/i)?typeof r.assetUrlResolver=="function"&&(i=await r.assetUrlResolver(o,r)):i=A(o,r.baseUrl),!i)throw new Error(`Failed to resolve asset URI: ${o}`);return this.resolvedUriCache.set(o,i),i}getWorker(){return this.worker}getWorkerUrl(){return this.workerUrl}async prepareWorkerConfig(r){const o={...r,mask:{...r.mask,modelUri:await this.resolveUri(r,r.mask.modelUri),workerUri:await this.resolveUri(r,r.mask.workerUri)},wasmUri:await this.resolveUri(r,r.wasmUri),assetUrlResolver:void 0};return JSON.parse(JSON.stringify(o))}}const p=new U;class R{constructor(r){this.config=r,this.lastMaskGenerationTime=0;const{height:o,width:i}=this.config.mask.outputSize;this.lastMask=new yt("float32",new Float32Array(o*i),[1,1,o,i]),this.lastResult={data:this.lastMask.data,facesAndLandmarks:{data:new Float32Array(0),dims:[]},gesture:new Float32Array(0),motion:0,timestamp:0,warm:!1}}preprocess(r,o){const{modelRank:i,inputSize:u,outputSize:n}=this.config.mask,{height:a,width:d}=u,c=a*d;this.output??(this.output=new Float32Array(c*i));const e=r.length/4;for(let h=0;h<3;h++)for(let f=0;f<e;f++)this.output[f+h*c]=r[f*4+(2-h)];const l=n.width/d,s=n.height/a;for(let h=0;h<d;h++){const f=Math.floor(h*l);for(let m=0;m<a;m++){const v=Math.floor(m*s),_=f+v*n.width,I=h+m*d+3*c,T=Math.min(Math.max(o[_],0),255);this.output[I]=T}}return this.output}getTimeSinceLastGeneration(){return Date.now()-this.lastMaskGenerationTime}async getLadonOutput(r,o){var i,u,n,a;if(!this.maskModel)throw new Error("[ladon-ts] - mask model not loaded.");if(this.getTimeSinceLastGeneration()<this.config.mask.generationIntervalMs)return{data:this.lastMask.data,facesAndLandmarks:this.lastResult.facesAndLandmarks,gesture:this.lastResult.gesture,motion:this.lastResult.motion,timestamp:this.lastResult.timestamp,warm:!1};this.lastMaskGenerationTime=Date.now();const d=new yt("float32",this.preprocess(r,this.lastMask.data),[1,this.config.mask.modelRank,this.config.mask.inputSize.height,this.config.mask.inputSize.width]),c=await this.maskModel.run({input:d});return this.lastMask=c.segmentation,this.lastResult={data:this.lastMask.data??new Float32Array(0),facesAndLandmarks:{data:((i=c.faces_and_landmarks)==null?void 0:i.data)??new Float32Array(0),dims:((u=c.faces_and_landmarks)==null?void 0:u.dims)??[]},gesture:((n=c.gesture)==null?void 0:n.data)??new Float32Array(0),motion:((a=c.motion)==null?void 0:a.data[0])??0,timestamp:o,warm:!0},this.lastResult}async load(){const r=await p.resolveUri(this.config,this.config.mask.modelUri);if(this.maskModel=p.getModelSession(r),this.maskModel??(this.maskModel=await p.loadModel(this.config)),!this.maskModel)throw new Error("Failed to load the ONNX model.")}isLoaded(){return!!this.maskModel}async postRender(r){}destroy(){}}let generator,busy=!1;self.addEventListener("message",async t=>{const{type:r,config:o,image:i,timestamp:u}=t.data;try{switch(r){case"preload":o&&
|
|
1831
|
+
*/const A=(t,r)=>!r||t.startsWith("http")?new URL(t).href:t?r.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):r;function b(t){if(t.startsWith("blob:"))return!0;try{return new URL(t),!0}catch{return!1}}async function U$1(t){const r=await caches.open("ladon-cache"),o=await r.match(t);if(o)return o.arrayBuffer();const i=await fetch(t);if(!i.ok)throw new Error(`Failed to fetch file: ${t}`);const u=i.headers.get("Content-Type")||"application/octet-stream";if(!u.includes("application/wasm")&&!u.includes("binary/octet-stream"))throw new Error(`Unexpected MIME type: ${u} for ${t}`);const n=await i.arrayBuffer(),a=new Response(n,{headers:{"Content-Type":u,"Content-Length":n.byteLength.toString()}});return await r.put(t,a),n}const k="ort-wasm-simd-threaded.wasm";class U{constructor(){this.modelSessions={},this.resolvedUriCache=new Map}async initializeWorker(r){if(typeof Worker>"u")throw new Error("[ladon-ts] web workers are not supported in this environment");const o=await this.resolveUri(r,r.mask.workerUri),i=await(await fetch(o,{cache:"force-cache"})).text();return this.workerUrl=URL.createObjectURL(new Blob([i],{type:"text/javascript"})),new Worker(this.workerUrl,{type:"module"})}terminateWorker(){this.worker&&(this.worker.terminate(),this.worker=void 0)}async loadModel(r){const{mask:o,executionProviders:i}=r;z.wasm.numThreads=1;const u=await this.resolveUri(r,r.wasmUri);if(u)try{z.wasm.wasmBinary=await U$1(u+k)}catch(d){console.warn("Failed to load or cache WASM file. Using WASM paths.",d),z.wasm.wasmPaths=u}const n=await this.resolveUri(r,o.modelUri);let a=this.modelSessions[n];if(!a){const d={executionProviders:i!=null&&i.length?i:["wasm"]};try{const c=await U$1(n);a=await Yd.create(c,d)}catch(c){console.warn("Failed to load or cache model file. Using model URL.",c),a=await Yd.create(n,d)}}return this.modelSessions[n]=a,await this.warmupModel(a,o.inputSize,o.modelRank),a}async preloadWorker(r){const o=await this.prepareWorkerConfig(r);this.worker=await this.initializeWorker(o),this.worker.postMessage({type:"preload",config:o})}async warmupModel(r,o={width:1280,height:720},i=3,u="float32"){const n=o.height*o.width,a=new Float32Array(i*n).fill(0),d=new yt(u,a,[1,i,o.height,o.width]),c={[r.inputNames[0]]:d};if(i===3){const e=new Float32Array(n).fill(0),l=new yt(u,e,[1,1,o.height,o.width]);c[r.inputNames[1]]=l}await r.run(c)}getModelSession(r){return this.modelSessions[r]}async resolveUri(r,o){if(!o)throw new Error("Asset URI is undefined.");if(this.resolvedUriCache.has(o))return this.resolvedUriCache.get(o);let i;if(b(o)?i=o:o.match(/\.[a-z0-9]+$/i)?typeof r.assetUrlResolver=="function"&&(i=await r.assetUrlResolver(o,r)):i=A(o,r.baseUrl),!i)throw new Error(`Failed to resolve asset URI: ${o}`);return this.resolvedUriCache.set(o,i),i}getWorker(){return this.worker}getWorkerUrl(){return this.workerUrl}async prepareWorkerConfig(r){const o={...r,mask:{...r.mask,modelUri:await this.resolveUri(r,r.mask.modelUri),workerUri:await this.resolveUri(r,r.mask.workerUri)},wasmUri:await this.resolveUri(r,r.wasmUri),assetUrlResolver:void 0};return JSON.parse(JSON.stringify(o))}}const p=new U;class R{constructor(r){this.config=r,this.lastMaskGenerationTime=0;const{height:o,width:i}=this.config.mask.outputSize;this.lastMask=new yt("float32",new Float32Array(o*i),[1,1,o,i]),this.lastResult={data:this.lastMask.data,facesAndLandmarks:{data:new Float32Array(0),dims:[]},gesture:new Float32Array(0),motion:0,timestamp:0,warm:!1}}preprocess(r,o){const{modelRank:i,inputSize:u,outputSize:n}=this.config.mask,{height:a,width:d}=u,c=a*d;this.output??(this.output=new Float32Array(c*i));const e=r.length/4;for(let h=0;h<3;h++)for(let f=0;f<e;f++)this.output[f+h*c]=r[f*4+(2-h)];const l=n.width/d,s=n.height/a;for(let h=0;h<d;h++){const f=Math.floor(h*l);for(let m=0;m<a;m++){const v=Math.floor(m*s),_=f+v*n.width,I=h+m*d+3*c,T=Math.min(Math.max(o[_],0),255);this.output[I]=T}}return this.output}getTimeSinceLastGeneration(){return Date.now()-this.lastMaskGenerationTime}async getLadonOutput(r,o){var i,u,n,a;if(!this.maskModel)throw new Error("[ladon-ts] - mask model not loaded.");if(this.getTimeSinceLastGeneration()<this.config.mask.generationIntervalMs)return{data:this.lastMask.data,facesAndLandmarks:this.lastResult.facesAndLandmarks,gesture:this.lastResult.gesture,motion:this.lastResult.motion,timestamp:this.lastResult.timestamp,warm:!1};this.lastMaskGenerationTime=Date.now();const d=new yt("float32",this.preprocess(r,this.lastMask.data),[1,this.config.mask.modelRank,this.config.mask.inputSize.height,this.config.mask.inputSize.width]),c=await this.maskModel.run({input:d});return this.lastMask=c.segmentation,this.lastResult={data:this.lastMask.data??new Float32Array(0),facesAndLandmarks:{data:((i=c.faces_and_landmarks)==null?void 0:i.data)??new Float32Array(0),dims:((u=c.faces_and_landmarks)==null?void 0:u.dims)??[]},gesture:((n=c.gesture)==null?void 0:n.data)??new Float32Array(0),motion:((a=c.motion)==null?void 0:a.data[0])??0,timestamp:o,warm:!0},this.lastResult}async load(){const r=await p.resolveUri(this.config,this.config.mask.modelUri);if(this.maskModel=p.getModelSession(r),this.maskModel??(this.maskModel=await p.loadModel(this.config)),!this.maskModel)throw new Error("Failed to load the ONNX model.")}isLoaded(){return!!this.maskModel}async postRender(r){}destroy(){}}let preloadPromise=null,generator,busy=!1;self.addEventListener("message",async t=>{const{type:r,config:o,image:i,timestamp:u}=t.data;try{switch(r){case"preload":o&&(preloadPromise=handlePreload(o),await preloadPromise);break;case"init":o&&(preloadPromise&&await preloadPromise,await handleInit(o));break;case"generate":i&&await handleGenerate(i,u);break;default:console.warn(`[ladon-ts] - worker generator - unknown message: ${JSON.stringify(t.data)}`)}}catch(n){console.error(`[ladon-ts] - worker generator - error handling message: ${n}`),postMessage({status:"error",error:n.message})}});async function handlePreload(t){await p.loadModel(t),postMessage({status:"preloaded"})}async function handleInit(t){generator=new R(t),await generator.load(),postMessage({status:"initialized"})}async function handleGenerate(t,r){if(busy)return;if(!generator||!generator.isLoaded()){console.warn("[ladon-ts] - Generator is not initialized");return}if(busy=!0,!t){console.warn("[ladon-ts] - No valid input provided for generation"),busy=!1;return}const o=await generator.getLadonOutput(t,r);o.warm&&postMessage({facesAndLandmarks:o.facesAndLandmarks,gesture:o.gesture,mask:o.data,motion:o.motion,timestamp:o.timestamp,status:"generated"}),setTimeout(()=>{busy=!1},0)}})();
|
|
1832
1832
|
//# sourceMappingURL=segmentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmentation.js","sources":["../src/shim.ts","../src/console-overrides.ts","../../build/module/lib/util.js","../../build/module/lib/shared-resource-manager.js","../../build/module/lib/generator.js","../src/segmentation.ts"],"sourcesContent":["/**\n * This file is used to provide a shim for the document object in a web worker.\n * The document object is not available in a web worker, so we need to provide a shim\n * to prevent errors when running the code in a web worker.\n * \n * See: https://github.com/vitejs/vite/issues/9879#issuecomment-1372112651\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(self.document as any) = {\n baseURI: location.origin\n};","/**\n * Override console methods to send logs to the main thread for display in the UI.\n */\n\nconst originalConsoleLog = console.log;\nconst originalConsoleWarn = console.warn;\nconst originalConsoleError = console.error;\n\nconsole.log = (...args) => {\n postMessage({ type: 'log', message: args.join(' '), severity: 'log' });\n originalConsoleLog(...args);\n};\n\nconsole.warn = (...args) => {\n postMessage({ type: 'log', message: args.join(' '), severity: 'warn' });\n originalConsoleWarn(...args);\n};\n\nconsole.error = (...args) => {\n postMessage({ type: 'log', message: args.join(' '), severity: 'error' });\n originalConsoleError(...args);\n};","var C = /* @__PURE__ */ ((o) => (o.Nearest = \"nearest\", o))(C || {});\nconst E = (o, r, s, n, t) => {\n const a = new Uint8ClampedArray(n * t * 4), m = r / n, M = s / t, i = r * 4;\n let c = 0;\n for (let e = 0; e < t; e++) {\n const l = Math.floor(e * M) * i;\n for (let f = 0; f < n; f++) {\n const u = l + Math.floor(f * m) * 4;\n a[c++] = o[u], a[c++] = o[u + 1], a[c++] = o[u + 2], a[c++] = o[u + 3];\n }\n }\n return a;\n};\nfunction I(o, r, s, n, t) {\n const a = new Uint8ClampedArray(n * t);\n if (r === n && s === t) {\n for (let i = 0; i < o.length; i++)\n a[i] = Math.min(Math.max(o[i], 0), 255);\n return a;\n }\n const m = (r - 1) / (n - 1), M = (s - 1) / (t - 1);\n for (let i = 0; i < t; i++)\n for (let c = 0; c < n; c++) {\n const e = m * c, l = M * i, f = Math.floor(e), u = Math.floor(l), d = Math.min(Math.ceil(e), r - 1), S = Math.min(Math.ceil(l), s - 1), y = e - f, h = l - u, p = o[u * r + f], w = o[u * r + d], P = o[S * r + f], x = o[S * r + d], k = p * (1 - y) * (1 - h) + w * y * (1 - h) + P * (1 - y) * h + x * y * h;\n a[i * n + c] = Math.min(Math.max(k, 0), 255);\n }\n return a;\n}\nfunction R(o, r, s, n, t) {\n const a = new Uint8ClampedArray(n * t), m = r / n, M = s / t, i = (e, l) => {\n if (e === 0) return 1;\n if (e < 0 && (e = -e), e < l) {\n const f = Math.PI * e;\n return l * Math.sin(f) * Math.sin(f / l) / (f * f);\n }\n return 0;\n }, c = 3;\n for (let e = 0; e < t; e++)\n for (let l = 0; l < n; l++) {\n const f = l * m, u = e * M, d = Math.floor(f), S = Math.floor(u);\n let y = 0, h = 0;\n for (let p = S - c + 1; p <= S + c; p++)\n for (let w = d - c + 1; w <= d + c; w++)\n if (w >= 0 && w < r && p >= 0 && p < s) {\n const P = o[p * r + w], x = i(f - w, c) * i(u - p, c);\n y += P * x, h += x;\n }\n a[e * n + l] = h !== 0 ? Math.round(y / h) : 0;\n }\n return a;\n}\nconst A = (o, r) => !r || o.startsWith(\"http\") ? new URL(o).href : o ? r.replace(/\\/+$/, \"\") + \"/\" + o.replace(/^\\/+/, \"\") : r;\nfunction L(o, r, s) {\n const n = o.createShader(r);\n if (!n)\n throw new Error(\"[ladon-ts] - error creating shader\");\n if (o.shaderSource(n, s), o.compileShader(n), !o.getShaderParameter(n, o.COMPILE_STATUS)) {\n const t = o.getShaderInfoLog(n) ?? \"unknown error compiling shader.\";\n throw new Error(\"[ladon-ts] - \" + t);\n }\n return n;\n}\nfunction T(o, r, s) {\n const n = o.createProgram();\n if (!n)\n throw new Error(\"[ladon-ts] - error creating GPU program\");\n if (o.attachShader(n, r), o.attachShader(n, s), o.linkProgram(n), !o.getProgramParameter(n, o.LINK_STATUS)) {\n const t = o.getProgramInfoLog(n) ?? \"unknown error linking program.\";\n throw new Error(\"[ladon-ts] - \" + t);\n }\n return n;\n}\nfunction b(o) {\n if (o.startsWith(\"blob:\"))\n return !0;\n try {\n return new URL(o), !0;\n } catch {\n return !1;\n }\n}\nasync function U(o) {\n const r = await caches.open(\"ladon-cache\"), s = await r.match(o);\n if (s)\n return s.arrayBuffer();\n const n = await fetch(o);\n if (!n.ok)\n throw new Error(`Failed to fetch file: ${o}`);\n const t = n.headers.get(\"Content-Type\") || \"application/octet-stream\";\n if (!t.includes(\"application/wasm\") && !t.includes(\"binary/octet-stream\"))\n throw new Error(`Unexpected MIME type: ${t} for ${o}`);\n const a = await n.arrayBuffer(), m = new Response(a, {\n headers: {\n \"Content-Type\": t,\n \"Content-Length\": a.byteLength.toString()\n }\n });\n return await r.put(o, m), a;\n}\nexport {\n C as InterpolationMethod,\n I as bilinearUpsample,\n L as compileShader,\n b as isResolvedUri,\n R as lanczos3Upsample,\n T as linkProgram,\n U as loadAndCacheFile,\n E as resizeImage,\n A as toAbsoluteURI\n};\n//# sourceMappingURL=util.js.map\n","import * as i from \"onnxruntime-web\";\nimport { loadAndCacheFile as h, isResolvedUri as c, toAbsoluteURI as m } from \"./util.js\";\nconst k = \"ort-wasm-simd-threaded.wasm\";\nclass U {\n constructor() {\n this.modelSessions = {}, this.resolvedUriCache = /* @__PURE__ */ new Map();\n }\n /**\n * Initialize the worker using the provided configuration.\n *\n * @param config - The configuration object.\n * @returns A promise that resolves when the worker is initialized.\n */\n async initializeWorker(e) {\n if (typeof Worker > \"u\")\n throw new Error(\"[ladon-ts] web workers are not supported in this environment\");\n const r = await this.resolveUri(e, e.mask.workerUri), s = await (await fetch(r, { cache: \"force-cache\" })).text();\n return this.workerUrl = URL.createObjectURL(new Blob([s], { type: \"text/javascript\" })), new Worker(this.workerUrl, { type: \"module\" });\n }\n /**\n * Terminate the worker.\n */\n terminateWorker() {\n this.worker && (this.worker.terminate(), this.worker = void 0);\n }\n /**\n * Load the model using the provided configuration. This gets called by the worker when using\n * the worker generator.\n *\n * @param config - The configuration object.\n * @returns A promise that resolves when the model is preloaded.\n */\n async loadModel(e) {\n const { mask: r, executionProviders: o } = e;\n i.env.wasm.numThreads = 1;\n const s = await this.resolveUri(e, e.wasmUri);\n if (s)\n try {\n i.env.wasm.wasmBinary = await h(s + k);\n } catch (w) {\n console.warn(\"Failed to load or cache WASM file. Using WASM paths.\", w), i.env.wasm.wasmPaths = s;\n }\n const a = await this.resolveUri(e, r.modelUri);\n let t = this.modelSessions[a];\n if (!t) {\n const n = { executionProviders: o != null && o.length ? o : [\"wasm\"] };\n try {\n const l = await h(a);\n t = await i.InferenceSession.create(l, n);\n } catch (l) {\n console.warn(\"Failed to load or cache model file. Using model URL.\", l), t = await i.InferenceSession.create(a, n);\n }\n }\n return this.modelSessions[a] = t, await this.warmupModel(t, r.inputSize, r.modelRank), t;\n }\n /**\n * Preload the worker using the provided configuration.\n *\n * @param config - The configuration object.\n * @returns A promise that resolves when the worker is preloaded.\n */\n async preloadWorker(e) {\n const r = await this.prepareWorkerConfig(e);\n this.worker = await this.initializeWorker(r), this.worker.postMessage({ type: \"preload\", config: r });\n }\n /**\n * Warmup the model session with a dummy input to avoid latency when running the model for the first time.\n *\n * @param {ort.InferenceSession} session The model session.\n * @param {ResolutionConfig} inputSize The input size of the model.\n * @param {number} inputChannels The number of input channels (e.g., RGB is 3).\n * @param {ort.Tensor.Type} inputType The input tensor type.\n * @returns {Promise<void>} A promise that resolves when the model is warmed up.\n * @example\n * await warmupModel(session, inputSize, inputChannels, inputType);\n */\n async warmupModel(e, r = { width: 1280, height: 720 }, o = 3, s = \"float32\") {\n const a = r.height * r.width, t = new Float32Array(o * a).fill(0), w = new i.Tensor(s, t, [\n 1,\n o,\n r.height,\n r.width\n ]), n = { [e.inputNames[0]]: w };\n if (o === 3) {\n const l = new Float32Array(a).fill(0), d = new i.Tensor(s, l, [\n 1,\n 1,\n r.height,\n r.width\n ]);\n n[e.inputNames[1]] = d;\n }\n await e.run(n);\n }\n /**\n * Get the model session for the provided model URL.\n *\n * @param {string} modelUrl The model URL.\n * @returns {ort.InferenceSession} The model session.\n * @example\n * const session = getModelSession(modelUrl);\n */\n getModelSession(e) {\n return this.modelSessions[e];\n }\n /**\n * Resolves the full URL for a given asset. Non-file URIs are treated as paths\n * and resolved using the `toAbsoluteURI` method.\n *\n * @param config - The preload configuration.\n * @param assetUri - The asset URI from the config.\n * @returns The resolved full URL.\n */\n /**\n * Resolves the full URL for a given asset. Non-file URIs are treated as paths and resolved\n * using the `toAbsoluteURI` method. If the assetUri is already resolved, or if it's found in\n * cache, it will be returned directly. If an assetUrlResolver function is provided in the\n * configuration, it will be used to resolve the URL if the assetUri is not fully qualified,\n * a blob URL, or in the cache.\n *\n * @param config - The preload configuration.\n * @param assetUri - The asset URI from the config.\n * @returns The resolved full URL.\n */\n async resolveUri(e, r) {\n if (!r)\n throw new Error(\"Asset URI is undefined.\");\n if (this.resolvedUriCache.has(r))\n return this.resolvedUriCache.get(r);\n let o;\n if (c(r) ? o = r : r.match(/\\.[a-z0-9]+$/i) ? typeof e.assetUrlResolver == \"function\" && (o = await e.assetUrlResolver(r, e)) : o = m(r, e.baseUrl), !o)\n throw new Error(`Failed to resolve asset URI: ${r}`);\n return this.resolvedUriCache.set(r, o), o;\n }\n getWorker() {\n return this.worker;\n }\n getWorkerUrl() {\n return this.workerUrl;\n }\n /**\n * Prepare the worker configuration by resolving the final URLs and paths to send to the\n * worker. This is necessary because we can't send functions to the worker. We also need to\n * remove the assetUrlResolver function from the configuration.\n *\n * @param config - The preload configuration.\n * @returns The worker configuration.\n */\n async prepareWorkerConfig(e) {\n const o = { ...{\n ...e,\n mask: {\n ...e.mask,\n modelUri: await this.resolveUri(e, e.mask.modelUri),\n workerUri: await this.resolveUri(e, e.mask.workerUri)\n },\n wasmUri: await this.resolveUri(e, e.wasmUri)\n }, assetUrlResolver: void 0 };\n return JSON.parse(JSON.stringify(o));\n }\n}\nconst p = new U();\nexport {\n p as sharedResourceManager\n};\n//# sourceMappingURL=shared-resource-manager.js.map\n","import * as c from \"onnxruntime-web\";\nimport { sharedResourceManager as d } from \"./shared-resource-manager.js\";\nclass R {\n constructor(t) {\n this.config = t, this.lastMaskGenerationTime = 0;\n const { height: a, width: e } = this.config.mask.outputSize;\n this.lastMask = new c.Tensor(\"float32\", new Float32Array(a * e), [\n 1,\n 1,\n a,\n e\n ]), this.lastResult = {\n data: this.lastMask.data,\n facesAndLandmarks: { data: new Float32Array(0), dims: [] },\n gesture: new Float32Array(0),\n motion: 0,\n timestamp: 0,\n warm: !1\n };\n }\n /**\n * This method preprocesses an input Uint8ClampedArray to a Float32Array\n * while maintaining memory efficiency by reusing a class-scoped output buffer.\n * If the model rank is 4 (e.g., newer tiny model), it sets an alpha channel value.\n *\n * @param {Uint8ClampedArray} input - The input data to be preprocessed\n * @param {Float32Array} alpha - The alpha channel data\n * @returns {Float32Array} - The processed data\n */\n preprocess(t, a) {\n const {\n modelRank: e,\n inputSize: l,\n outputSize: s\n } = this.config.mask, { height: r, width: i } = l, o = r * i;\n this.output ?? (this.output = new Float32Array(o * e));\n const k = t.length / 4;\n for (let n = 0; n < 3; n++)\n for (let m = 0; m < k; m++)\n this.output[m + n * o] = t[m * 4 + (2 - n)];\n const w = s.width / i, g = s.height / r;\n for (let n = 0; n < i; n++) {\n const m = Math.floor(n * w);\n for (let h = 0; h < r; h++) {\n const f = Math.floor(h * g), p = m + f * s.width, M = n + h * i + 3 * o, y = Math.min(Math.max(a[p], 0), 255);\n this.output[M] = y;\n }\n }\n return this.output;\n }\n getTimeSinceLastGeneration() {\n return Date.now() - this.lastMaskGenerationTime;\n }\n async getLadonOutput(t, a) {\n var s, r, i, o;\n if (!this.maskModel)\n throw new Error(\"[ladon-ts] - mask model not loaded.\");\n if (this.getTimeSinceLastGeneration() < this.config.mask.generationIntervalMs)\n return {\n data: this.lastMask.data,\n facesAndLandmarks: this.lastResult.facesAndLandmarks,\n gesture: this.lastResult.gesture,\n motion: this.lastResult.motion,\n timestamp: this.lastResult.timestamp,\n warm: !1\n };\n this.lastMaskGenerationTime = Date.now();\n const e = new c.Tensor(\"float32\", this.preprocess(t, this.lastMask.data), [\n 1,\n this.config.mask.modelRank,\n this.config.mask.inputSize.height,\n this.config.mask.inputSize.width\n ]), l = await this.maskModel.run({ input: e });\n return this.lastMask = l.segmentation, this.lastResult = {\n data: this.lastMask.data ?? new Float32Array(0),\n facesAndLandmarks: {\n data: ((s = l.faces_and_landmarks) == null ? void 0 : s.data) ?? new Float32Array(0),\n dims: ((r = l.faces_and_landmarks) == null ? void 0 : r.dims) ?? []\n },\n gesture: ((i = l.gesture) == null ? void 0 : i.data) ?? new Float32Array(0),\n motion: ((o = l.motion) == null ? void 0 : o.data[0]) ?? 0,\n timestamp: a,\n warm: !0\n }, this.lastResult;\n }\n async load() {\n const t = await d.resolveUri(\n this.config,\n this.config.mask.modelUri\n );\n if (this.maskModel = d.getModelSession(t), this.maskModel ?? (this.maskModel = await d.loadModel(this.config)), !this.maskModel)\n throw new Error(\"Failed to load the ONNX model.\");\n }\n isLoaded() {\n return !!this.maskModel;\n }\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n async postRender(t) {\n }\n destroy() {\n }\n}\nclass L {\n constructor(t) {\n this.config = t, this.lastMask = new Float32Array(\n this.config.mask.outputSize.height * this.config.mask.outputSize.width\n );\n }\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n async getLadonOutput(t) {\n return {\n data: this.lastMask,\n facesAndLandmarks: { data: new Float32Array(0), dims: [] },\n gesture: new Float32Array(0),\n motion: 0,\n timestamp: 0,\n warm: !1\n };\n }\n async load() {\n }\n isLoaded() {\n return !0;\n }\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n async postRender(t) {\n }\n destroy() {\n }\n}\nclass F {\n constructor(t) {\n this.config = t, this.newMask = !0, this.lastMask = new Float32Array(\n this.config.mask.outputSize.height * this.config.mask.outputSize.width\n ), this.lastResult = {\n data: this.lastMask,\n facesAndLandmarks: { data: new Float32Array(0), dims: [] },\n gesture: new Float32Array(0),\n motion: 0,\n timestamp: 0,\n warm: !1\n };\n }\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n async getLadonOutput(t) {\n const a = {\n data: this.lastMask,\n facesAndLandmarks: this.lastResult.facesAndLandmarks,\n gesture: this.lastResult.gesture,\n motion: this.lastResult.motion,\n timestamp: this.lastResult.timestamp,\n warm: this.newMask\n };\n return this.newMask = !1, a;\n }\n async load() {\n const t = await d.prepareWorkerConfig(this.config);\n if (this.worker = d.getWorker(), this.worker ?? (this.worker = await d.initializeWorker(t)), !this.worker)\n throw new Error(\"[ladon-ts] - worker is not defined.\");\n this.worker.onmessage = (s) => {\n if (s.data.type === \"log\") {\n const { message: r, severity: i } = s.data, o = `[ladon-ts] Message received from worker: ${r}`;\n switch (i) {\n case \"warn\":\n console.warn(o);\n break;\n case \"error\":\n console.error(o);\n break;\n default:\n console.log(o);\n }\n } else if (s.data.status === \"generated\")\n this.lastMask = s.data.mask, this.lastResult = {\n data: s.data.mask,\n facesAndLandmarks: s.data.facesAndLandmarks,\n gesture: s.data.gesture,\n motion: s.data.motion,\n timestamp: s.data.timestamp,\n warm: !0\n }, this.newMask = !0;\n else {\n const r = d.getWorkerUrl();\n r && URL.revokeObjectURL(r), e == null || e();\n }\n };\n const a = {\n baseUrl: t.baseUrl,\n input: t.input,\n mask: t.mask,\n wasmUri: t.wasmUri,\n render: { type: \"passthrough\" }\n };\n this.worker.postMessage({ type: \"init\", config: a });\n let e;\n return new Promise((s) => {\n e = s;\n });\n }\n isLoaded() {\n return !!this.worker;\n }\n async postRender(t, a) {\n if (!this.worker)\n throw new Error(\"[ladon-ts] - worker is not defined.\");\n this.worker.postMessage(\n {\n type: \"generate\",\n image: t,\n timestamp: a\n },\n [t.buffer]\n );\n }\n destroy() {\n d.terminateWorker();\n }\n}\nexport {\n R as LocalGenerator,\n L as NullGenerator,\n F as WorkerGenerator\n};\n//# sourceMappingURL=generator.js.map\n","import './shim';\nimport './console-overrides';\n\nimport {\n LocalGenerator,\n PipelineConfig,\n PreloadConfig,\n sharedResourceManager,\n} from '@webex/ladon-ts';\n\nlet generator: LocalGenerator;\nlet busy = false;\n\n// Message handler for worker\nself.addEventListener('message', async (event) => {\n const { type, config, image, timestamp } = event.data;\n\n try {\n switch (type) {\n case 'preload':\n if (config) {\n await handlePreload(config as PreloadConfig);\n }\n break;\n\n case 'init':\n if (config) {\n await handleInit(config as PipelineConfig);\n }\n break;\n\n case 'generate':\n if (image) {\n await handleGenerate(image, timestamp);\n }\n break;\n\n default:\n console.warn(`[ladon-ts] - worker generator - unknown message: ${JSON.stringify(event.data)}`);\n }\n } catch (error) {\n console.error(`[ladon-ts] - worker generator - error handling message: ${error}`);\n }\n});\n\n// Handle preload event\nasync function handlePreload(config: PreloadConfig): Promise<void> {\n await sharedResourceManager.loadModel(config);\n postMessage({ status: 'preloaded' });\n}\n\n// Handle initialization\nasync function handleInit(config: PipelineConfig): Promise<void> {\n generator = new LocalGenerator(config);\n await generator.load();\n postMessage({ status: 'initialized' });\n}\n\n// Handle generate event with SharedArrayBuffer support\nasync function handleGenerate(image: Uint8ClampedArray | null, timestamp: number): Promise<void> {\n if (busy) {\n return;\n }\n\n if (!generator || !generator.isLoaded()) {\n console.warn('[ladon-ts] - Generator is not initialized');\n return;\n }\n\n busy = true;\n\n if (!image) {\n console.warn('[ladon-ts] - No valid input provided for generation');\n busy = false;\n return;\n }\n\n // Run generator\n const maskResult = await generator.getLadonOutput(image, timestamp);\n\n if (maskResult.warm) {\n postMessage({\n facesAndLandmarks: maskResult.facesAndLandmarks,\n gesture: maskResult.gesture,\n mask: maskResult.data, // Transfer mask directly if TypedArray\n motion: maskResult.motion,\n timestamp: maskResult.timestamp,\n status: 'generated',\n });\n }\n\n setTimeout(() => {\n busy = false;\n }, 0);\n}\n"],"names":["args","o","U","s","n","t","a","m","e","r","i.env","h","w","l","i.InferenceSession","i.Tensor","d","c","c.Tensor","i","k","g","f","p","M","y","event","type","config","image","timestamp","error","sharedResourceManager","LocalGenerator","maskResult"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"segmentation.js","sources":["../src/shim.ts","../src/console-overrides.ts","../../build/module/lib/util.js","../../build/module/lib/shared-resource-manager.js","../../build/module/lib/generator.js","../src/segmentation.ts"],"sourcesContent":["/**\n * This file is used to provide a shim for the document object in a web worker.\n * The document object is not available in a web worker, so we need to provide a shim\n * to prevent errors when running the code in a web worker.\n * \n * See: https://github.com/vitejs/vite/issues/9879#issuecomment-1372112651\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(self.document as any) = {\n baseURI: location.origin\n};","/**\n * Override console methods to send logs to the main thread for display in the UI.\n */\n\nconst originalConsoleLog = console.log;\nconst originalConsoleWarn = console.warn;\nconst originalConsoleError = console.error;\n\nconsole.log = (...args) => {\n postMessage({ type: 'log', message: args.join(' '), severity: 'log' });\n originalConsoleLog(...args);\n};\n\nconsole.warn = (...args) => {\n postMessage({ type: 'log', message: args.join(' '), severity: 'warn' });\n originalConsoleWarn(...args);\n};\n\nconsole.error = (...args) => {\n postMessage({ type: 'log', message: args.join(' '), severity: 'error' });\n originalConsoleError(...args);\n};","var C = /* @__PURE__ */ ((o) => (o.Nearest = \"nearest\", o))(C || {});\nconst E = (o, r, s, n, t) => {\n const a = new Uint8ClampedArray(n * t * 4), m = r / n, M = s / t, i = r * 4;\n let c = 0;\n for (let e = 0; e < t; e++) {\n const l = Math.floor(e * M) * i;\n for (let f = 0; f < n; f++) {\n const u = l + Math.floor(f * m) * 4;\n a[c++] = o[u], a[c++] = o[u + 1], a[c++] = o[u + 2], a[c++] = o[u + 3];\n }\n }\n return a;\n};\nfunction I(o, r, s, n, t) {\n const a = new Uint8ClampedArray(n * t);\n if (r === n && s === t) {\n for (let i = 0; i < o.length; i++)\n a[i] = Math.min(Math.max(o[i], 0), 255);\n return a;\n }\n const m = (r - 1) / (n - 1), M = (s - 1) / (t - 1);\n for (let i = 0; i < t; i++)\n for (let c = 0; c < n; c++) {\n const e = m * c, l = M * i, f = Math.floor(e), u = Math.floor(l), d = Math.min(Math.ceil(e), r - 1), S = Math.min(Math.ceil(l), s - 1), y = e - f, h = l - u, p = o[u * r + f], w = o[u * r + d], P = o[S * r + f], x = o[S * r + d], k = p * (1 - y) * (1 - h) + w * y * (1 - h) + P * (1 - y) * h + x * y * h;\n a[i * n + c] = Math.min(Math.max(k, 0), 255);\n }\n return a;\n}\nfunction R(o, r, s, n, t) {\n const a = new Uint8ClampedArray(n * t), m = r / n, M = s / t, i = (e, l) => {\n if (e === 0) return 1;\n if (e < 0 && (e = -e), e < l) {\n const f = Math.PI * e;\n return l * Math.sin(f) * Math.sin(f / l) / (f * f);\n }\n return 0;\n }, c = 3;\n for (let e = 0; e < t; e++)\n for (let l = 0; l < n; l++) {\n const f = l * m, u = e * M, d = Math.floor(f), S = Math.floor(u);\n let y = 0, h = 0;\n for (let p = S - c + 1; p <= S + c; p++)\n for (let w = d - c + 1; w <= d + c; w++)\n if (w >= 0 && w < r && p >= 0 && p < s) {\n const P = o[p * r + w], x = i(f - w, c) * i(u - p, c);\n y += P * x, h += x;\n }\n a[e * n + l] = h !== 0 ? Math.round(y / h) : 0;\n }\n return a;\n}\nconst A = (o, r) => !r || o.startsWith(\"http\") ? new URL(o).href : o ? r.replace(/\\/+$/, \"\") + \"/\" + o.replace(/^\\/+/, \"\") : r;\nfunction L(o, r, s) {\n const n = o.createShader(r);\n if (!n)\n throw new Error(\"[ladon-ts] - error creating shader\");\n if (o.shaderSource(n, s), o.compileShader(n), !o.getShaderParameter(n, o.COMPILE_STATUS)) {\n const t = o.getShaderInfoLog(n) ?? \"unknown error compiling shader.\";\n throw new Error(\"[ladon-ts] - \" + t);\n }\n return n;\n}\nfunction T(o, r, s) {\n const n = o.createProgram();\n if (!n)\n throw new Error(\"[ladon-ts] - error creating GPU program\");\n if (o.attachShader(n, r), o.attachShader(n, s), o.linkProgram(n), !o.getProgramParameter(n, o.LINK_STATUS)) {\n const t = o.getProgramInfoLog(n) ?? \"unknown error linking program.\";\n throw new Error(\"[ladon-ts] - \" + t);\n }\n return n;\n}\nfunction b(o) {\n if (o.startsWith(\"blob:\"))\n return !0;\n try {\n return new URL(o), !0;\n } catch {\n return !1;\n }\n}\nasync function U(o) {\n const r = await caches.open(\"ladon-cache\"), s = await r.match(o);\n if (s)\n return s.arrayBuffer();\n const n = await fetch(o);\n if (!n.ok)\n throw new Error(`Failed to fetch file: ${o}`);\n const t = n.headers.get(\"Content-Type\") || \"application/octet-stream\";\n if (!t.includes(\"application/wasm\") && !t.includes(\"binary/octet-stream\"))\n throw new Error(`Unexpected MIME type: ${t} for ${o}`);\n const a = await n.arrayBuffer(), m = new Response(a, {\n headers: {\n \"Content-Type\": t,\n \"Content-Length\": a.byteLength.toString()\n }\n });\n return await r.put(o, m), a;\n}\nexport {\n C as InterpolationMethod,\n I as bilinearUpsample,\n L as compileShader,\n b as isResolvedUri,\n R as lanczos3Upsample,\n T as linkProgram,\n U as loadAndCacheFile,\n E as resizeImage,\n A as toAbsoluteURI\n};\n//# sourceMappingURL=util.js.map\n","import * as i from \"onnxruntime-web\";\nimport { loadAndCacheFile as h, isResolvedUri as c, toAbsoluteURI as m } from \"./util.js\";\nconst k = \"ort-wasm-simd-threaded.wasm\";\nclass U {\n constructor() {\n this.modelSessions = {}, this.resolvedUriCache = /* @__PURE__ */ new Map();\n }\n /**\n * Initialize the worker using the provided configuration.\n *\n * @param config - The configuration object.\n * @returns A promise that resolves when the worker is initialized.\n */\n async initializeWorker(e) {\n if (typeof Worker > \"u\")\n throw new Error(\"[ladon-ts] web workers are not supported in this environment\");\n const r = await this.resolveUri(e, e.mask.workerUri), s = await (await fetch(r, { cache: \"force-cache\" })).text();\n return this.workerUrl = URL.createObjectURL(new Blob([s], { type: \"text/javascript\" })), new Worker(this.workerUrl, { type: \"module\" });\n }\n /**\n * Terminate the worker.\n */\n terminateWorker() {\n this.worker && (this.worker.terminate(), this.worker = void 0);\n }\n /**\n * Load the model using the provided configuration. This gets called by the worker when using\n * the worker generator.\n *\n * @param config - The configuration object.\n * @returns A promise that resolves when the model is preloaded.\n */\n async loadModel(e) {\n const { mask: r, executionProviders: o } = e;\n i.env.wasm.numThreads = 1;\n const s = await this.resolveUri(e, e.wasmUri);\n if (s)\n try {\n i.env.wasm.wasmBinary = await h(s + k);\n } catch (w) {\n console.warn(\"Failed to load or cache WASM file. Using WASM paths.\", w), i.env.wasm.wasmPaths = s;\n }\n const a = await this.resolveUri(e, r.modelUri);\n let t = this.modelSessions[a];\n if (!t) {\n const n = { executionProviders: o != null && o.length ? o : [\"wasm\"] };\n try {\n const l = await h(a);\n t = await i.InferenceSession.create(l, n);\n } catch (l) {\n console.warn(\"Failed to load or cache model file. Using model URL.\", l), t = await i.InferenceSession.create(a, n);\n }\n }\n return this.modelSessions[a] = t, await this.warmupModel(t, r.inputSize, r.modelRank), t;\n }\n /**\n * Preload the worker using the provided configuration.\n *\n * @param config - The configuration object.\n * @returns A promise that resolves when the worker is preloaded.\n */\n async preloadWorker(e) {\n const r = await this.prepareWorkerConfig(e);\n this.worker = await this.initializeWorker(r), this.worker.postMessage({ type: \"preload\", config: r });\n }\n /**\n * Warmup the model session with a dummy input to avoid latency when running the model for the first time.\n *\n * @param {ort.InferenceSession} session The model session.\n * @param {ResolutionConfig} inputSize The input size of the model.\n * @param {number} inputChannels The number of input channels (e.g., RGB is 3).\n * @param {ort.Tensor.Type} inputType The input tensor type.\n * @returns {Promise<void>} A promise that resolves when the model is warmed up.\n * @example\n * await warmupModel(session, inputSize, inputChannels, inputType);\n */\n async warmupModel(e, r = { width: 1280, height: 720 }, o = 3, s = \"float32\") {\n const a = r.height * r.width, t = new Float32Array(o * a).fill(0), w = new i.Tensor(s, t, [\n 1,\n o,\n r.height,\n r.width\n ]), n = { [e.inputNames[0]]: w };\n if (o === 3) {\n const l = new Float32Array(a).fill(0), d = new i.Tensor(s, l, [\n 1,\n 1,\n r.height,\n r.width\n ]);\n n[e.inputNames[1]] = d;\n }\n await e.run(n);\n }\n /**\n * Get the model session for the provided model URL.\n *\n * @param {string} modelUrl The model URL.\n * @returns {ort.InferenceSession} The model session.\n * @example\n * const session = getModelSession(modelUrl);\n */\n getModelSession(e) {\n return this.modelSessions[e];\n }\n /**\n * Resolves the full URL for a given asset. Non-file URIs are treated as paths\n * and resolved using the `toAbsoluteURI` method.\n *\n * @param config - The preload configuration.\n * @param assetUri - The asset URI from the config.\n * @returns The resolved full URL.\n */\n /**\n * Resolves the full URL for a given asset. Non-file URIs are treated as paths and resolved\n * using the `toAbsoluteURI` method. If the assetUri is already resolved, or if it's found in\n * cache, it will be returned directly. If an assetUrlResolver function is provided in the\n * configuration, it will be used to resolve the URL if the assetUri is not fully qualified,\n * a blob URL, or in the cache.\n *\n * @param config - The preload configuration.\n * @param assetUri - The asset URI from the config.\n * @returns The resolved full URL.\n */\n async resolveUri(e, r) {\n if (!r)\n throw new Error(\"Asset URI is undefined.\");\n if (this.resolvedUriCache.has(r))\n return this.resolvedUriCache.get(r);\n let o;\n if (c(r) ? o = r : r.match(/\\.[a-z0-9]+$/i) ? typeof e.assetUrlResolver == \"function\" && (o = await e.assetUrlResolver(r, e)) : o = m(r, e.baseUrl), !o)\n throw new Error(`Failed to resolve asset URI: ${r}`);\n return this.resolvedUriCache.set(r, o), o;\n }\n getWorker() {\n return this.worker;\n }\n getWorkerUrl() {\n return this.workerUrl;\n }\n /**\n * Prepare the worker configuration by resolving the final URLs and paths to send to the\n * worker. This is necessary because we can't send functions to the worker. We also need to\n * remove the assetUrlResolver function from the configuration.\n *\n * @param config - The preload configuration.\n * @returns The worker configuration.\n */\n async prepareWorkerConfig(e) {\n const o = { ...{\n ...e,\n mask: {\n ...e.mask,\n modelUri: await this.resolveUri(e, e.mask.modelUri),\n workerUri: await this.resolveUri(e, e.mask.workerUri)\n },\n wasmUri: await this.resolveUri(e, e.wasmUri)\n }, assetUrlResolver: void 0 };\n return JSON.parse(JSON.stringify(o));\n }\n}\nconst p = new U();\nexport {\n p as sharedResourceManager\n};\n//# sourceMappingURL=shared-resource-manager.js.map\n","import * as c from \"onnxruntime-web\";\nimport { sharedResourceManager as d } from \"./shared-resource-manager.js\";\nclass R {\n constructor(t) {\n this.config = t, this.lastMaskGenerationTime = 0;\n const { height: a, width: e } = this.config.mask.outputSize;\n this.lastMask = new c.Tensor(\"float32\", new Float32Array(a * e), [\n 1,\n 1,\n a,\n e\n ]), this.lastResult = {\n data: this.lastMask.data,\n facesAndLandmarks: { data: new Float32Array(0), dims: [] },\n gesture: new Float32Array(0),\n motion: 0,\n timestamp: 0,\n warm: !1\n };\n }\n /**\n * This method preprocesses an input Uint8ClampedArray to a Float32Array\n * while maintaining memory efficiency by reusing a class-scoped output buffer.\n * If the model rank is 4 (e.g., newer tiny model), it sets an alpha channel value.\n *\n * @param {Uint8ClampedArray} input - The input data to be preprocessed\n * @param {Float32Array} alpha - The alpha channel data\n * @returns {Float32Array} - The processed data\n */\n preprocess(t, a) {\n const {\n modelRank: e,\n inputSize: l,\n outputSize: s\n } = this.config.mask, { height: r, width: i } = l, o = r * i;\n this.output ?? (this.output = new Float32Array(o * e));\n const k = t.length / 4;\n for (let n = 0; n < 3; n++)\n for (let m = 0; m < k; m++)\n this.output[m + n * o] = t[m * 4 + (2 - n)];\n const w = s.width / i, g = s.height / r;\n for (let n = 0; n < i; n++) {\n const m = Math.floor(n * w);\n for (let h = 0; h < r; h++) {\n const f = Math.floor(h * g), p = m + f * s.width, M = n + h * i + 3 * o, y = Math.min(Math.max(a[p], 0), 255);\n this.output[M] = y;\n }\n }\n return this.output;\n }\n getTimeSinceLastGeneration() {\n return Date.now() - this.lastMaskGenerationTime;\n }\n async getLadonOutput(t, a) {\n var s, r, i, o;\n if (!this.maskModel)\n throw new Error(\"[ladon-ts] - mask model not loaded.\");\n if (this.getTimeSinceLastGeneration() < this.config.mask.generationIntervalMs)\n return {\n data: this.lastMask.data,\n facesAndLandmarks: this.lastResult.facesAndLandmarks,\n gesture: this.lastResult.gesture,\n motion: this.lastResult.motion,\n timestamp: this.lastResult.timestamp,\n warm: !1\n };\n this.lastMaskGenerationTime = Date.now();\n const e = new c.Tensor(\"float32\", this.preprocess(t, this.lastMask.data), [\n 1,\n this.config.mask.modelRank,\n this.config.mask.inputSize.height,\n this.config.mask.inputSize.width\n ]), l = await this.maskModel.run({ input: e });\n return this.lastMask = l.segmentation, this.lastResult = {\n data: this.lastMask.data ?? new Float32Array(0),\n facesAndLandmarks: {\n data: ((s = l.faces_and_landmarks) == null ? void 0 : s.data) ?? new Float32Array(0),\n dims: ((r = l.faces_and_landmarks) == null ? void 0 : r.dims) ?? []\n },\n gesture: ((i = l.gesture) == null ? void 0 : i.data) ?? new Float32Array(0),\n motion: ((o = l.motion) == null ? void 0 : o.data[0]) ?? 0,\n timestamp: a,\n warm: !0\n }, this.lastResult;\n }\n async load() {\n const t = await d.resolveUri(\n this.config,\n this.config.mask.modelUri\n );\n if (this.maskModel = d.getModelSession(t), this.maskModel ?? (this.maskModel = await d.loadModel(this.config)), !this.maskModel)\n throw new Error(\"Failed to load the ONNX model.\");\n }\n isLoaded() {\n return !!this.maskModel;\n }\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n async postRender(t) {\n }\n destroy() {\n }\n}\nclass L {\n constructor(t) {\n this.config = t, this.lastMask = new Float32Array(\n this.config.mask.outputSize.height * this.config.mask.outputSize.width\n );\n }\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n async getLadonOutput(t) {\n return {\n data: this.lastMask,\n facesAndLandmarks: { data: new Float32Array(0), dims: [] },\n gesture: new Float32Array(0),\n motion: 0,\n timestamp: 0,\n warm: !1\n };\n }\n async load() {\n }\n isLoaded() {\n return !0;\n }\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n async postRender(t) {\n }\n destroy() {\n }\n}\nclass F {\n constructor(t) {\n this.config = t, this.newMask = !0, this.lastMask = new Float32Array(\n this.config.mask.outputSize.height * this.config.mask.outputSize.width\n ), this.lastResult = {\n data: this.lastMask,\n facesAndLandmarks: { data: new Float32Array(0), dims: [] },\n gesture: new Float32Array(0),\n motion: 0,\n timestamp: 0,\n warm: !1\n };\n }\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n async getLadonOutput(t) {\n const a = {\n data: this.lastMask,\n facesAndLandmarks: this.lastResult.facesAndLandmarks,\n gesture: this.lastResult.gesture,\n motion: this.lastResult.motion,\n timestamp: this.lastResult.timestamp,\n warm: this.newMask\n };\n return this.newMask = !1, a;\n }\n async load() {\n const t = await d.prepareWorkerConfig(this.config);\n if (this.worker = d.getWorker(), this.worker ?? (this.worker = await d.initializeWorker(t)), !this.worker)\n throw new Error(\"[ladon-ts] - worker is not defined.\");\n this.worker.onmessage = (s) => {\n if (s.data.type === \"log\") {\n const { message: r, severity: i } = s.data, o = `[ladon-ts] Message received from worker: ${r}`;\n switch (i) {\n case \"warn\":\n console.warn(o);\n break;\n case \"error\":\n console.error(o);\n break;\n default:\n console.log(o);\n }\n } else if (s.data.status === \"generated\")\n this.lastMask = s.data.mask, this.lastResult = {\n data: s.data.mask,\n facesAndLandmarks: s.data.facesAndLandmarks,\n gesture: s.data.gesture,\n motion: s.data.motion,\n timestamp: s.data.timestamp,\n warm: !0\n }, this.newMask = !0;\n else {\n const r = d.getWorkerUrl();\n r && URL.revokeObjectURL(r), e == null || e();\n }\n };\n const a = {\n baseUrl: t.baseUrl,\n input: t.input,\n mask: t.mask,\n wasmUri: t.wasmUri,\n render: { type: \"passthrough\" }\n };\n this.worker.postMessage({ type: \"init\", config: a });\n let e;\n return new Promise((s) => {\n e = s;\n });\n }\n isLoaded() {\n return !!this.worker;\n }\n async postRender(t, a) {\n if (!this.worker)\n throw new Error(\"[ladon-ts] - worker is not defined.\");\n this.worker.postMessage(\n {\n type: \"generate\",\n image: t,\n timestamp: a\n },\n [t.buffer]\n );\n }\n destroy() {\n d.terminateWorker();\n }\n}\nexport {\n R as LocalGenerator,\n L as NullGenerator,\n F as WorkerGenerator\n};\n//# sourceMappingURL=generator.js.map\n","import './shim';\nimport './console-overrides';\n\nimport {\n LocalGenerator,\n PipelineConfig,\n PreloadConfig,\n sharedResourceManager,\n} from '@webex/ladon-ts';\n\nlet preloadPromise: Promise<void> | null = null;\nlet generator: LocalGenerator;\nlet busy = false;\n\n// Message handler for worker\nself.addEventListener('message', async (event) => {\n const { type, config, image, timestamp } = event.data;\n\n try {\n switch (type) {\n case 'preload':\n if (config) {\n preloadPromise = handlePreload(config as PreloadConfig);\n await preloadPromise;\n }\n break;\n\n case 'init':\n if (config) {\n // Wait for preload to complete before initializing\n if (preloadPromise) {\n await preloadPromise;\n }\n await handleInit(config as PipelineConfig);\n }\n break;\n\n case 'generate':\n if (image) {\n await handleGenerate(image, timestamp);\n }\n break;\n\n default:\n console.warn(`[ladon-ts] - worker generator - unknown message: ${JSON.stringify(event.data)}`);\n }\n } catch (error) {\n console.error(`[ladon-ts] - worker generator - error handling message: ${error}`);\n postMessage({ status: 'error', error: error.message });\n }\n});\n\n// Handle preload event\nasync function handlePreload(config: PreloadConfig): Promise<void> {\n await sharedResourceManager.loadModel(config);\n postMessage({ status: 'preloaded' });\n}\n\n// Handle initialization\nasync function handleInit(config: PipelineConfig): Promise<void> {\n generator = new LocalGenerator(config);\n await generator.load();\n postMessage({ status: 'initialized' });\n}\n\n// Handle generate event with SharedArrayBuffer support\nasync function handleGenerate(image: Uint8ClampedArray | null, timestamp: number): Promise<void> {\n if (busy) {\n return;\n }\n\n if (!generator || !generator.isLoaded()) {\n console.warn('[ladon-ts] - Generator is not initialized');\n return;\n }\n\n busy = true;\n\n if (!image) {\n console.warn('[ladon-ts] - No valid input provided for generation');\n busy = false;\n return;\n }\n\n // Run generator\n const maskResult = await generator.getLadonOutput(image, timestamp);\n\n if (maskResult.warm) {\n postMessage({\n facesAndLandmarks: maskResult.facesAndLandmarks,\n gesture: maskResult.gesture,\n mask: maskResult.data, // Transfer mask directly if TypedArray\n motion: maskResult.motion,\n timestamp: maskResult.timestamp,\n status: 'generated',\n });\n }\n\n setTimeout(() => {\n busy = false;\n }, 0);\n}\n"],"names":["args","o","U","s","n","t","a","m","e","r","i.env","h","w","l","i.InferenceSession","i.Tensor","d","c","c.Tensor","i","k","g","f","p","M","y","event","type","config","image","timestamp","error","sharedResourceManager","LocalGenerator","maskResult"],"mappings":"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"}
|