diff --git a/CHANGELOG.md b/CHANGELOG.md index 17191ac5..1845cacc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/human - Version: **2.9.3** + Version: **2.9.4** Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition** Author: **Vladimir Mandic ** @@ -9,7 +9,10 @@ ## Changelog -### **HEAD -> main** 2022/08/15 mandic00@live.com +### **2.9.4** 2022/08/20 mandic00@live.com + + +### **origin/main** 2022/08/19 mandic00@live.com - add tensorflow library detection - fix wasm detection diff --git a/README.md b/README.md index d5af0c0e..e0b0362d 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,8 @@ JavaScript module using TensorFlow/JS Machine Learning library ### Browser Demos +*All browser demos are self-contained without any external dependencies* + - **Full** [[*Live*]](https://vladmandic.github.io/human/demo/index.html) [[*Details*]](https://github.com/vladmandic/human/tree/main/demo): Main browser demo app that showcases all Human capabilities - **Simple** [[*Live*]](https://vladmandic.github.io/human/demo/typescript/index.html) [[*Details*]](https://github.com/vladmandic/human/tree/main/demo/typescript): Simple demo in WebCam processing demo in TypeScript - **Face Match** [[*Live*]](https://vladmandic.github.io/human/demo/facematch/index.html) [[*Details*]](https://github.com/vladmandic/human/tree/main/demo/facematch): Extract faces from images, calculates face descriptors and simmilarities and matches them to known database @@ -60,6 +62,9 @@ JavaScript module using TensorFlow/JS Machine Learning library ### NodeJS Demos +*NodeJS demos may require extra dependencies which are used to decode inputs* +*See header of each demo to see its dependencies as they are not automatically installed with `Human`* + - **Main** [[*Details*]](https://github.com/vladmandic/human/tree/main/demo/nodejs): Process images from files, folders or URLs using native methods - **Canvas** [[*Details*]](https://github.com/vladmandic/human/tree/main/demo/nodejs): Process image from file or URL and draw results to a new image file using `node-canvas` - **Video** [[*Details*]](https://github.com/vladmandic/human/tree/main/demo/nodejs): Processing of video input using `ffmpeg` @@ -69,7 +74,6 @@ JavaScript module using TensorFlow/JS Machine Learning library - **Face Match** [[*Details*]](https://github.com/vladmandic/human/tree/main/demo/facematch): Parallel processing of face **match** in multiple child worker threads - **Multiple Workers** [[*Details*]](https://github.com/vladmandic/human/tree/main/demo/nodejs): Runs multiple parallel `human` by dispaching them to pool of pre-created worker processes - ## Project pages - [**Code Repository**](https://github.com/vladmandic/human) diff --git a/demo/benchmark/node.js b/demo/benchmark/node.js index fd1bbda7..eb11a152 100644 --- a/demo/benchmark/node.js +++ b/demo/benchmark/node.js @@ -1,7 +1,6 @@ -// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars const tf = require('@tensorflow/tfjs-node-gpu'); const log = require('@vladmandic/pilogger'); -const canvasJS = require('canvas'); +const canvasJS = require('canvas'); // eslint-disable-line node/no-missing-require const Human = require('../../dist/human.node-gpu.js').default; const input = './samples/in/group-1.jpg'; @@ -45,7 +44,7 @@ async function main() { log.header(); const human = new Human(myConfig); await human.tf.ready(); - log.info('Human:', human.version); + log.info('Human:', human.version, 'TF:', tf.version_core); await human.load(); const loaded = Object.keys(human.models).filter((a) => human.models[a]); log.info('Loaded:', loaded); diff --git a/demo/facematch/node-match-worker.js b/demo/facematch/node-match-worker.js index 35cdbc7d..e8556db5 100644 --- a/demo/facematch/node-match-worker.js +++ b/demo/facematch/node-match-worker.js @@ -1,3 +1,8 @@ +/** + * Runs in a worker thread started by `node-match` demo app + * + */ + const threads = require('worker_threads'); let debug = false; diff --git a/demo/facematch/node-match.js b/demo/facematch/node-match.js index 95e5b96a..16e7a5cd 100644 --- a/demo/facematch/node-match.js +++ b/demo/facematch/node-match.js @@ -1,3 +1,9 @@ +/** + * Human demo app for NodeJS that generates random facial descriptors + * and uses NodeJS multi-threading to start multiple threads for face matching + * uses `node-match-worker.js` to perform actual face matching analysis + */ + const fs = require('fs'); const path = require('path'); const log = require('@vladmandic/pilogger'); diff --git a/demo/nodejs/node-canvas.js b/demo/nodejs/node-canvas.js index 184ffe0d..832a7fc9 100644 --- a/demo/nodejs/node-canvas.js +++ b/demo/nodejs/node-canvas.js @@ -1,13 +1,13 @@ /** * Human demo for NodeJS using Canvas library + * + * Requires [canvas](https://www.npmjs.com/package/canvas) to provide Canvas functionality in NodeJS environment */ const fs = require('fs'); const process = require('process'); const log = require('@vladmandic/pilogger'); -const canvas = require('canvas'); - -// eslint-disable-next-line import/no-extraneous-dependencies, no-unused-vars, @typescript-eslint/no-unused-vars +const canvas = require('canvas'); // eslint-disable-line node/no-extraneous-require, node/no-missing-require const tf = require('@tensorflow/tfjs-node'); // in nodejs environments tfjs-node is required to be loaded before human // const human = require('@vladmandic/human'); // use this when human is installed as module (majority of use cases) const Human = require('../../dist/human.node.js'); // use this when using human in dev mode @@ -31,7 +31,7 @@ async function main() { // init const human = new Human.Human(config); // create instance of human - log.info('Human:', human.version); + log.info('Human:', human.version, 'TF:', tf.version_core); await human.load(); // pre-load models log.info('Loaded models:', Object.keys(human.models).filter((a) => human.models[a])); diff --git a/demo/nodejs/node-event.js b/demo/nodejs/node-event.js index 90cd823d..a5912849 100644 --- a/demo/nodejs/node-event.js +++ b/demo/nodejs/node-event.js @@ -8,7 +8,6 @@ const process = require('process'); let fetch; // fetch is dynamically imported later -// eslint-disable-next-line import/no-extraneous-dependencies, no-unused-vars, @typescript-eslint/no-unused-vars const tf = require('@tensorflow/tfjs-node'); // in nodejs environments tfjs-node is required to be loaded before human // const human = require('@vladmandic/human'); // use this when human is installed as module (majority of use cases) const Human = require('../../dist/human.node.js'); // use this when using human in dev mode @@ -38,7 +37,7 @@ async function detect(input) { let buffer; log.info('Loading image:', input); if (input.startsWith('http:') || input.startsWith('https:')) { - fetch = (await import('node-fetch')).default; + fetch = (await import('node-fetch')).default; // eslint-disable-line node/no-extraneous-require, node/no-missing-import const res = await fetch(input); if (res && res.ok) buffer = await res.buffer(); else log.error('Invalid image URL:', input, res.status, res.statusText, res.headers.get('content-type')); @@ -59,6 +58,7 @@ async function main() { log.header(); human = new Human.Human(myConfig); + log.info('Human:', human.version, 'TF:', tf.version_core); if (human.events) { human.events.addEventListener('warmup', () => { diff --git a/demo/nodejs/node-fetch.js b/demo/nodejs/node-fetch.js index ab642fb5..aefe04c0 100644 --- a/demo/nodejs/node-fetch.js +++ b/demo/nodejs/node-fetch.js @@ -1,4 +1,10 @@ +/** + * Human demo for NodeJS using http fetch to get image file + * + * Requires [node-fetch](https://www.npmjs.com/package/node-fetch) to provide `fetch` functionality in NodeJS environment + */ const fs = require('fs'); +const log = require('@vladmandic/pilogger'); // eslint-disable-next-line import/no-extraneous-dependencies, no-unused-vars, @typescript-eslint/no-unused-vars const tf = require('@tensorflow/tfjs-node'); // in nodejs environments tfjs-node is required to be loaded before human @@ -11,15 +17,15 @@ const humanConfig = { async function main(inputFile) { // @ts-ignore - global.fetch = (await import('node-fetch')).default; + global.fetch = (await import('node-fetch')).default; // eslint-disable-line node/no-extraneous-require, node/no-missing-import const human = new Human.Human(humanConfig); // create instance of human using default configuration + log.info('Human:', human.version, 'TF:', tf.version_core); await human.load(); // optional as models would be loaded on-demand first time they are required await human.warmup(); // optional as model warmup is performed on-demand first time its executed const buffer = fs.readFileSync(inputFile); // read file data into buffer const tensor = human.tf.node.decodeImage(buffer); // decode jpg data const result = await human.detect(tensor); // run detection; will initialize backend and on-demand load models - // eslint-disable-next-line no-console - console.log(result.gesture); + log.data(result.gesture); } main('samples/in/ai-body.jpg'); diff --git a/demo/nodejs/node-simple.js b/demo/nodejs/node-simple.js index 0bd893ff..57447726 100644 --- a/demo/nodejs/node-simple.js +++ b/demo/nodejs/node-simple.js @@ -1,7 +1,10 @@ +/** + * Human simple demo for NodeJS + */ + const fs = require('fs'); const process = require('process'); -// eslint-disable-next-line import/no-extraneous-dependencies, no-unused-vars, @typescript-eslint/no-unused-vars const tf = require('@tensorflow/tfjs-node'); // in nodejs environments tfjs-node is required to be loaded before human // const human = require('@vladmandic/human'); // use this when human is installed as module (majority of use cases) const Human = require('../../dist/human.node.js'); // use this when using human in dev mode @@ -12,15 +15,14 @@ const humanConfig = { async function detect(inputFile) { const human = new Human.Human(humanConfig); // create instance of human using default configuration + console.log('Human:', human.version, 'TF:', tf.version_core); // eslint-disable-line no-console await human.load(); // optional as models would be loaded on-demand first time they are required await human.warmup(); // optional as model warmup is performed on-demand first time its executed const buffer = fs.readFileSync(inputFile); // read file data into buffer const tensor = human.tf.node.decodeImage(buffer); // decode jpg data - // eslint-disable-next-line no-console - console.log('loaded input file:', inputFile, 'resolution:', tensor.shape); + console.log('loaded input file:', inputFile, 'resolution:', tensor.shape); // eslint-disable-line no-console const result = await human.detect(tensor); // run detection; will initialize backend and on-demand load models - // eslint-disable-next-line no-console - console.log(result); + console.log(result); // eslint-disable-line no-console } if (process.argv.length === 3) detect(process.argv[2]); // if input file is provided as cmdline parameter use it diff --git a/demo/nodejs/node-video.js b/demo/nodejs/node-video.js index be890880..e9fbf830 100644 --- a/demo/nodejs/node-video.js +++ b/demo/nodejs/node-video.js @@ -7,17 +7,15 @@ * If you want process at specific intervals, set output fps to some value * If you want to process an input stream, set real-time flag and set input as required * - * Note that pipe2jpeg is not part of Human dependencies and should be installed manually - * Working version of ffmpeg must be present on the system + * Note that [pipe2jpeg](https://www.npmjs.com/package/pipe2jpeg) is not part of Human dependencies and should be installed manually + * Working version of `ffmpeg` must be present on the system */ const spawn = require('child_process').spawn; const log = require('@vladmandic/pilogger'); // @ts-ignore pipe2jpeg is not installed by default -// eslint-disable-next-line node/no-missing-require -const Pipe2Jpeg = require('pipe2jpeg'); +const Pipe2Jpeg = require('pipe2jpeg'); // eslint-disable-line node/no-missing-require -// eslint-disable-next-line import/no-extraneous-dependencies, no-unused-vars, @typescript-eslint/no-unused-vars const tf = require('@tensorflow/tfjs-node'); // in nodejs environments tfjs-node is required to be loaded before human // const human = require('@vladmandic/human'); // use this when human is installed as module (majority of use cases) const Human = require('../../dist/human.node.js'); // use this when using human in dev mode @@ -77,7 +75,7 @@ async function main() { log.header(); await human.tf.ready(); // pre-load models - log.info('human:', human.version); + log.info('human:', human.version, 'tf:', tf.version_core); pipe2jpeg.on('jpeg', (jpegBuffer) => process(jpegBuffer)); const ffmpeg = spawn('ffmpeg', ffmpegParams, { stdio: ['ignore', 'pipe', 'ignore'] }); diff --git a/demo/nodejs/node-webcam.js b/demo/nodejs/node-webcam.js index 2e17f778..22bed4ba 100644 --- a/demo/nodejs/node-webcam.js +++ b/demo/nodejs/node-webcam.js @@ -2,17 +2,14 @@ * Human demo for NodeJS * Unsupported sample of using external utility fswebcam to capture screenshot from attached webcam in regular intervals and process it using Human * - * Note that node-webcam is not part of Human dependencies and should be installed manually - * Working version of fswebcam must be present on the system + * Note that [node-webcam](https://www.npmjs.com/package/node-webcam) is not part of Human dependencies and should be installed manually + * Working version of `fswebcam` must be present on the system */ let initial = true; // remember if this is the first run to print additional details const log = require('@vladmandic/pilogger'); -// @ts-ignore node-webcam is not installed by default -// eslint-disable-next-line node/no-missing-require -const nodeWebCam = require('node-webcam'); +const nodeWebCam = require('node-webcam'); // eslint-disable-line node/no-missing-require, node/no-extraneous-require -// eslint-disable-next-line import/no-extraneous-dependencies, no-unused-vars, @typescript-eslint/no-unused-vars const tf = require('@tensorflow/tfjs-node'); // in nodejs environments tfjs-node is required to be loaded before human // const human = require('@vladmandic/human'); // use this when human is installed as module (majority of use cases) const Human = require('../../dist/human.node.js'); // use this when using human in dev mode @@ -29,6 +26,7 @@ const camera = nodeWebCam.create(optionsCamera); const optionsHuman = { modelBasePath: 'file://models/', }; + const human = new Human.Human(optionsHuman); function buffer2tensor(buffer) { @@ -81,6 +79,7 @@ async function detect() { } async function main() { + log.info('human:', human.version, 'tf:', tf.version_core); camera.list((list) => { log.data('detected camera:', list); }); diff --git a/demo/nodejs/node.js b/demo/nodejs/node.js index 27f8909f..4a699152 100644 --- a/demo/nodejs/node.js +++ b/demo/nodejs/node.js @@ -1,6 +1,8 @@ /** * Human demo for NodeJS - */ + * + * Requires [node-fetch](https://www.npmjs.com/package/node-fetch) to provide `fetch` functionality in NodeJS environment +*/ const log = require('@vladmandic/pilogger'); const fs = require('fs'); @@ -9,7 +11,6 @@ const process = require('process'); let fetch; // fetch is dynamically imported later -// eslint-disable-next-line import/no-extraneous-dependencies, no-unused-vars, @typescript-eslint/no-unused-vars const tf = require('@tensorflow/tfjs-node'); // in nodejs environments tfjs-node is required to be loaded before human // const human = require('@vladmandic/human'); // use this when human is installed as module (majority of use cases) const Human = require('../../dist/human.node.js'); // use this when using human in dev mode @@ -46,6 +47,7 @@ async function init() { human = new Human.Human(myConfig); // wait until tf is ready await human.tf.ready(); + log.info('human:', human.version, 'tf:', tf.version_core); // pre-load models log.info('Human:', human.version); // log.info('Active Configuration', human.config); @@ -189,7 +191,7 @@ async function main() { log.configure({ inspect: { breakLength: 265 } }); log.header(); log.info('Current folder:', process.env.PWD); - fetch = (await import('node-fetch')).default; + fetch = (await import('node-fetch')).default; // eslint-disable-line node/no-extraneous-require, node/no-missing-import await init(); const f = process.argv[2]; if (process.argv.length !== 3) { diff --git a/demo/nodejs/process-folder.js b/demo/nodejs/process-folder.js index 61dd171b..05c26457 100644 --- a/demo/nodejs/process-folder.js +++ b/demo/nodejs/process-folder.js @@ -1,9 +1,18 @@ +/** + * Human demo for NodeJS + * + * Takes input and output folder names parameters and processes all images + * found in input folder and creates annotated images in output folder + * + * Requires [canvas](https://www.npmjs.com/package/canvas) to provide Canvas functionality in NodeJS environment + */ + const fs = require('fs'); const path = require('path'); const process = require('process'); const log = require('@vladmandic/pilogger'); -const canvas = require('canvas'); -// const tf = require('@tensorflow/tfjs-node-gpu'); // for nodejs, `tfjs-node` or `tfjs-node-gpu` should be loaded before using Human +const canvas = require('canvas'); // eslint-disable-line node/no-extraneous-require, node/no-missing-require +const tf = require('@tensorflow/tfjs-node-gpu'); // for nodejs, `tfjs-node` or `tfjs-node-gpu` should be loaded before using Human const Human = require('../../dist/human.node-gpu.js'); // this is 'const Human = require('../dist/human.node-gpu.js').default;' const config = { // just enable all and leave default settings @@ -24,7 +33,7 @@ async function main() { globalThis.ImageData = canvas.ImageData; // patch global namespace with canvas library const human = new Human.Human(config); // create instance of human - log.info('Human:', human.version); + log.info('Human:', human.version, 'TF:', tf.version_core); const configErrors = await human.validate(); if (configErrors.length > 0) log.error('Configuration errors:', configErrors); await human.load(); // pre-load models diff --git a/dist/human.esm-nobundle.js b/dist/human.esm-nobundle.js index bfe579ad..d1e99702 100644 --- a/dist/human.esm-nobundle.js +++ b/dist/human.esm-nobundle.js @@ -96,7 +96,7 @@ var e5=Object.defineProperty;var jo=Object.getOwnPropertyDescriptor;var Io=Objec c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var n5=(e,t,o)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(o[s]=0,r))},r5=class{constructor(t,o,n){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(this,"compile",(t,o)=>{let n=this.gl.createShader(o);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(u(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)}`),null)):(u("filter: could not create shader"),null)});this.gl=t;let r=this.compile(o,this.gl.VERTEX_SHADER),s=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){u("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){u(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),n5(o,"attribute",this.attribute);for(let a in this.attribute)this.attribute[a]=this.gl.getAttribLocation(this.id,a);n5(o,"uniform",this.uniform),n5(n,"uniform",this.uniform);for(let a in this.uniform)this.uniform[a]=this.gl.getUniformLocation(this.id,a)}}};function U1(){let e=0,t=null,o=!1,n=-1,r=[null,null],s=[],a=null,i=null,y=x0(100,100),c={},d={INTERMEDIATE:1},l=y.getContext("webgl");if(!l){u("filter: cannot get webgl context");return}this.gl=l;function f(M,m){if(!(M===y.width&&m===y.height)){if(y.width=M,y.height=m,!a){let h=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);a=l.createBuffer(),l.bindBuffer(l.ARRAY_BUFFER,a),l.bufferData(l.ARRAY_BUFFER,h,l.STATIC_DRAW),l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}l.viewport(0,0,y.width,y.height),r=[null,null]}}function x(M,m){let h=l.createFramebuffer();l.bindFramebuffer(l.FRAMEBUFFER,h);let C=l.createRenderbuffer();l.bindRenderbuffer(l.RENDERBUFFER,C);let N=l.createTexture();return l.bindTexture(l.TEXTURE_2D,N),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,M,m,0,l.RGBA,l.UNSIGNED_BYTE,null),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,l.TEXTURE_2D,N,0),l.bindTexture(l.TEXTURE_2D,null),l.bindFramebuffer(l.FRAMEBUFFER,null),{fbo:h,texture:N}}function b(M){return r[M]=r[M]||x(y.width,y.height),r[M]}function p(M=0){if(!i)return;let m=null,h=null,C=!1;e===0?m=t:m=b(n).texture||null,e++,o&&!(M&d.INTERMEDIATE)?(h=null,C=e%2===0):(n=(n+1)%2,h=b(n).fbo||null),l.bindTexture(l.TEXTURE_2D,m),l.bindFramebuffer(l.FRAMEBUFFER,h),l.uniform1f(i.uniform.flipY,C?-1:1),l.drawArrays(l.TRIANGLES,0,6)}function v(M){if(c[M])return i=c[M],l.useProgram((i?i.id:null)||null),i;if(i=new r5(l,H1,M),!i)return u("filter: could not get webgl program"),null;let m=Float32Array.BYTES_PER_ELEMENT,h=4*m;return l.enableVertexAttribArray(i.attribute.pos),l.vertexAttribPointer(i.attribute.pos,2,l.FLOAT,!1,h,0*m),l.enableVertexAttribArray(i.attribute.uv),l.vertexAttribPointer(i.attribute.uv,2,l.FLOAT,!1,h,2*m),c[M]=i,i}let P={colorMatrix:M=>{let m=new Float32Array(M);m[4]/=255,m[9]/=255,m[14]/=255,m[19]/=255;let h=m[18]===1&&m[3]===0&&m[8]===0&&m[13]===0&&m[15]===0&&m[16]===0&&m[17]===0&&m[19]===0?D1:V1,C=v(h);!C||(l.uniform1fv(C.uniform.m,m),p())},brightness:M=>{let m=(M||0)+1;P.colorMatrix([m,0,0,0,0,0,m,0,0,0,0,0,m,0,0,0,0,0,1,0])},saturation:M=>{let m=(M||0)*2/3+1,h=(m-1)*-.5;P.colorMatrix([m,h,h,0,0,h,m,h,0,0,h,h,m,0,0,0,0,0,1,0])},desaturate:()=>{P.saturation(-1)},contrast:M=>{let m=(M||0)+1,h=-128*(m-1);P.colorMatrix([m,0,0,0,h,0,m,0,0,h,0,0,m,0,h,0,0,0,1,0])},negative:()=>{P.contrast(-2)},hue:M=>{M=(M||0)/180*Math.PI;let m=Math.cos(M),h=Math.sin(M),C=.213,N=.715,k=.072;P.colorMatrix([C+m*(1-C)+h*-C,N+m*-N+h*-N,k+m*-k+h*(1-k),0,0,C+m*-C+h*.143,N+m*(1-N)+h*.14,k+m*-k+h*-.283,0,0,C+m*-C+h*-(1-C),N+m*-N+h*N,k+m*(1-k)+h*k,0,0,0,0,0,1,0])},desaturateLuminance:()=>{P.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{P.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{P.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{P.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{P.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{P.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{P.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{P.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:M=>{let m=new Float32Array(M),h=1/y.width,C=1/y.height,N=v(q1);!N||(l.uniform1fv(N.uniform.m,m),l.uniform2f(N.uniform.px,h,C),p())},detectEdges:()=>{P.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{P.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{P.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:M=>{let m=M||1;P.convolution.call(this,[0,-1*m,0,-1*m,1+4*m,-1*m,0,-1*m,0])},emboss:M=>{let m=M||1;P.convolution.call(this,[-2*m,-1*m,0,-1*m,1,1*m,0,1*m,2*m])},blur:M=>{let m=M/7/y.width,h=M/7/y.height,C=v(X1);!C||(l.uniform2f(C.uniform.px,0,h),p(d.INTERMEDIATE),l.uniform2f(C.uniform.px,m,0),p())},pixelate:M=>{let m=M/y.width,h=M/y.height,C=v(Z1);!C||(l.uniform2f(C.uniform.size,m,h),p())}};this.add=function(M){let m=Array.prototype.slice.call(arguments,1),h=P[M];s.push({func:h,args:m})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(M){f(M.width,M.height),e=0,t||(t=l.createTexture()),l.bindTexture(l.TEXTURE_2D,t),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.NEAREST),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,l.RGBA,l.UNSIGNED_BYTE,M);for(let m=0;mx.data())),a=.99*Math.max(s[0][0],s[1][0],s[2][0]),i=[A.sub(o[0],n[0]),A.sub(o[1],n[1]),A.sub(o[2],n[2])],y=[A.sub(r[0],n[0]),A.sub(r[1],n[1]),A.sub(r[2],n[2])],c=[A.div(a,y[0]),A.div(a,y[1]),A.div(a,y[2])],d=[A.mul(i[0],c[0]),A.mul(i[1],c[1]),A.mul(i[2],c[2])],l=A.stack([d[0],d[1],d[2]],2),f=A.reshape(l,[1,t.shape[0],t.shape[1],3]);return A.dispose([...o,...n,...r,...i,...y,...c,...d,l,t]),f}var x2=3840,V=null,t0=null,ve=null,U,B0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function x0(e,t){let o;if(T.browser)if(T.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");o=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");o=document.createElement("canvas"),o.width=e,o.height=t}else typeof T.Canvas!="undefined"?o=new T.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(o=new globalThis.Canvas(e,t));return o}function d2(e,t){let o=t||x0(e.width,e.height);return o.getContext("2d").drawImage(e,0,0),o}async function Re(e,t,o=!0){if(!e)return t.debug&&u("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof Pe)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof T.Canvas!="undefined"&&e instanceof T.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof Pe){let n=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)n=A.expandDims(e,0);else if(e.shape[2]===4){let r=A.slice3d(e,[0,0,0],[-1,-1,3]);n=A.expandDims(r,0),A.dispose(r)}}else e.shape.length===4&&(e.shape[3]===3?n=A.clone(e):e.shape[3]===4&&(n=A.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(n==null||n.shape.length!==4||n.shape[0]!==1||n.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(n.dtype==="int32"){let r=A.cast(n,"float32");A.dispose(n),n=r}return{tensor:n,canvas:t.filter.return?t0:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&u("input stream is not ready"),{tensor:null,canvas:V};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&u("cannot determine input dimensions"),{tensor:null,canvas:V};let s=n,a=r;if(s>x2&&(s=x2,a=Math.trunc(s*r/n)),a>x2&&(a=x2,s=Math.trunc(a*n/r)),(t.filter.width||0)>0?s=t.filter.width:(t.filter.height||0)>0&&(s=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?a=t.filter.height:(t.filter.width||0)>0&&(a=r*((t.filter.width||0)/n)),!s||!a)throw new Error("input error: cannot determine dimension");(!V||(V==null?void 0:V.width)!==s||(V==null?void 0:V.height)!==a)&&(V=x0(s,a));let i=V.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?i.putImageData(e,0,0):t.filter.flip&&typeof i.translate!="undefined"?(i.translate(n,0),i.scale(-1,1),i.drawImage(e,0,0,n,r,0,0,V==null?void 0:V.width,V==null?void 0:V.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,n,r,0,0,V==null?void 0:V.width,V==null?void 0:V.height),(!t0||V.width!==t0.width||(V==null?void 0:V.height)!==(t0==null?void 0:t0.height))&&(t0=x0(V.width,V.height)),t.filter.enabled&&T.webgl.supported?(U||(U=T.browser?new U1:null),T.filter=!!U,!U||!U.add?(t.debug&&u("input process error: cannot initialize filters"),T.webgl.supported=!1,t.filter.enabled=!1,d2(V,t0)):(U.reset(),t.filter.brightness!==0&&U.add("brightness",t.filter.brightness),t.filter.contrast!==0&&U.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&U.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&U.add("blur",t.filter.blur),t.filter.saturation!==0&&U.add("saturation",t.filter.saturation),t.filter.hue!==0&&U.add("hue",t.filter.hue),t.filter.negative&&U.add("negative"),t.filter.sepia&&U.add("sepia"),t.filter.vintage&&U.add("brownie"),t.filter.sepia&&U.add("sepia"),t.filter.kodachrome&&U.add("kodachrome"),t.filter.technicolor&&U.add("technicolor"),t.filter.polaroid&&U.add("polaroid"),t.filter.pixelate!==0&&U.add("pixelate",t.filter.pixelate),U.get()>0?t0=U.apply(V):t0=U.draw(V))):(d2(V,t0),U&&(U=null),T.filter=!!U),!o)return{tensor:null,canvas:t0};if(!t0)throw new Error("canvas error: cannot create output");let y,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(T.browser&&A.browser)y=A.browser?A.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);y=A.tensor(f,[e.height,e.width,c],"int32")}else if((!ve||t0.width!==ve.width||t0.height!==ve.height)&&(ve=x0(t0.width,t0.height)),A.browser&&T.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?y=A.browser.fromPixels(t0):(ve=d2(t0),y=A.browser.fromPixels(ve));else{let b=d2(t0).getContext("2d").getImageData(0,0,s,a);c=b.data.length/s/a;let p=new Uint8Array(b.data.buffer);y=A.tensor(p,[s,a,c])}if(c===4){let f=A.slice3d(y,[0,0,0],[-1,-1,3]);A.dispose(y),y=f}if(!y)throw new Error("input error: cannot create tensor");let d=A.cast(y,"float32"),l=t.filter.equalization?await c2(d):A.expandDims(d,0);return A.dispose([y,d]),{tensor:l,canvas:t.filter.return?t0:null}}}async function Y1(e,t){let o=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return o;if(!B0.inputTensor)B0.inputTensor=A.clone(t);else if(B0.inputTensor.shape[1]!==t.shape[1]||B0.inputTensor.shape[2]!==t.shape[2])A.dispose(B0.inputTensor),B0.inputTensor=A.clone(t);else{let n={};n.diff=A.sub(t,B0.inputTensor),n.squared=A.mul(n.diff,n.diff),n.sum=A.sum(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;A.dispose([B0.inputTensor,n.diff,n.squared,n.sum]),B0.inputTensor=A.clone(t),o=s<=(e.cacheSensitivity||0)}return o}async function K1(e,t,o){let n={};if(!t||!o||t.shape.length!==4||t.shape.length!==o.shape.length)return e.debug||u("invalid input tensor or tensor shapes do not match:",t.shape,o.shape),0;if(t.shape[0]!==1||o.shape[0]!==1||t.shape[3]!==3||o.shape[3]!==3)return e.debug||u("input tensors must be of shape [1, height, width, 3]:",t.shape,o.shape),0;n.input1=A.clone(t),n.input2=t.shape[1]!==o.shape[1]||t.shape[2]!==o.shape[2]?A.image.resizeBilinear(o,[t.shape[1],t.shape[2]]):A.clone(o),n.diff=A.sub(n.input1,n.input2),n.squared=A.mul(n.diff,n.diff),n.sum=A.sum(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return A.dispose([n.input1,n.input2,n.diff,n.squared,n.sum]),s}var A5=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);w(this,"Canvas");w(this,"Image");w(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Qe["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let o=t[0].match(/\(([^()]+)\)/g);this.platform=o&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(A.engine().registryFactory),this.tensorflow={version:A.backend().binding?A.backend().binding.TF_Version:void 0,gpu:A.backend().binding?A.backend().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&A.getBackend()==="wasm"&&(this.wasm.simd=A.env().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=A.env().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=x0(100,100),o=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof o!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(A.getBackend()==="webgl"||A.getBackend()==="humangl")){let n=A.backend().gpgpu!=="undefined"?await A.backend().getGPGPUContext().gl:null;n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.renderer=n.getParameter(n.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(n){this.webgpu.supported=!1}try{this.kernels=A.getKernelsForBackend(A.getBackend()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},T=new A5;var s5={};K0(s5,{age:()=>An,"anti-spoofing":()=>Wn,antispoof:()=>qo,blazeface:()=>Uo,"blazeface-back":()=>sn,"blazeface-front":()=>an,"blazepose-detect":()=>Ln,"blazepose-detector2d":()=>ln,"blazepose-detector3d":()=>yn,"blazepose-full":()=>cn,"blazepose-heavy":()=>xn,"blazepose-lite":()=>dn,default:()=>Jn,efficientpose:()=>fn,"efficientpose-i-lite":()=>Fn,"efficientpose-ii-lite":()=>Gn,"efficientpose-iv":()=>Bn,emotion:()=>Yo,faceboxes:()=>mn,facemesh:()=>Ko,"facemesh-attention":()=>un,"facemesh-attention-alt":()=>pn,"facemesh-detection-full":()=>hn,"facemesh-detection-short":()=>bn,"facemesh-orig":()=>gn,faceres:()=>Jo,"faceres-deep":()=>Mn,gear:()=>Pn,gender:()=>Rn,"gender-ssrnet-imdb":()=>vn,handdetect:()=>Tn,"handlandmark-full":()=>Qo,"handlandmark-lite":()=>wn,"handlandmark-sparse":()=>kn,handskeleton:()=>En,handtrack:()=>_o,"insightface-efficientnet-b0":()=>Hn,"insightface-ghostnet-strides1":()=>Vn,"insightface-ghostnet-strides2":()=>Dn,"insightface-mobilenet-emore":()=>Zn,"insightface-mobilenet-swish":()=>Xn,iris:()=>$o,liveness:()=>en,"mb3-centernet":()=>tn,meet:()=>zn,mobileface:()=>Sn,mobilefacenet:()=>Cn,models:()=>on,"movenet-lightning":()=>nn,"movenet-multipose":()=>jn,"movenet-thunder":()=>In,nanodet:()=>Nn,"nanodet-e":()=>qn,"nanodet-g":()=>Un,"nanodet-m":()=>Yn,"nanodet-t":()=>Kn,posenet:()=>On,selfie:()=>rn});var qo=853098,Uo=538928,Yo=820516,Ko=1477958,Jo=6978814,Qo=5431368,_o=2964837,$o=2599092,en=592976,tn=4030290,on=0,nn=4650216,rn=212886,An=161240,sn=538928,an=402048,ln=7499400,yn=5928856,cn=6338290,xn=27501554,dn=2725490,fn=5651240,mn=2013002,pn=2387598,un=2382414,hn=1026192,bn=201268,gn=2955780,Mn=13957620,Pn=1498916,vn=161236,Rn=201808,Tn=3515612,wn=2023432,kn=5286322,En=5502280,zn=372228,Sn=2183192,Cn=5171976,jn=9448838,In=12477112,Nn=7574558,On=5032780,Ln=5928804,Wn=853098,Fn=2269064,Gn=5651240,Bn=25643252,Hn=13013224,Vn=8093408,Dn=8049584,Zn=6938536,Xn=12168584,qn=12319156,Un=7574558,Yn=1887474,Kn=5294216,Jn={antispoof:qo,blazeface:Uo,emotion:Yo,facemesh:Ko,faceres:Jo,"handlandmark-full":Qo,handtrack:_o,iris:$o,liveness:en,"mb3-centernet":tn,models:on,"movenet-lightning":nn,selfie:rn,age:An,"blazeface-back":sn,"blazeface-front":an,"blazepose-detector2d":ln,"blazepose-detector3d":yn,"blazepose-full":cn,"blazepose-heavy":xn,"blazepose-lite":dn,efficientpose:fn,faceboxes:mn,"facemesh-attention-alt":pn,"facemesh-attention":un,"facemesh-detection-full":hn,"facemesh-detection-short":bn,"facemesh-orig":gn,"faceres-deep":Mn,gear:Pn,"gender-ssrnet-imdb":vn,gender:Rn,handdetect:Tn,"handlandmark-lite":wn,"handlandmark-sparse":kn,handskeleton:En,meet:zn,mobileface:Sn,mobilefacenet:Cn,"movenet-multipose":jn,"movenet-thunder":In,nanodet:Nn,posenet:On,"blazepose-detect":Ln,"anti-spoofing":Wn,"efficientpose-i-lite":Fn,"efficientpose-ii-lite":Gn,"efficientpose-iv":Bn,"insightface-efficientnet-b0":Hn,"insightface-ghostnet-strides1":Vn,"insightface-ghostnet-strides2":Dn,"insightface-mobilenet-emore":Zn,"insightface-mobilenet-swish":Xn,"nanodet-e":qn,"nanodet-g":Un,"nanodet-m":Yn,"nanodet-t":Kn};var $5={};K0($5,{Models:()=>a2,getModelStats:()=>g1,load:()=>M1,reset:()=>W2,validate:()=>J2,validateModel:()=>Fe});var k0,a5=[],Qn=["white","black","asian","indian","other"],_n=[15,23,28,35.5,45.5,55.5,65],J1=0,Q1=0,i5=Number.MAX_SAFE_INTEGER;async function _1(e){var t;return T.initial&&(k0=null),k0?e.debug&&u("cached model:",k0.modelUrl):k0=await O((t=e.face.gear)==null?void 0:t.modelPath),k0}async function l5(e,t,o,n){var a,i;if(!k0)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=i5<(((a=t.face.gear)==null?void 0:a.skipFrames)||0),s=(((i=t.face.gear)==null?void 0:i.skipTime)||0)>g()-Q1;return t.skipAllowed&&s&&r&&J1===n&&a5[o]?(i5++,a5[o]):(i5=0,new Promise(async y=>{var P,M;if(!(k0!=null&&k0.inputs[0].shape))return;let c={},d=[[0,.1,.9,.9]];c.resize=A.image.cropAndResize(e,d,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]]);let l={age:0,gender:"unknown",genderScore:0,race:[]};(P=t.face.gear)!=null&&P.enabled&&([c.age,c.gender,c.race]=k0.execute(c.resize,["age_output","gender_output","race_output"]));let f=await c.gender.data();l.gender=f[0]>f[1]?"male":"female",l.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[1]))/100;let x=await c.race.data();for(let m=0;m(((M=t.face.gear)==null?void 0:M.minConfidence)||.2)&&l.race.push({score:Math.round(100*x[m])/100,race:Qn[m]});l.race.sort((m,h)=>h.score-m.score);let p=Array.from(await c.age.data()).map((m,h)=>[_n[h],m]).sort((m,h)=>h[1]-m[1]),v=p[0][0];for(let m=1;mA.dispose(c[m])),a5[o]=l,J1=n,Q1=g(),y(l)}))}var W={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function et(){W.tf255=A.scalar(255,"float32"),W.tf1=A.scalar(1,"float32"),W.tf2=A.scalar(2,"float32"),W.tf05=A.scalar(.5,"float32"),W.tf127=A.scalar(127.5,"float32"),W.rgb=A.tensor1d([.2989,.587,.114],"float32")}var p0,f2=[],tt=0,ot=0,y5=Number.MAX_SAFE_INTEGER;async function nt(e){return T.initial&&(p0=null),p0?e.debug&&u("cached model:",p0.modelUrl):p0=await O(e.face.ssrnet.modelPathAge),p0}async function c5(e,t,o,n){var a,i,y,c;if(!p0)return{age:0};let r=y5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),s=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>g()-ot;return t.skipAllowed&&r&&s&&tt===n&&((y=f2[o])==null?void 0:y.age)&&((c=f2[o])==null?void 0:c.age)>0?(y5++,f2[o]):(y5=0,new Promise(async d=>{if(!(p0!=null&&p0.inputs)||!p0.inputs[0]||!p0.inputs[0].shape)return;let l={};l.resize=A.image.resizeBilinear(e,[p0.inputs[0].shape[2],p0.inputs[0].shape[1]],!1),l.enhance=A.mul(l.resize,W.tf255);let f={age:0};if(t.face.ssrnet.enabled&&(l.age=p0.execute(l.enhance)),l.age){let x=await l.age.data();f.age=Math.trunc(10*x[0])/10}Object.keys(l).forEach(x=>A.dispose(l[x])),f2[o]=f,tt=n,ot=g(),d(f)}))}var E0,m2=[],At=0,st=0,x5=Number.MAX_SAFE_INTEGER,d5=[.2989,.587,.114];async function at(e){return T.initial&&(E0=null),E0?e.debug&&u("cached model:",E0.modelUrl):E0=await O(e.face.ssrnet.modelPathGender),E0}async function f5(e,t,o,n){var a,i,y,c;if(!E0)return{gender:"unknown",genderScore:0};let r=x5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),s=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>g()-st;return t.skipAllowed&&r&&s&&At===n&&((y=m2[o])==null?void 0:y.gender)&&((c=m2[o])==null?void 0:c.genderScore)>0?(x5++,m2[o]):(x5=0,new Promise(async d=>{if(!(E0!=null&&E0.inputs[0].shape))return;let l={};l.resize=A.image.resizeBilinear(e,[E0.inputs[0].shape[2],E0.inputs[0].shape[1]],!1),l.enhance=A.tidy(()=>{let[b,p,v]=A.split(l.resize,3,3),P=A.mul(b,d5[0]),M=A.mul(p,d5[1]),m=A.mul(v,d5[2]),h=A.addN([P,M,m]);return A.mul(A.sub(h,W.tf05),2)});let f={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(l.gender=E0.execute(l.enhance));let x=await l.gender.data();f.gender=x[0]>x[1]?"female":"male",f.genderScore=x[0]>x[1]?Math.trunc(100*x[0])/100:Math.trunc(100*x[1])/100,Object.keys(l).forEach(b=>A.dispose(l[b])),m2[o]=f,At=n,st=g(),d(f)}))}var s0,p2=[],m5=Number.MAX_SAFE_INTEGER,lt=0,yt=0;async function ct(e){var t;return T.initial&&(s0=null),s0?e.debug&&u("cached model:",s0.modelUrl):s0=await O((t=e.face.antispoof)==null?void 0:t.modelPath),s0}async function p5(e,t,o,n){var a,i;if(!s0)return 0;let r=(((a=t.face.antispoof)==null?void 0:a.skipTime)||0)>g()-yt,s=m5<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&s&<===n&&p2[o]?(m5++,p2[o]):(m5=0,new Promise(async y=>{let c=A.image.resizeBilinear(e,[s0!=null&&s0.inputs[0].shape?s0.inputs[0].shape[2]:0,s0!=null&&s0.inputs[0].shape?s0.inputs[0].shape[1]:0],!1),d=s0==null?void 0:s0.execute(c),l=(await d.data())[0];p2[o]=Math.round(100*l)/100,lt=n,yt=g(),A.dispose([c,d]),y(p2[o])}))}var z0={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},u5={count:468,mouth:13,symmetryLine:[13,z0.midwayBetweenEyes[0]]},le={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},h5=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],$e=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],ye=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var er=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],tr=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],or=[33,133,362,263,1,78,308],P7=er.map(e=>$e[e]),v7=tr.map(e=>$e[e]),R7=or.map(e=>$e[e]);function J0(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var nr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],rr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ar=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],sr=[[474,475],[475,476],[476,477],[477,474]],ar=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ir=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],lr=[[469,470],[470,471],[471,472],[472,469]],yr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],T7={lips:J0(nr),leftEye:J0(rr),leftEyebrow:J0(Ar),leftIris:J0(sr),rightEye:J0(ar),rightEyebrow:J0(ir),rightIris:J0(lr),faceOval:J0(yr)};var Te=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],u2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],h2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],b2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],mt=(e,t)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:o,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},g5=(e,t,o)=>{let n=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],a=A.image.cropAndResize(t,[s],[0],o),i=A.div(a,W.tf255);return A.dispose(a),i},g2=(e,t)=>{let o=u2(e),n=Te(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[o[0]-r[0],o[1]-r[1]],endPoint:[o[0]+r[0],o[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},M2=e=>{let t=u2(e),o=Te(e),n=Math.max(...o)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},pt=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...o)],endPoint:[Math.max(...t),Math.max(...o)],landmarks:e}},M5=[[1,0,0],[0,1,0],[0,0,1]],cr=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),xr=(e,t)=>cr(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var dt=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],ce=(e,t)=>{let o=0;for(let n=0;n{let o=[];for(let n=0;n{let o=[],n=e.length;for(let r=0;r{let o=Math.cos(e),n=Math.sin(e),r=[[o,-n,0],[n,o,0],[0,0,1]],s=dt(t[0],t[1]),a=ft(s,r),i=dt(-t[0],-t[1]);return ft(a,i)},fr=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],o=[e[0][2],e[1][2]],n=[-ce(t[0],o),-ce(t[1],o)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},mr=(e,t)=>[ce(e,t[0]),ce(e,t[1])];function ht(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},o=[];for(let n=0;n[s[0]/r*(x[0]-r/2),s[1]/r*(x[1]-r/2),x[2]||0]),i=o&&o!==0&&Math.abs(o)>.2,y=i?ut(o,[0,0]):M5,c=i?a.map(x=>[...mr(x,y),x[2]]):a,d=i?fr(n):M5,l=u2(t),f=[ce(l,d[0]),ce(l,d[1])];return c.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2]||0)])}function gt(e,t,o,n){let r=t.landmarks.length>=u5.count?u5.symmetryLine:le.symmetryLine,s=0,a=M5,i;if(e&&T.kernels.includes("rotatewithoffset"))if(s=xr(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=u2(t),d=[c[0]/o.shape[2],c[1]/o.shape[1]],l=A.image.rotateWithOffset(o,s,0,d);a=ut(-s,c),i=g5(t,l,[n,n]),A.dispose(l)}else i=g5(t,o,[n,n]);else i=g5(t,o,[n,n]);return[s,a,i]}var pr=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...o)+(Math.max(...o)-Math.min(...o))/2]},Mt=(e,t)=>{let o=pr(e),n=Te(t);return{startPoint:[o[0]-n[0]/2,o[1]-n[1]/2],endPoint:[o[0]+n[0]/2,o[1]+n[1]/2]}};var Pt=6,ur=1.4,L0,vt=null,Q0=0,e2=null,we=()=>Q0;async function Rt(e){var t;return T.initial&&(L0=null),L0?e.debug&&u("cached model:",L0.modelUrl):L0=await O((t=e.face.detector)==null?void 0:t.modelPath),Q0=L0.inputs[0].shape?L0.inputs[0].shape[2]:0,e2=A.scalar(Q0,"int32"),vt=A.tensor2d(ht(Q0)),L0}function hr(e){let t={};t.boxStarts=A.slice(e,[0,1],[-1,2]),t.centers=A.add(t.boxStarts,vt),t.boxSizes=A.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=A.div(t.boxSizes,e2),t.centersNormalized=A.div(t.centers,e2),t.halfBoxSize=A.div(t.boxSizesNormalized,W.tf2),t.starts=A.sub(t.centersNormalized,t.halfBoxSize),t.ends=A.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=A.mul(t.starts,e2),t.endNormalized=A.mul(t.ends,e2);let o=A.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>A.dispose(t[n])),o}async function Tt(e,t){var i,y,c,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let o={};o.resized=A.image.resizeBilinear(e,[Q0,Q0]),o.div=A.div(o.resized,W.tf127),o.normalized=A.sub(o.div,W.tf05);let n=L0==null?void 0:L0.execute(o.normalized);if(Array.isArray(n)&&n.length>2){let l=n.sort((f,x)=>f.size-x.size);o.concat384=A.concat([l[0],l[2]],2),o.concat512=A.concat([l[1],l[3]],2),o.concat=A.concat([o.concat512,o.concat384],1),o.batch=A.squeeze(o.concat,0)}else Array.isArray(n)?o.batch=A.squeeze(n[0]):o.batch=A.squeeze(n);A.dispose(n),o.boxes=hr(o.batch),o.logits=A.slice(o.batch,[0,0],[-1,1]),o.sigmoid=A.sigmoid(o.logits),o.scores=A.squeeze(o.sigmoid),o.nms=await A.image.nonMaxSuppressionAsync(o.boxes,o.scores,((i=t.face.detector)==null?void 0:i.maxDetected)||0,((y=t.face.detector)==null?void 0:y.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await o.nms.array(),s=[],a=await o.scores.data();for(let l=0;l(((d=t.face.detector)==null?void 0:d.minConfidence)||0)){let x={};x.bbox=A.slice(o.boxes,[r[l],0],[1,-1]),x.slice=A.slice(o.batch,[r[l],Pt-1],[1,-1]),x.squeeze=A.squeeze(x.slice),x.landmarks=A.reshape(x.squeeze,[Pt,-1]);let b=await x.bbox.data(),p={startPoint:[b[0],b[1]],endPoint:[b[2],b[3]],landmarks:await x.landmarks.array(),confidence:f},v=mt(p,[(e.shape[2]||0)/Q0,(e.shape[1]||0)/Q0]),P=g2(v,t.face.scale||ur),M=M2(P);s.push(M),Object.keys(x).forEach(m=>A.dispose(x[m]))}}return Object.keys(o).forEach(l=>A.dispose(o[l])),s}var P2={};K0(P2,{connected:()=>R5,kpt:()=>v5});var v5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],R5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var kt=224,br,gr=5,v2=[8,16,32,32,32];async function Et(){let e=[],t=0;for(;to.x)),y:A.tensor1d(e.map(o=>o.y))}}function H0(e,t=[1,1]){let o=[e.map(i=>i[0]),e.map(i=>i[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],s=[n[0],n[1],r[0]-n[0],r[1]-n[1]],a=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:a}}function zt(e,t=[1,1]){let o=[e.map(c=>c[0]),e.map(c=>c[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],s=[(n[0]+r[0])/2,(n[1]+r[1])/2],a=Math.max(s[0]-n[0],s[1]-n[1],-s[0]+r[0],-s[1]+r[1]),i=[Math.trunc(s[0]-a),Math.trunc(s[1]-a),Math.trunc(2*a),Math.trunc(2*a)],y=[i[0]/t[0],i[1]/t[1],i[2]/t[0],i[3]/t[1]];return{box:i,boxRaw:y}}function R2(e,t){let o=[e[2]*t,e[3]*t];return[e[0]-(o[0]-e[2])/2,e[1]-(o[1]-e[3])/2,o[0],o[1]]}var jt={initial:!0},u0={detector:null,landmarks:null},ke={detector:[224,224],landmarks:[256,256]},T5=Number.MAX_SAFE_INTEGER,Pr={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},w2=null,t2,_0=[[0,0],[0,0],[0,0],[0,0]],St=0,Ct=e=>1-1/(1+Math.exp(e));async function It(e){if(jt.initial&&(u0.detector=null),!u0.detector&&e.body.detector&&e.body.detector.modelPath){u0.detector=await O(e.body.detector.modelPath);let t=Object.values(u0.detector.modelSignature.inputs);ke.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,ke.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&u0.detector&&u("cached model:",u0.detector.modelUrl);return await Et(),u0.detector}async function Nt(e){if(jt.initial&&(u0.landmarks=null),u0.landmarks)e.debug&&u("cached model:",u0.landmarks.modelUrl);else{u0.landmarks=await O(e.body.modelPath);let t=Object.values(u0.landmarks.modelSignature.inputs);ke.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,ke.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return u0.landmarks}async function vr(e,t){let o={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let n;if(t2&&(o.cropped=A.image.cropAndResize(e,[t2],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],s=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];_0=[[0,0],r,s,[0,0]],o.pad=A.pad(o.cropped||e,_0),o.resize=A.image.resizeBilinear(o.pad,[t,t]),n=A.div(o.resize,W.tf255)}else e.shape[1]!==t?(o.resize=A.image.resizeBilinear(o.cropped||e,[t,t]),n=A.div(o.resize,W.tf255)):n=A.div(o.cropped||e,W.tf255);return Object.keys(o).forEach(r=>A.dispose(o[r])),n}function Rr(e,t){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+_0[2][0]+_0[2][1])/t[0]-_0[2][0]),Math.trunc(o.position[1]*(t[1]+_0[1][0]+_0[1][1])/t[1]-_0[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(t2)for(let o of e)o.positionRaw=[o.positionRaw[0]+t2[1],o.positionRaw[1]+t2[0],o.positionRaw[2]],o.position=[Math.trunc(o.positionRaw[0]*t[0]),Math.trunc(o.positionRaw[1]*t[1]),o.positionRaw[2]];return e}async function Tr(e){let t=e.find(i=>i.part==="leftPalm"),o=e.find(i=>i.part==="leftWrist"),n=e.find(i=>i.part==="leftIndex");t.position[2]=((o.position[2]||0)+(n.position[2]||0))/2;let r=e.find(i=>i.part==="rightPalm"),s=e.find(i=>i.part==="rightWrist"),a=e.find(i=>i.part==="rightIndex");r.position[2]=((s.position[2]||0)+(a.position[2]||0))/2}async function wr(e,t,o){var b;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=(b=u0.landmarks)==null?void 0:b.execute(e,Pr.landmarks);let r=(await n.poseflag.data())[0],s=await n.ld.data(),a=await n.world.data();Object.keys(n).forEach(p=>A.dispose(n[p]));let i=[],y=5;for(let p=0;pp.position),l=H0(d,[o[0],o[1]]),f={};for(let[p,v]of Object.entries(R5)){let P=[];for(let M=0;MC.part===v[M]),h=c.find(C=>C.part===v[M+1]);m&&h&&P.push([m.position,h.position])}f[p]=P}return{id:0,score:Math.trunc(100*r)/100,box:l.box,boxRaw:l.boxRaw,keypoints:c,annotations:f}}async function w5(e,t){let o=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>g()-St,r=T5<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&w2!==null)T5++;else{let s={};s.landmarks=await vr(e,256),w2=await wr(s.landmarks,t,o),Object.keys(s).forEach(a=>A.dispose(s[a])),St=g(),T5=0}return w2?[w2]:[]}var Ee=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var V0,xe=0,k5=[],Lt=0,E5=Number.MAX_SAFE_INTEGER;async function Wt(e){if(T.initial&&(V0=null),V0)e.debug&&u("cached model:",V0.modelUrl);else{V0=await O(e.object.modelPath);let t=Object.values(V0.modelSignature.inputs);xe=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return V0}async function kr(e,t,o){if(!e)return[];let n={},r=[],s=await e.array();n.squeeze=A.squeeze(e);let a=A.split(n.squeeze,6,1);n.stack=A.stack([a[1],a[0],a[3],a[2]],1),n.boxes=A.squeeze(n.stack),n.scores=A.squeeze(a[4]),n.classes=A.squeeze(a[5]),A.dispose([e,...a]),n.nms=await A.image.nonMaxSuppressionAsync(n.boxes,n.scores,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence||0);let i=await n.nms.data(),y=0;for(let c of Array.from(i)){let d=Math.trunc(100*s[0][c][4])/100,l=s[0][c][5],f=Ee[l].label,[x,b]=[s[0][c][0]/xe,s[0][c][1]/xe],p=[x,b,s[0][c][2]/xe-x,s[0][c][3]/xe-b],v=[Math.trunc(p[0]*t[0]),Math.trunc(p[1]*t[1]),Math.trunc(p[2]*t[0]),Math.trunc(p[3]*t[1])];r.push({id:y++,score:d,class:l,label:f,box:v,boxRaw:p})}return Object.keys(n).forEach(c=>A.dispose(n[c])),r}async function z5(e,t){let o=(t.object.skipTime||0)>g()-Lt,n=E5<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&k5.length>0?(E5++,k5):(E5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],a=A.image.resizeBilinear(e,[xe,xe]),i=t.object.enabled?V0==null?void 0:V0.execute(a,["tower_0/detections"]):null;Lt=g(),A.dispose(a);let y=await kr(i,s,t);k5=y,r(y)}))}var k2={};K0(k2,{connected:()=>C5,kpt:()=>S5});var S5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],C5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var a0,Gt=0,d0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},j5=Number.MAX_SAFE_INTEGER;async function Bt(e){return T.initial&&(a0=null),a0?e.debug&&u("cached model:",a0.modelUrl):a0=await O(e.body.modelPath),a0}async function Er(e,t){let[o,n]=e.shape,r=A.reshape(e,[n*o]),s=A.max(r,0),a=(await s.data())[0];if(a>t){let i=A.argMax(r,0),y=A.mod(i,o),c=(await y.data())[0],d=A.div(i,o),l=(await d.data())[0];return A.dispose([r,s,i,y,d]),[c,l,a]}else return A.dispose([r,s]),[0,0,a]}async function I5(e,t){let o=(t.body.skipTime||0)>g()-Gt,n=j5<(t.body.skipFrames||0);return t.skipAllowed&&o&&n&&Object.keys(d0.keypoints).length>0?(j5++,[d0]):(j5=0,new Promise(async r=>{var l;let s=A.tidy(()=>{if(!(a0!=null&&a0.inputs[0].shape))return null;let f=A.image.resizeBilinear(e,[a0.inputs[0].shape[2],a0.inputs[0].shape[1]],!1),x=A.mul(f,W.tf2);return A.sub(x,W.tf1)}),a;if(t.body.enabled&&(a=a0==null?void 0:a0.execute(s)),Gt=g(),A.dispose(s),a){d0.keypoints.length=0;let f=A.squeeze(a);A.dispose(a);let x=A.unstack(f,2);A.dispose(f);for(let b=0;b(((l=t.body)==null?void 0:l.minConfidence)||0)&&d0.keypoints.push({score:Math.round(100*P)/100,part:S5[b],positionRaw:[p/a0.inputs[0].shape[2],v/a0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/a0.inputs[0].shape[2]),Math.round(e.shape[1]*v/a0.inputs[0].shape[1])]})}x.forEach(b=>A.dispose(b))}d0.score=d0.keypoints.reduce((f,x)=>x.score>f?x.score:f,0);let i=d0.keypoints.map(f=>f.position[0]),y=d0.keypoints.map(f=>f.position[1]);d0.box=[Math.min(...i),Math.min(...y),Math.max(...i)-Math.min(...i),Math.max(...y)-Math.min(...y)];let c=d0.keypoints.map(f=>f.positionRaw[0]),d=d0.keypoints.map(f=>f.positionRaw[1]);d0.boxRaw=[Math.min(...c),Math.min(...d),Math.max(...c)-Math.min(...c),Math.max(...d)-Math.min(...d)];for(let[f,x]of Object.entries(C5)){let b=[];for(let p=0;pM.part===x[p]),P=d0.keypoints.find(M=>M.part===x[p+1]);v&&P&&v.score>(t.body.minConfidence||0)&&P.score>(t.body.minConfidence||0)&&b.push([v.position,P.position])}d0.annotations[f]=b}r([d0])}))}var zr=["angry","disgust","fear","happy","sad","surprise","neutral"],R0,E2=[],Vt=0,Dt=0,N5=Number.MAX_SAFE_INTEGER;async function Zt(e){var t;return T.initial&&(R0=null),R0?e.debug&&u("cached model:",R0.modelUrl):R0=await O((t=e.face.emotion)==null?void 0:t.modelPath),R0}async function O5(e,t,o,n){var a,i;if(!R0)return[];let r=N5<(((a=t.face.emotion)==null?void 0:a.skipFrames)||0),s=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>g()-Dt;return t.skipAllowed&&s&&r&&Vt===n&&E2[o]&&E2[o].length>0?(N5++,E2[o]):(N5=0,new Promise(async y=>{var d,l;let c=[];if((d=t.face.emotion)!=null&&d.enabled){let f={},x=R0!=null&&R0.inputs[0].shape?R0.inputs[0].shape[2]:0;f.resize=A.image.resizeBilinear(e,[x,x],!1),f.channels=A.mul(f.resize,W.rgb),f.grayscale=A.sum(f.channels,3,!0),f.grayscaleSub=A.sub(f.grayscale,W.tf05),f.grayscaleMul=A.mul(f.grayscaleSub,W.tf2),f.emotion=R0==null?void 0:R0.execute(f.grayscaleMul),Dt=g();let b=await f.emotion.data();for(let p=0;p(((l=t.face.emotion)==null?void 0:l.minConfidence)||0)&&c.push({score:Math.min(.99,Math.trunc(100*b[p])/100),emotion:zr[p]});c.sort((p,v)=>v.score-p.score),Object.keys(f).forEach(p=>A.dispose(f[p]))}E2[o]=c,Vt=n,y(c)}))}var h0,L5=[],qt=0,Ut=0,Yt=Number.MAX_SAFE_INTEGER;async function Kt(e){return T.initial&&(h0=null),h0?e.debug&&u("cached model:",h0.modelUrl):h0=await O(e.face.mobilefacenet.modelPath),h0}async function W5(e,t,o,n){var a,i;if(!h0)return[];let r=Yt<(((a=t.face.mobilefacenet)==null?void 0:a.skipFrames)||0),s=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>g()-Ut;return t.skipAllowed&&s&&r&&qt===n&&L5[o]?(Yt++,L5[o]):new Promise(async y=>{var d;let c=[];if(((d=t.face.mobilefacenet)==null?void 0:d.enabled)&&(h0==null?void 0:h0.inputs[0].shape)){let l={};l.crop=A.image.resizeBilinear(e,[h0.inputs[0].shape[2],h0.inputs[0].shape[1]],!1),l.data=h0==null?void 0:h0.execute(l.crop);let f=await l.data.data();c=Array.from(f),Object.keys(l).forEach(x=>A.dispose(l[x]))}L5[o]=c,qt=n,Ut=g(),y(c)})}var b0,F5=[],Qt=0,_t=0,$t=Number.MAX_SAFE_INTEGER;async function e3(e){return T.initial&&(b0=null),b0?e.debug&&u("cached model:",b0.modelUrl):b0=await O(e.face.insightface.modelPath),b0}async function G5(e,t,o,n){var a,i;if(!b0)return[];let r=$t<(((a=t.face.insightface)==null?void 0:a.skipFrames)||0),s=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>g()-_t;return t.skipAllowed&&s&&r&&Qt===n&&F5[o]?($t++,F5[o]):new Promise(async y=>{var d;let c=[];if(((d=t.face.insightface)==null?void 0:d.enabled)&&(b0==null?void 0:b0.inputs[0].shape)){let l={};l.crop=A.image.resizeBilinear(e,[b0.inputs[0].shape[2],b0.inputs[0].shape[1]],!1),l.data=b0==null?void 0:b0.execute(l.crop);let f=await l.data.data();c=Array.from(f),Object.keys(l).forEach(x=>A.dispose(l[x]))}F5[o]=c,Qt=n,_t=g(),y(c)})}var D0,$0=0,Sr=2.3,B5=z0.leftEyeLower0,H5=z0.rightEyeLower0,ze={leftBounds:[B5[0],B5[B5.length-1]],rightBounds:[H5[0],H5[H5.length-1]]},Se={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function A3(e){var t;return T.initial&&(D0=null),D0?e.debug&&u("cached model:",D0.modelUrl):D0=await O((t=e.face.iris)==null?void 0:t.modelPath),$0=D0.inputs[0].shape?D0.inputs[0].shape[2]:0,$0===-1&&($0=64),D0}function z2(e,t,o,n){for(let r=0;r{let t=e[ze.leftBounds[0]][2],o=e[ze.rightBounds[0]][2];return t-o},o3=(e,t,o,n,r,s=!1)=>{let a=M2(g2(pt([e[o],e[n]]),Sr)),i=Te(a),y=A.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[$0,$0]);if(s&&T.kernels.includes("flipleftright")){let c=A.image.flipLeftRight(y);A.dispose(y),y=c}return{box:a,boxSize:i,crop:y}},n3=(e,t,o,n=!1)=>{let r=[];for(let s=0;s{let n=e[z0[`${o}EyeUpper0`][Se.upperCenter]][2],r=e[z0[`${o}EyeLower0`][Se.lowerCenter]][2],s=(n+r)/2;return t.map((a,i)=>{let y=s;return i===2?y=n:i===4&&(y=r),[a[0],a[1],y]})};async function s3(e,t,o,n){if(!D0)return o.debug&&u("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:s,crop:a}=o3(e,t,ze.leftBounds[0],ze.leftBounds[1],n,!0),{box:i,boxSize:y,crop:c}=o3(e,t,ze.rightBounds[0],ze.rightBounds[1],n,!0),d=A.concat([a,c]);A.dispose(a),A.dispose(c);let l=D0.execute(d);A.dispose(d);let f=await l.data();A.dispose(l);let x=f.slice(0,Se.numCoordinates*3),{rawCoords:b,iris:p}=n3(x,r,s,!0),v=f.slice(Se.numCoordinates*3),{rawCoords:P,iris:M}=n3(v,i,y,!1),m=Cr(e);Math.abs(m)<30?(z2(e,b,"left",null),z2(e,P,"right",null)):m<1?z2(e,b,"left",["EyeUpper0","EyeLower0"]):z2(e,P,"right",["EyeUpper0","EyeLower0"]);let h=r3(e,p,"left"),C=r3(e,M,"right");return e.concat(h).concat(C)}var jr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Ir=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Nr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Or=[[474,475],[475,476],[476,477],[477,474]],Lr=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Wr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Fr=[[469,470],[470,471],[471,472],[472,469]],Gr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function ee(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var Br={lips:ee(jr),leftEye:ee(Ir),leftEyebrow:ee(Nr),leftIris:ee(Or),rightEye:ee(Lr),rightEyebrow:ee(Wr),rightIris:ee(Fr),faceOval:ee(Gr)},Hr=Object.entries(Br).map(([e,t])=>t.map(o=>[o,e])).flat(),n4=new Map(Hr),o2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],de=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],fe=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function l3(e,t){let o={lips:await t.filter(s=>s.size===160)[0].data(),irisL:await t.filter(s=>s.size===10)[0].data(),eyeL:await t.filter(s=>s.size===142)[0].data(),irisR:await t.filter(s=>s.size===10)[1].data(),eyeR:await t.filter(s=>s.size===142)[1].data()},n=de.reduce((s,a)=>s+=e[a][2],0)/de.length;for(let s=0;ss+=e[a][2],0)/fe.length;for(let s=0;sg()-W0.timestamp,n=W0.skipped<(((y=t.face.detector)==null?void 0:y.skipFrames)||0);!t.skipAllowed||!o||!n||W0.boxes.length===0?(W0.boxes=await Tt(e,t),W0.timestamp=g(),W0.skipped=0):W0.skipped++;let r=[],s=[],a=0;for(let m=0;mL.shape[L.shape.length-1]===1).data();if(k.faceScore=Math.round(100*B[0])/100,k.faceScore<(((b=t.face.detector)==null?void 0:b.minConfidence)||1)){if(h.confidence=k.faceScore,(p=t.face.mesh)!=null&&p.keepInvalid){k.box=h2(h,e),k.boxRaw=b2(h,e),k.score=k.boxScore,k.mesh=h.landmarks.map(L=>[(h.startPoint[0]+h.endPoint[0])/2+(h.endPoint[0]+h.startPoint[0])*L[0]/we(),(h.startPoint[1]+h.endPoint[1])/2+(h.endPoint[1]+h.startPoint[1])*L[1]/we()]),k.meshRaw=k.mesh.map(L=>[L[0]/(e.shape[2]||1),L[1]/(e.shape[1]||1),(L[2]||0)/me]);for(let L of Object.keys(le))k.annotations[L]=[k.mesh[le[L]]]}}else{let L=z.find(e0=>e0.shape[e0.shape.length-1]===1404),K=A.reshape(L,[-1,3]),Z=await K.array();A.dispose(K),(v=t.face.attention)!=null&&v.enabled?Z=await l3(Z,z):(P=t.face.iris)!=null&&P.enabled&&(Z=await s3(Z,k.tensor,t,me)),k.mesh=bt(Z,h,C,N,me),k.meshRaw=k.mesh.map(e0=>[e0[0]/(e.shape[2]||0),e0[1]/(e.shape[1]||0),(e0[2]||0)/me]);for(let e0 of Object.keys(z0))k.annotations[e0]=z0[e0].map(v0=>k.mesh[v0]);k.score=k.faceScore;let S={...Mt(k.mesh,h),confidence:h.confidence,landmarks:h.landmarks};k.box=h2(S,e),k.boxRaw=b2(S,e),s.push(S)}A.dispose(z)}else{k.box=h2(h,e),k.boxRaw=b2(h,e),k.score=k.boxScore,k.mesh=h.landmarks.map(z=>[(h.startPoint[0]+h.endPoint[0])/2+(h.endPoint[0]+h.startPoint[0])*z[0]/we(),(h.startPoint[1]+h.endPoint[1])/2+(h.endPoint[1]+h.startPoint[1])*z[1]/we()]),k.meshRaw=k.mesh.map(z=>[z[0]/(e.shape[2]||0),z[1]/(e.shape[1]||0),(z[2]||0)/me]);for(let z of Object.keys(le))k.annotations[z]=[k.mesh[le[z]]]}k.score>(((M=t.face.detector)==null?void 0:M.minConfidence)||1)?r.push(k):A.dispose(k.tensor)}return W0.boxes=s,r}async function c3(e){var t,o,n,r,s,a;return T.initial&&(i0=null),((o=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:o.enabled)&&(i0==null?void 0:i0.signature)&&Object.keys(((n=i0==null?void 0:i0.signature)==null?void 0:n.outputs)||{}).length<6&&(i0=null),i0?e.debug&&u("cached model:",i0.modelUrl):(r=e.face.attention)!=null&&r.enabled?i0=await O((s=e.face.attention)==null?void 0:s.modelPath):i0=await O((a=e.face.mesh)==null?void 0:a.modelPath),me=i0.inputs[0].shape?i0.inputs[0].shape[2]:0,i0}var x3=ye,d3=$e;var g0,S2=[],f3=0,m3=0,D5=Number.MAX_SAFE_INTEGER;async function p3(e){var t;return T.initial&&(g0=null),g0?e.debug&&u("cached model:",g0.modelUrl):g0=await O((t=e.face.description)==null?void 0:t.modelPath),g0}function Z5(e){let t=e.image||e.tensor||e;if(!(g0!=null&&g0.inputs[0].shape))return t;let o=A.image.resizeBilinear(t,[g0.inputs[0].shape[2],g0.inputs[0].shape[1]],!1),n=A.mul(o,W.tf255);return A.dispose(o),n}async function X5(e,t,o,n){var a,i,y,c;if(!g0)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=D5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),s=(((i=t.face.description)==null?void 0:i.skipTime)||0)>g()-f3;return t.skipAllowed&&r&&s&&m3===n&&((y=S2[o])==null?void 0:y.age)&&((c=S2[o])==null?void 0:c.age)>0?(D5++,S2[o]):(D5=0,new Promise(async d=>{var f,x;let l={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((f=t.face.description)!=null&&f.enabled){let b=Z5(e),p=g0==null?void 0:g0.execute(b);f3=g(),A.dispose(b);let P=await(await p.find(F=>F.shape[1]===1)).data(),M=Math.trunc(200*Math.abs(P[0]-.5))/100;M>(((x=t.face.description)==null?void 0:x.minConfidence)||0)&&(l.gender=P[0]<=.5?"female":"male",l.genderScore=Math.min(.99,M));let m=A.argMax(p.find(F=>F.shape[1]===100),1),h=(await m.data())[0];A.dispose(m);let N=await p.find(F=>F.shape[1]===100).data();l.age=Math.round(N[h-1]>N[h+1]?10*h-100*N[h-1]:10*h+100*N[h+1])/10;let k=p.find(F=>F.shape[1]===1024),z=k?await k.data():[];l.descriptor=Array.from(z),p.forEach(F=>A.dispose(F))}S2[o]=l,m3=n,d(l)}))}function C2(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function n2(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function b3(e,t,o){let n=t.shape[1],r=t.shape[2],s=[[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r]];return A.image.cropAndResize(t,s,[0],o)}function g3(e,t){let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(s=>[s[0]*t[0],s[1]*t[1]]);return{startPoint:o,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function j2(e,t=1.5){let o=n2(e),n=C2(e),r=[t*n[0]/2,t*n[1]/2],s=[o[0]-r[0],o[1]-r[1]],a=[o[0]+r[0],o[1]+r[1]];return{startPoint:s,endPoint:a,palmLandmarks:e.palmLandmarks}}function I2(e){let t=n2(e),o=C2(e),r=Math.max(...o)/2,s=[t[0]-r,t[1]-r],a=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:a,palmLandmarks:e.palmLandmarks}}function Dr(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function M3(e,t){let o=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Dr(o)}var u3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function te(e,t){let o=0;for(let n=0;n[o.x,o.y]),this.anchorsTensor=A.tensor2d(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=A.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=A.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let o={};o.boxOffsets=A.slice(t,[0,0],[-1,2]),o.boxSizes=A.slice(t,[0,2],[-1,2]),o.div=A.div(o.boxOffsets,this.inputSizeTensor),o.boxCenterPoints=A.add(o.div,this.anchorsTensor),o.halfBoxSizes=A.div(o.boxSizes,this.doubleInputSizeTensor),o.sub=A.sub(o.boxCenterPoints,o.halfBoxSizes),o.startPoints=A.mul(o.sub,this.inputSizeTensor),o.add=A.add(o.boxCenterPoints,o.halfBoxSizes),o.endPoints=A.mul(o.add,this.inputSizeTensor);let n=A.concat2d([o.startPoints,o.endPoints],1);return Object.keys(o).forEach(r=>A.dispose(o[r])),n}normalizeLandmarks(t,o){let n={};n.reshape=A.reshape(t,[-1,7,2]),n.div=A.div(n.reshape,this.inputSizeTensor),n.landmarks=A.add(n.div,this.anchors[o]);let r=A.mul(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(s=>A.dispose(n[s])),r}async predict(t,o){let n={};n.resize=A.image.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=A.div(n.resize,W.tf127),n.image=A.sub(n.div,W.tf1),n.batched=this.model.execute(n.image),n.predictions=A.squeeze(n.batched),n.slice=A.slice(n.predictions,[0,0],[-1,1]),n.sigmoid=A.sigmoid(n.slice),n.scores=A.squeeze(n.sigmoid);let r=await n.scores.data();n.boxes=A.slice(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await A.image.nonMaxSuppressionAsync(n.norm,n.scores,3*o.hand.maxDetected,o.hand.iouThreshold,o.hand.minConfidence);let s=await n.nms.array(),a=[];for(let i of s){let y={};y.box=A.slice(n.norm,[i,0],[1,-1]),y.slice=A.slice(n.predictions,[i,5],[1,14]),y.norm=this.normalizeLandmarks(y.slice,i),y.palmLandmarks=A.reshape(y.norm,[-1,2]);let c=await y.box.data(),d=c.slice(0,2),l=c.slice(2,4),f=await y.palmLandmarks.array(),x={startPoint:d,endPoint:l,palmLandmarks:f,confidence:r[i]},b=g3(x,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);a.push(b),Object.keys(y).forEach(p=>A.dispose(y[p]))}return Object.keys(n).forEach(i=>A.dispose(n[i])),a}};var Ur=5,T3=1.65,w3=[0,5,9,13,17,1,2],Yr=0,Kr=2,k3=0,O2=class{constructor(t,o){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(this,"detectedHands");this.handDetector=t,this.handPoseModel=o,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let o=t.map(a=>a[0]),n=t.map(a=>a[1]),r=[Math.min(...o),Math.min(...n)],s=[Math.max(...o),Math.max(...n)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,o){let n=t.map(s=>Y5([...s,1],o)),r=this.calculateLandmarksBoundingBox(n);return j2(I2(r),Ur)}getBoxForHandLandmarks(t){let o=this.calculateLandmarksBoundingBox(t),n=j2(I2(o),T3);n.palmLandmarks=[];for(let r=0;r[a[0]*(x[0]-this.inputSize/2),a[1]*(x[1]-this.inputSize/2),a[2]*x[2]]),y=U5(n,[0,0]),c=i.map(x=>[...Y5(x,y),x[2]]),d=P3(r),l=[...n2(o),1],f=[te(l,d[0]),te(l,d[1])];return c.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2])])}async estimateHands(t,o){let n=!1,r,s=(o.hand.skipTime||0)>g()-k3,a=this.skipped<(o.hand.skipFrames||0);o.skipAllowed&&s&&a&&(r=await this.handDetector.predict(t,o),this.skipped=0),o.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==o.hand.maxDetected||!o.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let i=[];for(let y=0;y=o.hand.minConfidence/4){let C=A.reshape(m,[-1,3]),N=await C.array();A.dispose(m),A.dispose(C);let k=this.transformRawCoords(N,p,d,b),z=this.getBoxForHandLandmarks(k);this.storedBoxes[y]={...z,confidence:h};let F={landmarks:k,confidence:h,boxConfidence:c.confidence,fingerConfidence:h,box:{topLeft:z.startPoint,bottomRight:z.endPoint}};i.push(F)}else this.storedBoxes[y]=null;A.dispose(m)}else{let d=j2(I2(c),T3),l={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:d.startPoint,bottomRight:d.endPoint},landmarks:[]};i.push(l)}}return this.storedBoxes=this.storedBoxes.filter(y=>y!==null),this.detectedHands=i.length,i.length>o.hand.maxDetected&&(i.length=o.hand.maxDetected),i}};var f0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>f0.nameMapping[e],getPoints:e=>f0.pointsMapping[e]},ne={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>ne.nameMapping[e]},J={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>J.nameMapping[e]},oe=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,o,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([o,n])}direction(t,o,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([o,n])}weight(t,o){this.weights[t]=o;let n=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,o){let n=0;for(let r in t){let s=t[r],a=this.curls[r];if(typeof a=="undefined"){n+=this.weightsRelative[r];continue}for(let[i,y]of a)if(s===i){n+=y*this.weightsRelative[r];break}}for(let r in o){let s=o[r],a=this.directions[r];if(typeof a=="undefined"){n+=this.weightsRelative[r];continue}for(let[i,y]of a)if(s===i){n+=y*this.weightsRelative[r];break}}return n/10}};var{thumb:C0,index:Z0,middle:X0,ring:pe,pinky:ue}=f0,{none:j0,half:Qr,full:I0}=ne,{verticalUp:Ce,verticalDown:h4,horizontalLeft:K5,horizontalRight:_r,diagonalUpRight:$r,diagonalUpLeft:je,diagonalDownRight:b4,diagonalDownLeft:g4}=J,re=new oe("thumbs up");re.curl(C0,j0,1);re.direction(C0,Ce,1);re.direction(C0,je,.25);re.direction(C0,$r,.25);for(let e of[f0.index,f0.middle,f0.ring,f0.pinky])re.curl(e,I0,1),re.direction(e,K5,1),re.direction(e,_r,1);var o0=new oe("victory");o0.curl(C0,Qr,.5);o0.curl(C0,j0,.5);o0.direction(C0,Ce,1);o0.direction(C0,je,1);o0.curl(Z0,j0,1);o0.direction(Z0,Ce,.75);o0.direction(Z0,je,1);o0.curl(X0,j0,1);o0.direction(X0,Ce,1);o0.direction(X0,je,.75);o0.curl(pe,I0,1);o0.direction(pe,Ce,.2);o0.direction(pe,je,1);o0.direction(pe,K5,.2);o0.curl(ue,I0,1);o0.direction(ue,Ce,.2);o0.direction(ue,je,1);o0.direction(ue,K5,.2);o0.weight(Z0,2);o0.weight(X0,2);var Ae=new oe("point");Ae.curl(C0,I0,1);Ae.curl(Z0,j0,.5);Ae.curl(X0,I0,.5);Ae.curl(pe,I0,.5);Ae.curl(ue,I0,.5);Ae.weight(Z0,2);Ae.weight(X0,2);var se=new oe("middle finger");se.curl(C0,j0,1);se.curl(Z0,I0,.5);se.curl(X0,I0,.5);se.curl(pe,I0,.5);se.curl(ue,I0,.5);se.weight(Z0,2);se.weight(X0,2);var Ie=new oe("open palm");Ie.curl(C0,j0,.75);Ie.curl(Z0,j0,.75);Ie.curl(X0,j0,.75);Ie.curl(pe,j0,.75);Ie.curl(ue,j0,.75);var E3=[re,o0,Ae,se,Ie];var eA=.7,he={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function z3(e,t,o,n){let r=(t-n)/(e-o),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function C3(e,t){if(!e||!t)return[0,0];let o=z3(e[0],e[1],t[0],t[1]);if(e.length===2)return o;let n=z3(e[1],e[2],t[1],t[2]);return[o,n]}function S3(e,t=1){let o=0,n=0,r=0;return e>=75&&e<=105?o=1*t:e>=25&&e<=155?n=1*t:r=1*t,[o,n,r]}function tA(e,t,o){let n=e[0]-t[0],r=e[0]-o[0],s=t[0]-o[0],a=e[1]-t[1],i=e[1]-o[1],y=t[1]-o[1],c=e[2]-t[2],d=e[2]-o[2],l=t[2]-o[2],f=Math.sqrt(n*n+a*a+c*c),x=Math.sqrt(r*r+i*i+d*d),b=Math.sqrt(s*s+y*y+l*l),p=(b*b+f*f-x*x)/(2*b*f);p>1?p=1:p<-1&&(p=-1);let v=Math.acos(p);v=57.2958*v%180;let P;return v>he.NO_CURL_START_LIMIT?P=ne.none:v>he.HALF_CURL_START_LIMIT?P=ne.half:P=ne.full,P}function j3(e,t,o,n){let r;return n===Math.abs(e)?e>0?r=J.horizontalLeft:r=J.horizontalRight:n===Math.abs(t)?t>0?r=J.horizontalLeft:r=J.horizontalRight:o>0?r=J.horizontalLeft:r=J.horizontalRight,r}function I3(e,t,o,n){let r;return n===Math.abs(e)?e<0?r=J.verticalDown:r=J.verticalUp:n===Math.abs(t)?t<0?r=J.verticalDown:r=J.verticalUp:o<0?r=J.verticalDown:r=J.verticalUp,r}function oA(e,t,o,n,r,s,a,i){let y,c=I3(e,t,o,n),d=j3(r,s,a,i);return c===J.verticalUp?d===J.horizontalLeft?y=J.diagonalUpLeft:y=J.diagonalUpRight:d===J.horizontalLeft?y=J.diagonalDownLeft:y=J.diagonalDownRight,y}function nA(e,t,o,n){let r=e[0]-t[0],s=e[0]-o[0],a=t[0]-o[0],i=e[1]-t[1],y=e[1]-o[1],c=t[1]-o[1],d=Math.max(Math.abs(r),Math.abs(s),Math.abs(a)),l=Math.max(Math.abs(i),Math.abs(y),Math.abs(c)),f=0,x=0,b=0,p=l/(d+1e-5);p>1.5?f+=he.DISTANCE_VOTE_POWER:p>.66?x+=he.DISTANCE_VOTE_POWER:b+=he.DISTANCE_VOTE_POWER;let v=Math.sqrt(r*r+i*i),P=Math.sqrt(s*s+y*y),M=Math.sqrt(a*a+c*c),m=Math.max(v,P,M),h=e[0],C=e[1],N=o[0],k=o[1];m===v?(N=o[0],k=o[1]):m===M&&(h=t[0],C=t[1]);let B=C3([h,C],[N,k]),L=S3(B,he.TOTAL_ANGLE_VOTE_POWER);f+=L[0],x+=L[1],b+=L[2];for(let Z of n){let S=S3(Z,he.SINGLE_ANGLE_VOTE_POWER);f+=S[0],x+=S[1],b+=S[2]}let K;return f===Math.max(f,x,b)?K=I3(y,i,c,l):b===Math.max(x,b)?K=j3(s,r,a,d):K=oA(y,i,c,l,s,r,a,d),K}function N3(e){let t=[],o=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of f0.all){let a=f0.getPoints(s),i=[],y=[];for(let c of a){let d=e[c[0]],l=e[c[1]],f=C3(d,l),x=f[0],b=f[1];i.push(x),y.push(b)}t.push(i),o.push(y)}for(let s of f0.all){let a=s===f0.thumb?1:0,i=f0.getPoints(s),y=e[i[a][0]],c=e[i[a+1][1]],d=e[i[3][1]],l=tA(y,c,d),f=nA(y,c,d,t[s].slice(a));n[s]=l,r[s]=f}return{curls:n,directions:r}}function L2(e){if(!e||e.length===0)return null;let t=N3(e),o={};for(let n of f0.all)o[f0.getName(n)]={curl:ne.getName(t.curls[n]),direction:J.getName(t.directions[n])};return o}function O3(e){let t=[];if(!e||e.length===0)return t;let o=N3(e);for(let n of E3){let r=n.matchAgainst(o.curls,o.directions);r>=eA&&t.push({name:n.name,confidence:r})}return t}var L3={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Ne,Oe,W3;async function Q5(e,t){let o=await W3.estimateHands(e,t);if(!o)return[];let n=[];for(let r=0;ro[r].landmarks[l]);let a=o[r].landmarks,i=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],y=[0,0,0,0];if(a&&a.length>0){for(let d of a)d[0]i[2]&&(i[2]=d[0]),d[1]>i[3]&&(i[3]=d[1]);i[2]-=i[0],i[3]-=i[1],y=[i[0]/(e.shape[2]||0),i[1]/(e.shape[1]||0),i[2]/(e.shape[2]||0),i[3]/(e.shape[1]||0)]}else i=o[r].box?[Math.trunc(Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.max(0,o[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,o[r].box.bottomRight[0])-Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,o[r].box.bottomRight[1])-Math.max(0,o[r].box.topLeft[1]))]:[0,0,0,0],y=[o[r].box.topLeft[0]/(e.shape[2]||0),o[r].box.topLeft[1]/(e.shape[1]||0),(o[r].box.bottomRight[0]-o[r].box.topLeft[0])/(e.shape[2]||0),(o[r].box.bottomRight[1]-o[r].box.topLeft[1])/(e.shape[1]||0)];let c=L2(a);n.push({id:r,score:Math.round(100*o[r].confidence)/100,boxScore:Math.round(100*o[r].boxConfidence)/100,fingerScore:Math.round(100*o[r].fingerConfidence)/100,label:"hand",box:i,boxRaw:y,keypoints:a,annotations:s,landmarks:c})}return n}async function _5(e){var o,n;T.initial&&(Ne=null,Oe=null),!Ne||!Oe?[Ne,Oe]=await Promise.all([e.hand.enabled?O((o=e.hand.detector)==null?void 0:o.modelPath):null,e.hand.landmarks?O((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&u("cached model:",Ne.modelUrl),e.debug&&u("cached model:",Oe.modelUrl));let t=new N2(Ne);return W3=new O2(t,Oe),[Ne,Oe]}var Y={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function rA(){let e=Y.gl;!e||(Y.extensions=e.getSupportedExtensions())}async function G3(e){var t;if(e.config.backend==="humangl"&&(Y.name in A.engine().registry&&(!Y.gl||!Y.gl.getParameter(Y.gl.VERSION))&&(u("error: humangl backend invalid context"),W2(e)),!A.findBackend(Y.name))){try{Y.canvas=await x0(100,100)}catch(n){u("error: cannot create canvas:",n);return}try{if(Y.gl=(t=Y.canvas)==null?void 0:t.getContext("webgl2",Y.webGLattr),!Y.gl.getParameter(Y.gl.VERSION).includes("2.0")){u("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}Y.canvas&&(Y.canvas.addEventListener("webglcontextlost",async r=>{throw u("error: humangl:",r.type),u("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),Y.canvas.addEventListener("webglcontextrestored",r=>{u("error: humangl context restored:",r)}),Y.canvas.addEventListener("webglcontextcreationerror",r=>{u("error: humangl context create:",r)}))}catch(n){u("error: cannot get WebGL context:",n);return}try{A.setWebGLContext(2,Y.gl)}catch(n){u("error: cannot set WebGL context:",n);return}try{let n=new A.GPGPUContext(Y.gl);A.registerBackend(Y.name,()=>new A.MathBackendWebGL(n),Y.priority)}catch(n){u("error: cannot register WebGL backend:",n);return}try{A.getKernelsForBackend("webgl").forEach(r=>{let s={...r,backendName:Y.name};A.registerKernel(s)})}catch(n){u("error: cannot update WebGL backend registration:",n);return}let o=A.backend().getGPGPUContext?A.backend().getGPGPUContext().gl:null;if(o)u(`humangl webgl version:${o.getParameter(o.VERSION)} renderer:${o.getParameter(o.RENDERER)}`);else{u("error: no current gl context:",o,Y.gl);return}try{A.env().flagRegistry.WEBGL_VERSION&&A.env().set("WEBGL_VERSION",2)}catch(n){u("error: cannot set WebGL backend flags:",n);return}rA(),u("backend registered:",Y.name)}}function AA(){if(!T.kernels.includes("mod")){let e={kernelName:"Mod",backendName:A.getBackend(),kernelFunc:t=>A.tidy(()=>A.sub(t.inputs.a,A.mul(A.div(t.inputs.a,t.inputs.b),t.inputs.b)))};A.registerKernel(e),T.kernels.push("mod")}if(!T.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:A.getBackend(),kernelFunc:t=>A.tidy(()=>A.floorDiv(t.inputs.a/t.inputs.b)*t.inputs.b+A.mod(t.inputs.a,t.inputs.b))};A.registerKernel(e),T.kernels.push("floormod")}}async function F2(e,t=!1){if(e.state="backend",t||T.initial||e.config.backend&&e.config.backend.length>0&&A.getBackend()!==e.config.backend){let o=g();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&u("running inside web worker"),T.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&u("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),T.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&u(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),T.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")u("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&u("enumerated webgpu adapter:",r),!r)u("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let s="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;u("webgpu adapter info:",s)}}e.config.backend==="humangl"&&await G3(e);let n=Object.keys(A.engine().registryFactory);if(e.config.debug&&u("available backends:",n),n.includes(e.config.backend)||(u(`error: backend ${e.config.backend} not found in registry`),e.config.backend=T.node?"tensorflow":"webgl",e.config.debug&&u(`override: setting backend ${e.config.backend}`)),e.config.debug&&u("setting backend:",e.config.backend),e.config.backend==="wasm"){if(A.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&A.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&u("wasm path:",e.config.wasmPath),typeof(A==null?void 0:A.setWasmPaths)!="undefined")await A.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,s=!1;try{r=await A.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),s=await A.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&u(`wasm execution: ${s?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!s&&u("warning: wasm simd support is not enabled")}catch(a){u("wasm detection failed")}}try{await A.setBackend(e.config.backend),await A.ready(),et()}catch(r){return u("error: cannot set backend:",e.config.backend,r),!1}}if(A.getBackend()==="humangl"&&(A.env().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&A.env().set("CHECK_COMPUTATION_FOR_ERRORS",!1),A.env().flagRegistry.WEBGL_CPU_FORWARD&&A.env().set("WEBGL_CPU_FORWARD",!0),A.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&A.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),A.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&A.env().set("CPU_HANDOFF_SIZE_THRESHOLD",256),A.env().flagRegistry.WEBGL_EXP_CONV&&A.env().set("WEBGL_EXP_CONV",!0),A.env().flagRegistry.USE_SETTIMEOUTCUSTOM&&A.env().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(u("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),A.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),A.backend().getGPGPUContext)){let n=await A.backend().getGPGPUContext().gl;e.config.debug&&u(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}A.getBackend(),A.enableProdMode(),await A.ready(),e.performance.initBackend=Math.trunc(g()-o),e.config.backend=A.getBackend(),await T.updateBackend(),AA()}return!0}function G2(e,t){for(let o of e){let n={kernelName:o,backendName:t.backend,kernelFunc:()=>{t.debug&&u("kernelFunc",o,t.backend)}};A.registerKernel(n)}T.kernels=A.getKernelsForBackend(A.getBackend()).map(o=>o.kernelName.toLowerCase())}var r0=[null,null],aA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],ae=[[0,0],[0,0]],iA=["hand","fist","pinch","point","face","tip","pinchtip"],H3=4,V3=1.6,lA=512,yA=1.4,B2=Number.MAX_SAFE_INTEGER,e1=0,q0=[0,0],$={boxes:[],hands:[]},D3={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Z3(e){var t;if(T.initial&&(r0[0]=null),r0[0])e.debug&&u("cached model:",r0[0].modelUrl);else{G2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),r0[0]=await O((t=e.hand.detector)==null?void 0:t.modelPath);let o=Object.values(r0[0].modelSignature.inputs);ae[0][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,ae[0][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return r0[0]}async function X3(e){var t;if(T.initial&&(r0[1]=null),r0[1])e.debug&&u("cached model:",r0[1].modelUrl);else{r0[1]=await O((t=e.hand.skeleton)==null?void 0:t.modelPath);let o=Object.values(r0[1].modelSignature.inputs);ae[1][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,ae[1][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return r0[1]}async function cA(e,t){let o=[];if(!e||!r0[0])return o;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,lA),a=Math.round(s*r/8)*8;n.resize=A.image.resizeBilinear(e,[s,a]),n.cast=A.cast(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await r0[0].executeAsync(n.cast,aA),n.boxes=A.squeeze(n.rawBoxes,[0,2]),n.scores=A.squeeze(n.rawScores,[0]);let i=A.unstack(n.scores,1);A.dispose(i[H3]),i.splice(H3,1),n.filtered=A.stack(i,1),A.dispose(i),n.max=A.max(n.filtered,1),n.argmax=A.argMax(n.filtered,1);let y=0;n.nms=await A.image.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await n.nms.data(),d=await n.max.data(),l=await n.argmax.data();for(let f of Array.from(c)){let x=A.slice(n.boxes,f,1),b=await x.data();A.dispose(x);let p=[b[1],b[0],b[3]-b[1],b[2]-b[0]],v=R2(p,yA),P=[Math.trunc(p[0]*q0[0]),Math.trunc(p[1]*q0[1]),Math.trunc(p[2]*q0[0]),Math.trunc(p[3]*q0[1])],M=d[f],m=iA[l[f]],h={id:y++,score:M,box:P,boxRaw:v,label:m};o.push(h)}return Object.keys(n).forEach(f=>A.dispose(n[f])),o.sort((f,x)=>x.score-f.score),o.length>(t.hand.maxDetected||1)&&(o.length=t.hand.maxDetected||1),o}async function t1(e,t,o){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&r0[1]&&o.hand.landmarks&&t.score>(o.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=A.image.cropAndResize(e,[s],[0],[ae[1][0],ae[1][1]],"bilinear"),r.div=A.div(r.crop,W.tf255),[r.score,r.keypoints]=r0[1].execute(r.div,["Identity_1","Identity"]);let a=(await r.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(a))))/100;if(i>=(o.hand.minConfidence||0)){n.fingerScore=i,r.reshaped=A.reshape(r.keypoints,[-1,3]);let d=(await r.reshaped.array()).map(l=>[l[0]/ae[1][1],l[1]/ae[1][0],l[2]||0]).map(l=>[l[0]*t.boxRaw[2],l[1]*t.boxRaw[3],l[2]||0]);n.keypoints=d.map(l=>[q0[0]*(l[0]+t.boxRaw[0]),q0[1]*(l[1]+t.boxRaw[1]),l[2]||0]),n.landmarks=L2(n.keypoints);for(let l of Object.keys(D3))n.annotations[l]=D3[l].map(f=>n.landmarks&&n.keypoints[f]?n.keypoints[f]:null)}Object.keys(r).forEach(y=>A.dispose(r[y]))}return n}async function o1(e,t){var r,s;if(!r0[0]||!r0[1]||!((r=r0[0])!=null&&r.inputs[0].shape)||!((s=r0[1])!=null&&s.inputs[0].shape))return[];q0=[e.shape[2]||0,e.shape[1]||0],B2++;let o=(t.hand.skipTime||0)>g()-e1,n=B2<(t.hand.skipFrames||0);return t.skipAllowed&&o&&n?$.hands:new Promise(async a=>{let i=3*(t.hand.skipTime||0)>g()-e1,y=B2<3*(t.hand.skipFrames||0);t.skipAllowed&&$.hands.length===t.hand.maxDetected?$.hands=await Promise.all($.boxes.map(d=>t1(e,d,t))):t.skipAllowed&&i&&y&&$.hands.length>0?$.hands=await Promise.all($.boxes.map(d=>t1(e,d,t))):($.boxes=await cA(e,t),e1=g(),$.hands=await Promise.all($.boxes.map(d=>t1(e,d,t))),B2=0);let c=[...$.boxes];if($.boxes.length=0,t.cacheSensitivity>0)for(let d=0;d<$.hands.length;d++){let l=zt($.hands[d].keypoints,q0);if(l.box[2]/(e.shape[2]||1)>.05&&l.box[3]/(e.shape[1]||1)>.05&&$.hands[d].fingerScore&&$.hands[d].fingerScore>(t.hand.minConfidence||0)){let f=R2(l.box,V3),x=R2(l.boxRaw,V3);$.boxes.push({...c[d],box:f,boxRaw:x})}}for(let d=0;d<$.hands.length;d++){let l=H0($.hands[d].keypoints,q0);$.hands[d].box=l.box,$.hands[d].boxRaw=l.boxRaw}a($.hands)})}var l0,H2=[],n1=Number.MAX_SAFE_INTEGER,U3=0,Y3=0;async function K3(e){var t;return T.initial&&(l0=null),l0?e.debug&&u("cached model:",l0.modelUrl):l0=await O((t=e.face.liveness)==null?void 0:t.modelPath),l0}async function r1(e,t,o,n){var a,i;if(!l0)return 0;let r=(((a=t.face.liveness)==null?void 0:a.skipTime)||0)>g()-Y3,s=n1<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&s&&U3===n&&H2[o]?(n1++,H2[o]):(n1=0,new Promise(async y=>{let c=A.image.resizeBilinear(e,[l0!=null&&l0.inputs[0].shape?l0.inputs[0].shape[2]:0,l0!=null&&l0.inputs[0].shape?l0.inputs[0].shape[1]:0],!1),d=l0==null?void 0:l0.execute(c),l=(await d.data())[0];H2[o]=Math.round(100*l)/100,U3=n,Y3=g(),A.dispose([c,d]),y(H2[o])}))}var r2={};K0(r2,{connected:()=>D2,horizontal:()=>A1,kpt:()=>V2,relative:()=>a1,vertical:()=>s1});var V2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],A1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],s1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],a1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],D2={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Q3=.005,M0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function i1(e){for(let t of A1){let o=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===o[0]),a=e.keypoints.findIndex(c=>c&&c.part===o[1]);if(!e.keypoints[s]||!e.keypoints[a])continue;let i=e.keypoints[n]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[a].position[0]-e.keypoints[n].position[0])]:[0,0],y=e.keypoints[r]?[Math.abs(e.keypoints[a].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(i[0]>i[1]||y[0]>y[1]){let c=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=c}}}function _3(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],o.pad=A.pad(e,M0.padding),o.resize=A.image.resizeBilinear(o.pad,[t,t]);let n=A.cast(o.resize,"int32");return Object.keys(o).forEach(r=>A.dispose(o[r])),n}function eo(e,t){e.keypoints=e.keypoints.filter(n=>n&&n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+M0.padding[2][0]+M0.padding[2][1])/t[0]-M0.padding[2][0],n.position[1]*(t[1]+M0.padding[1][0]+M0.padding[1][1])/t[1]-M0.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let o=H0(e.keypoints.map(n=>n.position),t);return e.box=o.box,e.boxRaw=o.boxRaw,e}var P0,Z2=0,l1=Number.MAX_SAFE_INTEGER,be={boxes:[],bodies:[],last:0};async function to(e){return T.initial&&(P0=null),P0?e.debug&&u("cached model:",P0.modelUrl):(G2(["size"],e),P0=await O(e.body.modelPath)),Z2=P0.inputs[0].shape?P0.inputs[0].shape[2]:0,Z2<64&&(Z2=256),P0}async function dA(e,t,o){let n=e[0][0],r=[],s=0;for(let d=0;dt.body.minConfidence){let l=[n[d][1],n[d][0]];r.push({score:Math.round(100*s)/100,part:V2[d],positionRaw:l,position:[Math.round((o.shape[2]||0)*l[0]),Math.round((o.shape[1]||0)*l[1])]})}s=r.reduce((d,l)=>l.score>d?l.score:d,0);let a=[],i=H0(r.map(d=>d.position),[o.shape[2],o.shape[1]]),y={};for(let[d,l]of Object.entries(D2)){let f=[];for(let x=0;xv.part===l[x]),p=r.find(v=>v.part===l[x+1]);b&&p&&b.score>(t.body.minConfidence||0)&&p.score>(t.body.minConfidence||0)&&f.push([b.position,p.position])}y[d]=f}let c={id:0,score:s,box:i.box,boxRaw:i.boxRaw,keypoints:r,annotations:y};return i1(c),a.push(c),a}async function fA(e,t,o){let n=[];for(let r=0;rt.body.minConfidence){let i=[];for(let l=0;l<17;l++){let f=s[3*l+2];if(f>t.body.minConfidence){let x=[s[3*l+1],s[3*l+0]];i.push({part:V2[l],score:Math.round(100*f)/100,positionRaw:x,position:[Math.round((o.shape[2]||0)*x[0]),Math.round((o.shape[1]||0)*x[1])]})}}let y=H0(i.map(l=>l.position),[o.shape[2],o.shape[1]]),c={};for(let[l,f]of Object.entries(D2)){let x=[];for(let b=0;bP.part===f[b]),v=i.find(P=>P.part===f[b+1]);p&&v&&p.score>(t.body.minConfidence||0)&&v.score>(t.body.minConfidence||0)&&x.push([p.position,v.position])}c[l]=x}let d={id:r,score:a,box:y.box,boxRaw:y.boxRaw,keypoints:[...i],annotations:c};i1(d),n.push(d)}}return n.sort((r,s)=>s.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function y1(e,t){if(!P0||!(P0!=null&&P0.inputs[0].shape))return[];t.skipAllowed||(be.boxes.length=0),l1++;let o=(t.body.skipTime||0)>g()-be.last,n=l1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n?be.bodies:new Promise(async r=>{let s={};l1=0,s.input=$3(e,Z2),s.res=P0==null?void 0:P0.execute(s.input),be.last=g();let a=await s.res.array();be.bodies=s.res.shape[2]===17?await dA(a,t,e):await fA(a,t,e);for(let i of be.bodies)eo(i,[e.shape[2]||1,e.shape[1]||1]),_3(i.keypoints);Object.keys(s).forEach(i=>A.dispose(s[i])),r(be.bodies)})}var Le,X2=[],no=0,c1=Number.MAX_SAFE_INTEGER,U2=0,q2=2.5;async function ro(e){if(!Le||T.initial){Le=await O(e.object.modelPath);let t=Object.values(Le.modelSignature.inputs);U2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&u("cached model:",Le.modelUrl);return Le}async function mA(e,t,o){let n=0,r=[];for(let y of[1,2,4]){let c=y*13,d=A.squeeze(e.find(v=>v.shape[1]===c**2&&(v.shape[2]||0)===Ee.length)),l=await d.array(),f=A.squeeze(e.find(v=>v.shape[1]===c**2&&(v.shape[2]||0)(o.object.minConfidence||0)&&P!==61){let m=(.5+Math.trunc(v%c))/c,h=(.5+Math.trunc(v/c))/c,C=p[v].map(Z=>Z*(c/y/U2)),[N,k]=[m-q2/y*C[0],h-q2/y*C[1]],[z,F]=[m+q2/y*C[2]-N,h+q2/y*C[3]-k],B=[N,k,z,F];B=B.map(Z=>Math.max(0,Math.min(Z,1)));let L=[B[0]*t[0],B[1]*t[1],B[2]*t[0],B[3]*t[1]],K={id:n++,score:Math.round(100*M)/100,class:P+1,label:Ee[P].label,box:L.map(Z=>Math.trunc(Z)),boxRaw:B};r.push(K)}}A.dispose([d,f,x,b])}let s=r.map(y=>[y.boxRaw[1],y.boxRaw[0],y.boxRaw[3],y.boxRaw[2]]),a=r.map(y=>y.score),i=[];if(s&&s.length>0){let y=await A.image.nonMaxSuppressionAsync(s,a,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence);i=await y.data(),A.dispose(y)}return r=r.filter((y,c)=>i.includes(c)).sort((y,c)=>c.score-y.score),r}async function x1(e,t){let o=(t.object.skipTime||0)>g()-no,n=c1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&X2.length>0?(c1++,X2):(c1=0,!T.kernels.includes("mod")||!T.kernels.includes("sparsetodense")?X2:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],a=A.image.resizeBilinear(e,[U2,U2],!1),i=A.div(a,W.tf255),y=A.transpose(i,[0,3,1,2]),c;t.object.enabled&&(c=Le.execute(y)),no=g();let d=await mA(c,s,t);X2=d,A.dispose([a,i,y,...c]),r(d)}))}var s2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],pA=s2.length,A2=s2.reduce((e,t,o)=>(e[t]=o,e),{}),uA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],U4=uA.map(([e,t])=>[A2[e],A2[t]]),so=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function ao(e){let t=e.reduce(({maxX:o,maxY:n,minX:r,minY:s},{position:{x:a,y:i}})=>({maxX:Math.max(o,a),maxY:Math.max(n,i),minX:Math.min(r,a),minY:Math.min(s,i)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function io(e,[t,o],[n,r]){let s=t/n,a=o/r,i=(c,d)=>({id:d,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/n,c.box[2]/r,c.box[3]/n],box:[Math.trunc(c.box[0]*a),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*a),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:l,part:f,position:x})=>({score:l,part:f,position:[Math.trunc(x.x*a),Math.trunc(x.y*s)],positionRaw:[x.x/n,x.y/n]})),annotations:{}});return e.map((c,d)=>i(c,d))}var Y2=class{constructor(t,o){w(this,"priorityQueue");w(this,"numberOfElements");w(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=o}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let o=2*t;if(oo?o:e}function lo(e,t,o,n){let r=o-e,s=n-t;return r*r+s*s}function p1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var N0,bA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],K2=1,We=16,gA=50**2;function yo(e,t,o,n,r,s,a=2){let i=P=>({y:s.get(P.y,P.x,e),x:s.get(P.y,P.x,s.shape[2]/2+e)}),y=(P,M,m)=>({y:m1(Math.round(P.y/We),0,M-1),x:m1(Math.round(P.x/We),0,m-1)}),[c,d]=n.shape,l=y(t.position,c,d),f=i(l),b=p1(t.position,f);for(let P=0;P[A2[f],A2[x]]),a=s.map(([,f])=>f),i=s.map(([f])=>f),y=t.shape[2],c=a.length,d=new Array(y),l=f1(e.part,We,o);d[e.part.id]={score:e.score,part:s2[e.part.id],position:l};for(let f=c-1;f>=0;--f){let x=a[f],b=i[f];d[x]&&!d[b]&&(d[b]=yo(f,d[x],b,t,o,r))}for(let f=0;ft){i=!1;break}if(!i)break}return i}function vA(e,t){let[o,n,r]=t.shape,s=new Y2(o*n*r,({score:a})=>a);for(let a=0;a{var a;let s=(a=r[n])==null?void 0:a.position;return s?lo(o,t,s.y,s.x)<=gA:!1})}function RA(e,t){return t.reduce((n,{position:r,score:s},a)=>(co(e,r,a)||(n+=s),n),0)/t.length}function TA(e,t,o,n,r,s){let a=[],i=vA(s,t);for(;a.lengthx.score>s);let l=RA(a,d),f=ao(d);l>s&&a.push({keypoints:d,box:f,score:Math.round(100*l)/100})}return a}async function u1(e,t){let o=A.tidy(()=>{if(!N0.inputs[0].shape)return[];let a=A.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]),i=A.sub(A.div(A.cast(a,"float32"),127.5),1),c=N0.execute(i,bA).map(d=>A.squeeze(d,[0]));return c[1]=A.sigmoid(c[1]),c}),n=await Promise.all(o.map(a=>a.buffer()));for(let a of o)A.dispose(a);let r=await TA(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return N0.inputs[0].shape?io(r,[e.shape[1],e.shape[2]],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]):[]}async function xo(e){return!N0||T.initial?N0=await O(e.body.modelPath):e.debug&&u("cached model:",N0.modelUrl),N0}var F0,h1=!1;async function b1(e){return!F0||T.initial?F0=await O(e.segmentation.modelPath):e.debug&&u("cached model:",F0.modelUrl),F0}async function mo(e,t,o){var p,v;if(h1)return{data:[],canvas:null,alpha:null};h1=!0,F0||await b1(o);let n=await Re(e,o),r=((p=n.tensor)==null?void 0:p.shape[2])||0,s=((v=n.tensor)==null?void 0:v.shape[1])||0;if(!n.tensor)return{data:[],canvas:null,alpha:null};let a={};a.resize=A.image.resizeBilinear(n.tensor,[F0.inputs[0].shape?F0.inputs[0].shape[1]:0,F0.inputs[0].shape?F0.inputs[0].shape[2]:0],!1),A.dispose(n.tensor),a.norm=A.div(a.resize,W.tf255),a.res=F0.execute(a.norm),a.squeeze=A.squeeze(a.res,0),a.squeeze.shape[2]===2?(a.softmax=A.softmax(a.squeeze),[a.bg,a.fg]=A.unstack(a.softmax,2),a.expand=A.expandDims(a.fg,2),a.pad=A.expandDims(a.expand,0),a.crop=A.image.cropAndResize(a.pad,[[0,0,.5,.5]],[0],[r,s]),a.data=A.squeeze(a.crop,0)):a.data=A.image.resizeBilinear(a.squeeze,[s,r]);let i=Array.from(await a.data.data());if(T.node&&!T.Canvas&&typeof ImageData=="undefined")return o.debug&&u("canvas support missing"),Object.keys(a).forEach(P=>A.dispose(a[P])),{data:i,canvas:null,alpha:null};let y=x0(r,s);A.browser&&await A.browser.toPixels(a.data,y);let c=y.getContext("2d");o.segmentation.blur&&o.segmentation.blur>0&&(c.filter=`blur(${o.segmentation.blur}px)`);let d=c.getImageData(0,0,r,s),l=x0(r,s),f=l.getContext("2d");n.canvas&&f.drawImage(n.canvas,0,0),f.globalCompositeOperation="darken",o.segmentation.blur&&o.segmentation.blur>0&&(f.filter=`blur(${o.segmentation.blur}px)`),f.drawImage(y,0,0),f.globalCompositeOperation="source-over",f.filter="none";let x=f.getImageData(0,0,r,s);for(let P=0;PA.dispose(a[P])),h1=!1,{data:i,canvas:l,alpha:y}}var a2=class{constructor(){w(this,"ssrnetage",null);w(this,"gear",null);w(this,"blazeposedetect",null);w(this,"blazepose",null);w(this,"centernet",null);w(this,"efficientpose",null);w(this,"mobilefacenet",null);w(this,"insightface",null);w(this,"emotion",null);w(this,"facedetect",null);w(this,"faceiris",null);w(this,"facemesh",null);w(this,"faceres",null);w(this,"ssrnetgender",null);w(this,"handpose",null);w(this,"handskeleton",null);w(this,"handtrack",null);w(this,"liveness",null);w(this,"movenet",null);w(this,"nanodet",null);w(this,"posenet",null);w(this,"segmentation",null);w(this,"antispoof",null)}},g1=e=>{let t=0,o=0,n=0;for(let s of Object.values(O0))t+=s.sizeFromManifest,o+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?o/n:0;return{numLoadedModels:Object.values(O0).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:o,totalSizeLoading:n,totalSizeEnabled:void 0,modelStats:Object.values(O0)}};function W2(e){for(let t of Object.keys(e.models))e.models[t]=null}async function M1(e){var t,o,n,r,s,a,i,y,c,d,l,f,x,b,p,v,P,M,m,h,C,N,k,z,F,B,L,K,Z,S,e0,v0;T.initial&&W2(e),e.config.hand.enabled&&(!e.models.handpose&&((o=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:o.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await _5(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(n=e.config.hand.detector)==null?void 0:n.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await _5(e.config))),e.config.body.enabled&&!e.models.blazepose&&((a=(s=e.config.body)==null?void 0:s.modelPath)==null?void 0:a.includes("blazepose"))&&(e.models.blazepose=Nt(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=It(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((y=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:y.includes("efficientpose"))&&(e.models.efficientpose=Bt(e.config)),e.config.body.enabled&&!e.models.movenet&&((d=(c=e.config.body)==null?void 0:c.modelPath)==null?void 0:d.includes("movenet"))&&(e.models.movenet=to(e.config)),e.config.body.enabled&&!e.models.posenet&&((f=(l=e.config.body)==null?void 0:l.modelPath)==null?void 0:f.includes("posenet"))&&(e.models.posenet=xo(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=Rt(e.config)),e.config.face.enabled&&((x=e.config.face.antispoof)==null?void 0:x.enabled)&&!e.models.antispoof&&(e.models.antispoof=ct(e.config)),e.config.face.enabled&&((b=e.config.face.liveness)==null?void 0:b.enabled)&&!e.models.liveness&&(e.models.liveness=K3(e.config)),e.config.face.enabled&&((p=e.config.face.description)==null?void 0:p.enabled)&&!e.models.faceres&&(e.models.faceres=p3(e.config)),e.config.face.enabled&&((v=e.config.face.emotion)==null?void 0:v.enabled)&&!e.models.emotion&&(e.models.emotion=Zt(e.config)),e.config.face.enabled&&((P=e.config.face.iris)==null?void 0:P.enabled)&&!((M=e.config.face.attention)!=null&&M.enabled)&&!e.models.faceiris&&(e.models.faceiris=A3(e.config)),e.config.face.enabled&&((m=e.config.face.mesh)==null?void 0:m.enabled)&&!e.models.facemesh&&(e.models.facemesh=c3(e.config)),e.config.face.enabled&&((h=e.config.face.gear)==null?void 0:h.enabled)&&!e.models.gear&&(e.models.gear=_1(e.config)),e.config.face.enabled&&((C=e.config.face.ssrnet)==null?void 0:C.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=nt(e.config)),e.config.face.enabled&&((N=e.config.face.ssrnet)==null?void 0:N.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=at(e.config)),e.config.face.enabled&&((k=e.config.face.mobilefacenet)==null?void 0:k.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=Kt(e.config)),e.config.face.enabled&&((z=e.config.face.insightface)==null?void 0:z.enabled)&&!e.models.insightface&&(e.models.insightface=e3(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((B=(F=e.config.hand.detector)==null?void 0:F.modelPath)==null?void 0:B.includes("handtrack"))&&(e.models.handtrack=Z3(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((K=(L=e.config.hand.detector)==null?void 0:L.modelPath)==null?void 0:K.includes("handtrack"))&&(e.models.handskeleton=X3(e.config)),e.config.object.enabled&&!e.models.centernet&&((S=(Z=e.config.object)==null?void 0:Z.modelPath)==null?void 0:S.includes("centernet"))&&(e.models.centernet=Wt(e.config)),e.config.object.enabled&&!e.models.nanodet&&((v0=(e0=e.config.object)==null?void 0:e0.modelPath)==null?void 0:v0.includes("nanodet"))&&(e.models.nanodet=ro(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=b1(e.config));for await(let R of Object.keys(e.models))e.models[R]&&typeof e.models[R]!="undefined"&&(e.models[R]=await e.models[R])}var T0;function Fe(e,t,o){if(e&&(T0=e),!t||(T0||u("instance not registred"),!T0.config.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],s=[],a=[],i=t.modelUrl,y=t.executor;if(y&&y.graph.nodes)for(let c of Object.values(y.graph.nodes)){let d=c.op.toLowerCase();s.includes(d)||s.push(d)}else!y&&T0.config.debug&&u("model signature not determined:",o);for(let c of s)!n.includes(c)&&!r.includes(c)&&!T0.env.kernels.includes(c)&&!T0.env.kernels.includes(c.replace("_",""))&&!T0.env.kernels.includes(c.replace("native",""))&&!T0.env.kernels.includes(c.replace("v2",""))&&a.push(c);return T0.config.debug&&a.length>0&&u("model validation failed:",o,a),a.length>0?{name:o,missing:a,ops:s,url:i}:null}function J2(e){T0=e;let t=[];for(let o of Object.keys(T0.models)){let n=T0.models[o];if(!n)continue;let r=Fe(T0,n,o);r&&t.push(r)}return t}var m0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},O0={};async function wA(e,t){return m0.debug&&u("load model fetch:",e,t),fetch(e,t)}function uo(e){m0.cacheModels=e.cacheModels,m0.verbose=e.debug,m0.modelBasePath=e.modelBasePath}async function O(e){var c,d,l;let t=B1(m0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let o=t.includes("/")?t.split("/"):t.split("\\"),n=o[o.length-1].replace(".json",""),r="indexeddb://"+n;O0[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:s5[n],inCache:!1},m0.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let s={};try{s=m0.cacheSupported&&m0.cacheModels?await A.io.listModels():{}}catch(f){m0.cacheSupported=!1}O0[n].inCache=m0.cacheSupported&&m0.cacheModels&&Object.keys(s).includes(r);let a=typeof fetch=="undefined"?{}:{fetchFunc:(f,x)=>wA(f,x)},i=new o5(O0[n].inCache?r:t,a),y=!1;try{i.findIOHandler(),m0.debug&&u("model load handler:",i.handler);let f=await i.handler.load();O0[n].sizeFromManifest=((c=f==null?void 0:f.weightData)==null?void 0:c.byteLength)||0,i.loadSync(f),O0[n].sizeLoadedWeights=((l=(d=i==null?void 0:i.artifacts)==null?void 0:d.weightData)==null?void 0:l.byteLength)||0,m0.verbose&&u("load model:",i.modelUrl,{bytes:O0[n].sizeLoadedWeights},m0),y=!0}catch(f){u("error loading model:",t,f)}if(y&&m0.cacheModels&&m0.cacheSupported&&!O0[n].inCache)try{let f=await i.save(r);u("model saved:",r,f)}catch(f){u("error saving model:",t,f)}return Fe(null,i,`${e}`),i}var P1="2.9.3";var bo={};K0(bo,{all:()=>E1,body:()=>Be,canvas:()=>k1,face:()=>Ge,gesture:()=>De,hand:()=>He,object:()=>Ve,options:()=>y0,person:()=>w1});var w0=e=>{if(!e)u("draw error: invalid canvas");else if(!e.getContext)u("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)u("draw error: cannot get canvas context");else return t}return null},ge=e=>Math.round(e*180/Math.PI),U0=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let o=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${t.alpha})`};function Y0(e,t,o,n,r){e.fillStyle=U0(n,r),e.beginPath(),e.arc(t,o,r.pointSize,0,2*Math.PI),e.fill()}function G0(e,t,o,n,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let a=(t+t+n)/2,i=(o+o+r)/2;e.ellipse(a,i,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,o),e.lineTo(t+n-s.roundRect,o),e.quadraticCurveTo(t+n,o,t+n,o+s.roundRect),e.lineTo(t+n,o+r-s.roundRect),e.quadraticCurveTo(t+n,o+r,t+n-s.roundRect,o+r),e.lineTo(t+s.roundRect,o+r),e.quadraticCurveTo(t,o+r,t,o+r-s.roundRect),e.lineTo(t,o+s.roundRect),e.quadraticCurveTo(t,o,t+s.roundRect,o),e.closePath();e.stroke()}function v1(e,t,o){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=U0(n[2]||0,o),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),o.fillPolygons&&(e.closePath(),e.fill())}}function ho(e,t,o){if(!(t.length<2)){if(e.lineWidth=o.lineWidth,!o.useCurves||t.length<=2){v1(e,t,o);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n0){let n=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);n.length>3&&(n.length=3),o.push(n.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&o.push(`roll: ${ge(e.rotation.angle.roll)}\xB0 yaw:${ge(e.rotation.angle.yaw)}\xB0 pitch:${ge(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&o.push(`gaze: ${ge(e.rotation.gaze.bearing)}\xB0`)),o.length===0&&o.push("face"),t.fillStyle=D.color;for(let n=o.length-1;n>=0;n--){let r=Math.max(e.box[0],0),s=n*D.lineHeight+e.box[1];D.shadowColor&&D.shadowColor!==""&&(t.fillStyle=D.shadowColor,t.fillText(o[n],r+5,s+16)),t.fillStyle=D.labelColor,t.fillText(o[n],r+4,s+15)}}}function SA(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=D.useDepth?"rgba(255, 200, 255, 0.3)":D.color,t.beginPath();let o=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,n=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),D.fillPolygons&&(t.fillStyle=D.useDepth?"rgba(255, 255, 200, 0.3)":D.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=D.useDepth?"rgba(255, 200, 255, 0.3)":D.color,t.beginPath();let o=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,n=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),D.fillPolygons&&(t.fillStyle=D.useDepth?"rgba(255, 255, 200, 0.3)":D.color,t.fill())}}function CA(e,t){var o;if(D.drawGaze&&((o=e.rotation)==null?void 0:o.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*ge(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*ge(e.rotation.angle.pitch)/90,s=new Path2D(` +`;var n5=(e,t,o)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(o[s]=0,r))},r5=class{constructor(t,o,n){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(this,"compile",(t,o)=>{let n=this.gl.createShader(o);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(u(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)}`),null)):(u("filter: could not create shader"),null)});this.gl=t;let r=this.compile(o,this.gl.VERTEX_SHADER),s=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){u("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){u(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),n5(o,"attribute",this.attribute);for(let a in this.attribute)this.attribute[a]=this.gl.getAttribLocation(this.id,a);n5(o,"uniform",this.uniform),n5(n,"uniform",this.uniform);for(let a in this.uniform)this.uniform[a]=this.gl.getUniformLocation(this.id,a)}}};function U1(){let e=0,t=null,o=!1,n=-1,r=[null,null],s=[],a=null,i=null,y=x0(100,100),c={},d={INTERMEDIATE:1},l=y.getContext("webgl");if(!l){u("filter: cannot get webgl context");return}this.gl=l;function f(M,m){if(!(M===y.width&&m===y.height)){if(y.width=M,y.height=m,!a){let h=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);a=l.createBuffer(),l.bindBuffer(l.ARRAY_BUFFER,a),l.bufferData(l.ARRAY_BUFFER,h,l.STATIC_DRAW),l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}l.viewport(0,0,y.width,y.height),r=[null,null]}}function x(M,m){let h=l.createFramebuffer();l.bindFramebuffer(l.FRAMEBUFFER,h);let C=l.createRenderbuffer();l.bindRenderbuffer(l.RENDERBUFFER,C);let N=l.createTexture();return l.bindTexture(l.TEXTURE_2D,N),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,M,m,0,l.RGBA,l.UNSIGNED_BYTE,null),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,l.TEXTURE_2D,N,0),l.bindTexture(l.TEXTURE_2D,null),l.bindFramebuffer(l.FRAMEBUFFER,null),{fbo:h,texture:N}}function b(M){return r[M]=r[M]||x(y.width,y.height),r[M]}function p(M=0){if(!i)return;let m=null,h=null,C=!1;e===0?m=t:m=b(n).texture||null,e++,o&&!(M&d.INTERMEDIATE)?(h=null,C=e%2===0):(n=(n+1)%2,h=b(n).fbo||null),l.bindTexture(l.TEXTURE_2D,m),l.bindFramebuffer(l.FRAMEBUFFER,h),l.uniform1f(i.uniform.flipY,C?-1:1),l.drawArrays(l.TRIANGLES,0,6)}function v(M){if(c[M])return i=c[M],l.useProgram((i?i.id:null)||null),i;if(i=new r5(l,H1,M),!i)return u("filter: could not get webgl program"),null;let m=Float32Array.BYTES_PER_ELEMENT,h=4*m;return l.enableVertexAttribArray(i.attribute.pos),l.vertexAttribPointer(i.attribute.pos,2,l.FLOAT,!1,h,0*m),l.enableVertexAttribArray(i.attribute.uv),l.vertexAttribPointer(i.attribute.uv,2,l.FLOAT,!1,h,2*m),c[M]=i,i}let P={colorMatrix:M=>{let m=new Float32Array(M);m[4]/=255,m[9]/=255,m[14]/=255,m[19]/=255;let h=m[18]===1&&m[3]===0&&m[8]===0&&m[13]===0&&m[15]===0&&m[16]===0&&m[17]===0&&m[19]===0?D1:V1,C=v(h);!C||(l.uniform1fv(C.uniform.m,m),p())},brightness:M=>{let m=(M||0)+1;P.colorMatrix([m,0,0,0,0,0,m,0,0,0,0,0,m,0,0,0,0,0,1,0])},saturation:M=>{let m=(M||0)*2/3+1,h=(m-1)*-.5;P.colorMatrix([m,h,h,0,0,h,m,h,0,0,h,h,m,0,0,0,0,0,1,0])},desaturate:()=>{P.saturation(-1)},contrast:M=>{let m=(M||0)+1,h=-128*(m-1);P.colorMatrix([m,0,0,0,h,0,m,0,0,h,0,0,m,0,h,0,0,0,1,0])},negative:()=>{P.contrast(-2)},hue:M=>{M=(M||0)/180*Math.PI;let m=Math.cos(M),h=Math.sin(M),C=.213,N=.715,k=.072;P.colorMatrix([C+m*(1-C)+h*-C,N+m*-N+h*-N,k+m*-k+h*(1-k),0,0,C+m*-C+h*.143,N+m*(1-N)+h*.14,k+m*-k+h*-.283,0,0,C+m*-C+h*-(1-C),N+m*-N+h*N,k+m*(1-k)+h*k,0,0,0,0,0,1,0])},desaturateLuminance:()=>{P.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{P.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{P.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{P.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{P.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{P.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{P.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{P.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:M=>{let m=new Float32Array(M),h=1/y.width,C=1/y.height,N=v(q1);!N||(l.uniform1fv(N.uniform.m,m),l.uniform2f(N.uniform.px,h,C),p())},detectEdges:()=>{P.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{P.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{P.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:M=>{let m=M||1;P.convolution.call(this,[0,-1*m,0,-1*m,1+4*m,-1*m,0,-1*m,0])},emboss:M=>{let m=M||1;P.convolution.call(this,[-2*m,-1*m,0,-1*m,1,1*m,0,1*m,2*m])},blur:M=>{let m=M/7/y.width,h=M/7/y.height,C=v(X1);!C||(l.uniform2f(C.uniform.px,0,h),p(d.INTERMEDIATE),l.uniform2f(C.uniform.px,m,0),p())},pixelate:M=>{let m=M/y.width,h=M/y.height,C=v(Z1);!C||(l.uniform2f(C.uniform.size,m,h),p())}};this.add=function(M){let m=Array.prototype.slice.call(arguments,1),h=P[M];s.push({func:h,args:m})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(M){f(M.width,M.height),e=0,t||(t=l.createTexture()),l.bindTexture(l.TEXTURE_2D,t),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.NEAREST),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,l.RGBA,l.UNSIGNED_BYTE,M);for(let m=0;mx.data())),a=.99*Math.max(s[0][0],s[1][0],s[2][0]),i=[A.sub(o[0],n[0]),A.sub(o[1],n[1]),A.sub(o[2],n[2])],y=[A.sub(r[0],n[0]),A.sub(r[1],n[1]),A.sub(r[2],n[2])],c=[A.div(a,y[0]),A.div(a,y[1]),A.div(a,y[2])],d=[A.mul(i[0],c[0]),A.mul(i[1],c[1]),A.mul(i[2],c[2])],l=A.stack([d[0],d[1],d[2]],2),f=A.reshape(l,[1,t.shape[0],t.shape[1],3]);return A.dispose([...o,...n,...r,...i,...y,...c,...d,l,t]),f}var x2=3840,V=null,t0=null,ve=null,U,B0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function x0(e,t){let o;if(T.browser)if(T.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");o=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");o=document.createElement("canvas"),o.width=e,o.height=t}else typeof T.Canvas!="undefined"?o=new T.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(o=new globalThis.Canvas(e,t));return o}function d2(e,t){let o=t||x0(e.width,e.height);return o.getContext("2d").drawImage(e,0,0),o}async function Re(e,t,o=!0){if(!e)return t.debug&&u("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof Pe)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof T.Canvas!="undefined"&&e instanceof T.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof Pe){let n=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)n=A.expandDims(e,0);else if(e.shape[2]===4){let r=A.slice3d(e,[0,0,0],[-1,-1,3]);n=A.expandDims(r,0),A.dispose(r)}}else e.shape.length===4&&(e.shape[3]===3?n=A.clone(e):e.shape[3]===4&&(n=A.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(n==null||n.shape.length!==4||n.shape[0]!==1||n.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(n.dtype==="int32"){let r=A.cast(n,"float32");A.dispose(n),n=r}return{tensor:n,canvas:t.filter.return?t0:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&u("input stream is not ready"),{tensor:null,canvas:V};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&u("cannot determine input dimensions"),{tensor:null,canvas:V};let s=n,a=r;if(s>x2&&(s=x2,a=Math.trunc(s*r/n)),a>x2&&(a=x2,s=Math.trunc(a*n/r)),(t.filter.width||0)>0?s=t.filter.width:(t.filter.height||0)>0&&(s=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?a=t.filter.height:(t.filter.width||0)>0&&(a=r*((t.filter.width||0)/n)),!s||!a)throw new Error("input error: cannot determine dimension");(!V||(V==null?void 0:V.width)!==s||(V==null?void 0:V.height)!==a)&&(V=x0(s,a));let i=V.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?i.putImageData(e,0,0):t.filter.flip&&typeof i.translate!="undefined"?(i.translate(n,0),i.scale(-1,1),i.drawImage(e,0,0,n,r,0,0,V==null?void 0:V.width,V==null?void 0:V.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,n,r,0,0,V==null?void 0:V.width,V==null?void 0:V.height),(!t0||V.width!==t0.width||(V==null?void 0:V.height)!==(t0==null?void 0:t0.height))&&(t0=x0(V.width,V.height)),t.filter.enabled&&T.webgl.supported?(U||(U=T.browser?new U1:null),T.filter=!!U,!U||!U.add?(t.debug&&u("input process error: cannot initialize filters"),T.webgl.supported=!1,t.filter.enabled=!1,d2(V,t0)):(U.reset(),t.filter.brightness!==0&&U.add("brightness",t.filter.brightness),t.filter.contrast!==0&&U.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&U.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&U.add("blur",t.filter.blur),t.filter.saturation!==0&&U.add("saturation",t.filter.saturation),t.filter.hue!==0&&U.add("hue",t.filter.hue),t.filter.negative&&U.add("negative"),t.filter.sepia&&U.add("sepia"),t.filter.vintage&&U.add("brownie"),t.filter.sepia&&U.add("sepia"),t.filter.kodachrome&&U.add("kodachrome"),t.filter.technicolor&&U.add("technicolor"),t.filter.polaroid&&U.add("polaroid"),t.filter.pixelate!==0&&U.add("pixelate",t.filter.pixelate),U.get()>0?t0=U.apply(V):t0=U.draw(V))):(d2(V,t0),U&&(U=null),T.filter=!!U),!o)return{tensor:null,canvas:t0};if(!t0)throw new Error("canvas error: cannot create output");let y,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(T.browser&&A.browser)y=A.browser?A.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);y=A.tensor(f,[e.height,e.width,c],"int32")}else if((!ve||t0.width!==ve.width||t0.height!==ve.height)&&(ve=x0(t0.width,t0.height)),A.browser&&T.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?y=A.browser.fromPixels(t0):(ve=d2(t0),y=A.browser.fromPixels(ve));else{let b=d2(t0).getContext("2d").getImageData(0,0,s,a);c=b.data.length/s/a;let p=new Uint8Array(b.data.buffer);y=A.tensor(p,[s,a,c])}if(c===4){let f=A.slice3d(y,[0,0,0],[-1,-1,3]);A.dispose(y),y=f}if(!y)throw new Error("input error: cannot create tensor");let d=A.cast(y,"float32"),l=t.filter.equalization?await c2(d):A.expandDims(d,0);return A.dispose([y,d]),{tensor:l,canvas:t.filter.return?t0:null}}}async function Y1(e,t){let o=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return o;if(!B0.inputTensor)B0.inputTensor=A.clone(t);else if(B0.inputTensor.shape[1]!==t.shape[1]||B0.inputTensor.shape[2]!==t.shape[2])A.dispose(B0.inputTensor),B0.inputTensor=A.clone(t);else{let n={};n.diff=A.sub(t,B0.inputTensor),n.squared=A.mul(n.diff,n.diff),n.sum=A.sum(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;A.dispose([B0.inputTensor,n.diff,n.squared,n.sum]),B0.inputTensor=A.clone(t),o=s<=(e.cacheSensitivity||0)}return o}async function K1(e,t,o){let n={};if(!t||!o||t.shape.length!==4||t.shape.length!==o.shape.length)return e.debug||u("invalid input tensor or tensor shapes do not match:",t.shape,o.shape),0;if(t.shape[0]!==1||o.shape[0]!==1||t.shape[3]!==3||o.shape[3]!==3)return e.debug||u("input tensors must be of shape [1, height, width, 3]:",t.shape,o.shape),0;n.input1=A.clone(t),n.input2=t.shape[1]!==o.shape[1]||t.shape[2]!==o.shape[2]?A.image.resizeBilinear(o,[t.shape[1],t.shape[2]]):A.clone(o),n.diff=A.sub(n.input1,n.input2),n.squared=A.mul(n.diff,n.diff),n.sum=A.sum(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return A.dispose([n.input1,n.input2,n.diff,n.squared,n.sum]),s}var A5=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);w(this,"Canvas");w(this,"Image");w(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Qe["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let o=t[0].match(/\(([^()]+)\)/g);this.platform=o&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(A.engine().registryFactory),this.tensorflow={version:A.backend().binding?A.backend().binding.TF_Version:void 0,gpu:A.backend().binding?A.backend().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&A.getBackend()==="wasm"&&(this.wasm.simd=A.env().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=A.env().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=x0(100,100),o=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof o!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(A.getBackend()==="webgl"||A.getBackend()==="humangl")){let n=A.backend().gpgpu!=="undefined"?await A.backend().getGPGPUContext().gl:null;n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.renderer=n.getParameter(n.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(n){this.webgpu.supported=!1}try{this.kernels=A.getKernelsForBackend(A.getBackend()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},T=new A5;var s5={};K0(s5,{age:()=>An,"anti-spoofing":()=>Wn,antispoof:()=>qo,blazeface:()=>Uo,"blazeface-back":()=>sn,"blazeface-front":()=>an,"blazepose-detect":()=>Ln,"blazepose-detector2d":()=>ln,"blazepose-detector3d":()=>yn,"blazepose-full":()=>cn,"blazepose-heavy":()=>xn,"blazepose-lite":()=>dn,default:()=>Jn,efficientpose:()=>fn,"efficientpose-i-lite":()=>Fn,"efficientpose-ii-lite":()=>Gn,"efficientpose-iv":()=>Bn,emotion:()=>Yo,faceboxes:()=>mn,facemesh:()=>Ko,"facemesh-attention":()=>un,"facemesh-attention-alt":()=>pn,"facemesh-detection-full":()=>hn,"facemesh-detection-short":()=>bn,"facemesh-orig":()=>gn,faceres:()=>Jo,"faceres-deep":()=>Mn,gear:()=>Pn,gender:()=>Rn,"gender-ssrnet-imdb":()=>vn,handdetect:()=>Tn,"handlandmark-full":()=>Qo,"handlandmark-lite":()=>wn,"handlandmark-sparse":()=>kn,handskeleton:()=>En,handtrack:()=>_o,"insightface-efficientnet-b0":()=>Hn,"insightface-ghostnet-strides1":()=>Vn,"insightface-ghostnet-strides2":()=>Dn,"insightface-mobilenet-emore":()=>Zn,"insightface-mobilenet-swish":()=>Xn,iris:()=>$o,liveness:()=>en,"mb3-centernet":()=>tn,meet:()=>zn,mobileface:()=>Sn,mobilefacenet:()=>Cn,models:()=>on,"movenet-lightning":()=>nn,"movenet-multipose":()=>jn,"movenet-thunder":()=>In,nanodet:()=>Nn,"nanodet-e":()=>qn,"nanodet-g":()=>Un,"nanodet-m":()=>Yn,"nanodet-t":()=>Kn,posenet:()=>On,selfie:()=>rn});var qo=853098,Uo=538928,Yo=820516,Ko=1477958,Jo=6978814,Qo=5431368,_o=2964837,$o=2599092,en=592976,tn=4030290,on=0,nn=4650216,rn=212886,An=161240,sn=538928,an=402048,ln=7499400,yn=5928856,cn=6338290,xn=27501554,dn=2725490,fn=5651240,mn=2013002,pn=2387598,un=2382414,hn=1026192,bn=201268,gn=2955780,Mn=13957620,Pn=1498916,vn=161236,Rn=201808,Tn=3515612,wn=2023432,kn=5286322,En=5502280,zn=372228,Sn=2183192,Cn=5171976,jn=9448838,In=12477112,Nn=7574558,On=5032780,Ln=5928804,Wn=853098,Fn=2269064,Gn=5651240,Bn=25643252,Hn=13013224,Vn=8093408,Dn=8049584,Zn=6938536,Xn=12168584,qn=12319156,Un=7574558,Yn=1887474,Kn=5294216,Jn={antispoof:qo,blazeface:Uo,emotion:Yo,facemesh:Ko,faceres:Jo,"handlandmark-full":Qo,handtrack:_o,iris:$o,liveness:en,"mb3-centernet":tn,models:on,"movenet-lightning":nn,selfie:rn,age:An,"blazeface-back":sn,"blazeface-front":an,"blazepose-detector2d":ln,"blazepose-detector3d":yn,"blazepose-full":cn,"blazepose-heavy":xn,"blazepose-lite":dn,efficientpose:fn,faceboxes:mn,"facemesh-attention-alt":pn,"facemesh-attention":un,"facemesh-detection-full":hn,"facemesh-detection-short":bn,"facemesh-orig":gn,"faceres-deep":Mn,gear:Pn,"gender-ssrnet-imdb":vn,gender:Rn,handdetect:Tn,"handlandmark-lite":wn,"handlandmark-sparse":kn,handskeleton:En,meet:zn,mobileface:Sn,mobilefacenet:Cn,"movenet-multipose":jn,"movenet-thunder":In,nanodet:Nn,posenet:On,"blazepose-detect":Ln,"anti-spoofing":Wn,"efficientpose-i-lite":Fn,"efficientpose-ii-lite":Gn,"efficientpose-iv":Bn,"insightface-efficientnet-b0":Hn,"insightface-ghostnet-strides1":Vn,"insightface-ghostnet-strides2":Dn,"insightface-mobilenet-emore":Zn,"insightface-mobilenet-swish":Xn,"nanodet-e":qn,"nanodet-g":Un,"nanodet-m":Yn,"nanodet-t":Kn};var $5={};K0($5,{Models:()=>a2,getModelStats:()=>g1,load:()=>M1,reset:()=>W2,validate:()=>J2,validateModel:()=>Fe});var k0,a5=[],Qn=["white","black","asian","indian","other"],_n=[15,23,28,35.5,45.5,55.5,65],J1=0,Q1=0,i5=Number.MAX_SAFE_INTEGER;async function _1(e){var t;return T.initial&&(k0=null),k0?e.debug&&u("cached model:",k0.modelUrl):k0=await O((t=e.face.gear)==null?void 0:t.modelPath),k0}async function l5(e,t,o,n){var a,i;if(!k0)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=i5<(((a=t.face.gear)==null?void 0:a.skipFrames)||0),s=(((i=t.face.gear)==null?void 0:i.skipTime)||0)>g()-Q1;return t.skipAllowed&&s&&r&&J1===n&&a5[o]?(i5++,a5[o]):(i5=0,new Promise(async y=>{var P,M;if(!(k0!=null&&k0.inputs[0].shape))return;let c={},d=[[0,.1,.9,.9]];c.resize=A.image.cropAndResize(e,d,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]]);let l={age:0,gender:"unknown",genderScore:0,race:[]};(P=t.face.gear)!=null&&P.enabled&&([c.age,c.gender,c.race]=k0.execute(c.resize,["age_output","gender_output","race_output"]));let f=await c.gender.data();l.gender=f[0]>f[1]?"male":"female",l.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[1]))/100;let x=await c.race.data();for(let m=0;m(((M=t.face.gear)==null?void 0:M.minConfidence)||.2)&&l.race.push({score:Math.round(100*x[m])/100,race:Qn[m]});l.race.sort((m,h)=>h.score-m.score);let p=Array.from(await c.age.data()).map((m,h)=>[_n[h],m]).sort((m,h)=>h[1]-m[1]),v=p[0][0];for(let m=1;mA.dispose(c[m])),a5[o]=l,J1=n,Q1=g(),y(l)}))}var W={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function et(){W.tf255=A.scalar(255,"float32"),W.tf1=A.scalar(1,"float32"),W.tf2=A.scalar(2,"float32"),W.tf05=A.scalar(.5,"float32"),W.tf127=A.scalar(127.5,"float32"),W.rgb=A.tensor1d([.2989,.587,.114],"float32")}var p0,f2=[],tt=0,ot=0,y5=Number.MAX_SAFE_INTEGER;async function nt(e){return T.initial&&(p0=null),p0?e.debug&&u("cached model:",p0.modelUrl):p0=await O(e.face.ssrnet.modelPathAge),p0}async function c5(e,t,o,n){var a,i,y,c;if(!p0)return{age:0};let r=y5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),s=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>g()-ot;return t.skipAllowed&&r&&s&&tt===n&&((y=f2[o])==null?void 0:y.age)&&((c=f2[o])==null?void 0:c.age)>0?(y5++,f2[o]):(y5=0,new Promise(async d=>{if(!(p0!=null&&p0.inputs)||!p0.inputs[0]||!p0.inputs[0].shape)return;let l={};l.resize=A.image.resizeBilinear(e,[p0.inputs[0].shape[2],p0.inputs[0].shape[1]],!1),l.enhance=A.mul(l.resize,W.tf255);let f={age:0};if(t.face.ssrnet.enabled&&(l.age=p0.execute(l.enhance)),l.age){let x=await l.age.data();f.age=Math.trunc(10*x[0])/10}Object.keys(l).forEach(x=>A.dispose(l[x])),f2[o]=f,tt=n,ot=g(),d(f)}))}var E0,m2=[],At=0,st=0,x5=Number.MAX_SAFE_INTEGER,d5=[.2989,.587,.114];async function at(e){return T.initial&&(E0=null),E0?e.debug&&u("cached model:",E0.modelUrl):E0=await O(e.face.ssrnet.modelPathGender),E0}async function f5(e,t,o,n){var a,i,y,c;if(!E0)return{gender:"unknown",genderScore:0};let r=x5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),s=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>g()-st;return t.skipAllowed&&r&&s&&At===n&&((y=m2[o])==null?void 0:y.gender)&&((c=m2[o])==null?void 0:c.genderScore)>0?(x5++,m2[o]):(x5=0,new Promise(async d=>{if(!(E0!=null&&E0.inputs[0].shape))return;let l={};l.resize=A.image.resizeBilinear(e,[E0.inputs[0].shape[2],E0.inputs[0].shape[1]],!1),l.enhance=A.tidy(()=>{let[b,p,v]=A.split(l.resize,3,3),P=A.mul(b,d5[0]),M=A.mul(p,d5[1]),m=A.mul(v,d5[2]),h=A.addN([P,M,m]);return A.mul(A.sub(h,W.tf05),2)});let f={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(l.gender=E0.execute(l.enhance));let x=await l.gender.data();f.gender=x[0]>x[1]?"female":"male",f.genderScore=x[0]>x[1]?Math.trunc(100*x[0])/100:Math.trunc(100*x[1])/100,Object.keys(l).forEach(b=>A.dispose(l[b])),m2[o]=f,At=n,st=g(),d(f)}))}var s0,p2=[],m5=Number.MAX_SAFE_INTEGER,lt=0,yt=0;async function ct(e){var t;return T.initial&&(s0=null),s0?e.debug&&u("cached model:",s0.modelUrl):s0=await O((t=e.face.antispoof)==null?void 0:t.modelPath),s0}async function p5(e,t,o,n){var a,i;if(!s0)return 0;let r=(((a=t.face.antispoof)==null?void 0:a.skipTime)||0)>g()-yt,s=m5<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&s&<===n&&p2[o]?(m5++,p2[o]):(m5=0,new Promise(async y=>{let c=A.image.resizeBilinear(e,[s0!=null&&s0.inputs[0].shape?s0.inputs[0].shape[2]:0,s0!=null&&s0.inputs[0].shape?s0.inputs[0].shape[1]:0],!1),d=s0==null?void 0:s0.execute(c),l=(await d.data())[0];p2[o]=Math.round(100*l)/100,lt=n,yt=g(),A.dispose([c,d]),y(p2[o])}))}var z0={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},u5={count:468,mouth:13,symmetryLine:[13,z0.midwayBetweenEyes[0]]},le={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},h5=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],$e=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],ye=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var er=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],tr=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],or=[33,133,362,263,1,78,308],P7=er.map(e=>$e[e]),v7=tr.map(e=>$e[e]),R7=or.map(e=>$e[e]);function J0(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var nr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],rr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ar=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],sr=[[474,475],[475,476],[476,477],[477,474]],ar=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ir=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],lr=[[469,470],[470,471],[471,472],[472,469]],yr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],T7={lips:J0(nr),leftEye:J0(rr),leftEyebrow:J0(Ar),leftIris:J0(sr),rightEye:J0(ar),rightEyebrow:J0(ir),rightIris:J0(lr),faceOval:J0(yr)};var Te=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],u2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],h2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],b2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],mt=(e,t)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:o,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},g5=(e,t,o)=>{let n=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],a=A.image.cropAndResize(t,[s],[0],o),i=A.div(a,W.tf255);return A.dispose(a),i},g2=(e,t)=>{let o=u2(e),n=Te(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[o[0]-r[0],o[1]-r[1]],endPoint:[o[0]+r[0],o[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},M2=e=>{let t=u2(e),o=Te(e),n=Math.max(...o)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},pt=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...o)],endPoint:[Math.max(...t),Math.max(...o)],landmarks:e}},M5=[[1,0,0],[0,1,0],[0,0,1]],cr=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),xr=(e,t)=>cr(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var dt=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],ce=(e,t)=>{let o=0;for(let n=0;n{let o=[];for(let n=0;n{let o=[],n=e.length;for(let r=0;r{let o=Math.cos(e),n=Math.sin(e),r=[[o,-n,0],[n,o,0],[0,0,1]],s=dt(t[0],t[1]),a=ft(s,r),i=dt(-t[0],-t[1]);return ft(a,i)},fr=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],o=[e[0][2],e[1][2]],n=[-ce(t[0],o),-ce(t[1],o)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},mr=(e,t)=>[ce(e,t[0]),ce(e,t[1])];function ht(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},o=[];for(let n=0;n[s[0]/r*(x[0]-r/2),s[1]/r*(x[1]-r/2),x[2]||0]),i=o&&o!==0&&Math.abs(o)>.2,y=i?ut(o,[0,0]):M5,c=i?a.map(x=>[...mr(x,y),x[2]]):a,d=i?fr(n):M5,l=u2(t),f=[ce(l,d[0]),ce(l,d[1])];return c.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2]||0)])}function gt(e,t,o,n){let r=t.landmarks.length>=u5.count?u5.symmetryLine:le.symmetryLine,s=0,a=M5,i;if(e&&T.kernels.includes("rotatewithoffset"))if(s=xr(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=u2(t),d=[c[0]/o.shape[2],c[1]/o.shape[1]],l=A.image.rotateWithOffset(o,s,0,d);a=ut(-s,c),i=g5(t,l,[n,n]),A.dispose(l)}else i=g5(t,o,[n,n]);else i=g5(t,o,[n,n]);return[s,a,i]}var pr=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...o)+(Math.max(...o)-Math.min(...o))/2]},Mt=(e,t)=>{let o=pr(e),n=Te(t);return{startPoint:[o[0]-n[0]/2,o[1]-n[1]/2],endPoint:[o[0]+n[0]/2,o[1]+n[1]/2]}};var Pt=6,ur=1.4,L0,vt=null,Q0=0,e2=null,we=()=>Q0;async function Rt(e){var t;return T.initial&&(L0=null),L0?e.debug&&u("cached model:",L0.modelUrl):L0=await O((t=e.face.detector)==null?void 0:t.modelPath),Q0=L0.inputs[0].shape?L0.inputs[0].shape[2]:0,e2=A.scalar(Q0,"int32"),vt=A.tensor2d(ht(Q0)),L0}function hr(e){let t={};t.boxStarts=A.slice(e,[0,1],[-1,2]),t.centers=A.add(t.boxStarts,vt),t.boxSizes=A.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=A.div(t.boxSizes,e2),t.centersNormalized=A.div(t.centers,e2),t.halfBoxSize=A.div(t.boxSizesNormalized,W.tf2),t.starts=A.sub(t.centersNormalized,t.halfBoxSize),t.ends=A.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=A.mul(t.starts,e2),t.endNormalized=A.mul(t.ends,e2);let o=A.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>A.dispose(t[n])),o}async function Tt(e,t){var i,y,c,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let o={};o.resized=A.image.resizeBilinear(e,[Q0,Q0]),o.div=A.div(o.resized,W.tf127),o.normalized=A.sub(o.div,W.tf05);let n=L0==null?void 0:L0.execute(o.normalized);if(Array.isArray(n)&&n.length>2){let l=n.sort((f,x)=>f.size-x.size);o.concat384=A.concat([l[0],l[2]],2),o.concat512=A.concat([l[1],l[3]],2),o.concat=A.concat([o.concat512,o.concat384],1),o.batch=A.squeeze(o.concat,0)}else Array.isArray(n)?o.batch=A.squeeze(n[0]):o.batch=A.squeeze(n);A.dispose(n),o.boxes=hr(o.batch),o.logits=A.slice(o.batch,[0,0],[-1,1]),o.sigmoid=A.sigmoid(o.logits),o.scores=A.squeeze(o.sigmoid),o.nms=await A.image.nonMaxSuppressionAsync(o.boxes,o.scores,((i=t.face.detector)==null?void 0:i.maxDetected)||0,((y=t.face.detector)==null?void 0:y.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await o.nms.array(),s=[],a=await o.scores.data();for(let l=0;l(((d=t.face.detector)==null?void 0:d.minConfidence)||0)){let x={};x.bbox=A.slice(o.boxes,[r[l],0],[1,-1]),x.slice=A.slice(o.batch,[r[l],Pt-1],[1,-1]),x.squeeze=A.squeeze(x.slice),x.landmarks=A.reshape(x.squeeze,[Pt,-1]);let b=await x.bbox.data(),p={startPoint:[b[0],b[1]],endPoint:[b[2],b[3]],landmarks:await x.landmarks.array(),confidence:f},v=mt(p,[(e.shape[2]||0)/Q0,(e.shape[1]||0)/Q0]),P=g2(v,t.face.scale||ur),M=M2(P);s.push(M),Object.keys(x).forEach(m=>A.dispose(x[m]))}}return Object.keys(o).forEach(l=>A.dispose(o[l])),s}var P2={};K0(P2,{connected:()=>R5,kpt:()=>v5});var v5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],R5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var kt=224,br,gr=5,v2=[8,16,32,32,32];async function Et(){let e=[],t=0;for(;to.x)),y:A.tensor1d(e.map(o=>o.y))}}function H0(e,t=[1,1]){let o=[e.map(i=>i[0]),e.map(i=>i[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],s=[n[0],n[1],r[0]-n[0],r[1]-n[1]],a=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:a}}function zt(e,t=[1,1]){let o=[e.map(c=>c[0]),e.map(c=>c[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],s=[(n[0]+r[0])/2,(n[1]+r[1])/2],a=Math.max(s[0]-n[0],s[1]-n[1],-s[0]+r[0],-s[1]+r[1]),i=[Math.trunc(s[0]-a),Math.trunc(s[1]-a),Math.trunc(2*a),Math.trunc(2*a)],y=[i[0]/t[0],i[1]/t[1],i[2]/t[0],i[3]/t[1]];return{box:i,boxRaw:y}}function R2(e,t){let o=[e[2]*t,e[3]*t];return[e[0]-(o[0]-e[2])/2,e[1]-(o[1]-e[3])/2,o[0],o[1]]}var jt={initial:!0},u0={detector:null,landmarks:null},ke={detector:[224,224],landmarks:[256,256]},T5=Number.MAX_SAFE_INTEGER,Pr={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},w2=null,t2,_0=[[0,0],[0,0],[0,0],[0,0]],St=0,Ct=e=>1-1/(1+Math.exp(e));async function It(e){if(jt.initial&&(u0.detector=null),!u0.detector&&e.body.detector&&e.body.detector.modelPath){u0.detector=await O(e.body.detector.modelPath);let t=Object.values(u0.detector.modelSignature.inputs);ke.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,ke.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&u0.detector&&u("cached model:",u0.detector.modelUrl);return await Et(),u0.detector}async function Nt(e){if(jt.initial&&(u0.landmarks=null),u0.landmarks)e.debug&&u("cached model:",u0.landmarks.modelUrl);else{u0.landmarks=await O(e.body.modelPath);let t=Object.values(u0.landmarks.modelSignature.inputs);ke.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,ke.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return u0.landmarks}async function vr(e,t){let o={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let n;if(t2&&(o.cropped=A.image.cropAndResize(e,[t2],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],s=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];_0=[[0,0],r,s,[0,0]],o.pad=A.pad(o.cropped||e,_0),o.resize=A.image.resizeBilinear(o.pad,[t,t]),n=A.div(o.resize,W.tf255)}else e.shape[1]!==t?(o.resize=A.image.resizeBilinear(o.cropped||e,[t,t]),n=A.div(o.resize,W.tf255)):n=A.div(o.cropped||e,W.tf255);return Object.keys(o).forEach(r=>A.dispose(o[r])),n}function Rr(e,t){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+_0[2][0]+_0[2][1])/t[0]-_0[2][0]),Math.trunc(o.position[1]*(t[1]+_0[1][0]+_0[1][1])/t[1]-_0[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(t2)for(let o of e)o.positionRaw=[o.positionRaw[0]+t2[1],o.positionRaw[1]+t2[0],o.positionRaw[2]],o.position=[Math.trunc(o.positionRaw[0]*t[0]),Math.trunc(o.positionRaw[1]*t[1]),o.positionRaw[2]];return e}async function Tr(e){let t=e.find(i=>i.part==="leftPalm"),o=e.find(i=>i.part==="leftWrist"),n=e.find(i=>i.part==="leftIndex");t.position[2]=((o.position[2]||0)+(n.position[2]||0))/2;let r=e.find(i=>i.part==="rightPalm"),s=e.find(i=>i.part==="rightWrist"),a=e.find(i=>i.part==="rightIndex");r.position[2]=((s.position[2]||0)+(a.position[2]||0))/2}async function wr(e,t,o){var b;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=(b=u0.landmarks)==null?void 0:b.execute(e,Pr.landmarks);let r=(await n.poseflag.data())[0],s=await n.ld.data(),a=await n.world.data();Object.keys(n).forEach(p=>A.dispose(n[p]));let i=[],y=5;for(let p=0;pp.position),l=H0(d,[o[0],o[1]]),f={};for(let[p,v]of Object.entries(R5)){let P=[];for(let M=0;MC.part===v[M]),h=c.find(C=>C.part===v[M+1]);m&&h&&P.push([m.position,h.position])}f[p]=P}return{id:0,score:Math.trunc(100*r)/100,box:l.box,boxRaw:l.boxRaw,keypoints:c,annotations:f}}async function w5(e,t){let o=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>g()-St,r=T5<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&w2!==null)T5++;else{let s={};s.landmarks=await vr(e,256),w2=await wr(s.landmarks,t,o),Object.keys(s).forEach(a=>A.dispose(s[a])),St=g(),T5=0}return w2?[w2]:[]}var Ee=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var V0,xe=0,k5=[],Lt=0,E5=Number.MAX_SAFE_INTEGER;async function Wt(e){if(T.initial&&(V0=null),V0)e.debug&&u("cached model:",V0.modelUrl);else{V0=await O(e.object.modelPath);let t=Object.values(V0.modelSignature.inputs);xe=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return V0}async function kr(e,t,o){if(!e)return[];let n={},r=[],s=await e.array();n.squeeze=A.squeeze(e);let a=A.split(n.squeeze,6,1);n.stack=A.stack([a[1],a[0],a[3],a[2]],1),n.boxes=A.squeeze(n.stack),n.scores=A.squeeze(a[4]),n.classes=A.squeeze(a[5]),A.dispose([e,...a]),n.nms=await A.image.nonMaxSuppressionAsync(n.boxes,n.scores,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence||0);let i=await n.nms.data(),y=0;for(let c of Array.from(i)){let d=Math.trunc(100*s[0][c][4])/100,l=s[0][c][5],f=Ee[l].label,[x,b]=[s[0][c][0]/xe,s[0][c][1]/xe],p=[x,b,s[0][c][2]/xe-x,s[0][c][3]/xe-b],v=[Math.trunc(p[0]*t[0]),Math.trunc(p[1]*t[1]),Math.trunc(p[2]*t[0]),Math.trunc(p[3]*t[1])];r.push({id:y++,score:d,class:l,label:f,box:v,boxRaw:p})}return Object.keys(n).forEach(c=>A.dispose(n[c])),r}async function z5(e,t){let o=(t.object.skipTime||0)>g()-Lt,n=E5<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&k5.length>0?(E5++,k5):(E5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],a=A.image.resizeBilinear(e,[xe,xe]),i=t.object.enabled?V0==null?void 0:V0.execute(a,["tower_0/detections"]):null;Lt=g(),A.dispose(a);let y=await kr(i,s,t);k5=y,r(y)}))}var k2={};K0(k2,{connected:()=>C5,kpt:()=>S5});var S5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],C5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var a0,Gt=0,d0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},j5=Number.MAX_SAFE_INTEGER;async function Bt(e){return T.initial&&(a0=null),a0?e.debug&&u("cached model:",a0.modelUrl):a0=await O(e.body.modelPath),a0}async function Er(e,t){let[o,n]=e.shape,r=A.reshape(e,[n*o]),s=A.max(r,0),a=(await s.data())[0];if(a>t){let i=A.argMax(r,0),y=A.mod(i,o),c=(await y.data())[0],d=A.div(i,o),l=(await d.data())[0];return A.dispose([r,s,i,y,d]),[c,l,a]}else return A.dispose([r,s]),[0,0,a]}async function I5(e,t){let o=(t.body.skipTime||0)>g()-Gt,n=j5<(t.body.skipFrames||0);return t.skipAllowed&&o&&n&&Object.keys(d0.keypoints).length>0?(j5++,[d0]):(j5=0,new Promise(async r=>{var l;let s=A.tidy(()=>{if(!(a0!=null&&a0.inputs[0].shape))return null;let f=A.image.resizeBilinear(e,[a0.inputs[0].shape[2],a0.inputs[0].shape[1]],!1),x=A.mul(f,W.tf2);return A.sub(x,W.tf1)}),a;if(t.body.enabled&&(a=a0==null?void 0:a0.execute(s)),Gt=g(),A.dispose(s),a){d0.keypoints.length=0;let f=A.squeeze(a);A.dispose(a);let x=A.unstack(f,2);A.dispose(f);for(let b=0;b(((l=t.body)==null?void 0:l.minConfidence)||0)&&d0.keypoints.push({score:Math.round(100*P)/100,part:S5[b],positionRaw:[p/a0.inputs[0].shape[2],v/a0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/a0.inputs[0].shape[2]),Math.round(e.shape[1]*v/a0.inputs[0].shape[1])]})}x.forEach(b=>A.dispose(b))}d0.score=d0.keypoints.reduce((f,x)=>x.score>f?x.score:f,0);let i=d0.keypoints.map(f=>f.position[0]),y=d0.keypoints.map(f=>f.position[1]);d0.box=[Math.min(...i),Math.min(...y),Math.max(...i)-Math.min(...i),Math.max(...y)-Math.min(...y)];let c=d0.keypoints.map(f=>f.positionRaw[0]),d=d0.keypoints.map(f=>f.positionRaw[1]);d0.boxRaw=[Math.min(...c),Math.min(...d),Math.max(...c)-Math.min(...c),Math.max(...d)-Math.min(...d)];for(let[f,x]of Object.entries(C5)){let b=[];for(let p=0;pM.part===x[p]),P=d0.keypoints.find(M=>M.part===x[p+1]);v&&P&&v.score>(t.body.minConfidence||0)&&P.score>(t.body.minConfidence||0)&&b.push([v.position,P.position])}d0.annotations[f]=b}r([d0])}))}var zr=["angry","disgust","fear","happy","sad","surprise","neutral"],R0,E2=[],Vt=0,Dt=0,N5=Number.MAX_SAFE_INTEGER;async function Zt(e){var t;return T.initial&&(R0=null),R0?e.debug&&u("cached model:",R0.modelUrl):R0=await O((t=e.face.emotion)==null?void 0:t.modelPath),R0}async function O5(e,t,o,n){var a,i;if(!R0)return[];let r=N5<(((a=t.face.emotion)==null?void 0:a.skipFrames)||0),s=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>g()-Dt;return t.skipAllowed&&s&&r&&Vt===n&&E2[o]&&E2[o].length>0?(N5++,E2[o]):(N5=0,new Promise(async y=>{var d,l;let c=[];if((d=t.face.emotion)!=null&&d.enabled){let f={},x=R0!=null&&R0.inputs[0].shape?R0.inputs[0].shape[2]:0;f.resize=A.image.resizeBilinear(e,[x,x],!1),f.channels=A.mul(f.resize,W.rgb),f.grayscale=A.sum(f.channels,3,!0),f.grayscaleSub=A.sub(f.grayscale,W.tf05),f.grayscaleMul=A.mul(f.grayscaleSub,W.tf2),f.emotion=R0==null?void 0:R0.execute(f.grayscaleMul),Dt=g();let b=await f.emotion.data();for(let p=0;p(((l=t.face.emotion)==null?void 0:l.minConfidence)||0)&&c.push({score:Math.min(.99,Math.trunc(100*b[p])/100),emotion:zr[p]});c.sort((p,v)=>v.score-p.score),Object.keys(f).forEach(p=>A.dispose(f[p]))}E2[o]=c,Vt=n,y(c)}))}var h0,L5=[],qt=0,Ut=0,Yt=Number.MAX_SAFE_INTEGER;async function Kt(e){return T.initial&&(h0=null),h0?e.debug&&u("cached model:",h0.modelUrl):h0=await O(e.face.mobilefacenet.modelPath),h0}async function W5(e,t,o,n){var a,i;if(!h0)return[];let r=Yt<(((a=t.face.mobilefacenet)==null?void 0:a.skipFrames)||0),s=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>g()-Ut;return t.skipAllowed&&s&&r&&qt===n&&L5[o]?(Yt++,L5[o]):new Promise(async y=>{var d;let c=[];if(((d=t.face.mobilefacenet)==null?void 0:d.enabled)&&(h0==null?void 0:h0.inputs[0].shape)){let l={};l.crop=A.image.resizeBilinear(e,[h0.inputs[0].shape[2],h0.inputs[0].shape[1]],!1),l.data=h0==null?void 0:h0.execute(l.crop);let f=await l.data.data();c=Array.from(f),Object.keys(l).forEach(x=>A.dispose(l[x]))}L5[o]=c,qt=n,Ut=g(),y(c)})}var b0,F5=[],Qt=0,_t=0,$t=Number.MAX_SAFE_INTEGER;async function e3(e){return T.initial&&(b0=null),b0?e.debug&&u("cached model:",b0.modelUrl):b0=await O(e.face.insightface.modelPath),b0}async function G5(e,t,o,n){var a,i;if(!b0)return[];let r=$t<(((a=t.face.insightface)==null?void 0:a.skipFrames)||0),s=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>g()-_t;return t.skipAllowed&&s&&r&&Qt===n&&F5[o]?($t++,F5[o]):new Promise(async y=>{var d;let c=[];if(((d=t.face.insightface)==null?void 0:d.enabled)&&(b0==null?void 0:b0.inputs[0].shape)){let l={};l.crop=A.image.resizeBilinear(e,[b0.inputs[0].shape[2],b0.inputs[0].shape[1]],!1),l.data=b0==null?void 0:b0.execute(l.crop);let f=await l.data.data();c=Array.from(f),Object.keys(l).forEach(x=>A.dispose(l[x]))}F5[o]=c,Qt=n,_t=g(),y(c)})}var D0,$0=0,Sr=2.3,B5=z0.leftEyeLower0,H5=z0.rightEyeLower0,ze={leftBounds:[B5[0],B5[B5.length-1]],rightBounds:[H5[0],H5[H5.length-1]]},Se={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function A3(e){var t;return T.initial&&(D0=null),D0?e.debug&&u("cached model:",D0.modelUrl):D0=await O((t=e.face.iris)==null?void 0:t.modelPath),$0=D0.inputs[0].shape?D0.inputs[0].shape[2]:0,$0===-1&&($0=64),D0}function z2(e,t,o,n){for(let r=0;r{let t=e[ze.leftBounds[0]][2],o=e[ze.rightBounds[0]][2];return t-o},o3=(e,t,o,n,r,s=!1)=>{let a=M2(g2(pt([e[o],e[n]]),Sr)),i=Te(a),y=A.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[$0,$0]);if(s&&T.kernels.includes("flipleftright")){let c=A.image.flipLeftRight(y);A.dispose(y),y=c}return{box:a,boxSize:i,crop:y}},n3=(e,t,o,n=!1)=>{let r=[];for(let s=0;s{let n=e[z0[`${o}EyeUpper0`][Se.upperCenter]][2],r=e[z0[`${o}EyeLower0`][Se.lowerCenter]][2],s=(n+r)/2;return t.map((a,i)=>{let y=s;return i===2?y=n:i===4&&(y=r),[a[0],a[1],y]})};async function s3(e,t,o,n){if(!D0)return o.debug&&u("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:s,crop:a}=o3(e,t,ze.leftBounds[0],ze.leftBounds[1],n,!0),{box:i,boxSize:y,crop:c}=o3(e,t,ze.rightBounds[0],ze.rightBounds[1],n,!0),d=A.concat([a,c]);A.dispose(a),A.dispose(c);let l=D0.execute(d);A.dispose(d);let f=await l.data();A.dispose(l);let x=f.slice(0,Se.numCoordinates*3),{rawCoords:b,iris:p}=n3(x,r,s,!0),v=f.slice(Se.numCoordinates*3),{rawCoords:P,iris:M}=n3(v,i,y,!1),m=Cr(e);Math.abs(m)<30?(z2(e,b,"left",null),z2(e,P,"right",null)):m<1?z2(e,b,"left",["EyeUpper0","EyeLower0"]):z2(e,P,"right",["EyeUpper0","EyeLower0"]);let h=r3(e,p,"left"),C=r3(e,M,"right");return e.concat(h).concat(C)}var jr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Ir=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Nr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Or=[[474,475],[475,476],[476,477],[477,474]],Lr=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Wr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Fr=[[469,470],[470,471],[471,472],[472,469]],Gr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function ee(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var Br={lips:ee(jr),leftEye:ee(Ir),leftEyebrow:ee(Nr),leftIris:ee(Or),rightEye:ee(Lr),rightEyebrow:ee(Wr),rightIris:ee(Fr),faceOval:ee(Gr)},Hr=Object.entries(Br).map(([e,t])=>t.map(o=>[o,e])).flat(),n4=new Map(Hr),o2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],de=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],fe=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function l3(e,t){let o={lips:await t.filter(s=>s.size===160)[0].data(),irisL:await t.filter(s=>s.size===10)[0].data(),eyeL:await t.filter(s=>s.size===142)[0].data(),irisR:await t.filter(s=>s.size===10)[1].data(),eyeR:await t.filter(s=>s.size===142)[1].data()},n=de.reduce((s,a)=>s+=e[a][2],0)/de.length;for(let s=0;ss+=e[a][2],0)/fe.length;for(let s=0;sg()-W0.timestamp,n=W0.skipped<(((y=t.face.detector)==null?void 0:y.skipFrames)||0);!t.skipAllowed||!o||!n||W0.boxes.length===0?(W0.boxes=await Tt(e,t),W0.timestamp=g(),W0.skipped=0):W0.skipped++;let r=[],s=[],a=0;for(let m=0;mL.shape[L.shape.length-1]===1).data();if(k.faceScore=Math.round(100*B[0])/100,k.faceScore<(((b=t.face.detector)==null?void 0:b.minConfidence)||1)){if(h.confidence=k.faceScore,(p=t.face.mesh)!=null&&p.keepInvalid){k.box=h2(h,e),k.boxRaw=b2(h,e),k.score=k.boxScore,k.mesh=h.landmarks.map(L=>[(h.startPoint[0]+h.endPoint[0])/2+(h.endPoint[0]+h.startPoint[0])*L[0]/we(),(h.startPoint[1]+h.endPoint[1])/2+(h.endPoint[1]+h.startPoint[1])*L[1]/we()]),k.meshRaw=k.mesh.map(L=>[L[0]/(e.shape[2]||1),L[1]/(e.shape[1]||1),(L[2]||0)/me]);for(let L of Object.keys(le))k.annotations[L]=[k.mesh[le[L]]]}}else{let L=z.find(e0=>e0.shape[e0.shape.length-1]===1404),K=A.reshape(L,[-1,3]),Z=await K.array();A.dispose(K),(v=t.face.attention)!=null&&v.enabled?Z=await l3(Z,z):(P=t.face.iris)!=null&&P.enabled&&(Z=await s3(Z,k.tensor,t,me)),k.mesh=bt(Z,h,C,N,me),k.meshRaw=k.mesh.map(e0=>[e0[0]/(e.shape[2]||0),e0[1]/(e.shape[1]||0),(e0[2]||0)/me]);for(let e0 of Object.keys(z0))k.annotations[e0]=z0[e0].map(v0=>k.mesh[v0]);k.score=k.faceScore;let S={...Mt(k.mesh,h),confidence:h.confidence,landmarks:h.landmarks};k.box=h2(S,e),k.boxRaw=b2(S,e),s.push(S)}A.dispose(z)}else{k.box=h2(h,e),k.boxRaw=b2(h,e),k.score=k.boxScore,k.mesh=h.landmarks.map(z=>[(h.startPoint[0]+h.endPoint[0])/2+(h.endPoint[0]+h.startPoint[0])*z[0]/we(),(h.startPoint[1]+h.endPoint[1])/2+(h.endPoint[1]+h.startPoint[1])*z[1]/we()]),k.meshRaw=k.mesh.map(z=>[z[0]/(e.shape[2]||0),z[1]/(e.shape[1]||0),(z[2]||0)/me]);for(let z of Object.keys(le))k.annotations[z]=[k.mesh[le[z]]]}k.score>(((M=t.face.detector)==null?void 0:M.minConfidence)||1)?r.push(k):A.dispose(k.tensor)}return W0.boxes=s,r}async function c3(e){var t,o,n,r,s,a;return T.initial&&(i0=null),((o=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:o.enabled)&&(i0==null?void 0:i0.signature)&&Object.keys(((n=i0==null?void 0:i0.signature)==null?void 0:n.outputs)||{}).length<6&&(i0=null),i0?e.debug&&u("cached model:",i0.modelUrl):(r=e.face.attention)!=null&&r.enabled?i0=await O((s=e.face.attention)==null?void 0:s.modelPath):i0=await O((a=e.face.mesh)==null?void 0:a.modelPath),me=i0.inputs[0].shape?i0.inputs[0].shape[2]:0,i0}var x3=ye,d3=$e;var g0,S2=[],f3=0,m3=0,D5=Number.MAX_SAFE_INTEGER;async function p3(e){var t;return T.initial&&(g0=null),g0?e.debug&&u("cached model:",g0.modelUrl):g0=await O((t=e.face.description)==null?void 0:t.modelPath),g0}function Z5(e){let t=e.image||e.tensor||e;if(!(g0!=null&&g0.inputs[0].shape))return t;let o=A.image.resizeBilinear(t,[g0.inputs[0].shape[2],g0.inputs[0].shape[1]],!1),n=A.mul(o,W.tf255);return A.dispose(o),n}async function X5(e,t,o,n){var a,i,y,c;if(!g0)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=D5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),s=(((i=t.face.description)==null?void 0:i.skipTime)||0)>g()-f3;return t.skipAllowed&&r&&s&&m3===n&&((y=S2[o])==null?void 0:y.age)&&((c=S2[o])==null?void 0:c.age)>0?(D5++,S2[o]):(D5=0,new Promise(async d=>{var f,x;let l={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((f=t.face.description)!=null&&f.enabled){let b=Z5(e),p=g0==null?void 0:g0.execute(b);f3=g(),A.dispose(b);let P=await(await p.find(F=>F.shape[1]===1)).data(),M=Math.trunc(200*Math.abs(P[0]-.5))/100;M>(((x=t.face.description)==null?void 0:x.minConfidence)||0)&&(l.gender=P[0]<=.5?"female":"male",l.genderScore=Math.min(.99,M));let m=A.argMax(p.find(F=>F.shape[1]===100),1),h=(await m.data())[0];A.dispose(m);let N=await p.find(F=>F.shape[1]===100).data();l.age=Math.round(N[h-1]>N[h+1]?10*h-100*N[h-1]:10*h+100*N[h+1])/10;let k=p.find(F=>F.shape[1]===1024),z=k?await k.data():[];l.descriptor=Array.from(z),p.forEach(F=>A.dispose(F))}S2[o]=l,m3=n,d(l)}))}function C2(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function n2(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function b3(e,t,o){let n=t.shape[1],r=t.shape[2],s=[[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r]];return A.image.cropAndResize(t,s,[0],o)}function g3(e,t){let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(s=>[s[0]*t[0],s[1]*t[1]]);return{startPoint:o,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function j2(e,t=1.5){let o=n2(e),n=C2(e),r=[t*n[0]/2,t*n[1]/2],s=[o[0]-r[0],o[1]-r[1]],a=[o[0]+r[0],o[1]+r[1]];return{startPoint:s,endPoint:a,palmLandmarks:e.palmLandmarks}}function I2(e){let t=n2(e),o=C2(e),r=Math.max(...o)/2,s=[t[0]-r,t[1]-r],a=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:a,palmLandmarks:e.palmLandmarks}}function Dr(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function M3(e,t){let o=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Dr(o)}var u3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function te(e,t){let o=0;for(let n=0;n[o.x,o.y]),this.anchorsTensor=A.tensor2d(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=A.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=A.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let o={};o.boxOffsets=A.slice(t,[0,0],[-1,2]),o.boxSizes=A.slice(t,[0,2],[-1,2]),o.div=A.div(o.boxOffsets,this.inputSizeTensor),o.boxCenterPoints=A.add(o.div,this.anchorsTensor),o.halfBoxSizes=A.div(o.boxSizes,this.doubleInputSizeTensor),o.sub=A.sub(o.boxCenterPoints,o.halfBoxSizes),o.startPoints=A.mul(o.sub,this.inputSizeTensor),o.add=A.add(o.boxCenterPoints,o.halfBoxSizes),o.endPoints=A.mul(o.add,this.inputSizeTensor);let n=A.concat2d([o.startPoints,o.endPoints],1);return Object.keys(o).forEach(r=>A.dispose(o[r])),n}normalizeLandmarks(t,o){let n={};n.reshape=A.reshape(t,[-1,7,2]),n.div=A.div(n.reshape,this.inputSizeTensor),n.landmarks=A.add(n.div,this.anchors[o]);let r=A.mul(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(s=>A.dispose(n[s])),r}async predict(t,o){let n={};n.resize=A.image.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=A.div(n.resize,W.tf127),n.image=A.sub(n.div,W.tf1),n.batched=this.model.execute(n.image),n.predictions=A.squeeze(n.batched),n.slice=A.slice(n.predictions,[0,0],[-1,1]),n.sigmoid=A.sigmoid(n.slice),n.scores=A.squeeze(n.sigmoid);let r=await n.scores.data();n.boxes=A.slice(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await A.image.nonMaxSuppressionAsync(n.norm,n.scores,3*o.hand.maxDetected,o.hand.iouThreshold,o.hand.minConfidence);let s=await n.nms.array(),a=[];for(let i of s){let y={};y.box=A.slice(n.norm,[i,0],[1,-1]),y.slice=A.slice(n.predictions,[i,5],[1,14]),y.norm=this.normalizeLandmarks(y.slice,i),y.palmLandmarks=A.reshape(y.norm,[-1,2]);let c=await y.box.data(),d=c.slice(0,2),l=c.slice(2,4),f=await y.palmLandmarks.array(),x={startPoint:d,endPoint:l,palmLandmarks:f,confidence:r[i]},b=g3(x,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);a.push(b),Object.keys(y).forEach(p=>A.dispose(y[p]))}return Object.keys(n).forEach(i=>A.dispose(n[i])),a}};var Ur=5,T3=1.65,w3=[0,5,9,13,17,1,2],Yr=0,Kr=2,k3=0,O2=class{constructor(t,o){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(this,"detectedHands");this.handDetector=t,this.handPoseModel=o,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let o=t.map(a=>a[0]),n=t.map(a=>a[1]),r=[Math.min(...o),Math.min(...n)],s=[Math.max(...o),Math.max(...n)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,o){let n=t.map(s=>Y5([...s,1],o)),r=this.calculateLandmarksBoundingBox(n);return j2(I2(r),Ur)}getBoxForHandLandmarks(t){let o=this.calculateLandmarksBoundingBox(t),n=j2(I2(o),T3);n.palmLandmarks=[];for(let r=0;r[a[0]*(x[0]-this.inputSize/2),a[1]*(x[1]-this.inputSize/2),a[2]*x[2]]),y=U5(n,[0,0]),c=i.map(x=>[...Y5(x,y),x[2]]),d=P3(r),l=[...n2(o),1],f=[te(l,d[0]),te(l,d[1])];return c.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2])])}async estimateHands(t,o){let n=!1,r,s=(o.hand.skipTime||0)>g()-k3,a=this.skipped<(o.hand.skipFrames||0);o.skipAllowed&&s&&a&&(r=await this.handDetector.predict(t,o),this.skipped=0),o.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==o.hand.maxDetected||!o.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let i=[];for(let y=0;y=o.hand.minConfidence/4){let C=A.reshape(m,[-1,3]),N=await C.array();A.dispose(m),A.dispose(C);let k=this.transformRawCoords(N,p,d,b),z=this.getBoxForHandLandmarks(k);this.storedBoxes[y]={...z,confidence:h};let F={landmarks:k,confidence:h,boxConfidence:c.confidence,fingerConfidence:h,box:{topLeft:z.startPoint,bottomRight:z.endPoint}};i.push(F)}else this.storedBoxes[y]=null;A.dispose(m)}else{let d=j2(I2(c),T3),l={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:d.startPoint,bottomRight:d.endPoint},landmarks:[]};i.push(l)}}return this.storedBoxes=this.storedBoxes.filter(y=>y!==null),this.detectedHands=i.length,i.length>o.hand.maxDetected&&(i.length=o.hand.maxDetected),i}};var f0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>f0.nameMapping[e],getPoints:e=>f0.pointsMapping[e]},ne={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>ne.nameMapping[e]},J={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>J.nameMapping[e]},oe=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,o,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([o,n])}direction(t,o,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([o,n])}weight(t,o){this.weights[t]=o;let n=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,o){let n=0;for(let r in t){let s=t[r],a=this.curls[r];if(typeof a=="undefined"){n+=this.weightsRelative[r];continue}for(let[i,y]of a)if(s===i){n+=y*this.weightsRelative[r];break}}for(let r in o){let s=o[r],a=this.directions[r];if(typeof a=="undefined"){n+=this.weightsRelative[r];continue}for(let[i,y]of a)if(s===i){n+=y*this.weightsRelative[r];break}}return n/10}};var{thumb:C0,index:Z0,middle:X0,ring:pe,pinky:ue}=f0,{none:j0,half:Qr,full:I0}=ne,{verticalUp:Ce,verticalDown:h4,horizontalLeft:K5,horizontalRight:_r,diagonalUpRight:$r,diagonalUpLeft:je,diagonalDownRight:b4,diagonalDownLeft:g4}=J,re=new oe("thumbs up");re.curl(C0,j0,1);re.direction(C0,Ce,1);re.direction(C0,je,.25);re.direction(C0,$r,.25);for(let e of[f0.index,f0.middle,f0.ring,f0.pinky])re.curl(e,I0,1),re.direction(e,K5,1),re.direction(e,_r,1);var o0=new oe("victory");o0.curl(C0,Qr,.5);o0.curl(C0,j0,.5);o0.direction(C0,Ce,1);o0.direction(C0,je,1);o0.curl(Z0,j0,1);o0.direction(Z0,Ce,.75);o0.direction(Z0,je,1);o0.curl(X0,j0,1);o0.direction(X0,Ce,1);o0.direction(X0,je,.75);o0.curl(pe,I0,1);o0.direction(pe,Ce,.2);o0.direction(pe,je,1);o0.direction(pe,K5,.2);o0.curl(ue,I0,1);o0.direction(ue,Ce,.2);o0.direction(ue,je,1);o0.direction(ue,K5,.2);o0.weight(Z0,2);o0.weight(X0,2);var Ae=new oe("point");Ae.curl(C0,I0,1);Ae.curl(Z0,j0,.5);Ae.curl(X0,I0,.5);Ae.curl(pe,I0,.5);Ae.curl(ue,I0,.5);Ae.weight(Z0,2);Ae.weight(X0,2);var se=new oe("middle finger");se.curl(C0,j0,1);se.curl(Z0,I0,.5);se.curl(X0,I0,.5);se.curl(pe,I0,.5);se.curl(ue,I0,.5);se.weight(Z0,2);se.weight(X0,2);var Ie=new oe("open palm");Ie.curl(C0,j0,.75);Ie.curl(Z0,j0,.75);Ie.curl(X0,j0,.75);Ie.curl(pe,j0,.75);Ie.curl(ue,j0,.75);var E3=[re,o0,Ae,se,Ie];var eA=.7,he={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function z3(e,t,o,n){let r=(t-n)/(e-o),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function C3(e,t){if(!e||!t)return[0,0];let o=z3(e[0],e[1],t[0],t[1]);if(e.length===2)return o;let n=z3(e[1],e[2],t[1],t[2]);return[o,n]}function S3(e,t=1){let o=0,n=0,r=0;return e>=75&&e<=105?o=1*t:e>=25&&e<=155?n=1*t:r=1*t,[o,n,r]}function tA(e,t,o){let n=e[0]-t[0],r=e[0]-o[0],s=t[0]-o[0],a=e[1]-t[1],i=e[1]-o[1],y=t[1]-o[1],c=e[2]-t[2],d=e[2]-o[2],l=t[2]-o[2],f=Math.sqrt(n*n+a*a+c*c),x=Math.sqrt(r*r+i*i+d*d),b=Math.sqrt(s*s+y*y+l*l),p=(b*b+f*f-x*x)/(2*b*f);p>1?p=1:p<-1&&(p=-1);let v=Math.acos(p);v=57.2958*v%180;let P;return v>he.NO_CURL_START_LIMIT?P=ne.none:v>he.HALF_CURL_START_LIMIT?P=ne.half:P=ne.full,P}function j3(e,t,o,n){let r;return n===Math.abs(e)?e>0?r=J.horizontalLeft:r=J.horizontalRight:n===Math.abs(t)?t>0?r=J.horizontalLeft:r=J.horizontalRight:o>0?r=J.horizontalLeft:r=J.horizontalRight,r}function I3(e,t,o,n){let r;return n===Math.abs(e)?e<0?r=J.verticalDown:r=J.verticalUp:n===Math.abs(t)?t<0?r=J.verticalDown:r=J.verticalUp:o<0?r=J.verticalDown:r=J.verticalUp,r}function oA(e,t,o,n,r,s,a,i){let y,c=I3(e,t,o,n),d=j3(r,s,a,i);return c===J.verticalUp?d===J.horizontalLeft?y=J.diagonalUpLeft:y=J.diagonalUpRight:d===J.horizontalLeft?y=J.diagonalDownLeft:y=J.diagonalDownRight,y}function nA(e,t,o,n){let r=e[0]-t[0],s=e[0]-o[0],a=t[0]-o[0],i=e[1]-t[1],y=e[1]-o[1],c=t[1]-o[1],d=Math.max(Math.abs(r),Math.abs(s),Math.abs(a)),l=Math.max(Math.abs(i),Math.abs(y),Math.abs(c)),f=0,x=0,b=0,p=l/(d+1e-5);p>1.5?f+=he.DISTANCE_VOTE_POWER:p>.66?x+=he.DISTANCE_VOTE_POWER:b+=he.DISTANCE_VOTE_POWER;let v=Math.sqrt(r*r+i*i),P=Math.sqrt(s*s+y*y),M=Math.sqrt(a*a+c*c),m=Math.max(v,P,M),h=e[0],C=e[1],N=o[0],k=o[1];m===v?(N=o[0],k=o[1]):m===M&&(h=t[0],C=t[1]);let B=C3([h,C],[N,k]),L=S3(B,he.TOTAL_ANGLE_VOTE_POWER);f+=L[0],x+=L[1],b+=L[2];for(let Z of n){let S=S3(Z,he.SINGLE_ANGLE_VOTE_POWER);f+=S[0],x+=S[1],b+=S[2]}let K;return f===Math.max(f,x,b)?K=I3(y,i,c,l):b===Math.max(x,b)?K=j3(s,r,a,d):K=oA(y,i,c,l,s,r,a,d),K}function N3(e){let t=[],o=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of f0.all){let a=f0.getPoints(s),i=[],y=[];for(let c of a){let d=e[c[0]],l=e[c[1]],f=C3(d,l),x=f[0],b=f[1];i.push(x),y.push(b)}t.push(i),o.push(y)}for(let s of f0.all){let a=s===f0.thumb?1:0,i=f0.getPoints(s),y=e[i[a][0]],c=e[i[a+1][1]],d=e[i[3][1]],l=tA(y,c,d),f=nA(y,c,d,t[s].slice(a));n[s]=l,r[s]=f}return{curls:n,directions:r}}function L2(e){if(!e||e.length===0)return null;let t=N3(e),o={};for(let n of f0.all)o[f0.getName(n)]={curl:ne.getName(t.curls[n]),direction:J.getName(t.directions[n])};return o}function O3(e){let t=[];if(!e||e.length===0)return t;let o=N3(e);for(let n of E3){let r=n.matchAgainst(o.curls,o.directions);r>=eA&&t.push({name:n.name,confidence:r})}return t}var L3={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Ne,Oe,W3;async function Q5(e,t){let o=await W3.estimateHands(e,t);if(!o)return[];let n=[];for(let r=0;ro[r].landmarks[l]);let a=o[r].landmarks,i=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],y=[0,0,0,0];if(a&&a.length>0){for(let d of a)d[0]i[2]&&(i[2]=d[0]),d[1]>i[3]&&(i[3]=d[1]);i[2]-=i[0],i[3]-=i[1],y=[i[0]/(e.shape[2]||0),i[1]/(e.shape[1]||0),i[2]/(e.shape[2]||0),i[3]/(e.shape[1]||0)]}else i=o[r].box?[Math.trunc(Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.max(0,o[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,o[r].box.bottomRight[0])-Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,o[r].box.bottomRight[1])-Math.max(0,o[r].box.topLeft[1]))]:[0,0,0,0],y=[o[r].box.topLeft[0]/(e.shape[2]||0),o[r].box.topLeft[1]/(e.shape[1]||0),(o[r].box.bottomRight[0]-o[r].box.topLeft[0])/(e.shape[2]||0),(o[r].box.bottomRight[1]-o[r].box.topLeft[1])/(e.shape[1]||0)];let c=L2(a);n.push({id:r,score:Math.round(100*o[r].confidence)/100,boxScore:Math.round(100*o[r].boxConfidence)/100,fingerScore:Math.round(100*o[r].fingerConfidence)/100,label:"hand",box:i,boxRaw:y,keypoints:a,annotations:s,landmarks:c})}return n}async function _5(e){var o,n;T.initial&&(Ne=null,Oe=null),!Ne||!Oe?[Ne,Oe]=await Promise.all([e.hand.enabled?O((o=e.hand.detector)==null?void 0:o.modelPath):null,e.hand.landmarks?O((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&u("cached model:",Ne.modelUrl),e.debug&&u("cached model:",Oe.modelUrl));let t=new N2(Ne);return W3=new O2(t,Oe),[Ne,Oe]}var Y={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function rA(){let e=Y.gl;!e||(Y.extensions=e.getSupportedExtensions())}async function G3(e){var t;if(e.config.backend==="humangl"&&(Y.name in A.engine().registry&&(!Y.gl||!Y.gl.getParameter(Y.gl.VERSION))&&(u("error: humangl backend invalid context"),W2(e)),!A.findBackend(Y.name))){try{Y.canvas=await x0(100,100)}catch(n){u("error: cannot create canvas:",n);return}try{if(Y.gl=(t=Y.canvas)==null?void 0:t.getContext("webgl2",Y.webGLattr),!Y.gl.getParameter(Y.gl.VERSION).includes("2.0")){u("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}Y.canvas&&(Y.canvas.addEventListener("webglcontextlost",async r=>{throw u("error: humangl:",r.type),u("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),Y.canvas.addEventListener("webglcontextrestored",r=>{u("error: humangl context restored:",r)}),Y.canvas.addEventListener("webglcontextcreationerror",r=>{u("error: humangl context create:",r)}))}catch(n){u("error: cannot get WebGL context:",n);return}try{A.setWebGLContext(2,Y.gl)}catch(n){u("error: cannot set WebGL context:",n);return}try{let n=new A.GPGPUContext(Y.gl);A.registerBackend(Y.name,()=>new A.MathBackendWebGL(n),Y.priority)}catch(n){u("error: cannot register WebGL backend:",n);return}try{A.getKernelsForBackend("webgl").forEach(r=>{let s={...r,backendName:Y.name};A.registerKernel(s)})}catch(n){u("error: cannot update WebGL backend registration:",n);return}let o=A.backend().getGPGPUContext?A.backend().getGPGPUContext().gl:null;if(o)u(`humangl webgl version:${o.getParameter(o.VERSION)} renderer:${o.getParameter(o.RENDERER)}`);else{u("error: no current gl context:",o,Y.gl);return}try{A.env().flagRegistry.WEBGL_VERSION&&A.env().set("WEBGL_VERSION",2)}catch(n){u("error: cannot set WebGL backend flags:",n);return}rA(),u("backend registered:",Y.name)}}function AA(){if(!T.kernels.includes("mod")){let e={kernelName:"Mod",backendName:A.getBackend(),kernelFunc:t=>A.tidy(()=>A.sub(t.inputs.a,A.mul(A.div(t.inputs.a,t.inputs.b),t.inputs.b)))};A.registerKernel(e),T.kernels.push("mod")}if(!T.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:A.getBackend(),kernelFunc:t=>A.tidy(()=>A.floorDiv(t.inputs.a/t.inputs.b)*t.inputs.b+A.mod(t.inputs.a,t.inputs.b))};A.registerKernel(e),T.kernels.push("floormod")}}async function F2(e,t=!1){if(e.state="backend",t||T.initial||e.config.backend&&e.config.backend.length>0&&A.getBackend()!==e.config.backend){let o=g();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&u("running inside web worker"),T.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&u("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),T.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&u(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),T.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")u("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&u("enumerated webgpu adapter:",r),!r)u("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let s="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;u("webgpu adapter info:",s)}}e.config.backend==="humangl"&&await G3(e);let n=Object.keys(A.engine().registryFactory);if(e.config.debug&&u("available backends:",n),n.includes(e.config.backend)||(u(`error: backend ${e.config.backend} not found in registry`),e.config.backend=T.node?"tensorflow":"webgl",e.config.debug&&u(`override: setting backend ${e.config.backend}`)),e.config.debug&&u("setting backend:",e.config.backend),e.config.backend==="wasm"){if(A.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&A.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&u("wasm path:",e.config.wasmPath),typeof(A==null?void 0:A.setWasmPaths)!="undefined")await A.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,s=!1;try{r=await A.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),s=await A.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&u(`wasm execution: ${s?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!s&&u("warning: wasm simd support is not enabled")}catch(a){u("wasm detection failed")}}try{await A.setBackend(e.config.backend),await A.ready(),et()}catch(r){return u("error: cannot set backend:",e.config.backend,r),!1}}if(A.getBackend()==="humangl"&&(A.env().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&A.env().set("CHECK_COMPUTATION_FOR_ERRORS",!1),A.env().flagRegistry.WEBGL_CPU_FORWARD&&A.env().set("WEBGL_CPU_FORWARD",!0),A.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&A.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),A.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&A.env().set("CPU_HANDOFF_SIZE_THRESHOLD",256),A.env().flagRegistry.WEBGL_EXP_CONV&&A.env().set("WEBGL_EXP_CONV",!0),A.env().flagRegistry.USE_SETTIMEOUTCUSTOM&&A.env().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(u("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),A.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),A.backend().getGPGPUContext)){let n=await A.backend().getGPGPUContext().gl;e.config.debug&&u(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}A.getBackend(),A.enableProdMode(),await A.ready(),e.performance.initBackend=Math.trunc(g()-o),e.config.backend=A.getBackend(),await T.updateBackend(),AA()}return!0}function G2(e,t){for(let o of e){let n={kernelName:o,backendName:t.backend,kernelFunc:()=>{t.debug&&u("kernelFunc",o,t.backend)}};A.registerKernel(n)}T.kernels=A.getKernelsForBackend(A.getBackend()).map(o=>o.kernelName.toLowerCase())}var r0=[null,null],aA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],ae=[[0,0],[0,0]],iA=["hand","fist","pinch","point","face","tip","pinchtip"],H3=4,V3=1.6,lA=512,yA=1.4,B2=Number.MAX_SAFE_INTEGER,e1=0,q0=[0,0],$={boxes:[],hands:[]},D3={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Z3(e){var t;if(T.initial&&(r0[0]=null),r0[0])e.debug&&u("cached model:",r0[0].modelUrl);else{G2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),r0[0]=await O((t=e.hand.detector)==null?void 0:t.modelPath);let o=Object.values(r0[0].modelSignature.inputs);ae[0][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,ae[0][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return r0[0]}async function X3(e){var t;if(T.initial&&(r0[1]=null),r0[1])e.debug&&u("cached model:",r0[1].modelUrl);else{r0[1]=await O((t=e.hand.skeleton)==null?void 0:t.modelPath);let o=Object.values(r0[1].modelSignature.inputs);ae[1][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,ae[1][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return r0[1]}async function cA(e,t){let o=[];if(!e||!r0[0])return o;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,lA),a=Math.round(s*r/8)*8;n.resize=A.image.resizeBilinear(e,[s,a]),n.cast=A.cast(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await r0[0].executeAsync(n.cast,aA),n.boxes=A.squeeze(n.rawBoxes,[0,2]),n.scores=A.squeeze(n.rawScores,[0]);let i=A.unstack(n.scores,1);A.dispose(i[H3]),i.splice(H3,1),n.filtered=A.stack(i,1),A.dispose(i),n.max=A.max(n.filtered,1),n.argmax=A.argMax(n.filtered,1);let y=0;n.nms=await A.image.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await n.nms.data(),d=await n.max.data(),l=await n.argmax.data();for(let f of Array.from(c)){let x=A.slice(n.boxes,f,1),b=await x.data();A.dispose(x);let p=[b[1],b[0],b[3]-b[1],b[2]-b[0]],v=R2(p,yA),P=[Math.trunc(p[0]*q0[0]),Math.trunc(p[1]*q0[1]),Math.trunc(p[2]*q0[0]),Math.trunc(p[3]*q0[1])],M=d[f],m=iA[l[f]],h={id:y++,score:M,box:P,boxRaw:v,label:m};o.push(h)}return Object.keys(n).forEach(f=>A.dispose(n[f])),o.sort((f,x)=>x.score-f.score),o.length>(t.hand.maxDetected||1)&&(o.length=t.hand.maxDetected||1),o}async function t1(e,t,o){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&r0[1]&&o.hand.landmarks&&t.score>(o.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=A.image.cropAndResize(e,[s],[0],[ae[1][0],ae[1][1]],"bilinear"),r.div=A.div(r.crop,W.tf255),[r.score,r.keypoints]=r0[1].execute(r.div,["Identity_1","Identity"]);let a=(await r.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(a))))/100;if(i>=(o.hand.minConfidence||0)){n.fingerScore=i,r.reshaped=A.reshape(r.keypoints,[-1,3]);let d=(await r.reshaped.array()).map(l=>[l[0]/ae[1][1],l[1]/ae[1][0],l[2]||0]).map(l=>[l[0]*t.boxRaw[2],l[1]*t.boxRaw[3],l[2]||0]);n.keypoints=d.map(l=>[q0[0]*(l[0]+t.boxRaw[0]),q0[1]*(l[1]+t.boxRaw[1]),l[2]||0]),n.landmarks=L2(n.keypoints);for(let l of Object.keys(D3))n.annotations[l]=D3[l].map(f=>n.landmarks&&n.keypoints[f]?n.keypoints[f]:null)}Object.keys(r).forEach(y=>A.dispose(r[y]))}return n}async function o1(e,t){var r,s;if(!r0[0]||!r0[1]||!((r=r0[0])!=null&&r.inputs[0].shape)||!((s=r0[1])!=null&&s.inputs[0].shape))return[];q0=[e.shape[2]||0,e.shape[1]||0],B2++;let o=(t.hand.skipTime||0)>g()-e1,n=B2<(t.hand.skipFrames||0);return t.skipAllowed&&o&&n?$.hands:new Promise(async a=>{let i=3*(t.hand.skipTime||0)>g()-e1,y=B2<3*(t.hand.skipFrames||0);t.skipAllowed&&$.hands.length===t.hand.maxDetected?$.hands=await Promise.all($.boxes.map(d=>t1(e,d,t))):t.skipAllowed&&i&&y&&$.hands.length>0?$.hands=await Promise.all($.boxes.map(d=>t1(e,d,t))):($.boxes=await cA(e,t),e1=g(),$.hands=await Promise.all($.boxes.map(d=>t1(e,d,t))),B2=0);let c=[...$.boxes];if($.boxes.length=0,t.cacheSensitivity>0)for(let d=0;d<$.hands.length;d++){let l=zt($.hands[d].keypoints,q0);if(l.box[2]/(e.shape[2]||1)>.05&&l.box[3]/(e.shape[1]||1)>.05&&$.hands[d].fingerScore&&$.hands[d].fingerScore>(t.hand.minConfidence||0)){let f=R2(l.box,V3),x=R2(l.boxRaw,V3);$.boxes.push({...c[d],box:f,boxRaw:x})}}for(let d=0;d<$.hands.length;d++){let l=H0($.hands[d].keypoints,q0);$.hands[d].box=l.box,$.hands[d].boxRaw=l.boxRaw}a($.hands)})}var l0,H2=[],n1=Number.MAX_SAFE_INTEGER,U3=0,Y3=0;async function K3(e){var t;return T.initial&&(l0=null),l0?e.debug&&u("cached model:",l0.modelUrl):l0=await O((t=e.face.liveness)==null?void 0:t.modelPath),l0}async function r1(e,t,o,n){var a,i;if(!l0)return 0;let r=(((a=t.face.liveness)==null?void 0:a.skipTime)||0)>g()-Y3,s=n1<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&s&&U3===n&&H2[o]?(n1++,H2[o]):(n1=0,new Promise(async y=>{let c=A.image.resizeBilinear(e,[l0!=null&&l0.inputs[0].shape?l0.inputs[0].shape[2]:0,l0!=null&&l0.inputs[0].shape?l0.inputs[0].shape[1]:0],!1),d=l0==null?void 0:l0.execute(c),l=(await d.data())[0];H2[o]=Math.round(100*l)/100,U3=n,Y3=g(),A.dispose([c,d]),y(H2[o])}))}var r2={};K0(r2,{connected:()=>D2,horizontal:()=>A1,kpt:()=>V2,relative:()=>a1,vertical:()=>s1});var V2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],A1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],s1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],a1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],D2={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Q3=.005,M0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function i1(e){for(let t of A1){let o=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===o[0]),a=e.keypoints.findIndex(c=>c&&c.part===o[1]);if(!e.keypoints[s]||!e.keypoints[a])continue;let i=e.keypoints[n]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[a].position[0]-e.keypoints[n].position[0])]:[0,0],y=e.keypoints[r]?[Math.abs(e.keypoints[a].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(i[0]>i[1]||y[0]>y[1]){let c=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=c}}}function _3(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],o.pad=A.pad(e,M0.padding),o.resize=A.image.resizeBilinear(o.pad,[t,t]);let n=A.cast(o.resize,"int32");return Object.keys(o).forEach(r=>A.dispose(o[r])),n}function eo(e,t){e.keypoints=e.keypoints.filter(n=>n&&n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+M0.padding[2][0]+M0.padding[2][1])/t[0]-M0.padding[2][0],n.position[1]*(t[1]+M0.padding[1][0]+M0.padding[1][1])/t[1]-M0.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let o=H0(e.keypoints.map(n=>n.position),t);return e.box=o.box,e.boxRaw=o.boxRaw,e}var P0,Z2=0,l1=Number.MAX_SAFE_INTEGER,be={boxes:[],bodies:[],last:0};async function to(e){return T.initial&&(P0=null),P0?e.debug&&u("cached model:",P0.modelUrl):(G2(["size"],e),P0=await O(e.body.modelPath)),Z2=P0.inputs[0].shape?P0.inputs[0].shape[2]:0,Z2<64&&(Z2=256),P0}async function dA(e,t,o){let n=e[0][0],r=[],s=0;for(let d=0;dt.body.minConfidence){let l=[n[d][1],n[d][0]];r.push({score:Math.round(100*s)/100,part:V2[d],positionRaw:l,position:[Math.round((o.shape[2]||0)*l[0]),Math.round((o.shape[1]||0)*l[1])]})}s=r.reduce((d,l)=>l.score>d?l.score:d,0);let a=[],i=H0(r.map(d=>d.position),[o.shape[2],o.shape[1]]),y={};for(let[d,l]of Object.entries(D2)){let f=[];for(let x=0;xv.part===l[x]),p=r.find(v=>v.part===l[x+1]);b&&p&&b.score>(t.body.minConfidence||0)&&p.score>(t.body.minConfidence||0)&&f.push([b.position,p.position])}y[d]=f}let c={id:0,score:s,box:i.box,boxRaw:i.boxRaw,keypoints:r,annotations:y};return i1(c),a.push(c),a}async function fA(e,t,o){let n=[];for(let r=0;rt.body.minConfidence){let i=[];for(let l=0;l<17;l++){let f=s[3*l+2];if(f>t.body.minConfidence){let x=[s[3*l+1],s[3*l+0]];i.push({part:V2[l],score:Math.round(100*f)/100,positionRaw:x,position:[Math.round((o.shape[2]||0)*x[0]),Math.round((o.shape[1]||0)*x[1])]})}}let y=H0(i.map(l=>l.position),[o.shape[2],o.shape[1]]),c={};for(let[l,f]of Object.entries(D2)){let x=[];for(let b=0;bP.part===f[b]),v=i.find(P=>P.part===f[b+1]);p&&v&&p.score>(t.body.minConfidence||0)&&v.score>(t.body.minConfidence||0)&&x.push([p.position,v.position])}c[l]=x}let d={id:r,score:a,box:y.box,boxRaw:y.boxRaw,keypoints:[...i],annotations:c};i1(d),n.push(d)}}return n.sort((r,s)=>s.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function y1(e,t){if(!P0||!(P0!=null&&P0.inputs[0].shape))return[];t.skipAllowed||(be.boxes.length=0),l1++;let o=(t.body.skipTime||0)>g()-be.last,n=l1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n?be.bodies:new Promise(async r=>{let s={};l1=0,s.input=$3(e,Z2),s.res=P0==null?void 0:P0.execute(s.input),be.last=g();let a=await s.res.array();be.bodies=s.res.shape[2]===17?await dA(a,t,e):await fA(a,t,e);for(let i of be.bodies)eo(i,[e.shape[2]||1,e.shape[1]||1]),_3(i.keypoints);Object.keys(s).forEach(i=>A.dispose(s[i])),r(be.bodies)})}var Le,X2=[],no=0,c1=Number.MAX_SAFE_INTEGER,U2=0,q2=2.5;async function ro(e){if(!Le||T.initial){Le=await O(e.object.modelPath);let t=Object.values(Le.modelSignature.inputs);U2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&u("cached model:",Le.modelUrl);return Le}async function mA(e,t,o){let n=0,r=[];for(let y of[1,2,4]){let c=y*13,d=A.squeeze(e.find(v=>v.shape[1]===c**2&&(v.shape[2]||0)===Ee.length)),l=await d.array(),f=A.squeeze(e.find(v=>v.shape[1]===c**2&&(v.shape[2]||0)(o.object.minConfidence||0)&&P!==61){let m=(.5+Math.trunc(v%c))/c,h=(.5+Math.trunc(v/c))/c,C=p[v].map(Z=>Z*(c/y/U2)),[N,k]=[m-q2/y*C[0],h-q2/y*C[1]],[z,F]=[m+q2/y*C[2]-N,h+q2/y*C[3]-k],B=[N,k,z,F];B=B.map(Z=>Math.max(0,Math.min(Z,1)));let L=[B[0]*t[0],B[1]*t[1],B[2]*t[0],B[3]*t[1]],K={id:n++,score:Math.round(100*M)/100,class:P+1,label:Ee[P].label,box:L.map(Z=>Math.trunc(Z)),boxRaw:B};r.push(K)}}A.dispose([d,f,x,b])}let s=r.map(y=>[y.boxRaw[1],y.boxRaw[0],y.boxRaw[3],y.boxRaw[2]]),a=r.map(y=>y.score),i=[];if(s&&s.length>0){let y=await A.image.nonMaxSuppressionAsync(s,a,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence);i=await y.data(),A.dispose(y)}return r=r.filter((y,c)=>i.includes(c)).sort((y,c)=>c.score-y.score),r}async function x1(e,t){let o=(t.object.skipTime||0)>g()-no,n=c1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&X2.length>0?(c1++,X2):(c1=0,!T.kernels.includes("mod")||!T.kernels.includes("sparsetodense")?X2:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],a=A.image.resizeBilinear(e,[U2,U2],!1),i=A.div(a,W.tf255),y=A.transpose(i,[0,3,1,2]),c;t.object.enabled&&(c=Le.execute(y)),no=g();let d=await mA(c,s,t);X2=d,A.dispose([a,i,y,...c]),r(d)}))}var s2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],pA=s2.length,A2=s2.reduce((e,t,o)=>(e[t]=o,e),{}),uA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],U4=uA.map(([e,t])=>[A2[e],A2[t]]),so=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function ao(e){let t=e.reduce(({maxX:o,maxY:n,minX:r,minY:s},{position:{x:a,y:i}})=>({maxX:Math.max(o,a),maxY:Math.max(n,i),minX:Math.min(r,a),minY:Math.min(s,i)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function io(e,[t,o],[n,r]){let s=t/n,a=o/r,i=(c,d)=>({id:d,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/n,c.box[2]/r,c.box[3]/n],box:[Math.trunc(c.box[0]*a),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*a),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:l,part:f,position:x})=>({score:l,part:f,position:[Math.trunc(x.x*a),Math.trunc(x.y*s)],positionRaw:[x.x/n,x.y/n]})),annotations:{}});return e.map((c,d)=>i(c,d))}var Y2=class{constructor(t,o){w(this,"priorityQueue");w(this,"numberOfElements");w(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=o}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let o=2*t;if(oo?o:e}function lo(e,t,o,n){let r=o-e,s=n-t;return r*r+s*s}function p1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var N0,bA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],K2=1,We=16,gA=50**2;function yo(e,t,o,n,r,s,a=2){let i=P=>({y:s.get(P.y,P.x,e),x:s.get(P.y,P.x,s.shape[2]/2+e)}),y=(P,M,m)=>({y:m1(Math.round(P.y/We),0,M-1),x:m1(Math.round(P.x/We),0,m-1)}),[c,d]=n.shape,l=y(t.position,c,d),f=i(l),b=p1(t.position,f);for(let P=0;P[A2[f],A2[x]]),a=s.map(([,f])=>f),i=s.map(([f])=>f),y=t.shape[2],c=a.length,d=new Array(y),l=f1(e.part,We,o);d[e.part.id]={score:e.score,part:s2[e.part.id],position:l};for(let f=c-1;f>=0;--f){let x=a[f],b=i[f];d[x]&&!d[b]&&(d[b]=yo(f,d[x],b,t,o,r))}for(let f=0;ft){i=!1;break}if(!i)break}return i}function vA(e,t){let[o,n,r]=t.shape,s=new Y2(o*n*r,({score:a})=>a);for(let a=0;a{var a;let s=(a=r[n])==null?void 0:a.position;return s?lo(o,t,s.y,s.x)<=gA:!1})}function RA(e,t){return t.reduce((n,{position:r,score:s},a)=>(co(e,r,a)||(n+=s),n),0)/t.length}function TA(e,t,o,n,r,s){let a=[],i=vA(s,t);for(;a.lengthx.score>s);let l=RA(a,d),f=ao(d);l>s&&a.push({keypoints:d,box:f,score:Math.round(100*l)/100})}return a}async function u1(e,t){let o=A.tidy(()=>{if(!N0.inputs[0].shape)return[];let a=A.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]),i=A.sub(A.div(A.cast(a,"float32"),127.5),1),c=N0.execute(i,bA).map(d=>A.squeeze(d,[0]));return c[1]=A.sigmoid(c[1]),c}),n=await Promise.all(o.map(a=>a.buffer()));for(let a of o)A.dispose(a);let r=await TA(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return N0.inputs[0].shape?io(r,[e.shape[1],e.shape[2]],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]):[]}async function xo(e){return!N0||T.initial?N0=await O(e.body.modelPath):e.debug&&u("cached model:",N0.modelUrl),N0}var F0,h1=!1;async function b1(e){return!F0||T.initial?F0=await O(e.segmentation.modelPath):e.debug&&u("cached model:",F0.modelUrl),F0}async function mo(e,t,o){var p,v;if(h1)return{data:[],canvas:null,alpha:null};h1=!0,F0||await b1(o);let n=await Re(e,o),r=((p=n.tensor)==null?void 0:p.shape[2])||0,s=((v=n.tensor)==null?void 0:v.shape[1])||0;if(!n.tensor)return{data:[],canvas:null,alpha:null};let a={};a.resize=A.image.resizeBilinear(n.tensor,[F0.inputs[0].shape?F0.inputs[0].shape[1]:0,F0.inputs[0].shape?F0.inputs[0].shape[2]:0],!1),A.dispose(n.tensor),a.norm=A.div(a.resize,W.tf255),a.res=F0.execute(a.norm),a.squeeze=A.squeeze(a.res,0),a.squeeze.shape[2]===2?(a.softmax=A.softmax(a.squeeze),[a.bg,a.fg]=A.unstack(a.softmax,2),a.expand=A.expandDims(a.fg,2),a.pad=A.expandDims(a.expand,0),a.crop=A.image.cropAndResize(a.pad,[[0,0,.5,.5]],[0],[r,s]),a.data=A.squeeze(a.crop,0)):a.data=A.image.resizeBilinear(a.squeeze,[s,r]);let i=Array.from(await a.data.data());if(T.node&&!T.Canvas&&typeof ImageData=="undefined")return o.debug&&u("canvas support missing"),Object.keys(a).forEach(P=>A.dispose(a[P])),{data:i,canvas:null,alpha:null};let y=x0(r,s);A.browser&&await A.browser.toPixels(a.data,y);let c=y.getContext("2d");o.segmentation.blur&&o.segmentation.blur>0&&(c.filter=`blur(${o.segmentation.blur}px)`);let d=c.getImageData(0,0,r,s),l=x0(r,s),f=l.getContext("2d");n.canvas&&f.drawImage(n.canvas,0,0),f.globalCompositeOperation="darken",o.segmentation.blur&&o.segmentation.blur>0&&(f.filter=`blur(${o.segmentation.blur}px)`),f.drawImage(y,0,0),f.globalCompositeOperation="source-over",f.filter="none";let x=f.getImageData(0,0,r,s);for(let P=0;PA.dispose(a[P])),h1=!1,{data:i,canvas:l,alpha:y}}var a2=class{constructor(){w(this,"ssrnetage",null);w(this,"gear",null);w(this,"blazeposedetect",null);w(this,"blazepose",null);w(this,"centernet",null);w(this,"efficientpose",null);w(this,"mobilefacenet",null);w(this,"insightface",null);w(this,"emotion",null);w(this,"facedetect",null);w(this,"faceiris",null);w(this,"facemesh",null);w(this,"faceres",null);w(this,"ssrnetgender",null);w(this,"handpose",null);w(this,"handskeleton",null);w(this,"handtrack",null);w(this,"liveness",null);w(this,"movenet",null);w(this,"nanodet",null);w(this,"posenet",null);w(this,"segmentation",null);w(this,"antispoof",null)}},g1=e=>{let t=0,o=0,n=0;for(let s of Object.values(O0))t+=s.sizeFromManifest,o+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?o/n:0;return{numLoadedModels:Object.values(O0).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:o,totalSizeLoading:n,totalSizeEnabled:void 0,modelStats:Object.values(O0)}};function W2(e){for(let t of Object.keys(e.models))e.models[t]=null}async function M1(e){var t,o,n,r,s,a,i,y,c,d,l,f,x,b,p,v,P,M,m,h,C,N,k,z,F,B,L,K,Z,S,e0,v0;T.initial&&W2(e),e.config.hand.enabled&&(!e.models.handpose&&((o=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:o.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await _5(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(n=e.config.hand.detector)==null?void 0:n.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await _5(e.config))),e.config.body.enabled&&!e.models.blazepose&&((a=(s=e.config.body)==null?void 0:s.modelPath)==null?void 0:a.includes("blazepose"))&&(e.models.blazepose=Nt(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=It(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((y=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:y.includes("efficientpose"))&&(e.models.efficientpose=Bt(e.config)),e.config.body.enabled&&!e.models.movenet&&((d=(c=e.config.body)==null?void 0:c.modelPath)==null?void 0:d.includes("movenet"))&&(e.models.movenet=to(e.config)),e.config.body.enabled&&!e.models.posenet&&((f=(l=e.config.body)==null?void 0:l.modelPath)==null?void 0:f.includes("posenet"))&&(e.models.posenet=xo(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=Rt(e.config)),e.config.face.enabled&&((x=e.config.face.antispoof)==null?void 0:x.enabled)&&!e.models.antispoof&&(e.models.antispoof=ct(e.config)),e.config.face.enabled&&((b=e.config.face.liveness)==null?void 0:b.enabled)&&!e.models.liveness&&(e.models.liveness=K3(e.config)),e.config.face.enabled&&((p=e.config.face.description)==null?void 0:p.enabled)&&!e.models.faceres&&(e.models.faceres=p3(e.config)),e.config.face.enabled&&((v=e.config.face.emotion)==null?void 0:v.enabled)&&!e.models.emotion&&(e.models.emotion=Zt(e.config)),e.config.face.enabled&&((P=e.config.face.iris)==null?void 0:P.enabled)&&!((M=e.config.face.attention)!=null&&M.enabled)&&!e.models.faceiris&&(e.models.faceiris=A3(e.config)),e.config.face.enabled&&((m=e.config.face.mesh)==null?void 0:m.enabled)&&!e.models.facemesh&&(e.models.facemesh=c3(e.config)),e.config.face.enabled&&((h=e.config.face.gear)==null?void 0:h.enabled)&&!e.models.gear&&(e.models.gear=_1(e.config)),e.config.face.enabled&&((C=e.config.face.ssrnet)==null?void 0:C.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=nt(e.config)),e.config.face.enabled&&((N=e.config.face.ssrnet)==null?void 0:N.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=at(e.config)),e.config.face.enabled&&((k=e.config.face.mobilefacenet)==null?void 0:k.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=Kt(e.config)),e.config.face.enabled&&((z=e.config.face.insightface)==null?void 0:z.enabled)&&!e.models.insightface&&(e.models.insightface=e3(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((B=(F=e.config.hand.detector)==null?void 0:F.modelPath)==null?void 0:B.includes("handtrack"))&&(e.models.handtrack=Z3(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((K=(L=e.config.hand.detector)==null?void 0:L.modelPath)==null?void 0:K.includes("handtrack"))&&(e.models.handskeleton=X3(e.config)),e.config.object.enabled&&!e.models.centernet&&((S=(Z=e.config.object)==null?void 0:Z.modelPath)==null?void 0:S.includes("centernet"))&&(e.models.centernet=Wt(e.config)),e.config.object.enabled&&!e.models.nanodet&&((v0=(e0=e.config.object)==null?void 0:e0.modelPath)==null?void 0:v0.includes("nanodet"))&&(e.models.nanodet=ro(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=b1(e.config));for await(let R of Object.keys(e.models))e.models[R]&&typeof e.models[R]!="undefined"&&(e.models[R]=await e.models[R])}var T0;function Fe(e,t,o){if(e&&(T0=e),!t||(T0||u("instance not registred"),!T0.config.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],s=[],a=[],i=t.modelUrl,y=t.executor;if(y&&y.graph.nodes)for(let c of Object.values(y.graph.nodes)){let d=c.op.toLowerCase();s.includes(d)||s.push(d)}else!y&&T0.config.debug&&u("model signature not determined:",o);for(let c of s)!n.includes(c)&&!r.includes(c)&&!T0.env.kernels.includes(c)&&!T0.env.kernels.includes(c.replace("_",""))&&!T0.env.kernels.includes(c.replace("native",""))&&!T0.env.kernels.includes(c.replace("v2",""))&&a.push(c);return T0.config.debug&&a.length>0&&u("model validation failed:",o,a),a.length>0?{name:o,missing:a,ops:s,url:i}:null}function J2(e){T0=e;let t=[];for(let o of Object.keys(T0.models)){let n=T0.models[o];if(!n)continue;let r=Fe(T0,n,o);r&&t.push(r)}return t}var m0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},O0={};async function wA(e,t){return m0.debug&&u("load model fetch:",e,t),fetch(e,t)}function uo(e){m0.cacheModels=e.cacheModels,m0.verbose=e.debug,m0.modelBasePath=e.modelBasePath}async function O(e){var c,d,l;let t=B1(m0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let o=t.includes("/")?t.split("/"):t.split("\\"),n=o[o.length-1].replace(".json",""),r="indexeddb://"+n;O0[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:s5[n],inCache:!1},m0.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let s={};try{s=m0.cacheSupported&&m0.cacheModels?await A.io.listModels():{}}catch(f){m0.cacheSupported=!1}O0[n].inCache=m0.cacheSupported&&m0.cacheModels&&Object.keys(s).includes(r);let a=typeof fetch=="undefined"?{}:{fetchFunc:(f,x)=>wA(f,x)},i=new o5(O0[n].inCache?r:t,a),y=!1;try{i.findIOHandler(),m0.debug&&u("model load handler:",i.handler);let f=await i.handler.load();O0[n].sizeFromManifest=((c=f==null?void 0:f.weightData)==null?void 0:c.byteLength)||0,i.loadSync(f),O0[n].sizeLoadedWeights=((l=(d=i==null?void 0:i.artifacts)==null?void 0:d.weightData)==null?void 0:l.byteLength)||0,m0.verbose&&u("load model:",i.modelUrl,{bytes:O0[n].sizeLoadedWeights},m0),y=!0}catch(f){u("error loading model:",t,f)}if(y&&m0.cacheModels&&m0.cacheSupported&&!O0[n].inCache)try{let f=await i.save(r);u("model saved:",r,f)}catch(f){u("error saving model:",t,f)}return Fe(null,i,`${e}`),i}var P1="2.9.4";var bo={};K0(bo,{all:()=>E1,body:()=>Be,canvas:()=>k1,face:()=>Ge,gesture:()=>De,hand:()=>He,object:()=>Ve,options:()=>y0,person:()=>w1});var w0=e=>{if(!e)u("draw error: invalid canvas");else if(!e.getContext)u("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)u("draw error: cannot get canvas context");else return t}return null},ge=e=>Math.round(e*180/Math.PI),U0=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let o=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${t.alpha})`};function Y0(e,t,o,n,r){e.fillStyle=U0(n,r),e.beginPath(),e.arc(t,o,r.pointSize,0,2*Math.PI),e.fill()}function G0(e,t,o,n,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let a=(t+t+n)/2,i=(o+o+r)/2;e.ellipse(a,i,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,o),e.lineTo(t+n-s.roundRect,o),e.quadraticCurveTo(t+n,o,t+n,o+s.roundRect),e.lineTo(t+n,o+r-s.roundRect),e.quadraticCurveTo(t+n,o+r,t+n-s.roundRect,o+r),e.lineTo(t+s.roundRect,o+r),e.quadraticCurveTo(t,o+r,t,o+r-s.roundRect),e.lineTo(t,o+s.roundRect),e.quadraticCurveTo(t,o,t+s.roundRect,o),e.closePath();e.stroke()}function v1(e,t,o){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=U0(n[2]||0,o),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),o.fillPolygons&&(e.closePath(),e.fill())}}function ho(e,t,o){if(!(t.length<2)){if(e.lineWidth=o.lineWidth,!o.useCurves||t.length<=2){v1(e,t,o);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n0){let n=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);n.length>3&&(n.length=3),o.push(n.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&o.push(`roll: ${ge(e.rotation.angle.roll)}\xB0 yaw:${ge(e.rotation.angle.yaw)}\xB0 pitch:${ge(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&o.push(`gaze: ${ge(e.rotation.gaze.bearing)}\xB0`)),o.length===0&&o.push("face"),t.fillStyle=D.color;for(let n=o.length-1;n>=0;n--){let r=Math.max(e.box[0],0),s=n*D.lineHeight+e.box[1];D.shadowColor&&D.shadowColor!==""&&(t.fillStyle=D.shadowColor,t.fillText(o[n],r+5,s+16)),t.fillStyle=D.labelColor,t.fillText(o[n],r+4,s+15)}}}function SA(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=D.useDepth?"rgba(255, 200, 255, 0.3)":D.color,t.beginPath();let o=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,n=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),D.fillPolygons&&(t.fillStyle=D.useDepth?"rgba(255, 255, 200, 0.3)":D.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=D.useDepth?"rgba(255, 200, 255, 0.3)":D.color,t.beginPath();let o=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,n=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),D.fillPolygons&&(t.fillStyle=D.useDepth?"rgba(255, 255, 200, 0.3)":D.color,t.fill())}}function CA(e,t){var o;if(D.drawGaze&&((o=e.rotation)==null?void 0:o.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*ge(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*ge(e.rotation.angle.pitch)/90,s=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C ${n} ${e.box[1]}, diff --git a/dist/human.esm.js b/dist/human.esm.js index 3982d6dc..0e4af09d 100644 --- a/dist/human.esm.js +++ b/dist/human.esm.js @@ -84318,7 +84318,7 @@ async function loadModel(modelPath) { } // package.json -var version5 = "2.9.3"; +var version5 = "2.9.4"; // src/draw/draw.ts var draw_exports = {}; diff --git a/dist/human.js b/dist/human.js index f2904aff..4b738d69 100644 --- a/dist/human.js +++ b/dist/human.js @@ -6918,7 +6918,7 @@ return a / b;`,ele=` c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var hb=(e,t,n)=>{let s=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(s,(r,a)=>(n[a]=0,r))},fb=class{constructor(t,n,s){me(this,"uniform",{});me(this,"attribute",{});me(this,"gl");me(this,"id");me(this,"compile",(t,n)=>{let s=this.gl.createShader(n);return s?(this.gl.shaderSource(s,t),this.gl.compileShader(s),this.gl.getShaderParameter(s,this.gl.COMPILE_STATUS)?s:(oe(`filter: gl compile failed: ${this.gl.getShaderInfoLog(s)}`),null)):(oe("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),a=this.compile(s,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!a)){if(!this.id){oe("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,a),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){oe(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),hb(n,"attribute",this.attribute);for(let o in this.attribute)this.attribute[o]=this.gl.getAttribLocation(this.id,o);hb(n,"uniform",this.uniform),hb(s,"uniform",this.uniform);for(let o in this.uniform)this.uniform[o]=this.gl.getUniformLocation(this.id,o)}}};function CT(){let e=0,t=null,n=!1,s=-1,r=[null,null],a=[],o=null,i=null,l=ls(100,100),u={},c={INTERMEDIATE:1},p=l.getContext("webgl");if(!p){oe("filter: cannot get webgl context");return}this.gl=p;function d(x,A){if(!(x===l.width&&A===l.height)){if(l.width=x,l.height=A,!o){let b=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);o=p.createBuffer(),p.bindBuffer(p.ARRAY_BUFFER,o),p.bufferData(p.ARRAY_BUFFER,b,p.STATIC_DRAW),p.pixelStorei(p.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}p.viewport(0,0,l.width,l.height),r=[null,null]}}function h(x,A){let b=p.createFramebuffer();p.bindFramebuffer(p.FRAMEBUFFER,b);let w=p.createRenderbuffer();p.bindRenderbuffer(p.RENDERBUFFER,w);let S=p.createTexture();return p.bindTexture(p.TEXTURE_2D,S),p.texImage2D(p.TEXTURE_2D,0,p.RGBA,x,A,0,p.RGBA,p.UNSIGNED_BYTE,null),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,p.LINEAR),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,p.LINEAR),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,S,0),p.bindTexture(p.TEXTURE_2D,null),p.bindFramebuffer(p.FRAMEBUFFER,null),{fbo:b,texture:S}}function f(x){return r[x]=r[x]||h(l.width,l.height),r[x]}function m(x=0){if(!i)return;let A=null,b=null,w=!1;e===0?A=t:A=f(s).texture||null,e++,n&&!(x&c.INTERMEDIATE)?(b=null,w=e%2===0):(s=(s+1)%2,b=f(s).fbo||null),p.bindTexture(p.TEXTURE_2D,A),p.bindFramebuffer(p.FRAMEBUFFER,b),p.uniform1f(i.uniform.flipY,w?-1:1),p.drawArrays(p.TRIANGLES,0,6)}function g(x){if(u[x])return i=u[x],p.useProgram((i?i.id:null)||null),i;if(i=new fb(p,bT,x),!i)return oe("filter: could not get webgl program"),null;let A=Float32Array.BYTES_PER_ELEMENT,b=4*A;return p.enableVertexAttribArray(i.attribute.pos),p.vertexAttribPointer(i.attribute.pos,2,p.FLOAT,!1,b,0*A),p.enableVertexAttribArray(i.attribute.uv),p.vertexAttribPointer(i.attribute.uv,2,p.FLOAT,!1,b,2*A),u[x]=i,i}let y={colorMatrix:x=>{let A=new Float32Array(x);A[4]/=255,A[9]/=255,A[14]/=255,A[19]/=255;let b=A[18]===1&&A[3]===0&&A[8]===0&&A[13]===0&&A[15]===0&&A[16]===0&&A[17]===0&&A[19]===0?wT:vT,w=g(b);!w||(p.uniform1fv(w.uniform.m,A),m())},brightness:x=>{let A=(x||0)+1;y.colorMatrix([A,0,0,0,0,0,A,0,0,0,0,0,A,0,0,0,0,0,1,0])},saturation:x=>{let A=(x||0)*2/3+1,b=(A-1)*-.5;y.colorMatrix([A,b,b,0,0,b,A,b,0,0,b,b,A,0,0,0,0,0,1,0])},desaturate:()=>{y.saturation(-1)},contrast:x=>{let A=(x||0)+1,b=-128*(A-1);y.colorMatrix([A,0,0,0,b,0,A,0,0,b,0,0,A,0,b,0,0,0,1,0])},negative:()=>{y.contrast(-2)},hue:x=>{x=(x||0)/180*Math.PI;let A=Math.cos(x),b=Math.sin(x),w=.213,S=.715,I=.072;y.colorMatrix([w+A*(1-w)+b*-w,S+A*-S+b*-S,I+A*-I+b*(1-I),0,0,w+A*-w+b*.143,S+A*(1-S)+b*.14,I+A*-I+b*-.283,0,0,w+A*-w+b*-(1-w),S+A*-S+b*S,I+A*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{y.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{y.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{y.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{y.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{y.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{y.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{y.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{y.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:x=>{let A=new Float32Array(x),b=1/l.width,w=1/l.height,S=g(ST);!S||(p.uniform1fv(S.uniform.m,A),p.uniform2f(S.uniform.px,b,w),m())},detectEdges:()=>{y.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{y.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{y.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:x=>{let A=x||1;y.convolution.call(this,[0,-1*A,0,-1*A,1+4*A,-1*A,0,-1*A,0])},emboss:x=>{let A=x||1;y.convolution.call(this,[-2*A,-1*A,0,-1*A,1,1*A,0,1*A,2*A])},blur:x=>{let A=x/7/l.width,b=x/7/l.height,w=g(IT);!w||(p.uniform2f(w.uniform.px,0,b),m(c.INTERMEDIATE),p.uniform2f(w.uniform.px,A,0),m())},pixelate:x=>{let A=x/l.width,b=x/l.height,w=g(kT);!w||(p.uniform2f(w.uniform.size,A,b),m())}};this.add=function(x){let A=Array.prototype.slice.call(arguments,1),b=y[x];a.push({func:b,args:A})},this.reset=function(){a=[]},this.get=function(){return a},this.apply=function(x){d(x.width,x.height),e=0,t||(t=p.createTexture()),p.bindTexture(p.TEXTURE_2D,t),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,p.NEAREST),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,p.NEAREST),p.texImage2D(p.TEXTURE_2D,0,p.RGBA,p.RGBA,p.UNSIGNED_BYTE,x);for(let A=0;Ah.data())),o=.99*Math.max(a[0][0],a[1][0],a[2][0]),i=[fe(n[0],s[0]),fe(n[1],s[1]),fe(n[2],s[2])],l=[fe(r[0],s[0]),fe(r[1],s[1]),fe(r[2],s[2])],u=[he(o,l[0]),he(o,l[1]),he(o,l[2])],c=[L(i[0],u[0]),L(i[1],u[1]),L(i[2],u[2])],p=on([c[0],c[1],c[2]],2),d=G(p,[1,t.shape[0],t.shape[1],3]);return ee([...n,...s,...r,...i,...l,...u,...c,p,t]),d}var P2=3840,mt=null,cn=null,gd=null,$t,Na={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function ls(e,t){let n;if(pe.browser)if(pe.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");n=document.createElement("canvas"),n.width=e,n.height=t}else typeof pe.Canvas!="undefined"?n=new pe.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function F2(e,t){let n=t||ls(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function yd(e,t,n=!0){if(!e)return t.debug&&oe("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof nt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof pe.Canvas!="undefined"&&e instanceof pe.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof nt){let s=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)s=Kt(e,0);else if(e.shape[2]===4){let r=di(e,[0,0,0],[-1,-1,3]);s=Kt(r,0),ee(r)}}else e.shape.length===4&&(e.shape[3]===3?s=On(e):e.shape[3]===4&&(s=so(e,[0,0,0,0],[-1,-1,-1,3])));if(s==null||s.shape.length!==4||s.shape[0]!==1||s.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(s.dtype==="int32"){let r=ye(s,"float32");ee(s),s=r}return{tensor:s,canvas:t.filter.return?cn:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&oe("input stream is not ready"),{tensor:null,canvas:mt};let s=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!s||!r)return t.debug&&oe("cannot determine input dimensions"),{tensor:null,canvas:mt};let a=s,o=r;if(a>P2&&(a=P2,o=Math.trunc(a*r/s)),o>P2&&(o=P2,a=Math.trunc(o*s/r)),(t.filter.width||0)>0?a=t.filter.width:(t.filter.height||0)>0&&(a=s*((t.filter.height||0)/r)),(t.filter.height||0)>0?o=t.filter.height:(t.filter.width||0)>0&&(o=r*((t.filter.width||0)/s)),!a||!o)throw new Error("input error: cannot determine dimension");(!mt||(mt==null?void 0:mt.width)!==a||(mt==null?void 0:mt.height)!==o)&&(mt=ls(a,o));let i=mt.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?i.putImageData(e,0,0):t.filter.flip&&typeof i.translate!="undefined"?(i.translate(s,0),i.scale(-1,1),i.drawImage(e,0,0,s,r,0,0,mt==null?void 0:mt.width,mt==null?void 0:mt.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,s,r,0,0,mt==null?void 0:mt.width,mt==null?void 0:mt.height),(!cn||mt.width!==cn.width||(mt==null?void 0:mt.height)!==(cn==null?void 0:cn.height))&&(cn=ls(mt.width,mt.height)),t.filter.enabled&&pe.webgl.supported?($t||($t=pe.browser?new CT:null),pe.filter=!!$t,!$t||!$t.add?(t.debug&&oe("input process error: cannot initialize filters"),pe.webgl.supported=!1,t.filter.enabled=!1,F2(mt,cn)):($t.reset(),t.filter.brightness!==0&&$t.add("brightness",t.filter.brightness),t.filter.contrast!==0&&$t.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&$t.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&$t.add("blur",t.filter.blur),t.filter.saturation!==0&&$t.add("saturation",t.filter.saturation),t.filter.hue!==0&&$t.add("hue",t.filter.hue),t.filter.negative&&$t.add("negative"),t.filter.sepia&&$t.add("sepia"),t.filter.vintage&&$t.add("brownie"),t.filter.sepia&&$t.add("sepia"),t.filter.kodachrome&&$t.add("kodachrome"),t.filter.technicolor&&$t.add("technicolor"),t.filter.polaroid&&$t.add("polaroid"),t.filter.pixelate!==0&&$t.add("pixelate",t.filter.pixelate),$t.get()>0?cn=$t.apply(mt):cn=$t.draw(mt))):(F2(mt,cn),$t&&($t=null),pe.filter=!!$t),!n)return{tensor:null,canvas:cn};if(!cn)throw new Error("canvas error: cannot create output");let l,u=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(pe.browser&&Js)l=Js?Js.fromPixels(e):null;else{u=e.data.length/e.height/e.width;let d=new Uint8Array(e.data.buffer);l=ct(d,[e.height,e.width,u],"int32")}else if((!gd||cn.width!==gd.width||cn.height!==gd.height)&&(gd=ls(cn.width,cn.height)),Js&&pe.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Js.fromPixels(cn):(gd=F2(cn),l=Js.fromPixels(gd));else{let f=F2(cn).getContext("2d").getImageData(0,0,a,o);u=f.data.length/a/o;let m=new Uint8Array(f.data.buffer);l=ct(m,[a,o,u])}if(u===4){let d=di(l,[0,0,0],[-1,-1,3]);ee(l),l=d}if(!l)throw new Error("input error: cannot create tensor");let c=ye(l,"float32"),p=t.filter.equalization?await $2(c):Kt(c,0);return ee([l,c]),{tensor:p,canvas:t.filter.return?cn:null}}}async function TT(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return n;if(!Na.inputTensor)Na.inputTensor=On(t);else if(Na.inputTensor.shape[1]!==t.shape[1]||Na.inputTensor.shape[2]!==t.shape[2])ee(Na.inputTensor),Na.inputTensor=On(t);else{let s={};s.diff=fe(t,Na.inputTensor),s.squared=L(s.diff,s.diff),s.sum=ke(s.squared);let a=(await s.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;ee([Na.inputTensor,s.diff,s.squared,s.sum]),Na.inputTensor=On(t),n=a<=(e.cacheSensitivity||0)}return n}async function NT(e,t,n){let s={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||oe("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||oe("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;s.input1=On(t),s.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?Se.resizeBilinear(n,[t.shape[1],t.shape[2]]):On(n),s.diff=fe(s.input1,s.input2),s.squared=L(s.diff,s.diff),s.sum=ke(s.squared);let a=(await s.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return ee([s.input1,s.input2,s.diff,s.squared,s.sum]),a}var mb=class{constructor(){me(this,"browser");me(this,"node");me(this,"worker");me(this,"platform","");me(this,"agent","");me(this,"backends",[]);me(this,"initial");me(this,"filter");me(this,"tfjs");me(this,"offscreen");me(this,"perfadd",!1);me(this,"tensorflow",{version:void 0,gpu:void 0});me(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});me(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});me(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});me(this,"cpu",{model:void 0,flags:[]});me(this,"kernels",[]);me(this,"Canvas");me(this,"Image");me(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Hh["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let n=t[0].match(/\(([^()]+)\)/g);this.platform=n&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(sn().registryFactory),this.tensorflow={version:Bn().binding?Bn().binding.TF_Version:void 0,gpu:Bn().binding?Bn().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&Ln()==="wasm"&&(this.wasm.simd=X().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=X().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=ls(100,100),n=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(Ln()==="webgl"||Ln()==="humangl")){let s=Bn().gpgpu!=="undefined"?await Bn().getGPGPUContext().gl:null;s&&(this.webgl.version=s.getParameter(s.VERSION),this.webgl.renderer=s.getParameter(s.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(s){this.webgpu.supported=!1}try{this.kernels=Xr(Ln()).map(s=>s.kernelName.toLowerCase())}catch(s){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},pe=new mb;var gb={};la(gb,{age:()=>cAe,"anti-spoofing":()=>WAe,antispoof:()=>Yye,blazeface:()=>Jye,"blazeface-back":()=>dAe,"blazeface-front":()=>pAe,"blazepose-detect":()=>BAe,"blazepose-detector2d":()=>hAe,"blazepose-detector3d":()=>fAe,"blazepose-full":()=>mAe,"blazepose-heavy":()=>gAe,"blazepose-lite":()=>yAe,default:()=>e5e,efficientpose:()=>AAe,"efficientpose-i-lite":()=>VAe,"efficientpose-ii-lite":()=>UAe,"efficientpose-iv":()=>GAe,emotion:()=>Qye,faceboxes:()=>xAe,facemesh:()=>eAe,"facemesh-attention":()=>vAe,"facemesh-attention-alt":()=>bAe,"facemesh-detection-full":()=>wAe,"facemesh-detection-short":()=>kAe,"facemesh-orig":()=>IAe,faceres:()=>tAe,"faceres-deep":()=>SAe,gear:()=>CAe,gender:()=>NAe,"gender-ssrnet-imdb":()=>TAe,handdetect:()=>EAe,"handlandmark-full":()=>nAe,"handlandmark-lite":()=>RAe,"handlandmark-sparse":()=>_Ae,handskeleton:()=>DAe,handtrack:()=>sAe,"insightface-efficientnet-b0":()=>HAe,"insightface-ghostnet-strides1":()=>jAe,"insightface-ghostnet-strides2":()=>qAe,"insightface-mobilenet-emore":()=>XAe,"insightface-mobilenet-swish":()=>KAe,iris:()=>rAe,liveness:()=>aAe,"mb3-centernet":()=>oAe,meet:()=>$Ae,mobileface:()=>PAe,mobilefacenet:()=>FAe,models:()=>iAe,"movenet-lightning":()=>lAe,"movenet-multipose":()=>OAe,"movenet-thunder":()=>MAe,nanodet:()=>zAe,"nanodet-e":()=>ZAe,"nanodet-g":()=>YAe,"nanodet-m":()=>JAe,"nanodet-t":()=>QAe,posenet:()=>LAe,selfie:()=>uAe});var Yye=853098,Jye=538928,Qye=820516,eAe=1477958,tAe=6978814,nAe=5431368,sAe=2964837,rAe=2599092,aAe=592976,oAe=4030290,iAe=0,lAe=4650216,uAe=212886,cAe=161240,dAe=538928,pAe=402048,hAe=7499400,fAe=5928856,mAe=6338290,gAe=27501554,yAe=2725490,AAe=5651240,xAe=2013002,bAe=2387598,vAe=2382414,wAe=1026192,kAe=201268,IAe=2955780,SAe=13957620,CAe=1498916,TAe=161236,NAe=201808,EAe=3515612,RAe=2023432,_Ae=5286322,DAe=5502280,$Ae=372228,PAe=2183192,FAe=5171976,OAe=9448838,MAe=12477112,zAe=7574558,LAe=5032780,BAe=5928804,WAe=853098,VAe=2269064,UAe=5651240,GAe=25643252,HAe=13013224,jAe=8093408,qAe=8049584,XAe=6938536,KAe=12168584,ZAe=12319156,YAe=7574558,JAe=1887474,QAe=5294216,e5e={antispoof:Yye,blazeface:Jye,emotion:Qye,facemesh:eAe,faceres:tAe,"handlandmark-full":nAe,handtrack:sAe,iris:rAe,liveness:aAe,"mb3-centernet":oAe,models:iAe,"movenet-lightning":lAe,selfie:uAe,age:cAe,"blazeface-back":dAe,"blazeface-front":pAe,"blazepose-detector2d":hAe,"blazepose-detector3d":fAe,"blazepose-full":mAe,"blazepose-heavy":gAe,"blazepose-lite":yAe,efficientpose:AAe,faceboxes:xAe,"facemesh-attention-alt":bAe,"facemesh-attention":vAe,"facemesh-detection-full":wAe,"facemesh-detection-short":kAe,"facemesh-orig":IAe,"faceres-deep":SAe,gear:CAe,"gender-ssrnet-imdb":TAe,gender:NAe,handdetect:EAe,"handlandmark-lite":RAe,"handlandmark-sparse":_Ae,handskeleton:DAe,meet:$Ae,mobileface:PAe,mobilefacenet:FAe,"movenet-multipose":OAe,"movenet-thunder":MAe,nanodet:zAe,posenet:LAe,"blazepose-detect":BAe,"anti-spoofing":WAe,"efficientpose-i-lite":VAe,"efficientpose-ii-lite":UAe,"efficientpose-iv":GAe,"insightface-efficientnet-b0":HAe,"insightface-ghostnet-strides1":jAe,"insightface-ghostnet-strides2":qAe,"insightface-mobilenet-emore":XAe,"insightface-mobilenet-swish":KAe,"nanodet-e":ZAe,"nanodet-g":YAe,"nanodet-m":JAe,"nanodet-t":QAe};var o1={};la(o1,{Models:()=>tf,getModelStats:()=>E4,load:()=>R4,reset:()=>a1,validate:()=>x1,validateModel:()=>_d});var gr,yb=[],t5e=["white","black","asian","indian","other"],n5e=[15,23,28,35.5,45.5,55.5,65],ET=0,RT=0,Ab=Number.MAX_SAFE_INTEGER;async function _T(e){var t;return pe.initial&&(gr=null),gr?e.debug&&oe("cached model:",gr.modelUrl):gr=await He((t=e.face.gear)==null?void 0:t.modelPath),gr}async function xb(e,t,n,s){var o,i;if(!gr)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=Ab<(((o=t.face.gear)==null?void 0:o.skipFrames)||0),a=(((i=t.face.gear)==null?void 0:i.skipTime)||0)>ue()-RT;return t.skipAllowed&&a&&r&&ET===s&&yb[n]?(Ab++,yb[n]):(Ab=0,new Promise(async l=>{var y,x;if(!(gr!=null&&gr.inputs[0].shape))return;let u={},c=[[0,.1,.9,.9]];u.resize=Se.cropAndResize(e,c,[0],[gr.inputs[0].shape[2],gr.inputs[0].shape[1]]);let p={age:0,gender:"unknown",genderScore:0,race:[]};(y=t.face.gear)!=null&&y.enabled&&([u.age,u.gender,u.race]=gr.execute(u.resize,["age_output","gender_output","race_output"]));let d=await u.gender.data();p.gender=d[0]>d[1]?"male":"female",p.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let h=await u.race.data();for(let A=0;A(((x=t.face.gear)==null?void 0:x.minConfidence)||.2)&&p.race.push({score:Math.round(100*h[A])/100,race:t5e[A]});p.race.sort((A,b)=>b.score-A.score);let m=Array.from(await u.age.data()).map((A,b)=>[n5e[b],A]).sort((A,b)=>b[1]-A[1]),g=m[0][0];for(let A=1;Aee(u[A])),yb[n]=p,ET=s,RT=ue(),l(p)}))}var rt={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function $T(){rt.tf255=Ce(255,"float32"),rt.tf1=Ce(1,"float32"),rt.tf2=Ce(2,"float32"),rt.tf05=Ce(.5,"float32"),rt.tf127=Ce(127.5,"float32"),rt.rgb=Ft([.2989,.587,.114],"float32")}var Ms,O2=[],PT=0,FT=0,bb=Number.MAX_SAFE_INTEGER;async function OT(e){return pe.initial&&(Ms=null),Ms?e.debug&&oe("cached model:",Ms.modelUrl):Ms=await He(e.face.ssrnet.modelPathAge),Ms}async function vb(e,t,n,s){var o,i,l,u;if(!Ms)return{age:0};let r=bb<(((o=t.face.ssrnet)==null?void 0:o.skipFrames)||0),a=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>ue()-FT;return t.skipAllowed&&r&&a&&PT===s&&((l=O2[n])==null?void 0:l.age)&&((u=O2[n])==null?void 0:u.age)>0?(bb++,O2[n]):(bb=0,new Promise(async c=>{if(!(Ms!=null&&Ms.inputs)||!Ms.inputs[0]||!Ms.inputs[0].shape)return;let p={};p.resize=Se.resizeBilinear(e,[Ms.inputs[0].shape[2],Ms.inputs[0].shape[1]],!1),p.enhance=L(p.resize,rt.tf255);let d={age:0};if(t.face.ssrnet.enabled&&(p.age=Ms.execute(p.enhance)),p.age){let h=await p.age.data();d.age=Math.trunc(10*h[0])/10}Object.keys(p).forEach(h=>ee(p[h])),O2[n]=d,PT=s,FT=ue(),c(d)}))}var yr,M2=[],zT=0,LT=0,wb=Number.MAX_SAFE_INTEGER,kb=[.2989,.587,.114];async function BT(e){return pe.initial&&(yr=null),yr?e.debug&&oe("cached model:",yr.modelUrl):yr=await He(e.face.ssrnet.modelPathGender),yr}async function Ib(e,t,n,s){var o,i,l,u;if(!yr)return{gender:"unknown",genderScore:0};let r=wb<(((o=t.face.ssrnet)==null?void 0:o.skipFrames)||0),a=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>ue()-LT;return t.skipAllowed&&r&&a&&zT===s&&((l=M2[n])==null?void 0:l.gender)&&((u=M2[n])==null?void 0:u.genderScore)>0?(wb++,M2[n]):(wb=0,new Promise(async c=>{if(!(yr!=null&&yr.inputs[0].shape))return;let p={};p.resize=Se.resizeBilinear(e,[yr.inputs[0].shape[2],yr.inputs[0].shape[1]],!1),p.enhance=Y(()=>{let[f,m,g]=Zt(p.resize,3,3),y=L(f,kb[0]),x=L(m,kb[1]),A=L(g,kb[2]),b=y0([y,x,A]);return L(fe(b,rt.tf05),2)});let d={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(p.gender=yr.execute(p.enhance));let h=await p.gender.data();d.gender=h[0]>h[1]?"female":"male",d.genderScore=h[0]>h[1]?Math.trunc(100*h[0])/100:Math.trunc(100*h[1])/100,Object.keys(p).forEach(f=>ee(p[f])),M2[n]=d,zT=s,LT=ue(),c(d)}))}var Wn,z2=[],Sb=Number.MAX_SAFE_INTEGER,VT=0,UT=0;async function GT(e){var t;return pe.initial&&(Wn=null),Wn?e.debug&&oe("cached model:",Wn.modelUrl):Wn=await He((t=e.face.antispoof)==null?void 0:t.modelPath),Wn}async function Cb(e,t,n,s){var o,i;if(!Wn)return 0;let r=(((o=t.face.antispoof)==null?void 0:o.skipTime)||0)>ue()-UT,a=Sb<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&a&&VT===s&&z2[n]?(Sb++,z2[n]):(Sb=0,new Promise(async l=>{let u=Se.resizeBilinear(e,[Wn!=null&&Wn.inputs[0].shape?Wn.inputs[0].shape[2]:0,Wn!=null&&Wn.inputs[0].shape?Wn.inputs[0].shape[1]:0],!1),c=Wn==null?void 0:Wn.execute(u),p=(await c.data())[0];z2[n]=Math.round(100*p)/100,VT=s,UT=ue(),ee([u,c]),l(z2[n])}))}var Ar={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},Tb={count:468,mouth:13,symmetryLine:[13,Ar.midwayBetweenEyes[0]]},lu={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},Nb=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],qh=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],uu=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var r5e=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],a5e=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],o5e=[33,133,362,263,1,78,308],uke=r5e.map(e=>qh[e]),cke=a5e.map(e=>qh[e]),dke=o5e.map(e=>qh[e]);function mi(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var i5e=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],l5e=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],u5e=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],c5e=[[474,475],[475,476],[476,477],[477,474]],d5e=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],p5e=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],h5e=[[469,470],[470,471],[471,472],[472,469]],f5e=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],pke={lips:mi(i5e),leftEye:mi(l5e),leftEyebrow:mi(u5e),leftIris:mi(c5e),rightEye:mi(d5e),rightEyebrow:mi(p5e),rightIris:mi(h5e),faceOval:mi(f5e)};var Ad=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],L2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],B2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],W2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],XT=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],s=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:s,landmarks:e.landmarks,confidence:e.confidence}},Rb=(e,t,n)=>{let s=t.shape[1],r=t.shape[2],a=[e.startPoint[1]/s,e.startPoint[0]/r,e.endPoint[1]/s,e.endPoint[0]/r],o=Se.cropAndResize(t,[a],[0],n),i=he(o,rt.tf255);return ee(o),i},V2=(e,t)=>{let n=L2(e),s=Ad(e),r=[t*s[0]/2,t*s[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},U2=e=>{let t=L2(e),n=Ad(e),s=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-s),Math.round(t[1]-s)],endPoint:[Math.round(t[0]+s),Math.round(t[1]+s)],landmarks:e.landmarks,confidence:e.confidence}},KT=e=>{let t=e.map(s=>s[0]),n=e.map(s=>s[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},_b=[[1,0,0],[0,1,0],[0,0,1]],m5e=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),g5e=(e,t)=>m5e(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var jT=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],cu=(e,t)=>{let n=0;for(let s=0;s{let n=[];for(let s=0;s{let n=[],s=e.length;for(let r=0;r{let n=Math.cos(e),s=Math.sin(e),r=[[n,-s,0],[s,n,0],[0,0,1]],a=jT(t[0],t[1]),o=qT(a,r),i=jT(-t[0],-t[1]);return qT(o,i)},A5e=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],s=[-cu(t[0],n),-cu(t[1],n)];return[t[0].concat(s[0]),t[1].concat(s[1]),[0,0,1]]},x5e=(e,t)=>[cu(e,t[0]),cu(e,t[1])];function YT(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let s=0;s[a[0]/r*(h[0]-r/2),a[1]/r*(h[1]-r/2),h[2]||0]),i=n&&n!==0&&Math.abs(n)>.2,l=i?ZT(n,[0,0]):_b,u=i?o.map(h=>[...x5e(h,l),h[2]]):o,c=i?A5e(s):_b,p=L2(t),d=[cu(p,c[0]),cu(p,c[1])];return u.map(h=>[Math.trunc(h[0]+d[0]),Math.trunc(h[1]+d[1]),Math.trunc(h[2]||0)])}function QT(e,t,n,s){let r=t.landmarks.length>=Tb.count?Tb.symmetryLine:lu.symmetryLine,a=0,o=_b,i;if(e&&pe.kernels.includes("rotatewithoffset"))if(a=g5e(t.landmarks[r[0]],t.landmarks[r[1]]),a&&a!==0&&Math.abs(a)>.2){let u=L2(t),c=[u[0]/n.shape[2],u[1]/n.shape[1]],p=Se.rotateWithOffset(n,a,0,c);o=ZT(-a,u),i=Rb(t,p,[s,s]),ee(p)}else i=Rb(t,n,[s,s]);else i=Rb(t,n,[s,s]);return[a,o,i]}var b5e=e=>{let t=e.map(s=>s[0]),n=e.map(s=>s[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},eN=(e,t)=>{let n=b5e(e),s=Ad(t);return{startPoint:[n[0]-s[0]/2,n[1]-s[1]/2],endPoint:[n[0]+s[0]/2,n[1]+s[1]/2]}};var tN=6,v5e=1.4,ta,nN=null,gi=0,Xh=null,xd=()=>gi;async function sN(e){var t;return pe.initial&&(ta=null),ta?e.debug&&oe("cached model:",ta.modelUrl):ta=await He((t=e.face.detector)==null?void 0:t.modelPath),gi=ta.inputs[0].shape?ta.inputs[0].shape[2]:0,Xh=Ce(gi,"int32"),nN=lr(YT(gi)),ta}function w5e(e){let t={};t.boxStarts=Me(e,[0,1],[-1,2]),t.centers=ce(t.boxStarts,nN),t.boxSizes=Me(e,[0,3],[-1,2]),t.boxSizesNormalized=he(t.boxSizes,Xh),t.centersNormalized=he(t.centers,Xh),t.halfBoxSize=he(t.boxSizesNormalized,rt.tf2),t.starts=fe(t.centersNormalized,t.halfBoxSize),t.ends=ce(t.centersNormalized,t.halfBoxSize),t.startNormalized=L(t.starts,Xh),t.endNormalized=L(t.ends,Xh);let n=Zl([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(s=>ee(t[s])),n}async function rN(e,t){var i,l,u,c;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=Se.resizeBilinear(e,[gi,gi]),n.div=he(n.resized,rt.tf127),n.normalized=fe(n.div,rt.tf05);let s=ta==null?void 0:ta.execute(n.normalized);if(Array.isArray(s)&&s.length>2){let p=s.sort((d,h)=>d.size-h.size);n.concat384=Ct([p[0],p[2]],2),n.concat512=Ct([p[1],p[3]],2),n.concat=Ct([n.concat512,n.concat384],1),n.batch=st(n.concat,0)}else Array.isArray(s)?n.batch=st(s[0]):n.batch=st(s);ee(s),n.boxes=w5e(n.batch),n.logits=Me(n.batch,[0,0],[-1,1]),n.sigmoid=Cn(n.logits),n.scores=st(n.sigmoid),n.nms=await Se.nonMaxSuppressionAsync(n.boxes,n.scores,((i=t.face.detector)==null?void 0:i.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((u=t.face.detector)==null?void 0:u.minConfidence)||0);let r=await n.nms.array(),a=[],o=await n.scores.data();for(let p=0;p(((c=t.face.detector)==null?void 0:c.minConfidence)||0)){let h={};h.bbox=Me(n.boxes,[r[p],0],[1,-1]),h.slice=Me(n.batch,[r[p],tN-1],[1,-1]),h.squeeze=st(h.slice),h.landmarks=G(h.squeeze,[tN,-1]);let f=await h.bbox.data(),m={startPoint:[f[0],f[1]],endPoint:[f[2],f[3]],landmarks:await h.landmarks.array(),confidence:d},g=XT(m,[(e.shape[2]||0)/gi,(e.shape[1]||0)/gi]),y=V2(g,t.face.scale||v5e),x=U2(y);a.push(x),Object.keys(h).forEach(A=>ee(h[A]))}}return Object.keys(n).forEach(p=>ee(n[p])),a}var G2={};la(G2,{connected:()=>Pb,kpt:()=>$b});var $b=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],Pb={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var oN=224,k5e,I5e=5,H2=[8,16,32,32,32];async function iN(){let e=[],t=0;for(;tn.x)),y:Ft(e.map(n=>n.y))}}function Ea(e,t=[1,1]){let n=[e.map(i=>i[0]),e.map(i=>i[1])],s=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],a=[s[0],s[1],r[0]-s[0],r[1]-s[1]],o=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:o}}function lN(e,t=[1,1]){let n=[e.map(u=>u[0]),e.map(u=>u[1])],s=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],a=[(s[0]+r[0])/2,(s[1]+r[1])/2],o=Math.max(a[0]-s[0],a[1]-s[1],-a[0]+r[0],-a[1]+r[1]),i=[Math.trunc(a[0]-o),Math.trunc(a[1]-o),Math.trunc(2*o),Math.trunc(2*o)],l=[i[0]/t[0],i[1]/t[1],i[2]/t[0],i[3]/t[1]];return{box:i,boxRaw:l}}function j2(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var dN={initial:!0},zs={detector:null,landmarks:null},bd={detector:[224,224],landmarks:[256,256]},Fb=Number.MAX_SAFE_INTEGER,C5e={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},X2=null,Kh,yi=[[0,0],[0,0],[0,0],[0,0]],uN=0,cN=e=>1-1/(1+Math.exp(e));async function pN(e){if(dN.initial&&(zs.detector=null),!zs.detector&&e.body.detector&&e.body.detector.modelPath){zs.detector=await He(e.body.detector.modelPath);let t=Object.values(zs.detector.modelSignature.inputs);bd.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,bd.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&zs.detector&&oe("cached model:",zs.detector.modelUrl);return await iN(),zs.detector}async function hN(e){if(dN.initial&&(zs.landmarks=null),zs.landmarks)e.debug&&oe("cached model:",zs.landmarks.modelUrl);else{zs.landmarks=await He(e.body.modelPath);let t=Object.values(zs.landmarks.modelSignature.inputs);bd.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,bd.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return zs.landmarks}async function T5e(e,t){let n={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let s;if(Kh&&(n.cropped=Se.cropAndResize(e,[Kh],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],a=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];yi=[[0,0],r,a,[0,0]],n.pad=Qs(n.cropped||e,yi),n.resize=Se.resizeBilinear(n.pad,[t,t]),s=he(n.resize,rt.tf255)}else e.shape[1]!==t?(n.resize=Se.resizeBilinear(n.cropped||e,[t,t]),s=he(n.resize,rt.tf255)):s=he(n.cropped||e,rt.tf255);return Object.keys(n).forEach(r=>ee(n[r])),s}function N5e(e,t){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+yi[2][0]+yi[2][1])/t[0]-yi[2][0]),Math.trunc(n.position[1]*(t[1]+yi[1][0]+yi[1][1])/t[1]-yi[1][0]),n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],2*n.position[2]/(t[0]+t[1])];if(Kh)for(let n of e)n.positionRaw=[n.positionRaw[0]+Kh[1],n.positionRaw[1]+Kh[0],n.positionRaw[2]],n.position=[Math.trunc(n.positionRaw[0]*t[0]),Math.trunc(n.positionRaw[1]*t[1]),n.positionRaw[2]];return e}async function E5e(e){let t=e.find(i=>i.part==="leftPalm"),n=e.find(i=>i.part==="leftWrist"),s=e.find(i=>i.part==="leftIndex");t.position[2]=((n.position[2]||0)+(s.position[2]||0))/2;let r=e.find(i=>i.part==="rightPalm"),a=e.find(i=>i.part==="rightWrist"),o=e.find(i=>i.part==="rightIndex");r.position[2]=((a.position[2]||0)+(o.position[2]||0))/2}async function R5e(e,t,n){var f;let s={};[s.ld,s.segmentation,s.heatmap,s.world,s.poseflag]=(f=zs.landmarks)==null?void 0:f.execute(e,C5e.landmarks);let r=(await s.poseflag.data())[0],a=await s.ld.data(),o=await s.world.data();Object.keys(s).forEach(m=>ee(s[m]));let i=[],l=5;for(let m=0;mm.position),p=Ea(c,[n[0],n[1]]),d={};for(let[m,g]of Object.entries(Pb)){let y=[];for(let x=0;xw.part===g[x]),b=u.find(w=>w.part===g[x+1]);A&&b&&y.push([A.position,b.position])}d[m]=y}return{id:0,score:Math.trunc(100*r)/100,box:p.box,boxRaw:p.boxRaw,keypoints:u,annotations:d}}async function Ob(e,t){let n=[e.shape[2]||0,e.shape[1]||0],s=(t.body.skipTime||0)>ue()-uN,r=Fb<(t.body.skipFrames||0);if(t.skipAllowed&&s&&r&&X2!==null)Fb++;else{let a={};a.landmarks=await T5e(e,256),X2=await R5e(a.landmarks,t,n),Object.keys(a).forEach(o=>ee(a[o])),uN=ue(),Fb=0}return X2?[X2]:[]}var vd=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var Ra,du=0,Mb=[],mN=0,zb=Number.MAX_SAFE_INTEGER;async function gN(e){if(pe.initial&&(Ra=null),Ra)e.debug&&oe("cached model:",Ra.modelUrl);else{Ra=await He(e.object.modelPath);let t=Object.values(Ra.modelSignature.inputs);du=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return Ra}async function _5e(e,t,n){if(!e)return[];let s={},r=[],a=await e.array();s.squeeze=st(e);let o=Zt(s.squeeze,6,1);s.stack=on([o[1],o[0],o[3],o[2]],1),s.boxes=st(s.stack),s.scores=st(o[4]),s.classes=st(o[5]),ee([e,...o]),s.nms=await Se.nonMaxSuppressionAsync(s.boxes,s.scores,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence||0);let i=await s.nms.data(),l=0;for(let u of Array.from(i)){let c=Math.trunc(100*a[0][u][4])/100,p=a[0][u][5],d=vd[p].label,[h,f]=[a[0][u][0]/du,a[0][u][1]/du],m=[h,f,a[0][u][2]/du-h,a[0][u][3]/du-f],g=[Math.trunc(m[0]*t[0]),Math.trunc(m[1]*t[1]),Math.trunc(m[2]*t[0]),Math.trunc(m[3]*t[1])];r.push({id:l++,score:c,class:p,label:d,box:g,boxRaw:m})}return Object.keys(s).forEach(u=>ee(s[u])),r}async function Lb(e,t){let n=(t.object.skipTime||0)>ue()-mN,s=zb<(t.object.skipFrames||0);return t.skipAllowed&&n&&s&&Mb.length>0?(zb++,Mb):(zb=0,new Promise(async r=>{let a=[e.shape[2]||0,e.shape[1]||0],o=Se.resizeBilinear(e,[du,du]),i=t.object.enabled?Ra==null?void 0:Ra.execute(o,["tower_0/detections"]):null;mN=ue(),ee(o);let l=await _5e(i,a,t);Mb=l,r(l)}))}var K2={};la(K2,{connected:()=>Wb,kpt:()=>Bb});var Bb=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Wb={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Vn,AN=0,us={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Vb=Number.MAX_SAFE_INTEGER;async function xN(e){return pe.initial&&(Vn=null),Vn?e.debug&&oe("cached model:",Vn.modelUrl):Vn=await He(e.body.modelPath),Vn}async function D5e(e,t){let[n,s]=e.shape,r=G(e,[s*n]),a=mn(r,0),o=(await a.data())[0];if(o>t){let i=Rs(r,0),l=Jl(i,n),u=(await l.data())[0],c=he(i,n),p=(await c.data())[0];return ee([r,a,i,l,c]),[u,p,o]}else return ee([r,a]),[0,0,o]}async function Ub(e,t){let n=(t.body.skipTime||0)>ue()-AN,s=Vb<(t.body.skipFrames||0);return t.skipAllowed&&n&&s&&Object.keys(us.keypoints).length>0?(Vb++,[us]):(Vb=0,new Promise(async r=>{var p;let a=Y(()=>{if(!(Vn!=null&&Vn.inputs[0].shape))return null;let d=Se.resizeBilinear(e,[Vn.inputs[0].shape[2],Vn.inputs[0].shape[1]],!1),h=L(d,rt.tf2);return fe(h,rt.tf1)}),o;if(t.body.enabled&&(o=Vn==null?void 0:Vn.execute(a)),AN=ue(),ee(a),o){us.keypoints.length=0;let d=st(o);ee(o);let h=En(d,2);ee(d);for(let f=0;f(((p=t.body)==null?void 0:p.minConfidence)||0)&&us.keypoints.push({score:Math.round(100*y)/100,part:Bb[f],positionRaw:[m/Vn.inputs[0].shape[2],g/Vn.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/Vn.inputs[0].shape[2]),Math.round(e.shape[1]*g/Vn.inputs[0].shape[1])]})}h.forEach(f=>ee(f))}us.score=us.keypoints.reduce((d,h)=>h.score>d?h.score:d,0);let i=us.keypoints.map(d=>d.position[0]),l=us.keypoints.map(d=>d.position[1]);us.box=[Math.min(...i),Math.min(...l),Math.max(...i)-Math.min(...i),Math.max(...l)-Math.min(...l)];let u=us.keypoints.map(d=>d.positionRaw[0]),c=us.keypoints.map(d=>d.positionRaw[1]);us.boxRaw=[Math.min(...u),Math.min(...c),Math.max(...u)-Math.min(...u),Math.max(...c)-Math.min(...c)];for(let[d,h]of Object.entries(Wb)){let f=[];for(let m=0;mx.part===h[m]),y=us.keypoints.find(x=>x.part===h[m+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([g.position,y.position])}us.annotations[d]=f}r([us])}))}var $5e=["angry","disgust","fear","happy","sad","surprise","neutral"],tr,Z2=[],vN=0,wN=0,Gb=Number.MAX_SAFE_INTEGER;async function kN(e){var t;return pe.initial&&(tr=null),tr?e.debug&&oe("cached model:",tr.modelUrl):tr=await He((t=e.face.emotion)==null?void 0:t.modelPath),tr}async function Hb(e,t,n,s){var o,i;if(!tr)return[];let r=Gb<(((o=t.face.emotion)==null?void 0:o.skipFrames)||0),a=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>ue()-wN;return t.skipAllowed&&a&&r&&vN===s&&Z2[n]&&Z2[n].length>0?(Gb++,Z2[n]):(Gb=0,new Promise(async l=>{var c,p;let u=[];if((c=t.face.emotion)!=null&&c.enabled){let d={},h=tr!=null&&tr.inputs[0].shape?tr.inputs[0].shape[2]:0;d.resize=Se.resizeBilinear(e,[h,h],!1),d.channels=L(d.resize,rt.rgb),d.grayscale=ke(d.channels,3,!0),d.grayscaleSub=fe(d.grayscale,rt.tf05),d.grayscaleMul=L(d.grayscaleSub,rt.tf2),d.emotion=tr==null?void 0:tr.execute(d.grayscaleMul),wN=ue();let f=await d.emotion.data();for(let m=0;m(((p=t.face.emotion)==null?void 0:p.minConfidence)||0)&&u.push({score:Math.min(.99,Math.trunc(100*f[m])/100),emotion:$5e[m]});u.sort((m,g)=>g.score-m.score),Object.keys(d).forEach(m=>ee(d[m]))}Z2[n]=u,vN=s,l(u)}))}var Ls,jb=[],SN=0,CN=0,TN=Number.MAX_SAFE_INTEGER;async function NN(e){return pe.initial&&(Ls=null),Ls?e.debug&&oe("cached model:",Ls.modelUrl):Ls=await He(e.face.mobilefacenet.modelPath),Ls}async function qb(e,t,n,s){var o,i;if(!Ls)return[];let r=TN<(((o=t.face.mobilefacenet)==null?void 0:o.skipFrames)||0),a=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>ue()-CN;return t.skipAllowed&&a&&r&&SN===s&&jb[n]?(TN++,jb[n]):new Promise(async l=>{var c;let u=[];if(((c=t.face.mobilefacenet)==null?void 0:c.enabled)&&(Ls==null?void 0:Ls.inputs[0].shape)){let p={};p.crop=Se.resizeBilinear(e,[Ls.inputs[0].shape[2],Ls.inputs[0].shape[1]],!1),p.data=Ls==null?void 0:Ls.execute(p.crop);let d=await p.data.data();u=Array.from(d),Object.keys(p).forEach(h=>ee(p[h]))}jb[n]=u,SN=s,CN=ue(),l(u)})}var Bs,Xb=[],RN=0,_N=0,DN=Number.MAX_SAFE_INTEGER;async function $N(e){return pe.initial&&(Bs=null),Bs?e.debug&&oe("cached model:",Bs.modelUrl):Bs=await He(e.face.insightface.modelPath),Bs}async function Kb(e,t,n,s){var o,i;if(!Bs)return[];let r=DN<(((o=t.face.insightface)==null?void 0:o.skipFrames)||0),a=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>ue()-_N;return t.skipAllowed&&a&&r&&RN===s&&Xb[n]?(DN++,Xb[n]):new Promise(async l=>{var c;let u=[];if(((c=t.face.insightface)==null?void 0:c.enabled)&&(Bs==null?void 0:Bs.inputs[0].shape)){let p={};p.crop=Se.resizeBilinear(e,[Bs.inputs[0].shape[2],Bs.inputs[0].shape[1]],!1),p.data=Bs==null?void 0:Bs.execute(p.crop);let d=await p.data.data();u=Array.from(d),Object.keys(p).forEach(h=>ee(p[h]))}Xb[n]=u,RN=s,_N=ue(),l(u)})}var _a,Ai=0,P5e=2.3,Zb=Ar.leftEyeLower0,Yb=Ar.rightEyeLower0,wd={leftBounds:[Zb[0],Zb[Zb.length-1]],rightBounds:[Yb[0],Yb[Yb.length-1]]},kd={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function zN(e){var t;return pe.initial&&(_a=null),_a?e.debug&&oe("cached model:",_a.modelUrl):_a=await He((t=e.face.iris)==null?void 0:t.modelPath),Ai=_a.inputs[0].shape?_a.inputs[0].shape[2]:0,Ai===-1&&(Ai=64),_a}function Y2(e,t,n,s){for(let r=0;r{let t=e[wd.leftBounds[0]][2],n=e[wd.rightBounds[0]][2];return t-n},FN=(e,t,n,s,r,a=!1)=>{let o=U2(V2(KT([e[n],e[s]]),P5e)),i=Ad(o),l=Se.cropAndResize(t,[[o.startPoint[1]/r,o.startPoint[0]/r,o.endPoint[1]/r,o.endPoint[0]/r]],[0],[Ai,Ai]);if(a&&pe.kernels.includes("flipleftright")){let u=Se.flipLeftRight(l);ee(l),l=u}return{box:o,boxSize:i,crop:l}},ON=(e,t,n,s=!1)=>{let r=[];for(let a=0;a{let s=e[Ar[`${n}EyeUpper0`][kd.upperCenter]][2],r=e[Ar[`${n}EyeLower0`][kd.lowerCenter]][2],a=(s+r)/2;return t.map((o,i)=>{let l=a;return i===2?l=s:i===4&&(l=r),[o[0],o[1],l]})};async function LN(e,t,n,s){if(!_a)return n.debug&&oe("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:a,crop:o}=FN(e,t,wd.leftBounds[0],wd.leftBounds[1],s,!0),{box:i,boxSize:l,crop:u}=FN(e,t,wd.rightBounds[0],wd.rightBounds[1],s,!0),c=Ct([o,u]);ee(o),ee(u);let p=_a.execute(c);ee(c);let d=await p.data();ee(p);let h=d.slice(0,kd.numCoordinates*3),{rawCoords:f,iris:m}=ON(h,r,a,!0),g=d.slice(kd.numCoordinates*3),{rawCoords:y,iris:x}=ON(g,i,l,!1),A=F5e(e);Math.abs(A)<30?(Y2(e,f,"left",null),Y2(e,y,"right",null)):A<1?Y2(e,f,"left",["EyeUpper0","EyeLower0"]):Y2(e,y,"right",["EyeUpper0","EyeLower0"]);let b=MN(e,m,"left"),w=MN(e,x,"right");return e.concat(b).concat(w)}var O5e=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],M5e=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],z5e=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],L5e=[[474,475],[475,476],[476,477],[477,474]],B5e=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],W5e=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],V5e=[[469,470],[470,471],[471,472],[472,469]],U5e=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function xi(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var G5e={lips:xi(O5e),leftEye:xi(M5e),leftEyebrow:xi(z5e),leftIris:xi(L5e),rightEye:xi(B5e),rightEyebrow:xi(W5e),rightIris:xi(V5e),faceOval:xi(U5e)},H5e=Object.entries(G5e).map(([e,t])=>t.map(n=>[n,e])).flat(),Gke=new Map(H5e),Zh=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],pu=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],hu=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function VN(e,t){let n={lips:await t.filter(a=>a.size===160)[0].data(),irisL:await t.filter(a=>a.size===10)[0].data(),eyeL:await t.filter(a=>a.size===142)[0].data(),irisR:await t.filter(a=>a.size===10)[1].data(),eyeR:await t.filter(a=>a.size===142)[1].data()},s=pu.reduce((a,o)=>a+=e[o][2],0)/pu.length;for(let a=0;aa+=e[o][2],0)/hu.length;for(let a=0;aue()-na.timestamp,s=na.skipped<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);!t.skipAllowed||!n||!s||na.boxes.length===0?(na.boxes=await rN(e,t),na.timestamp=ue(),na.skipped=0):na.skipped++;let r=[],a=[],o=0;for(let A=0;AR.shape[R.shape.length-1]===1).data();if(I.faceScore=Math.round(100*P[0])/100,I.faceScore<(((f=t.face.detector)==null?void 0:f.minConfidence)||1)){if(b.confidence=I.faceScore,(m=t.face.mesh)!=null&&m.keepInvalid){I.box=B2(b,e),I.boxRaw=W2(b,e),I.score=I.boxScore,I.mesh=b.landmarks.map(R=>[(b.startPoint[0]+b.endPoint[0])/2+(b.endPoint[0]+b.startPoint[0])*R[0]/xd(),(b.startPoint[1]+b.endPoint[1])/2+(b.endPoint[1]+b.startPoint[1])*R[1]/xd()]),I.meshRaw=I.mesh.map(R=>[R[0]/(e.shape[2]||1),R[1]/(e.shape[1]||1),(R[2]||0)/fu]);for(let R of Object.keys(lu))I.annotations[R]=[I.mesh[lu[R]]]}}else{let R=E.find(V=>V.shape[V.shape.length-1]===1404),$=G(R,[-1,3]),C=await $.array();ee($),(g=t.face.attention)!=null&&g.enabled?C=await VN(C,E):(y=t.face.iris)!=null&&y.enabled&&(C=await LN(C,I.tensor,t,fu)),I.mesh=JT(C,b,w,S,fu),I.meshRaw=I.mesh.map(V=>[V[0]/(e.shape[2]||0),V[1]/(e.shape[1]||0),(V[2]||0)/fu]);for(let V of Object.keys(Ar))I.annotations[V]=Ar[V].map(q=>I.mesh[q]);I.score=I.faceScore;let F={...eN(I.mesh,b),confidence:b.confidence,landmarks:b.landmarks};I.box=B2(F,e),I.boxRaw=W2(F,e),a.push(F)}ee(E)}else{I.box=B2(b,e),I.boxRaw=W2(b,e),I.score=I.boxScore,I.mesh=b.landmarks.map(E=>[(b.startPoint[0]+b.endPoint[0])/2+(b.endPoint[0]+b.startPoint[0])*E[0]/xd(),(b.startPoint[1]+b.endPoint[1])/2+(b.endPoint[1]+b.startPoint[1])*E[1]/xd()]),I.meshRaw=I.mesh.map(E=>[E[0]/(e.shape[2]||0),E[1]/(e.shape[1]||0),(E[2]||0)/fu]);for(let E of Object.keys(lu))I.annotations[E]=[I.mesh[lu[E]]]}I.score>(((x=t.face.detector)==null?void 0:x.minConfidence)||1)?r.push(I):ee(I.tensor)}return na.boxes=a,r}async function GN(e){var t,n,s,r,a,o;return pe.initial&&(Un=null),((n=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:n.enabled)&&(Un==null?void 0:Un.signature)&&Object.keys(((s=Un==null?void 0:Un.signature)==null?void 0:s.outputs)||{}).length<6&&(Un=null),Un?e.debug&&oe("cached model:",Un.modelUrl):(r=e.face.attention)!=null&&r.enabled?Un=await He((a=e.face.attention)==null?void 0:a.modelPath):Un=await He((o=e.face.mesh)==null?void 0:o.modelPath),fu=Un.inputs[0].shape?Un.inputs[0].shape[2]:0,Un}var HN=uu,jN=qh;var Ws,J2=[],qN=0,XN=0,Qb=Number.MAX_SAFE_INTEGER;async function KN(e){var t;return pe.initial&&(Ws=null),Ws?e.debug&&oe("cached model:",Ws.modelUrl):Ws=await He((t=e.face.description)==null?void 0:t.modelPath),Ws}function e4(e){let t=e.image||e.tensor||e;if(!(Ws!=null&&Ws.inputs[0].shape))return t;let n=Se.resizeBilinear(t,[Ws.inputs[0].shape[2],Ws.inputs[0].shape[1]],!1),s=L(n,rt.tf255);return ee(n),s}async function t4(e,t,n,s){var o,i,l,u;if(!Ws)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=Qb<(((o=t.face.description)==null?void 0:o.skipFrames)||0),a=(((i=t.face.description)==null?void 0:i.skipTime)||0)>ue()-qN;return t.skipAllowed&&r&&a&&XN===s&&((l=J2[n])==null?void 0:l.age)&&((u=J2[n])==null?void 0:u.age)>0?(Qb++,J2[n]):(Qb=0,new Promise(async c=>{var d,h;let p={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((d=t.face.description)!=null&&d.enabled){let f=e4(e),m=Ws==null?void 0:Ws.execute(f);qN=ue(),ee(f);let y=await(await m.find(_=>_.shape[1]===1)).data(),x=Math.trunc(200*Math.abs(y[0]-.5))/100;x>(((h=t.face.description)==null?void 0:h.minConfidence)||0)&&(p.gender=y[0]<=.5?"female":"male",p.genderScore=Math.min(.99,x));let A=Rs(m.find(_=>_.shape[1]===100),1),b=(await A.data())[0];ee(A);let S=await m.find(_=>_.shape[1]===100).data();p.age=Math.round(S[b-1]>S[b+1]?10*b-100*S[b-1]:10*b+100*S[b+1])/10;let I=m.find(_=>_.shape[1]===1024),E=I?await I.data():[];p.descriptor=Array.from(E),m.forEach(_=>ee(_))}J2[n]=p,XN=s,c(p)}))}function Q2(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function Yh(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function JN(e,t,n){let s=t.shape[1],r=t.shape[2],a=[[e.startPoint[1]/s,e.startPoint[0]/r,e.endPoint[1]/s,e.endPoint[0]/r]];return Se.cropAndResize(t,a,[0],n)}function QN(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],s=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(a=>[a[0]*t[0],a[1]*t[1]]);return{startPoint:n,endPoint:s,palmLandmarks:r,confidence:e.confidence}}function e1(e,t=1.5){let n=Yh(e),s=Q2(e),r=[t*s[0]/2,t*s[1]/2],a=[n[0]-r[0],n[1]-r[1]],o=[n[0]+r[0],n[1]+r[1]];return{startPoint:a,endPoint:o,palmLandmarks:e.palmLandmarks}}function t1(e){let t=Yh(e),n=Q2(e),r=Math.max(...n)/2,a=[t[0]-r,t[1]-r],o=[t[0]+r,t[1]+r];return{startPoint:a,endPoint:o,palmLandmarks:e.palmLandmarks}}function q5e(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function eE(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return q5e(n)}var ZN=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function bi(e,t){let n=0;for(let s=0;s[n.x,n.y]),this.anchorsTensor=lr(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=Ft([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Ft([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=Me(t,[0,0],[-1,2]),n.boxSizes=Me(t,[0,2],[-1,2]),n.div=he(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=ce(n.div,this.anchorsTensor),n.halfBoxSizes=he(n.boxSizes,this.doubleInputSizeTensor),n.sub=fe(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=L(n.sub,this.inputSizeTensor),n.add=ce(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=L(n.add,this.inputSizeTensor);let s=Zl([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>ee(n[r])),s}normalizeLandmarks(t,n){let s={};s.reshape=G(t,[-1,7,2]),s.div=he(s.reshape,this.inputSizeTensor),s.landmarks=ce(s.div,this.anchors[n]);let r=L(s.landmarks,this.inputSizeTensor);return Object.keys(s).forEach(a=>ee(s[a])),r}async predict(t,n){let s={};s.resize=Se.resizeBilinear(t,[this.inputSize,this.inputSize]),s.div=he(s.resize,rt.tf127),s.image=fe(s.div,rt.tf1),s.batched=this.model.execute(s.image),s.predictions=st(s.batched),s.slice=Me(s.predictions,[0,0],[-1,1]),s.sigmoid=Cn(s.slice),s.scores=st(s.sigmoid);let r=await s.scores.data();s.boxes=Me(s.predictions,[0,1],[-1,4]),s.norm=this.normalizeBoxes(s.boxes),s.nms=await Se.nonMaxSuppressionAsync(s.norm,s.scores,3*n.hand.maxDetected,n.hand.iouThreshold,n.hand.minConfidence);let a=await s.nms.array(),o=[];for(let i of a){let l={};l.box=Me(s.norm,[i,0],[1,-1]),l.slice=Me(s.predictions,[i,5],[1,14]),l.norm=this.normalizeLandmarks(l.slice,i),l.palmLandmarks=G(l.norm,[-1,2]);let u=await l.box.data(),c=u.slice(0,2),p=u.slice(2,4),d=await l.palmLandmarks.array(),h={startPoint:c,endPoint:p,palmLandmarks:d,confidence:r[i]},f=QN(h,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);o.push(f),Object.keys(l).forEach(m=>ee(l[m]))}return Object.keys(s).forEach(i=>ee(s[i])),o}};var Y5e=5,rE=1.65,aE=[0,5,9,13,17,1,2],J5e=0,Q5e=2,oE=0,s1=class{constructor(t,n){me(this,"handDetector");me(this,"handPoseModel");me(this,"inputSize");me(this,"storedBoxes");me(this,"skipped");me(this,"detectedHands");this.handDetector=t,this.handPoseModel=n,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(o=>o[0]),s=t.map(o=>o[1]),r=[Math.min(...n),Math.min(...s)],a=[Math.max(...n),Math.max(...s)];return{startPoint:r,endPoint:a}}getBoxForPalmLandmarks(t,n){let s=t.map(a=>r4([...a,1],n)),r=this.calculateLandmarksBoundingBox(s);return e1(t1(r),Y5e)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),s=e1(t1(n),rE);s.palmLandmarks=[];for(let r=0;r[o[0]*(h[0]-this.inputSize/2),o[1]*(h[1]-this.inputSize/2),o[2]*h[2]]),l=s4(s,[0,0]),u=i.map(h=>[...r4(h,l),h[2]]),c=tE(r),p=[...Yh(n),1],d=[bi(p,c[0]),bi(p,c[1])];return u.map(h=>[Math.trunc(h[0]+d[0]),Math.trunc(h[1]+d[1]),Math.trunc(h[2])])}async estimateHands(t,n){let s=!1,r,a=(n.hand.skipTime||0)>ue()-oE,o=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&a&&o&&(r=await this.handDetector.predict(t,n),this.skipped=0),n.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(s=!0));let i=[];for(let l=0;l=n.hand.minConfidence/4){let w=G(A,[-1,3]),S=await w.array();ee(A),ee(w);let I=this.transformRawCoords(S,m,c,f),E=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...E,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:u.confidence,fingerConfidence:b,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};i.push(_)}else this.storedBoxes[l]=null;ee(A)}else{let c=e1(t1(u),rE),p={confidence:u.confidence,boxConfidence:u.confidence,fingerConfidence:0,box:{topLeft:c.startPoint,bottomRight:c.endPoint},landmarks:[]};i.push(p)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=i.length,i.length>n.hand.maxDetected&&(i.length=n.hand.maxDetected),i}};var cs={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>cs.nameMapping[e],getPoints:e=>cs.pointsMapping[e]},wi={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>wi.nameMapping[e]},jt={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>jt.nameMapping[e]},vi=class{constructor(t){me(this,"name");me(this,"curls");me(this,"directions");me(this,"weights");me(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,s){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,s])}direction(t,n,s){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,s])}weight(t,n){this.weights[t]=n;let s=this.weights.reduce((r,a)=>r+a,0);this.weightsRelative=this.weights.map(r=>r*5/s)}matchAgainst(t,n){let s=0;for(let r in t){let a=t[r],o=this.curls[r];if(typeof o=="undefined"){s+=this.weightsRelative[r];continue}for(let[i,l]of o)if(a===i){s+=l*this.weightsRelative[r];break}}for(let r in n){let a=n[r],o=this.directions[r];if(typeof o=="undefined"){s+=this.weightsRelative[r];continue}for(let[i,l]of o)if(a===i){s+=l*this.weightsRelative[r];break}}return s/10}};var{thumb:Mr,index:Da,middle:$a,ring:mu,pinky:gu}=cs,{none:zr,half:txe,full:Lr}=wi,{verticalUp:Id,verticalDown:aIe,horizontalLeft:a4,horizontalRight:nxe,diagonalUpRight:sxe,diagonalUpLeft:Sd,diagonalDownRight:oIe,diagonalDownLeft:iIe}=jt,ki=new vi("thumbs up");ki.curl(Mr,zr,1);ki.direction(Mr,Id,1);ki.direction(Mr,Sd,.25);ki.direction(Mr,sxe,.25);for(let e of[cs.index,cs.middle,cs.ring,cs.pinky])ki.curl(e,Lr,1),ki.direction(e,a4,1),ki.direction(e,nxe,1);var dn=new vi("victory");dn.curl(Mr,txe,.5);dn.curl(Mr,zr,.5);dn.direction(Mr,Id,1);dn.direction(Mr,Sd,1);dn.curl(Da,zr,1);dn.direction(Da,Id,.75);dn.direction(Da,Sd,1);dn.curl($a,zr,1);dn.direction($a,Id,1);dn.direction($a,Sd,.75);dn.curl(mu,Lr,1);dn.direction(mu,Id,.2);dn.direction(mu,Sd,1);dn.direction(mu,a4,.2);dn.curl(gu,Lr,1);dn.direction(gu,Id,.2);dn.direction(gu,Sd,1);dn.direction(gu,a4,.2);dn.weight(Da,2);dn.weight($a,2);var Ii=new vi("point");Ii.curl(Mr,Lr,1);Ii.curl(Da,zr,.5);Ii.curl($a,Lr,.5);Ii.curl(mu,Lr,.5);Ii.curl(gu,Lr,.5);Ii.weight(Da,2);Ii.weight($a,2);var Si=new vi("middle finger");Si.curl(Mr,zr,1);Si.curl(Da,Lr,.5);Si.curl($a,Lr,.5);Si.curl(mu,Lr,.5);Si.curl(gu,Lr,.5);Si.weight(Da,2);Si.weight($a,2);var Cd=new vi("open palm");Cd.curl(Mr,zr,.75);Cd.curl(Da,zr,.75);Cd.curl($a,zr,.75);Cd.curl(mu,zr,.75);Cd.curl(gu,zr,.75);var iE=[ki,dn,Ii,Si,Cd];var rxe=.7,yu={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function lE(e,t,n,s){let r=(t-s)/(e-n),a=Math.atan(r)*180/Math.PI;return a<=0?a=-a:a>0&&(a=180-a),a}function cE(e,t){if(!e||!t)return[0,0];let n=lE(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let s=lE(e[1],e[2],t[1],t[2]);return[n,s]}function uE(e,t=1){let n=0,s=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?s=1*t:r=1*t,[n,s,r]}function axe(e,t,n){let s=e[0]-t[0],r=e[0]-n[0],a=t[0]-n[0],o=e[1]-t[1],i=e[1]-n[1],l=t[1]-n[1],u=e[2]-t[2],c=e[2]-n[2],p=t[2]-n[2],d=Math.sqrt(s*s+o*o+u*u),h=Math.sqrt(r*r+i*i+c*c),f=Math.sqrt(a*a+l*l+p*p),m=(f*f+d*d-h*h)/(2*f*d);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let y;return g>yu.NO_CURL_START_LIMIT?y=wi.none:g>yu.HALF_CURL_START_LIMIT?y=wi.half:y=wi.full,y}function dE(e,t,n,s){let r;return s===Math.abs(e)?e>0?r=jt.horizontalLeft:r=jt.horizontalRight:s===Math.abs(t)?t>0?r=jt.horizontalLeft:r=jt.horizontalRight:n>0?r=jt.horizontalLeft:r=jt.horizontalRight,r}function pE(e,t,n,s){let r;return s===Math.abs(e)?e<0?r=jt.verticalDown:r=jt.verticalUp:s===Math.abs(t)?t<0?r=jt.verticalDown:r=jt.verticalUp:n<0?r=jt.verticalDown:r=jt.verticalUp,r}function oxe(e,t,n,s,r,a,o,i){let l,u=pE(e,t,n,s),c=dE(r,a,o,i);return u===jt.verticalUp?c===jt.horizontalLeft?l=jt.diagonalUpLeft:l=jt.diagonalUpRight:c===jt.horizontalLeft?l=jt.diagonalDownLeft:l=jt.diagonalDownRight,l}function ixe(e,t,n,s){let r=e[0]-t[0],a=e[0]-n[0],o=t[0]-n[0],i=e[1]-t[1],l=e[1]-n[1],u=t[1]-n[1],c=Math.max(Math.abs(r),Math.abs(a),Math.abs(o)),p=Math.max(Math.abs(i),Math.abs(l),Math.abs(u)),d=0,h=0,f=0,m=p/(c+1e-5);m>1.5?d+=yu.DISTANCE_VOTE_POWER:m>.66?h+=yu.DISTANCE_VOTE_POWER:f+=yu.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+i*i),y=Math.sqrt(a*a+l*l),x=Math.sqrt(o*o+u*u),A=Math.max(g,y,x),b=e[0],w=e[1],S=n[0],I=n[1];A===g?(S=n[0],I=n[1]):A===x&&(b=t[0],w=t[1]);let P=cE([b,w],[S,I]),R=uE(P,yu.TOTAL_ANGLE_VOTE_POWER);d+=R[0],h+=R[1],f+=R[2];for(let C of s){let F=uE(C,yu.SINGLE_ANGLE_VOTE_POWER);d+=F[0],h+=F[1],f+=F[2]}let $;return d===Math.max(d,h,f)?$=pE(l,i,u,p):f===Math.max(h,f)?$=dE(a,r,o,c):$=oxe(l,i,u,p,a,r,o,c),$}function hE(e){let t=[],n=[],s=[],r=[];if(!e)return{curls:s,directions:r};for(let a of cs.all){let o=cs.getPoints(a),i=[],l=[];for(let u of o){let c=e[u[0]],p=e[u[1]],d=cE(c,p),h=d[0],f=d[1];i.push(h),l.push(f)}t.push(i),n.push(l)}for(let a of cs.all){let o=a===cs.thumb?1:0,i=cs.getPoints(a),l=e[i[o][0]],u=e[i[o+1][1]],c=e[i[3][1]],p=axe(l,u,c),d=ixe(l,u,c,t[a].slice(o));s[a]=p,r[a]=d}return{curls:s,directions:r}}function r1(e){if(!e||e.length===0)return null;let t=hE(e),n={};for(let s of cs.all)n[cs.getName(s)]={curl:wi.getName(t.curls[s]),direction:jt.getName(t.directions[s])};return n}function fE(e){let t=[];if(!e||e.length===0)return t;let n=hE(e);for(let s of iE){let r=s.matchAgainst(n.curls,n.directions);r>=rxe&&t.push({name:s.name,confidence:r})}return t}var mE={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Td,Nd,gE;async function i4(e,t){let n=await gE.estimateHands(e,t);if(!n)return[];let s=[];for(let r=0;rn[r].landmarks[p]);let o=n[r].landmarks,i=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(o&&o.length>0){for(let c of o)c[0]i[2]&&(i[2]=c[0]),c[1]>i[3]&&(i[3]=c[1]);i[2]-=i[0],i[3]-=i[1],l=[i[0]/(e.shape[2]||0),i[1]/(e.shape[1]||0),i[2]/(e.shape[2]||0),i[3]/(e.shape[1]||0)]}else i=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let u=r1(o);s.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:i,boxRaw:l,keypoints:o,annotations:a,landmarks:u})}return s}async function l4(e){var n,s;pe.initial&&(Td=null,Nd=null),!Td||!Nd?[Td,Nd]=await Promise.all([e.hand.enabled?He((n=e.hand.detector)==null?void 0:n.modelPath):null,e.hand.landmarks?He((s=e.hand.skeleton)==null?void 0:s.modelPath):null]):(e.debug&&oe("cached model:",Td.modelUrl),e.debug&&oe("cached model:",Nd.modelUrl));let t=new n1(Td);return gE=new s1(t,Nd),[Td,Nd]}var Pt={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function lxe(){let e=Pt.gl;!e||(Pt.extensions=e.getSupportedExtensions())}async function AE(e){var t;if(e.config.backend==="humangl"&&(Pt.name in sn().registry&&(!Pt.gl||!Pt.gl.getParameter(Pt.gl.VERSION))&&(oe("error: humangl backend invalid context"),a1(e)),!By(Pt.name))){try{Pt.canvas=await ls(100,100)}catch(s){oe("error: cannot create canvas:",s);return}try{if(Pt.gl=(t=Pt.canvas)==null?void 0:t.getContext("webgl2",Pt.webGLattr),!Pt.gl.getParameter(Pt.gl.VERSION).includes("2.0")){oe("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}Pt.canvas&&(Pt.canvas.addEventListener("webglcontextlost",async r=>{throw oe("error: humangl:",r.type),oe("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),Pt.canvas.addEventListener("webglcontextrestored",r=>{oe("error: humangl context restored:",r)}),Pt.canvas.addEventListener("webglcontextcreationerror",r=>{oe("error: humangl context create:",r)}))}catch(s){oe("error: cannot get WebGL context:",s);return}try{v2(2,Pt.gl)}catch(s){oe("error: cannot set WebGL context:",s);return}try{let s=new qu(Pt.gl);Xl(Pt.name,()=>new ld(s),Pt.priority)}catch(s){oe("error: cannot register WebGL backend:",s);return}try{Xr("webgl").forEach(r=>{let a={...r,backendName:Pt.name};pr(a)})}catch(s){oe("error: cannot update WebGL backend registration:",s);return}let n=Bn().getGPGPUContext?Bn().getGPGPUContext().gl:null;if(n)oe(`humangl webgl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`);else{oe("error: no current gl context:",n,Pt.gl);return}try{X().flagRegistry.WEBGL_VERSION&&X().set("WEBGL_VERSION",2)}catch(s){oe("error: cannot set WebGL backend flags:",s);return}lxe(),oe("backend registered:",Pt.name)}}function uxe(){if(!pe.kernels.includes("mod")){let e={kernelName:"Mod",backendName:Ln(),kernelFunc:t=>Y(()=>fe(t.inputs.a,L(he(t.inputs.a,t.inputs.b),t.inputs.b)))};pr(e),pe.kernels.push("mod")}if(!pe.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:Ln(),kernelFunc:t=>Y(()=>Wc(t.inputs.a/t.inputs.b)*t.inputs.b+Jl(t.inputs.a,t.inputs.b))};pr(e),pe.kernels.push("floormod")}}async function i1(e,t=!1){if(e.state="backend",t||pe.initial||e.config.backend&&e.config.backend.length>0&&Ln()!==e.config.backend){let n=ue();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&oe("running inside web worker"),pe.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&oe("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),pe.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&oe(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),pe.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")oe("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&oe("enumerated webgpu adapter:",r),!r)oe("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let a="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;oe("webgpu adapter info:",a)}}e.config.backend==="humangl"&&await AE(e);let s=Object.keys(sn().registryFactory);if(e.config.debug&&oe("available backends:",s),s.includes(e.config.backend)||(oe(`error: backend ${e.config.backend} not found in registry`),e.config.backend=pe.node?"tensorflow":"webgl",e.config.debug&&oe(`override: setting backend ${e.config.backend}`)),e.config.debug&&oe("setting backend:",e.config.backend),e.config.backend==="wasm"){if(X().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&X().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&oe("wasm path:",e.config.wasmPath),typeof(qe==null?void 0:qe.setWasmPaths)!="undefined")await ab(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,a=!1;try{r=await X().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await X().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&oe(`wasm execution: ${a?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&oe("warning: wasm simd support is not enabled")}catch(o){oe("wasm detection failed")}}try{await Ly(e.config.backend),await Bc(),$T()}catch(r){return oe("error: cannot set backend:",e.config.backend,r),!1}}if(Ln()==="humangl"&&(X().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&X().set("CHECK_COMPUTATION_FOR_ERRORS",!1),X().flagRegistry.WEBGL_CPU_FORWARD&&X().set("WEBGL_CPU_FORWARD",!0),X().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&X().set("WEBGL_USE_SHAPES_UNIFORMS",!0),X().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&X().set("CPU_HANDOFF_SIZE_THRESHOLD",256),X().flagRegistry.WEBGL_EXP_CONV&&X().set("WEBGL_EXP_CONV",!0),X().flagRegistry.USE_SETTIMEOUTCUSTOM&&X().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(oe("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),X().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),Bn().getGPGPUContext)){let s=await Bn().getGPGPUContext().gl;e.config.debug&&oe(`gl version:${s.getParameter(s.VERSION)} renderer:${s.getParameter(s.RENDERER)}`)}Ln(),My(),await Bc(),e.performance.initBackend=Math.trunc(ue()-n),e.config.backend=Ln(),await pe.updateBackend(),uxe()}return!0}function l1(e,t){for(let n of e){let s={kernelName:n,backendName:t.backend,kernelFunc:()=>{t.debug&&oe("kernelFunc",n,t.backend)}};pr(s)}pe.kernels=Xr(Ln()).map(n=>n.kernelName.toLowerCase())}var An=[null,null],dxe=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Ci=[[0,0],[0,0]],pxe=["hand","fist","pinch","point","face","tip","pinchtip"],bE=4,vE=1.6,hxe=512,fxe=1.4,u1=Number.MAX_SAFE_INTEGER,u4=0,Pa=[0,0],Jt={boxes:[],hands:[]},wE={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function kE(e){var t;if(pe.initial&&(An[0]=null),An[0])e.debug&&oe("cached model:",An[0].modelUrl);else{l1(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),An[0]=await He((t=e.hand.detector)==null?void 0:t.modelPath);let n=Object.values(An[0].modelSignature.inputs);Ci[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ci[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return An[0]}async function IE(e){var t;if(pe.initial&&(An[1]=null),An[1])e.debug&&oe("cached model:",An[1].modelUrl);else{An[1]=await He((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=Object.values(An[1].modelSignature.inputs);Ci[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ci[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return An[1]}async function mxe(e,t){let n=[];if(!e||!An[0])return n;let s={},r=(e.shape[2]||1)/(e.shape[1]||1),a=Math.min(Math.round((e.shape[1]||0)/8)*8,hxe),o=Math.round(a*r/8)*8;s.resize=Se.resizeBilinear(e,[a,o]),s.cast=ye(s.resize,"int32"),[s.rawScores,s.rawBoxes]=await An[0].executeAsync(s.cast,dxe),s.boxes=st(s.rawBoxes,[0,2]),s.scores=st(s.rawScores,[0]);let i=En(s.scores,1);ee(i[bE]),i.splice(bE,1),s.filtered=on(i,1),ee(i),s.max=mn(s.filtered,1),s.argmax=Rs(s.filtered,1);let l=0;s.nms=await Se.nonMaxSuppressionAsync(s.boxes,s.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let u=await s.nms.data(),c=await s.max.data(),p=await s.argmax.data();for(let d of Array.from(u)){let h=Me(s.boxes,d,1),f=await h.data();ee(h);let m=[f[1],f[0],f[3]-f[1],f[2]-f[0]],g=j2(m,fxe),y=[Math.trunc(m[0]*Pa[0]),Math.trunc(m[1]*Pa[1]),Math.trunc(m[2]*Pa[0]),Math.trunc(m[3]*Pa[1])],x=c[d],A=pxe[p[d]],b={id:l++,score:x,box:y,boxRaw:g,label:A};n.push(b)}return Object.keys(s).forEach(d=>ee(s[d])),n.sort((d,h)=>h.score-d.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function c4(e,t,n){let s={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&An[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},a=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Se.cropAndResize(e,[a],[0],[Ci[1][0],Ci[1][1]],"bilinear"),r.div=he(r.crop,rt.tf255),[r.score,r.keypoints]=An[1].execute(r.div,["Identity_1","Identity"]);let o=(await r.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(o))))/100;if(i>=(n.hand.minConfidence||0)){s.fingerScore=i,r.reshaped=G(r.keypoints,[-1,3]);let c=(await r.reshaped.array()).map(p=>[p[0]/Ci[1][1],p[1]/Ci[1][0],p[2]||0]).map(p=>[p[0]*t.boxRaw[2],p[1]*t.boxRaw[3],p[2]||0]);s.keypoints=c.map(p=>[Pa[0]*(p[0]+t.boxRaw[0]),Pa[1]*(p[1]+t.boxRaw[1]),p[2]||0]),s.landmarks=r1(s.keypoints);for(let p of Object.keys(wE))s.annotations[p]=wE[p].map(d=>s.landmarks&&s.keypoints[d]?s.keypoints[d]:null)}Object.keys(r).forEach(l=>ee(r[l]))}return s}async function d4(e,t){var r,a;if(!An[0]||!An[1]||!((r=An[0])!=null&&r.inputs[0].shape)||!((a=An[1])!=null&&a.inputs[0].shape))return[];Pa=[e.shape[2]||0,e.shape[1]||0],u1++;let n=(t.hand.skipTime||0)>ue()-u4,s=u1<(t.hand.skipFrames||0);return t.skipAllowed&&n&&s?Jt.hands:new Promise(async o=>{let i=3*(t.hand.skipTime||0)>ue()-u4,l=u1<3*(t.hand.skipFrames||0);t.skipAllowed&&Jt.hands.length===t.hand.maxDetected?Jt.hands=await Promise.all(Jt.boxes.map(c=>c4(e,c,t))):t.skipAllowed&&i&&l&&Jt.hands.length>0?Jt.hands=await Promise.all(Jt.boxes.map(c=>c4(e,c,t))):(Jt.boxes=await mxe(e,t),u4=ue(),Jt.hands=await Promise.all(Jt.boxes.map(c=>c4(e,c,t))),u1=0);let u=[...Jt.boxes];if(Jt.boxes.length=0,t.cacheSensitivity>0)for(let c=0;c.05&&p.box[3]/(e.shape[1]||1)>.05&&Jt.hands[c].fingerScore&&Jt.hands[c].fingerScore>(t.hand.minConfidence||0)){let d=j2(p.box,vE),h=j2(p.boxRaw,vE);Jt.boxes.push({...u[c],box:d,boxRaw:h})}}for(let c=0;cue()-TE,a=p4<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&a&&CE===s&&c1[n]?(p4++,c1[n]):(p4=0,new Promise(async l=>{let u=Se.resizeBilinear(e,[Gn!=null&&Gn.inputs[0].shape?Gn.inputs[0].shape[2]:0,Gn!=null&&Gn.inputs[0].shape?Gn.inputs[0].shape[1]:0],!1),c=Gn==null?void 0:Gn.execute(u),p=(await c.data())[0];c1[n]=Math.round(100*p)/100,CE=s,TE=ue(),ee([u,c]),l(c1[n])}))}var Jh={};la(Jh,{connected:()=>p1,horizontal:()=>f4,kpt:()=>d1,relative:()=>g4,vertical:()=>m4});var d1=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],f4=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],m4=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],g4=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],p1={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var RE=.005,Vs={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function y4(e){for(let t of f4){let n=e.keypoints.findIndex(r=>r.part===t[0]),s=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[s]&&e.keypoints[n].position[0]r&&r.part===t[0]),s=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[s]&&e.keypoints[n].position[1]u&&u.part===t[0]),r=e.keypoints.findIndex(u=>u&&u.part===t[1]),a=e.keypoints.findIndex(u=>u&&u.part===n[0]),o=e.keypoints.findIndex(u=>u&&u.part===n[1]);if(!e.keypoints[a]||!e.keypoints[o])continue;let i=e.keypoints[s]?[Math.abs(e.keypoints[a].position[0]-e.keypoints[s].position[0]),Math.abs(e.keypoints[o].position[0]-e.keypoints[s].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[o].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[a].position[0]-e.keypoints[r].position[0])]:[0,0];if(i[0]>i[1]||l[0]>l[1]){let u=e.keypoints[s];e.keypoints[s]=e.keypoints[r],e.keypoints[r]=u}}}function _E(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Qs(e,Vs.padding),n.resize=Se.resizeBilinear(n.pad,[t,t]);let s=ye(n.resize,"int32");return Object.keys(n).forEach(r=>ee(n[r])),s}function $E(e,t){e.keypoints=e.keypoints.filter(s=>s&&s.position);for(let s of e.keypoints)s.position=[s.position[0]*(t[0]+Vs.padding[2][0]+Vs.padding[2][1])/t[0]-Vs.padding[2][0],s.position[1]*(t[1]+Vs.padding[1][0]+Vs.padding[1][1])/t[1]-Vs.padding[1][0]],s.positionRaw=[s.position[0]/t[0],s.position[1]/t[1]];let n=Ea(e.keypoints.map(s=>s.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var Us,h1=0,A4=Number.MAX_SAFE_INTEGER,Au={boxes:[],bodies:[],last:0};async function PE(e){return pe.initial&&(Us=null),Us?e.debug&&oe("cached model:",Us.modelUrl):(l1(["size"],e),Us=await He(e.body.modelPath)),h1=Us.inputs[0].shape?Us.inputs[0].shape[2]:0,h1<64&&(h1=256),Us}async function yxe(e,t,n){let s=e[0][0],r=[],a=0;for(let c=0;ct.body.minConfidence){let p=[s[c][1],s[c][0]];r.push({score:Math.round(100*a)/100,part:d1[c],positionRaw:p,position:[Math.round((n.shape[2]||0)*p[0]),Math.round((n.shape[1]||0)*p[1])]})}a=r.reduce((c,p)=>p.score>c?p.score:c,0);let o=[],i=Ea(r.map(c=>c.position),[n.shape[2],n.shape[1]]),l={};for(let[c,p]of Object.entries(p1)){let d=[];for(let h=0;hg.part===p[h]),m=r.find(g=>g.part===p[h+1]);f&&m&&f.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([f.position,m.position])}l[c]=d}let u={id:0,score:a,box:i.box,boxRaw:i.boxRaw,keypoints:r,annotations:l};return y4(u),o.push(u),o}async function Axe(e,t,n){let s=[];for(let r=0;rt.body.minConfidence){let i=[];for(let p=0;p<17;p++){let d=a[3*p+2];if(d>t.body.minConfidence){let h=[a[3*p+1],a[3*p+0]];i.push({part:d1[p],score:Math.round(100*d)/100,positionRaw:h,position:[Math.round((n.shape[2]||0)*h[0]),Math.round((n.shape[1]||0)*h[1])]})}}let l=Ea(i.map(p=>p.position),[n.shape[2],n.shape[1]]),u={};for(let[p,d]of Object.entries(p1)){let h=[];for(let f=0;fy.part===d[f]),g=i.find(y=>y.part===d[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}u[p]=h}let c={id:r,score:o,box:l.box,boxRaw:l.boxRaw,keypoints:[...i],annotations:u};y4(c),s.push(c)}}return s.sort((r,a)=>a.score-r.score),s.length>t.body.maxDetected&&(s.length=t.body.maxDetected),s}async function x4(e,t){if(!Us||!(Us!=null&&Us.inputs[0].shape))return[];t.skipAllowed||(Au.boxes.length=0),A4++;let n=(t.body.skipTime||0)>ue()-Au.last,s=A4<(t.body.skipFrames||0);return t.skipAllowed&&n&&s?Au.bodies:new Promise(async r=>{let a={};A4=0,a.input=DE(e,h1),a.res=Us==null?void 0:Us.execute(a.input),Au.last=ue();let o=await a.res.array();Au.bodies=a.res.shape[2]===17?await yxe(o,t,e):await Axe(o,t,e);for(let i of Au.bodies)$E(i,[e.shape[2]||1,e.shape[1]||1]),_E(i.keypoints);Object.keys(a).forEach(i=>ee(a[i])),r(Au.bodies)})}var Ed,f1=[],OE=0,b4=Number.MAX_SAFE_INTEGER,g1=0,m1=2.5;async function ME(e){if(!Ed||pe.initial){Ed=await He(e.object.modelPath);let t=Object.values(Ed.modelSignature.inputs);g1=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&oe("cached model:",Ed.modelUrl);return Ed}async function xxe(e,t,n){let s=0,r=[];for(let l of[1,2,4]){let u=l*13,c=st(e.find(g=>g.shape[1]===u**2&&(g.shape[2]||0)===vd.length)),p=await c.array(),d=st(e.find(g=>g.shape[1]===u**2&&(g.shape[2]||0)(n.object.minConfidence||0)&&y!==61){let A=(.5+Math.trunc(g%u))/u,b=(.5+Math.trunc(g/u))/u,w=m[g].map(C=>C*(u/l/g1)),[S,I]=[A-m1/l*w[0],b-m1/l*w[1]],[E,_]=[A+m1/l*w[2]-S,b+m1/l*w[3]-I],P=[S,I,E,_];P=P.map(C=>Math.max(0,Math.min(C,1)));let R=[P[0]*t[0],P[1]*t[1],P[2]*t[0],P[3]*t[1]],$={id:s++,score:Math.round(100*x)/100,class:y+1,label:vd[y].label,box:R.map(C=>Math.trunc(C)),boxRaw:P};r.push($)}}ee([c,d,h,f])}let a=r.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),o=r.map(l=>l.score),i=[];if(a&&a.length>0){let l=await Se.nonMaxSuppressionAsync(a,o,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence);i=await l.data(),ee(l)}return r=r.filter((l,u)=>i.includes(u)).sort((l,u)=>u.score-l.score),r}async function v4(e,t){let n=(t.object.skipTime||0)>ue()-OE,s=b4<(t.object.skipFrames||0);return t.skipAllowed&&n&&s&&f1.length>0?(b4++,f1):(b4=0,!pe.kernels.includes("mod")||!pe.kernels.includes("sparsetodense")?f1:new Promise(async r=>{let a=[e.shape[2]||0,e.shape[1]||0],o=Se.resizeBilinear(e,[g1,g1],!1),i=he(o,rt.tf255),l=et(i,[0,3,1,2]),u;t.object.enabled&&(u=Ed.execute(l)),OE=ue();let c=await xxe(u,a,t);f1=c,ee([o,i,l,...u]),r(c)}))}var ef=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],bxe=ef.length,Qh=ef.reduce((e,t,n)=>(e[t]=n,e),{}),vxe=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],PIe=vxe.map(([e,t])=>[Qh[e],Qh[t]]),LE=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function BE(e){let t=e.reduce(({maxX:n,maxY:s,minX:r,minY:a},{position:{x:o,y:i}})=>({maxX:Math.max(n,o),maxY:Math.max(s,i),minX:Math.min(r,o),minY:Math.min(a,i)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function WE(e,[t,n],[s,r]){let a=t/s,o=n/r,i=(u,c)=>({id:c,score:u.score,boxRaw:[u.box[0]/r,u.box[1]/s,u.box[2]/r,u.box[3]/s],box:[Math.trunc(u.box[0]*o),Math.trunc(u.box[1]*a),Math.trunc(u.box[2]*o),Math.trunc(u.box[3]*a)],keypoints:u.keypoints.map(({score:p,part:d,position:h})=>({score:p,part:d,position:[Math.trunc(h.x*o),Math.trunc(h.y*a)],positionRaw:[h.x/s,h.y/s]})),annotations:{}});return e.map((u,c)=>i(u,c))}var y1=class{constructor(t,n){me(this,"priorityQueue");me(this,"numberOfElements");me(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function VE(e,t,n,s){let r=n-e,a=s-t;return r*r+a*a}function S4(e,t){return{x:e.x+t.x,y:e.y+t.y}}var Br,kxe=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],A1=1,Rd=16,Ixe=50**2;function UE(e,t,n,s,r,a,o=2){let i=y=>({y:a.get(y.y,y.x,e),x:a.get(y.y,y.x,a.shape[2]/2+e)}),l=(y,x,A)=>({y:I4(Math.round(y.y/Rd),0,x-1),x:I4(Math.round(y.x/Rd),0,A-1)}),[u,c]=s.shape,p=l(t.position,u,c),d=i(p),f=S4(t.position,d);for(let y=0;y[Qh[d],Qh[h]]),o=a.map(([,d])=>d),i=a.map(([d])=>d),l=t.shape[2],u=o.length,c=new Array(l),p=k4(e.part,Rd,n);c[e.part.id]={score:e.score,part:ef[e.part.id],position:p};for(let d=u-1;d>=0;--d){let h=o[d],f=i[d];c[h]&&!c[f]&&(c[f]=UE(d,c[h],f,t,n,r))}for(let d=0;dt){i=!1;break}if(!i)break}return i}function Txe(e,t){let[n,s,r]=t.shape,a=new y1(n*s*r,({score:o})=>o);for(let o=0;o{var o;let a=(o=r[s])==null?void 0:o.position;return a?VE(n,t,a.y,a.x)<=Ixe:!1})}function Nxe(e,t){return t.reduce((s,{position:r,score:a},o)=>(GE(e,r,o)||(s+=a),s),0)/t.length}function Exe(e,t,n,s,r,a){let o=[],i=Txe(a,t);for(;o.lengthh.score>a);let p=Nxe(o,c),d=BE(c);p>a&&o.push({keypoints:c,box:d,score:Math.round(100*p)/100})}return o}async function C4(e,t){let n=Y(()=>{if(!Br.inputs[0].shape)return[];let o=Se.resizeBilinear(e,[Br.inputs[0].shape[2],Br.inputs[0].shape[1]]),i=fe(he(ye(o,"float32"),127.5),1),u=Br.execute(i,kxe).map(c=>st(c,[0]));return u[1]=Cn(u[1]),u}),s=await Promise.all(n.map(o=>o.buffer()));for(let o of n)ee(o);let r=await Exe(s[0],s[1],s[2],s[3],t.body.maxDetected,t.body.minConfidence);return Br.inputs[0].shape?WE(r,[e.shape[1],e.shape[2]],[Br.inputs[0].shape[2],Br.inputs[0].shape[1]]):[]}async function HE(e){return!Br||pe.initial?Br=await He(e.body.modelPath):e.debug&&oe("cached model:",Br.modelUrl),Br}var sa,T4=!1;async function N4(e){return!sa||pe.initial?sa=await He(e.segmentation.modelPath):e.debug&&oe("cached model:",sa.modelUrl),sa}async function qE(e,t,n){var m,g;if(T4)return{data:[],canvas:null,alpha:null};T4=!0,sa||await N4(n);let s=await yd(e,n),r=((m=s.tensor)==null?void 0:m.shape[2])||0,a=((g=s.tensor)==null?void 0:g.shape[1])||0;if(!s.tensor)return{data:[],canvas:null,alpha:null};let o={};o.resize=Se.resizeBilinear(s.tensor,[sa.inputs[0].shape?sa.inputs[0].shape[1]:0,sa.inputs[0].shape?sa.inputs[0].shape[2]:0],!1),ee(s.tensor),o.norm=he(o.resize,rt.tf255),o.res=sa.execute(o.norm),o.squeeze=st(o.res,0),o.squeeze.shape[2]===2?(o.softmax=Ql(o.squeeze),[o.bg,o.fg]=En(o.softmax,2),o.expand=Kt(o.fg,2),o.pad=Kt(o.expand,0),o.crop=Se.cropAndResize(o.pad,[[0,0,.5,.5]],[0],[r,a]),o.data=st(o.crop,0)):o.data=Se.resizeBilinear(o.squeeze,[a,r]);let i=Array.from(await o.data.data());if(pe.node&&!pe.Canvas&&typeof ImageData=="undefined")return n.debug&&oe("canvas support missing"),Object.keys(o).forEach(y=>ee(o[y])),{data:i,canvas:null,alpha:null};let l=ls(r,a);Js&&await Js.toPixels(o.data,l);let u=l.getContext("2d");n.segmentation.blur&&n.segmentation.blur>0&&(u.filter=`blur(${n.segmentation.blur}px)`);let c=u.getImageData(0,0,r,a),p=ls(r,a),d=p.getContext("2d");s.canvas&&d.drawImage(s.canvas,0,0),d.globalCompositeOperation="darken",n.segmentation.blur&&n.segmentation.blur>0&&(d.filter=`blur(${n.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let h=d.getImageData(0,0,r,a);for(let y=0;yee(o[y])),T4=!1,{data:i,canvas:p,alpha:l}}var tf=class{constructor(){me(this,"ssrnetage",null);me(this,"gear",null);me(this,"blazeposedetect",null);me(this,"blazepose",null);me(this,"centernet",null);me(this,"efficientpose",null);me(this,"mobilefacenet",null);me(this,"insightface",null);me(this,"emotion",null);me(this,"facedetect",null);me(this,"faceiris",null);me(this,"facemesh",null);me(this,"faceres",null);me(this,"ssrnetgender",null);me(this,"handpose",null);me(this,"handskeleton",null);me(this,"handtrack",null);me(this,"liveness",null);me(this,"movenet",null);me(this,"nanodet",null);me(this,"posenet",null);me(this,"segmentation",null);me(this,"antispoof",null)}},E4=e=>{let t=0,n=0,s=0;for(let a of Object.values(Wr))t+=a.sizeFromManifest,n+=a.sizeLoadedWeights,s+=a.sizeDesired;let r=s>0?n/s:0;return{numLoadedModels:Object.values(Wr).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:s,totalSizeEnabled:void 0,modelStats:Object.values(Wr)}};function a1(e){for(let t of Object.keys(e.models))e.models[t]=null}async function R4(e){var t,n,s,r,a,o,i,l,u,c,p,d,h,f,m,g,y,x,A,b,w,S,I,E,_,P,R,$,C,F,V,q;pe.initial&&a1(e),e.config.hand.enabled&&(!e.models.handpose&&((n=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:n.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await l4(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(s=e.config.hand.detector)==null?void 0:s.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await l4(e.config))),e.config.body.enabled&&!e.models.blazepose&&((o=(a=e.config.body)==null?void 0:a.modelPath)==null?void 0:o.includes("blazepose"))&&(e.models.blazepose=hN(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=pN(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((l=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:l.includes("efficientpose"))&&(e.models.efficientpose=xN(e.config)),e.config.body.enabled&&!e.models.movenet&&((c=(u=e.config.body)==null?void 0:u.modelPath)==null?void 0:c.includes("movenet"))&&(e.models.movenet=PE(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(p=e.config.body)==null?void 0:p.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=HE(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=sN(e.config)),e.config.face.enabled&&((h=e.config.face.antispoof)==null?void 0:h.enabled)&&!e.models.antispoof&&(e.models.antispoof=GT(e.config)),e.config.face.enabled&&((f=e.config.face.liveness)==null?void 0:f.enabled)&&!e.models.liveness&&(e.models.liveness=NE(e.config)),e.config.face.enabled&&((m=e.config.face.description)==null?void 0:m.enabled)&&!e.models.faceres&&(e.models.faceres=KN(e.config)),e.config.face.enabled&&((g=e.config.face.emotion)==null?void 0:g.enabled)&&!e.models.emotion&&(e.models.emotion=kN(e.config)),e.config.face.enabled&&((y=e.config.face.iris)==null?void 0:y.enabled)&&!((x=e.config.face.attention)!=null&&x.enabled)&&!e.models.faceiris&&(e.models.faceiris=zN(e.config)),e.config.face.enabled&&((A=e.config.face.mesh)==null?void 0:A.enabled)&&!e.models.facemesh&&(e.models.facemesh=GN(e.config)),e.config.face.enabled&&((b=e.config.face.gear)==null?void 0:b.enabled)&&!e.models.gear&&(e.models.gear=_T(e.config)),e.config.face.enabled&&((w=e.config.face.ssrnet)==null?void 0:w.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=OT(e.config)),e.config.face.enabled&&((S=e.config.face.ssrnet)==null?void 0:S.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=BT(e.config)),e.config.face.enabled&&((I=e.config.face.mobilefacenet)==null?void 0:I.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=NN(e.config)),e.config.face.enabled&&((E=e.config.face.insightface)==null?void 0:E.enabled)&&!e.models.insightface&&(e.models.insightface=$N(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((P=(_=e.config.hand.detector)==null?void 0:_.modelPath)==null?void 0:P.includes("handtrack"))&&(e.models.handtrack=kE(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&(($=(R=e.config.hand.detector)==null?void 0:R.modelPath)==null?void 0:$.includes("handtrack"))&&(e.models.handskeleton=IE(e.config)),e.config.object.enabled&&!e.models.centernet&&((F=(C=e.config.object)==null?void 0:C.modelPath)==null?void 0:F.includes("centernet"))&&(e.models.centernet=gN(e.config)),e.config.object.enabled&&!e.models.nanodet&&((q=(V=e.config.object)==null?void 0:V.modelPath)==null?void 0:q.includes("nanodet"))&&(e.models.nanodet=ME(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=N4(e.config));for await(let z of Object.keys(e.models))e.models[z]&&typeof e.models[z]!="undefined"&&(e.models[z]=await e.models[z])}var nr;function _d(e,t,n){if(e&&(nr=e),!t||(nr||oe("instance not registred"),!nr.config.validateModels))return null;let s=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],a=[],o=[],i=t.modelUrl,l=t.executor;if(l&&l.graph.nodes)for(let u of Object.values(l.graph.nodes)){let c=u.op.toLowerCase();a.includes(c)||a.push(c)}else!l&&nr.config.debug&&oe("model signature not determined:",n);for(let u of a)!s.includes(u)&&!r.includes(u)&&!nr.env.kernels.includes(u)&&!nr.env.kernels.includes(u.replace("_",""))&&!nr.env.kernels.includes(u.replace("native",""))&&!nr.env.kernels.includes(u.replace("v2",""))&&o.push(u);return nr.config.debug&&o.length>0&&oe("model validation failed:",n,o),o.length>0?{name:n,missing:o,ops:a,url:i}:null}function x1(e){nr=e;let t=[];for(let n of Object.keys(nr.models)){let s=nr.models[n];if(!s)continue;let r=_d(nr,s,n);r&&t.push(r)}return t}var ds={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},Wr={};async function Rxe(e,t){return ds.debug&&oe("load model fetch:",e,t),fetch(e,t)}function KE(e){ds.cacheModels=e.cacheModels,ds.verbose=e.debug,ds.modelBasePath=e.modelBasePath}async function He(e){var u,c,p;let t=fv(ds.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),s=n[n.length-1].replace(".json",""),r="indexeddb://"+s;Wr[s]={name:s,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:gb[s],inCache:!1},ds.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let a={};try{a=ds.cacheSupported&&ds.cacheModels?await Ns.listModels():{}}catch(d){ds.cacheSupported=!1}Wr[s].inCache=ds.cacheSupported&&ds.cacheModels&&Object.keys(a).includes(r);let o=typeof fetch=="undefined"?{}:{fetchFunc:(d,h)=>Rxe(d,h)},i=new Fh(Wr[s].inCache?r:t,o),l=!1;try{i.findIOHandler(),ds.debug&&oe("model load handler:",i.handler);let d=await i.handler.load();Wr[s].sizeFromManifest=((u=d==null?void 0:d.weightData)==null?void 0:u.byteLength)||0,i.loadSync(d),Wr[s].sizeLoadedWeights=((p=(c=i==null?void 0:i.artifacts)==null?void 0:c.weightData)==null?void 0:p.byteLength)||0,ds.verbose&&oe("load model:",i.modelUrl,{bytes:Wr[s].sizeLoadedWeights},ds),l=!0}catch(d){oe("error loading model:",t,d)}if(l&&ds.cacheModels&&ds.cacheSupported&&!Wr[s].inCache)try{let d=await i.save(r);oe("model saved:",r,d)}catch(d){oe("error saving model:",t,d)}return _d(null,i,`${e}`),i}var _4="2.9.3";var z4={};la(z4,{all:()=>M4,body:()=>$d,canvas:()=>O4,face:()=>Dd,gesture:()=>Od,hand:()=>Pd,object:()=>Fd,options:()=>Hn,person:()=>F4});var sr=e=>{if(!e)oe("draw error: invalid canvas");else if(!e.getContext)oe("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)oe("draw error: cannot get canvas context");else return t}return null},xu=e=>Math.round(e*180/Math.PI),Fa=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function Oa(e,t,n,s,r){e.fillStyle=Fa(s,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function ra(e,t,n,s,r,a){if(e.beginPath(),e.lineWidth=a.lineWidth,a.useCurves){let o=(t+t+s)/2,i=(n+n+r)/2;e.ellipse(o,i,s/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+a.roundRect,n),e.lineTo(t+s-a.roundRect,n),e.quadraticCurveTo(t+s,n,t+s,n+a.roundRect),e.lineTo(t+s,n+r-a.roundRect),e.quadraticCurveTo(t+s,n+r,t+s-a.roundRect,n+r),e.lineTo(t+a.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-a.roundRect),e.lineTo(t,n+a.roundRect),e.quadraticCurveTo(t,n,t+a.roundRect,n),e.closePath();e.stroke()}function D4(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let s of t)e.strokeStyle=Fa(s[2]||0,n),e.lineTo(Math.trunc(s[0]),Math.trunc(s[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function ZE(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){D4(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let s=0;s0){let s=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);s.length>3&&(s.length=3),n.push(s.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&n.push(`roll: ${xu(e.rotation.angle.roll)}\xB0 yaw:${xu(e.rotation.angle.yaw)}\xB0 pitch:${xu(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&n.push(`gaze: ${xu(e.rotation.gaze.bearing)}\xB0`)),n.length===0&&n.push("face"),t.fillStyle=gt.color;for(let s=n.length-1;s>=0;s--){let r=Math.max(e.box[0],0),a=s*gt.lineHeight+e.box[1];gt.shadowColor&>.shadowColor!==""&&(t.fillStyle=gt.shadowColor,t.fillText(n[s],r+5,a+16)),t.fillStyle=gt.labelColor,t.fillText(n[s],r+4,a+15)}}}function Pxe(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=gt.useDepth?"rgba(255, 200, 255, 0.3)":gt.color,t.beginPath();let n=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,s=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],n,s,0,0,2*Math.PI),t.stroke(),gt.fillPolygons&&(t.fillStyle=gt.useDepth?"rgba(255, 255, 200, 0.3)":gt.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=gt.useDepth?"rgba(255, 200, 255, 0.3)":gt.color,t.beginPath();let n=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,s=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],n,s,0,0,2*Math.PI),t.stroke(),gt.fillPolygons&&(t.fillStyle=gt.useDepth?"rgba(255, 255, 200, 0.3)":gt.color,t.fill())}}function Fxe(e,t){var n;if(gt.drawGaze&&((n=e.rotation)==null?void 0:n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let s=e.box[0]+e.box[2]/2-e.box[3]*xu(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*xu(e.rotation.angle.pitch)/90,a=new Path2D(` +`;var hb=(e,t,n)=>{let s=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(s,(r,a)=>(n[a]=0,r))},fb=class{constructor(t,n,s){me(this,"uniform",{});me(this,"attribute",{});me(this,"gl");me(this,"id");me(this,"compile",(t,n)=>{let s=this.gl.createShader(n);return s?(this.gl.shaderSource(s,t),this.gl.compileShader(s),this.gl.getShaderParameter(s,this.gl.COMPILE_STATUS)?s:(oe(`filter: gl compile failed: ${this.gl.getShaderInfoLog(s)}`),null)):(oe("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),a=this.compile(s,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!a)){if(!this.id){oe("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,a),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){oe(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),hb(n,"attribute",this.attribute);for(let o in this.attribute)this.attribute[o]=this.gl.getAttribLocation(this.id,o);hb(n,"uniform",this.uniform),hb(s,"uniform",this.uniform);for(let o in this.uniform)this.uniform[o]=this.gl.getUniformLocation(this.id,o)}}};function CT(){let e=0,t=null,n=!1,s=-1,r=[null,null],a=[],o=null,i=null,l=ls(100,100),u={},c={INTERMEDIATE:1},p=l.getContext("webgl");if(!p){oe("filter: cannot get webgl context");return}this.gl=p;function d(x,A){if(!(x===l.width&&A===l.height)){if(l.width=x,l.height=A,!o){let b=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);o=p.createBuffer(),p.bindBuffer(p.ARRAY_BUFFER,o),p.bufferData(p.ARRAY_BUFFER,b,p.STATIC_DRAW),p.pixelStorei(p.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}p.viewport(0,0,l.width,l.height),r=[null,null]}}function h(x,A){let b=p.createFramebuffer();p.bindFramebuffer(p.FRAMEBUFFER,b);let w=p.createRenderbuffer();p.bindRenderbuffer(p.RENDERBUFFER,w);let S=p.createTexture();return p.bindTexture(p.TEXTURE_2D,S),p.texImage2D(p.TEXTURE_2D,0,p.RGBA,x,A,0,p.RGBA,p.UNSIGNED_BYTE,null),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,p.LINEAR),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,p.LINEAR),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,S,0),p.bindTexture(p.TEXTURE_2D,null),p.bindFramebuffer(p.FRAMEBUFFER,null),{fbo:b,texture:S}}function f(x){return r[x]=r[x]||h(l.width,l.height),r[x]}function m(x=0){if(!i)return;let A=null,b=null,w=!1;e===0?A=t:A=f(s).texture||null,e++,n&&!(x&c.INTERMEDIATE)?(b=null,w=e%2===0):(s=(s+1)%2,b=f(s).fbo||null),p.bindTexture(p.TEXTURE_2D,A),p.bindFramebuffer(p.FRAMEBUFFER,b),p.uniform1f(i.uniform.flipY,w?-1:1),p.drawArrays(p.TRIANGLES,0,6)}function g(x){if(u[x])return i=u[x],p.useProgram((i?i.id:null)||null),i;if(i=new fb(p,bT,x),!i)return oe("filter: could not get webgl program"),null;let A=Float32Array.BYTES_PER_ELEMENT,b=4*A;return p.enableVertexAttribArray(i.attribute.pos),p.vertexAttribPointer(i.attribute.pos,2,p.FLOAT,!1,b,0*A),p.enableVertexAttribArray(i.attribute.uv),p.vertexAttribPointer(i.attribute.uv,2,p.FLOAT,!1,b,2*A),u[x]=i,i}let y={colorMatrix:x=>{let A=new Float32Array(x);A[4]/=255,A[9]/=255,A[14]/=255,A[19]/=255;let b=A[18]===1&&A[3]===0&&A[8]===0&&A[13]===0&&A[15]===0&&A[16]===0&&A[17]===0&&A[19]===0?wT:vT,w=g(b);!w||(p.uniform1fv(w.uniform.m,A),m())},brightness:x=>{let A=(x||0)+1;y.colorMatrix([A,0,0,0,0,0,A,0,0,0,0,0,A,0,0,0,0,0,1,0])},saturation:x=>{let A=(x||0)*2/3+1,b=(A-1)*-.5;y.colorMatrix([A,b,b,0,0,b,A,b,0,0,b,b,A,0,0,0,0,0,1,0])},desaturate:()=>{y.saturation(-1)},contrast:x=>{let A=(x||0)+1,b=-128*(A-1);y.colorMatrix([A,0,0,0,b,0,A,0,0,b,0,0,A,0,b,0,0,0,1,0])},negative:()=>{y.contrast(-2)},hue:x=>{x=(x||0)/180*Math.PI;let A=Math.cos(x),b=Math.sin(x),w=.213,S=.715,I=.072;y.colorMatrix([w+A*(1-w)+b*-w,S+A*-S+b*-S,I+A*-I+b*(1-I),0,0,w+A*-w+b*.143,S+A*(1-S)+b*.14,I+A*-I+b*-.283,0,0,w+A*-w+b*-(1-w),S+A*-S+b*S,I+A*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{y.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{y.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{y.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{y.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{y.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{y.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{y.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{y.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:x=>{let A=new Float32Array(x),b=1/l.width,w=1/l.height,S=g(ST);!S||(p.uniform1fv(S.uniform.m,A),p.uniform2f(S.uniform.px,b,w),m())},detectEdges:()=>{y.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{y.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{y.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:x=>{let A=x||1;y.convolution.call(this,[0,-1*A,0,-1*A,1+4*A,-1*A,0,-1*A,0])},emboss:x=>{let A=x||1;y.convolution.call(this,[-2*A,-1*A,0,-1*A,1,1*A,0,1*A,2*A])},blur:x=>{let A=x/7/l.width,b=x/7/l.height,w=g(IT);!w||(p.uniform2f(w.uniform.px,0,b),m(c.INTERMEDIATE),p.uniform2f(w.uniform.px,A,0),m())},pixelate:x=>{let A=x/l.width,b=x/l.height,w=g(kT);!w||(p.uniform2f(w.uniform.size,A,b),m())}};this.add=function(x){let A=Array.prototype.slice.call(arguments,1),b=y[x];a.push({func:b,args:A})},this.reset=function(){a=[]},this.get=function(){return a},this.apply=function(x){d(x.width,x.height),e=0,t||(t=p.createTexture()),p.bindTexture(p.TEXTURE_2D,t),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,p.NEAREST),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,p.NEAREST),p.texImage2D(p.TEXTURE_2D,0,p.RGBA,p.RGBA,p.UNSIGNED_BYTE,x);for(let A=0;Ah.data())),o=.99*Math.max(a[0][0],a[1][0],a[2][0]),i=[fe(n[0],s[0]),fe(n[1],s[1]),fe(n[2],s[2])],l=[fe(r[0],s[0]),fe(r[1],s[1]),fe(r[2],s[2])],u=[he(o,l[0]),he(o,l[1]),he(o,l[2])],c=[L(i[0],u[0]),L(i[1],u[1]),L(i[2],u[2])],p=on([c[0],c[1],c[2]],2),d=G(p,[1,t.shape[0],t.shape[1],3]);return ee([...n,...s,...r,...i,...l,...u,...c,p,t]),d}var P2=3840,mt=null,cn=null,gd=null,$t,Na={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function ls(e,t){let n;if(pe.browser)if(pe.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");n=document.createElement("canvas"),n.width=e,n.height=t}else typeof pe.Canvas!="undefined"?n=new pe.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function F2(e,t){let n=t||ls(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function yd(e,t,n=!0){if(!e)return t.debug&&oe("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof nt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof pe.Canvas!="undefined"&&e instanceof pe.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof nt){let s=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)s=Kt(e,0);else if(e.shape[2]===4){let r=di(e,[0,0,0],[-1,-1,3]);s=Kt(r,0),ee(r)}}else e.shape.length===4&&(e.shape[3]===3?s=On(e):e.shape[3]===4&&(s=so(e,[0,0,0,0],[-1,-1,-1,3])));if(s==null||s.shape.length!==4||s.shape[0]!==1||s.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(s.dtype==="int32"){let r=ye(s,"float32");ee(s),s=r}return{tensor:s,canvas:t.filter.return?cn:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&oe("input stream is not ready"),{tensor:null,canvas:mt};let s=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!s||!r)return t.debug&&oe("cannot determine input dimensions"),{tensor:null,canvas:mt};let a=s,o=r;if(a>P2&&(a=P2,o=Math.trunc(a*r/s)),o>P2&&(o=P2,a=Math.trunc(o*s/r)),(t.filter.width||0)>0?a=t.filter.width:(t.filter.height||0)>0&&(a=s*((t.filter.height||0)/r)),(t.filter.height||0)>0?o=t.filter.height:(t.filter.width||0)>0&&(o=r*((t.filter.width||0)/s)),!a||!o)throw new Error("input error: cannot determine dimension");(!mt||(mt==null?void 0:mt.width)!==a||(mt==null?void 0:mt.height)!==o)&&(mt=ls(a,o));let i=mt.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?i.putImageData(e,0,0):t.filter.flip&&typeof i.translate!="undefined"?(i.translate(s,0),i.scale(-1,1),i.drawImage(e,0,0,s,r,0,0,mt==null?void 0:mt.width,mt==null?void 0:mt.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,s,r,0,0,mt==null?void 0:mt.width,mt==null?void 0:mt.height),(!cn||mt.width!==cn.width||(mt==null?void 0:mt.height)!==(cn==null?void 0:cn.height))&&(cn=ls(mt.width,mt.height)),t.filter.enabled&&pe.webgl.supported?($t||($t=pe.browser?new CT:null),pe.filter=!!$t,!$t||!$t.add?(t.debug&&oe("input process error: cannot initialize filters"),pe.webgl.supported=!1,t.filter.enabled=!1,F2(mt,cn)):($t.reset(),t.filter.brightness!==0&&$t.add("brightness",t.filter.brightness),t.filter.contrast!==0&&$t.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&$t.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&$t.add("blur",t.filter.blur),t.filter.saturation!==0&&$t.add("saturation",t.filter.saturation),t.filter.hue!==0&&$t.add("hue",t.filter.hue),t.filter.negative&&$t.add("negative"),t.filter.sepia&&$t.add("sepia"),t.filter.vintage&&$t.add("brownie"),t.filter.sepia&&$t.add("sepia"),t.filter.kodachrome&&$t.add("kodachrome"),t.filter.technicolor&&$t.add("technicolor"),t.filter.polaroid&&$t.add("polaroid"),t.filter.pixelate!==0&&$t.add("pixelate",t.filter.pixelate),$t.get()>0?cn=$t.apply(mt):cn=$t.draw(mt))):(F2(mt,cn),$t&&($t=null),pe.filter=!!$t),!n)return{tensor:null,canvas:cn};if(!cn)throw new Error("canvas error: cannot create output");let l,u=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(pe.browser&&Js)l=Js?Js.fromPixels(e):null;else{u=e.data.length/e.height/e.width;let d=new Uint8Array(e.data.buffer);l=ct(d,[e.height,e.width,u],"int32")}else if((!gd||cn.width!==gd.width||cn.height!==gd.height)&&(gd=ls(cn.width,cn.height)),Js&&pe.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Js.fromPixels(cn):(gd=F2(cn),l=Js.fromPixels(gd));else{let f=F2(cn).getContext("2d").getImageData(0,0,a,o);u=f.data.length/a/o;let m=new Uint8Array(f.data.buffer);l=ct(m,[a,o,u])}if(u===4){let d=di(l,[0,0,0],[-1,-1,3]);ee(l),l=d}if(!l)throw new Error("input error: cannot create tensor");let c=ye(l,"float32"),p=t.filter.equalization?await $2(c):Kt(c,0);return ee([l,c]),{tensor:p,canvas:t.filter.return?cn:null}}}async function TT(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return n;if(!Na.inputTensor)Na.inputTensor=On(t);else if(Na.inputTensor.shape[1]!==t.shape[1]||Na.inputTensor.shape[2]!==t.shape[2])ee(Na.inputTensor),Na.inputTensor=On(t);else{let s={};s.diff=fe(t,Na.inputTensor),s.squared=L(s.diff,s.diff),s.sum=ke(s.squared);let a=(await s.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;ee([Na.inputTensor,s.diff,s.squared,s.sum]),Na.inputTensor=On(t),n=a<=(e.cacheSensitivity||0)}return n}async function NT(e,t,n){let s={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||oe("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||oe("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;s.input1=On(t),s.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?Se.resizeBilinear(n,[t.shape[1],t.shape[2]]):On(n),s.diff=fe(s.input1,s.input2),s.squared=L(s.diff,s.diff),s.sum=ke(s.squared);let a=(await s.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return ee([s.input1,s.input2,s.diff,s.squared,s.sum]),a}var mb=class{constructor(){me(this,"browser");me(this,"node");me(this,"worker");me(this,"platform","");me(this,"agent","");me(this,"backends",[]);me(this,"initial");me(this,"filter");me(this,"tfjs");me(this,"offscreen");me(this,"perfadd",!1);me(this,"tensorflow",{version:void 0,gpu:void 0});me(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});me(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});me(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});me(this,"cpu",{model:void 0,flags:[]});me(this,"kernels",[]);me(this,"Canvas");me(this,"Image");me(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Hh["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let n=t[0].match(/\(([^()]+)\)/g);this.platform=n&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(sn().registryFactory),this.tensorflow={version:Bn().binding?Bn().binding.TF_Version:void 0,gpu:Bn().binding?Bn().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&Ln()==="wasm"&&(this.wasm.simd=X().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=X().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=ls(100,100),n=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(Ln()==="webgl"||Ln()==="humangl")){let s=Bn().gpgpu!=="undefined"?await Bn().getGPGPUContext().gl:null;s&&(this.webgl.version=s.getParameter(s.VERSION),this.webgl.renderer=s.getParameter(s.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(s){this.webgpu.supported=!1}try{this.kernels=Xr(Ln()).map(s=>s.kernelName.toLowerCase())}catch(s){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},pe=new mb;var gb={};la(gb,{age:()=>cAe,"anti-spoofing":()=>WAe,antispoof:()=>Yye,blazeface:()=>Jye,"blazeface-back":()=>dAe,"blazeface-front":()=>pAe,"blazepose-detect":()=>BAe,"blazepose-detector2d":()=>hAe,"blazepose-detector3d":()=>fAe,"blazepose-full":()=>mAe,"blazepose-heavy":()=>gAe,"blazepose-lite":()=>yAe,default:()=>e5e,efficientpose:()=>AAe,"efficientpose-i-lite":()=>VAe,"efficientpose-ii-lite":()=>UAe,"efficientpose-iv":()=>GAe,emotion:()=>Qye,faceboxes:()=>xAe,facemesh:()=>eAe,"facemesh-attention":()=>vAe,"facemesh-attention-alt":()=>bAe,"facemesh-detection-full":()=>wAe,"facemesh-detection-short":()=>kAe,"facemesh-orig":()=>IAe,faceres:()=>tAe,"faceres-deep":()=>SAe,gear:()=>CAe,gender:()=>NAe,"gender-ssrnet-imdb":()=>TAe,handdetect:()=>EAe,"handlandmark-full":()=>nAe,"handlandmark-lite":()=>RAe,"handlandmark-sparse":()=>_Ae,handskeleton:()=>DAe,handtrack:()=>sAe,"insightface-efficientnet-b0":()=>HAe,"insightface-ghostnet-strides1":()=>jAe,"insightface-ghostnet-strides2":()=>qAe,"insightface-mobilenet-emore":()=>XAe,"insightface-mobilenet-swish":()=>KAe,iris:()=>rAe,liveness:()=>aAe,"mb3-centernet":()=>oAe,meet:()=>$Ae,mobileface:()=>PAe,mobilefacenet:()=>FAe,models:()=>iAe,"movenet-lightning":()=>lAe,"movenet-multipose":()=>OAe,"movenet-thunder":()=>MAe,nanodet:()=>zAe,"nanodet-e":()=>ZAe,"nanodet-g":()=>YAe,"nanodet-m":()=>JAe,"nanodet-t":()=>QAe,posenet:()=>LAe,selfie:()=>uAe});var Yye=853098,Jye=538928,Qye=820516,eAe=1477958,tAe=6978814,nAe=5431368,sAe=2964837,rAe=2599092,aAe=592976,oAe=4030290,iAe=0,lAe=4650216,uAe=212886,cAe=161240,dAe=538928,pAe=402048,hAe=7499400,fAe=5928856,mAe=6338290,gAe=27501554,yAe=2725490,AAe=5651240,xAe=2013002,bAe=2387598,vAe=2382414,wAe=1026192,kAe=201268,IAe=2955780,SAe=13957620,CAe=1498916,TAe=161236,NAe=201808,EAe=3515612,RAe=2023432,_Ae=5286322,DAe=5502280,$Ae=372228,PAe=2183192,FAe=5171976,OAe=9448838,MAe=12477112,zAe=7574558,LAe=5032780,BAe=5928804,WAe=853098,VAe=2269064,UAe=5651240,GAe=25643252,HAe=13013224,jAe=8093408,qAe=8049584,XAe=6938536,KAe=12168584,ZAe=12319156,YAe=7574558,JAe=1887474,QAe=5294216,e5e={antispoof:Yye,blazeface:Jye,emotion:Qye,facemesh:eAe,faceres:tAe,"handlandmark-full":nAe,handtrack:sAe,iris:rAe,liveness:aAe,"mb3-centernet":oAe,models:iAe,"movenet-lightning":lAe,selfie:uAe,age:cAe,"blazeface-back":dAe,"blazeface-front":pAe,"blazepose-detector2d":hAe,"blazepose-detector3d":fAe,"blazepose-full":mAe,"blazepose-heavy":gAe,"blazepose-lite":yAe,efficientpose:AAe,faceboxes:xAe,"facemesh-attention-alt":bAe,"facemesh-attention":vAe,"facemesh-detection-full":wAe,"facemesh-detection-short":kAe,"facemesh-orig":IAe,"faceres-deep":SAe,gear:CAe,"gender-ssrnet-imdb":TAe,gender:NAe,handdetect:EAe,"handlandmark-lite":RAe,"handlandmark-sparse":_Ae,handskeleton:DAe,meet:$Ae,mobileface:PAe,mobilefacenet:FAe,"movenet-multipose":OAe,"movenet-thunder":MAe,nanodet:zAe,posenet:LAe,"blazepose-detect":BAe,"anti-spoofing":WAe,"efficientpose-i-lite":VAe,"efficientpose-ii-lite":UAe,"efficientpose-iv":GAe,"insightface-efficientnet-b0":HAe,"insightface-ghostnet-strides1":jAe,"insightface-ghostnet-strides2":qAe,"insightface-mobilenet-emore":XAe,"insightface-mobilenet-swish":KAe,"nanodet-e":ZAe,"nanodet-g":YAe,"nanodet-m":JAe,"nanodet-t":QAe};var o1={};la(o1,{Models:()=>tf,getModelStats:()=>E4,load:()=>R4,reset:()=>a1,validate:()=>x1,validateModel:()=>_d});var gr,yb=[],t5e=["white","black","asian","indian","other"],n5e=[15,23,28,35.5,45.5,55.5,65],ET=0,RT=0,Ab=Number.MAX_SAFE_INTEGER;async function _T(e){var t;return pe.initial&&(gr=null),gr?e.debug&&oe("cached model:",gr.modelUrl):gr=await He((t=e.face.gear)==null?void 0:t.modelPath),gr}async function xb(e,t,n,s){var o,i;if(!gr)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=Ab<(((o=t.face.gear)==null?void 0:o.skipFrames)||0),a=(((i=t.face.gear)==null?void 0:i.skipTime)||0)>ue()-RT;return t.skipAllowed&&a&&r&&ET===s&&yb[n]?(Ab++,yb[n]):(Ab=0,new Promise(async l=>{var y,x;if(!(gr!=null&&gr.inputs[0].shape))return;let u={},c=[[0,.1,.9,.9]];u.resize=Se.cropAndResize(e,c,[0],[gr.inputs[0].shape[2],gr.inputs[0].shape[1]]);let p={age:0,gender:"unknown",genderScore:0,race:[]};(y=t.face.gear)!=null&&y.enabled&&([u.age,u.gender,u.race]=gr.execute(u.resize,["age_output","gender_output","race_output"]));let d=await u.gender.data();p.gender=d[0]>d[1]?"male":"female",p.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let h=await u.race.data();for(let A=0;A(((x=t.face.gear)==null?void 0:x.minConfidence)||.2)&&p.race.push({score:Math.round(100*h[A])/100,race:t5e[A]});p.race.sort((A,b)=>b.score-A.score);let m=Array.from(await u.age.data()).map((A,b)=>[n5e[b],A]).sort((A,b)=>b[1]-A[1]),g=m[0][0];for(let A=1;Aee(u[A])),yb[n]=p,ET=s,RT=ue(),l(p)}))}var rt={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function $T(){rt.tf255=Ce(255,"float32"),rt.tf1=Ce(1,"float32"),rt.tf2=Ce(2,"float32"),rt.tf05=Ce(.5,"float32"),rt.tf127=Ce(127.5,"float32"),rt.rgb=Ft([.2989,.587,.114],"float32")}var Ms,O2=[],PT=0,FT=0,bb=Number.MAX_SAFE_INTEGER;async function OT(e){return pe.initial&&(Ms=null),Ms?e.debug&&oe("cached model:",Ms.modelUrl):Ms=await He(e.face.ssrnet.modelPathAge),Ms}async function vb(e,t,n,s){var o,i,l,u;if(!Ms)return{age:0};let r=bb<(((o=t.face.ssrnet)==null?void 0:o.skipFrames)||0),a=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>ue()-FT;return t.skipAllowed&&r&&a&&PT===s&&((l=O2[n])==null?void 0:l.age)&&((u=O2[n])==null?void 0:u.age)>0?(bb++,O2[n]):(bb=0,new Promise(async c=>{if(!(Ms!=null&&Ms.inputs)||!Ms.inputs[0]||!Ms.inputs[0].shape)return;let p={};p.resize=Se.resizeBilinear(e,[Ms.inputs[0].shape[2],Ms.inputs[0].shape[1]],!1),p.enhance=L(p.resize,rt.tf255);let d={age:0};if(t.face.ssrnet.enabled&&(p.age=Ms.execute(p.enhance)),p.age){let h=await p.age.data();d.age=Math.trunc(10*h[0])/10}Object.keys(p).forEach(h=>ee(p[h])),O2[n]=d,PT=s,FT=ue(),c(d)}))}var yr,M2=[],zT=0,LT=0,wb=Number.MAX_SAFE_INTEGER,kb=[.2989,.587,.114];async function BT(e){return pe.initial&&(yr=null),yr?e.debug&&oe("cached model:",yr.modelUrl):yr=await He(e.face.ssrnet.modelPathGender),yr}async function Ib(e,t,n,s){var o,i,l,u;if(!yr)return{gender:"unknown",genderScore:0};let r=wb<(((o=t.face.ssrnet)==null?void 0:o.skipFrames)||0),a=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>ue()-LT;return t.skipAllowed&&r&&a&&zT===s&&((l=M2[n])==null?void 0:l.gender)&&((u=M2[n])==null?void 0:u.genderScore)>0?(wb++,M2[n]):(wb=0,new Promise(async c=>{if(!(yr!=null&&yr.inputs[0].shape))return;let p={};p.resize=Se.resizeBilinear(e,[yr.inputs[0].shape[2],yr.inputs[0].shape[1]],!1),p.enhance=Y(()=>{let[f,m,g]=Zt(p.resize,3,3),y=L(f,kb[0]),x=L(m,kb[1]),A=L(g,kb[2]),b=y0([y,x,A]);return L(fe(b,rt.tf05),2)});let d={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(p.gender=yr.execute(p.enhance));let h=await p.gender.data();d.gender=h[0]>h[1]?"female":"male",d.genderScore=h[0]>h[1]?Math.trunc(100*h[0])/100:Math.trunc(100*h[1])/100,Object.keys(p).forEach(f=>ee(p[f])),M2[n]=d,zT=s,LT=ue(),c(d)}))}var Wn,z2=[],Sb=Number.MAX_SAFE_INTEGER,VT=0,UT=0;async function GT(e){var t;return pe.initial&&(Wn=null),Wn?e.debug&&oe("cached model:",Wn.modelUrl):Wn=await He((t=e.face.antispoof)==null?void 0:t.modelPath),Wn}async function Cb(e,t,n,s){var o,i;if(!Wn)return 0;let r=(((o=t.face.antispoof)==null?void 0:o.skipTime)||0)>ue()-UT,a=Sb<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&a&&VT===s&&z2[n]?(Sb++,z2[n]):(Sb=0,new Promise(async l=>{let u=Se.resizeBilinear(e,[Wn!=null&&Wn.inputs[0].shape?Wn.inputs[0].shape[2]:0,Wn!=null&&Wn.inputs[0].shape?Wn.inputs[0].shape[1]:0],!1),c=Wn==null?void 0:Wn.execute(u),p=(await c.data())[0];z2[n]=Math.round(100*p)/100,VT=s,UT=ue(),ee([u,c]),l(z2[n])}))}var Ar={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},Tb={count:468,mouth:13,symmetryLine:[13,Ar.midwayBetweenEyes[0]]},lu={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},Nb=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],qh=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],uu=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var r5e=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],a5e=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],o5e=[33,133,362,263,1,78,308],uke=r5e.map(e=>qh[e]),cke=a5e.map(e=>qh[e]),dke=o5e.map(e=>qh[e]);function mi(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var i5e=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],l5e=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],u5e=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],c5e=[[474,475],[475,476],[476,477],[477,474]],d5e=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],p5e=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],h5e=[[469,470],[470,471],[471,472],[472,469]],f5e=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],pke={lips:mi(i5e),leftEye:mi(l5e),leftEyebrow:mi(u5e),leftIris:mi(c5e),rightEye:mi(d5e),rightEyebrow:mi(p5e),rightIris:mi(h5e),faceOval:mi(f5e)};var Ad=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],L2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],B2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],W2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],XT=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],s=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:s,landmarks:e.landmarks,confidence:e.confidence}},Rb=(e,t,n)=>{let s=t.shape[1],r=t.shape[2],a=[e.startPoint[1]/s,e.startPoint[0]/r,e.endPoint[1]/s,e.endPoint[0]/r],o=Se.cropAndResize(t,[a],[0],n),i=he(o,rt.tf255);return ee(o),i},V2=(e,t)=>{let n=L2(e),s=Ad(e),r=[t*s[0]/2,t*s[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},U2=e=>{let t=L2(e),n=Ad(e),s=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-s),Math.round(t[1]-s)],endPoint:[Math.round(t[0]+s),Math.round(t[1]+s)],landmarks:e.landmarks,confidence:e.confidence}},KT=e=>{let t=e.map(s=>s[0]),n=e.map(s=>s[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},_b=[[1,0,0],[0,1,0],[0,0,1]],m5e=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),g5e=(e,t)=>m5e(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var jT=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],cu=(e,t)=>{let n=0;for(let s=0;s{let n=[];for(let s=0;s{let n=[],s=e.length;for(let r=0;r{let n=Math.cos(e),s=Math.sin(e),r=[[n,-s,0],[s,n,0],[0,0,1]],a=jT(t[0],t[1]),o=qT(a,r),i=jT(-t[0],-t[1]);return qT(o,i)},A5e=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],s=[-cu(t[0],n),-cu(t[1],n)];return[t[0].concat(s[0]),t[1].concat(s[1]),[0,0,1]]},x5e=(e,t)=>[cu(e,t[0]),cu(e,t[1])];function YT(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let s=0;s[a[0]/r*(h[0]-r/2),a[1]/r*(h[1]-r/2),h[2]||0]),i=n&&n!==0&&Math.abs(n)>.2,l=i?ZT(n,[0,0]):_b,u=i?o.map(h=>[...x5e(h,l),h[2]]):o,c=i?A5e(s):_b,p=L2(t),d=[cu(p,c[0]),cu(p,c[1])];return u.map(h=>[Math.trunc(h[0]+d[0]),Math.trunc(h[1]+d[1]),Math.trunc(h[2]||0)])}function QT(e,t,n,s){let r=t.landmarks.length>=Tb.count?Tb.symmetryLine:lu.symmetryLine,a=0,o=_b,i;if(e&&pe.kernels.includes("rotatewithoffset"))if(a=g5e(t.landmarks[r[0]],t.landmarks[r[1]]),a&&a!==0&&Math.abs(a)>.2){let u=L2(t),c=[u[0]/n.shape[2],u[1]/n.shape[1]],p=Se.rotateWithOffset(n,a,0,c);o=ZT(-a,u),i=Rb(t,p,[s,s]),ee(p)}else i=Rb(t,n,[s,s]);else i=Rb(t,n,[s,s]);return[a,o,i]}var b5e=e=>{let t=e.map(s=>s[0]),n=e.map(s=>s[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},eN=(e,t)=>{let n=b5e(e),s=Ad(t);return{startPoint:[n[0]-s[0]/2,n[1]-s[1]/2],endPoint:[n[0]+s[0]/2,n[1]+s[1]/2]}};var tN=6,v5e=1.4,ta,nN=null,gi=0,Xh=null,xd=()=>gi;async function sN(e){var t;return pe.initial&&(ta=null),ta?e.debug&&oe("cached model:",ta.modelUrl):ta=await He((t=e.face.detector)==null?void 0:t.modelPath),gi=ta.inputs[0].shape?ta.inputs[0].shape[2]:0,Xh=Ce(gi,"int32"),nN=lr(YT(gi)),ta}function w5e(e){let t={};t.boxStarts=Me(e,[0,1],[-1,2]),t.centers=ce(t.boxStarts,nN),t.boxSizes=Me(e,[0,3],[-1,2]),t.boxSizesNormalized=he(t.boxSizes,Xh),t.centersNormalized=he(t.centers,Xh),t.halfBoxSize=he(t.boxSizesNormalized,rt.tf2),t.starts=fe(t.centersNormalized,t.halfBoxSize),t.ends=ce(t.centersNormalized,t.halfBoxSize),t.startNormalized=L(t.starts,Xh),t.endNormalized=L(t.ends,Xh);let n=Zl([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(s=>ee(t[s])),n}async function rN(e,t){var i,l,u,c;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=Se.resizeBilinear(e,[gi,gi]),n.div=he(n.resized,rt.tf127),n.normalized=fe(n.div,rt.tf05);let s=ta==null?void 0:ta.execute(n.normalized);if(Array.isArray(s)&&s.length>2){let p=s.sort((d,h)=>d.size-h.size);n.concat384=Ct([p[0],p[2]],2),n.concat512=Ct([p[1],p[3]],2),n.concat=Ct([n.concat512,n.concat384],1),n.batch=st(n.concat,0)}else Array.isArray(s)?n.batch=st(s[0]):n.batch=st(s);ee(s),n.boxes=w5e(n.batch),n.logits=Me(n.batch,[0,0],[-1,1]),n.sigmoid=Cn(n.logits),n.scores=st(n.sigmoid),n.nms=await Se.nonMaxSuppressionAsync(n.boxes,n.scores,((i=t.face.detector)==null?void 0:i.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((u=t.face.detector)==null?void 0:u.minConfidence)||0);let r=await n.nms.array(),a=[],o=await n.scores.data();for(let p=0;p(((c=t.face.detector)==null?void 0:c.minConfidence)||0)){let h={};h.bbox=Me(n.boxes,[r[p],0],[1,-1]),h.slice=Me(n.batch,[r[p],tN-1],[1,-1]),h.squeeze=st(h.slice),h.landmarks=G(h.squeeze,[tN,-1]);let f=await h.bbox.data(),m={startPoint:[f[0],f[1]],endPoint:[f[2],f[3]],landmarks:await h.landmarks.array(),confidence:d},g=XT(m,[(e.shape[2]||0)/gi,(e.shape[1]||0)/gi]),y=V2(g,t.face.scale||v5e),x=U2(y);a.push(x),Object.keys(h).forEach(A=>ee(h[A]))}}return Object.keys(n).forEach(p=>ee(n[p])),a}var G2={};la(G2,{connected:()=>Pb,kpt:()=>$b});var $b=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],Pb={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var oN=224,k5e,I5e=5,H2=[8,16,32,32,32];async function iN(){let e=[],t=0;for(;tn.x)),y:Ft(e.map(n=>n.y))}}function Ea(e,t=[1,1]){let n=[e.map(i=>i[0]),e.map(i=>i[1])],s=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],a=[s[0],s[1],r[0]-s[0],r[1]-s[1]],o=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:o}}function lN(e,t=[1,1]){let n=[e.map(u=>u[0]),e.map(u=>u[1])],s=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],a=[(s[0]+r[0])/2,(s[1]+r[1])/2],o=Math.max(a[0]-s[0],a[1]-s[1],-a[0]+r[0],-a[1]+r[1]),i=[Math.trunc(a[0]-o),Math.trunc(a[1]-o),Math.trunc(2*o),Math.trunc(2*o)],l=[i[0]/t[0],i[1]/t[1],i[2]/t[0],i[3]/t[1]];return{box:i,boxRaw:l}}function j2(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var dN={initial:!0},zs={detector:null,landmarks:null},bd={detector:[224,224],landmarks:[256,256]},Fb=Number.MAX_SAFE_INTEGER,C5e={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},X2=null,Kh,yi=[[0,0],[0,0],[0,0],[0,0]],uN=0,cN=e=>1-1/(1+Math.exp(e));async function pN(e){if(dN.initial&&(zs.detector=null),!zs.detector&&e.body.detector&&e.body.detector.modelPath){zs.detector=await He(e.body.detector.modelPath);let t=Object.values(zs.detector.modelSignature.inputs);bd.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,bd.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&zs.detector&&oe("cached model:",zs.detector.modelUrl);return await iN(),zs.detector}async function hN(e){if(dN.initial&&(zs.landmarks=null),zs.landmarks)e.debug&&oe("cached model:",zs.landmarks.modelUrl);else{zs.landmarks=await He(e.body.modelPath);let t=Object.values(zs.landmarks.modelSignature.inputs);bd.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,bd.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return zs.landmarks}async function T5e(e,t){let n={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let s;if(Kh&&(n.cropped=Se.cropAndResize(e,[Kh],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],a=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];yi=[[0,0],r,a,[0,0]],n.pad=Qs(n.cropped||e,yi),n.resize=Se.resizeBilinear(n.pad,[t,t]),s=he(n.resize,rt.tf255)}else e.shape[1]!==t?(n.resize=Se.resizeBilinear(n.cropped||e,[t,t]),s=he(n.resize,rt.tf255)):s=he(n.cropped||e,rt.tf255);return Object.keys(n).forEach(r=>ee(n[r])),s}function N5e(e,t){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+yi[2][0]+yi[2][1])/t[0]-yi[2][0]),Math.trunc(n.position[1]*(t[1]+yi[1][0]+yi[1][1])/t[1]-yi[1][0]),n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],2*n.position[2]/(t[0]+t[1])];if(Kh)for(let n of e)n.positionRaw=[n.positionRaw[0]+Kh[1],n.positionRaw[1]+Kh[0],n.positionRaw[2]],n.position=[Math.trunc(n.positionRaw[0]*t[0]),Math.trunc(n.positionRaw[1]*t[1]),n.positionRaw[2]];return e}async function E5e(e){let t=e.find(i=>i.part==="leftPalm"),n=e.find(i=>i.part==="leftWrist"),s=e.find(i=>i.part==="leftIndex");t.position[2]=((n.position[2]||0)+(s.position[2]||0))/2;let r=e.find(i=>i.part==="rightPalm"),a=e.find(i=>i.part==="rightWrist"),o=e.find(i=>i.part==="rightIndex");r.position[2]=((a.position[2]||0)+(o.position[2]||0))/2}async function R5e(e,t,n){var f;let s={};[s.ld,s.segmentation,s.heatmap,s.world,s.poseflag]=(f=zs.landmarks)==null?void 0:f.execute(e,C5e.landmarks);let r=(await s.poseflag.data())[0],a=await s.ld.data(),o=await s.world.data();Object.keys(s).forEach(m=>ee(s[m]));let i=[],l=5;for(let m=0;mm.position),p=Ea(c,[n[0],n[1]]),d={};for(let[m,g]of Object.entries(Pb)){let y=[];for(let x=0;xw.part===g[x]),b=u.find(w=>w.part===g[x+1]);A&&b&&y.push([A.position,b.position])}d[m]=y}return{id:0,score:Math.trunc(100*r)/100,box:p.box,boxRaw:p.boxRaw,keypoints:u,annotations:d}}async function Ob(e,t){let n=[e.shape[2]||0,e.shape[1]||0],s=(t.body.skipTime||0)>ue()-uN,r=Fb<(t.body.skipFrames||0);if(t.skipAllowed&&s&&r&&X2!==null)Fb++;else{let a={};a.landmarks=await T5e(e,256),X2=await R5e(a.landmarks,t,n),Object.keys(a).forEach(o=>ee(a[o])),uN=ue(),Fb=0}return X2?[X2]:[]}var vd=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var Ra,du=0,Mb=[],mN=0,zb=Number.MAX_SAFE_INTEGER;async function gN(e){if(pe.initial&&(Ra=null),Ra)e.debug&&oe("cached model:",Ra.modelUrl);else{Ra=await He(e.object.modelPath);let t=Object.values(Ra.modelSignature.inputs);du=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return Ra}async function _5e(e,t,n){if(!e)return[];let s={},r=[],a=await e.array();s.squeeze=st(e);let o=Zt(s.squeeze,6,1);s.stack=on([o[1],o[0],o[3],o[2]],1),s.boxes=st(s.stack),s.scores=st(o[4]),s.classes=st(o[5]),ee([e,...o]),s.nms=await Se.nonMaxSuppressionAsync(s.boxes,s.scores,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence||0);let i=await s.nms.data(),l=0;for(let u of Array.from(i)){let c=Math.trunc(100*a[0][u][4])/100,p=a[0][u][5],d=vd[p].label,[h,f]=[a[0][u][0]/du,a[0][u][1]/du],m=[h,f,a[0][u][2]/du-h,a[0][u][3]/du-f],g=[Math.trunc(m[0]*t[0]),Math.trunc(m[1]*t[1]),Math.trunc(m[2]*t[0]),Math.trunc(m[3]*t[1])];r.push({id:l++,score:c,class:p,label:d,box:g,boxRaw:m})}return Object.keys(s).forEach(u=>ee(s[u])),r}async function Lb(e,t){let n=(t.object.skipTime||0)>ue()-mN,s=zb<(t.object.skipFrames||0);return t.skipAllowed&&n&&s&&Mb.length>0?(zb++,Mb):(zb=0,new Promise(async r=>{let a=[e.shape[2]||0,e.shape[1]||0],o=Se.resizeBilinear(e,[du,du]),i=t.object.enabled?Ra==null?void 0:Ra.execute(o,["tower_0/detections"]):null;mN=ue(),ee(o);let l=await _5e(i,a,t);Mb=l,r(l)}))}var K2={};la(K2,{connected:()=>Wb,kpt:()=>Bb});var Bb=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Wb={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Vn,AN=0,us={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Vb=Number.MAX_SAFE_INTEGER;async function xN(e){return pe.initial&&(Vn=null),Vn?e.debug&&oe("cached model:",Vn.modelUrl):Vn=await He(e.body.modelPath),Vn}async function D5e(e,t){let[n,s]=e.shape,r=G(e,[s*n]),a=mn(r,0),o=(await a.data())[0];if(o>t){let i=Rs(r,0),l=Jl(i,n),u=(await l.data())[0],c=he(i,n),p=(await c.data())[0];return ee([r,a,i,l,c]),[u,p,o]}else return ee([r,a]),[0,0,o]}async function Ub(e,t){let n=(t.body.skipTime||0)>ue()-AN,s=Vb<(t.body.skipFrames||0);return t.skipAllowed&&n&&s&&Object.keys(us.keypoints).length>0?(Vb++,[us]):(Vb=0,new Promise(async r=>{var p;let a=Y(()=>{if(!(Vn!=null&&Vn.inputs[0].shape))return null;let d=Se.resizeBilinear(e,[Vn.inputs[0].shape[2],Vn.inputs[0].shape[1]],!1),h=L(d,rt.tf2);return fe(h,rt.tf1)}),o;if(t.body.enabled&&(o=Vn==null?void 0:Vn.execute(a)),AN=ue(),ee(a),o){us.keypoints.length=0;let d=st(o);ee(o);let h=En(d,2);ee(d);for(let f=0;f(((p=t.body)==null?void 0:p.minConfidence)||0)&&us.keypoints.push({score:Math.round(100*y)/100,part:Bb[f],positionRaw:[m/Vn.inputs[0].shape[2],g/Vn.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/Vn.inputs[0].shape[2]),Math.round(e.shape[1]*g/Vn.inputs[0].shape[1])]})}h.forEach(f=>ee(f))}us.score=us.keypoints.reduce((d,h)=>h.score>d?h.score:d,0);let i=us.keypoints.map(d=>d.position[0]),l=us.keypoints.map(d=>d.position[1]);us.box=[Math.min(...i),Math.min(...l),Math.max(...i)-Math.min(...i),Math.max(...l)-Math.min(...l)];let u=us.keypoints.map(d=>d.positionRaw[0]),c=us.keypoints.map(d=>d.positionRaw[1]);us.boxRaw=[Math.min(...u),Math.min(...c),Math.max(...u)-Math.min(...u),Math.max(...c)-Math.min(...c)];for(let[d,h]of Object.entries(Wb)){let f=[];for(let m=0;mx.part===h[m]),y=us.keypoints.find(x=>x.part===h[m+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([g.position,y.position])}us.annotations[d]=f}r([us])}))}var $5e=["angry","disgust","fear","happy","sad","surprise","neutral"],tr,Z2=[],vN=0,wN=0,Gb=Number.MAX_SAFE_INTEGER;async function kN(e){var t;return pe.initial&&(tr=null),tr?e.debug&&oe("cached model:",tr.modelUrl):tr=await He((t=e.face.emotion)==null?void 0:t.modelPath),tr}async function Hb(e,t,n,s){var o,i;if(!tr)return[];let r=Gb<(((o=t.face.emotion)==null?void 0:o.skipFrames)||0),a=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>ue()-wN;return t.skipAllowed&&a&&r&&vN===s&&Z2[n]&&Z2[n].length>0?(Gb++,Z2[n]):(Gb=0,new Promise(async l=>{var c,p;let u=[];if((c=t.face.emotion)!=null&&c.enabled){let d={},h=tr!=null&&tr.inputs[0].shape?tr.inputs[0].shape[2]:0;d.resize=Se.resizeBilinear(e,[h,h],!1),d.channels=L(d.resize,rt.rgb),d.grayscale=ke(d.channels,3,!0),d.grayscaleSub=fe(d.grayscale,rt.tf05),d.grayscaleMul=L(d.grayscaleSub,rt.tf2),d.emotion=tr==null?void 0:tr.execute(d.grayscaleMul),wN=ue();let f=await d.emotion.data();for(let m=0;m(((p=t.face.emotion)==null?void 0:p.minConfidence)||0)&&u.push({score:Math.min(.99,Math.trunc(100*f[m])/100),emotion:$5e[m]});u.sort((m,g)=>g.score-m.score),Object.keys(d).forEach(m=>ee(d[m]))}Z2[n]=u,vN=s,l(u)}))}var Ls,jb=[],SN=0,CN=0,TN=Number.MAX_SAFE_INTEGER;async function NN(e){return pe.initial&&(Ls=null),Ls?e.debug&&oe("cached model:",Ls.modelUrl):Ls=await He(e.face.mobilefacenet.modelPath),Ls}async function qb(e,t,n,s){var o,i;if(!Ls)return[];let r=TN<(((o=t.face.mobilefacenet)==null?void 0:o.skipFrames)||0),a=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>ue()-CN;return t.skipAllowed&&a&&r&&SN===s&&jb[n]?(TN++,jb[n]):new Promise(async l=>{var c;let u=[];if(((c=t.face.mobilefacenet)==null?void 0:c.enabled)&&(Ls==null?void 0:Ls.inputs[0].shape)){let p={};p.crop=Se.resizeBilinear(e,[Ls.inputs[0].shape[2],Ls.inputs[0].shape[1]],!1),p.data=Ls==null?void 0:Ls.execute(p.crop);let d=await p.data.data();u=Array.from(d),Object.keys(p).forEach(h=>ee(p[h]))}jb[n]=u,SN=s,CN=ue(),l(u)})}var Bs,Xb=[],RN=0,_N=0,DN=Number.MAX_SAFE_INTEGER;async function $N(e){return pe.initial&&(Bs=null),Bs?e.debug&&oe("cached model:",Bs.modelUrl):Bs=await He(e.face.insightface.modelPath),Bs}async function Kb(e,t,n,s){var o,i;if(!Bs)return[];let r=DN<(((o=t.face.insightface)==null?void 0:o.skipFrames)||0),a=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>ue()-_N;return t.skipAllowed&&a&&r&&RN===s&&Xb[n]?(DN++,Xb[n]):new Promise(async l=>{var c;let u=[];if(((c=t.face.insightface)==null?void 0:c.enabled)&&(Bs==null?void 0:Bs.inputs[0].shape)){let p={};p.crop=Se.resizeBilinear(e,[Bs.inputs[0].shape[2],Bs.inputs[0].shape[1]],!1),p.data=Bs==null?void 0:Bs.execute(p.crop);let d=await p.data.data();u=Array.from(d),Object.keys(p).forEach(h=>ee(p[h]))}Xb[n]=u,RN=s,_N=ue(),l(u)})}var _a,Ai=0,P5e=2.3,Zb=Ar.leftEyeLower0,Yb=Ar.rightEyeLower0,wd={leftBounds:[Zb[0],Zb[Zb.length-1]],rightBounds:[Yb[0],Yb[Yb.length-1]]},kd={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function zN(e){var t;return pe.initial&&(_a=null),_a?e.debug&&oe("cached model:",_a.modelUrl):_a=await He((t=e.face.iris)==null?void 0:t.modelPath),Ai=_a.inputs[0].shape?_a.inputs[0].shape[2]:0,Ai===-1&&(Ai=64),_a}function Y2(e,t,n,s){for(let r=0;r{let t=e[wd.leftBounds[0]][2],n=e[wd.rightBounds[0]][2];return t-n},FN=(e,t,n,s,r,a=!1)=>{let o=U2(V2(KT([e[n],e[s]]),P5e)),i=Ad(o),l=Se.cropAndResize(t,[[o.startPoint[1]/r,o.startPoint[0]/r,o.endPoint[1]/r,o.endPoint[0]/r]],[0],[Ai,Ai]);if(a&&pe.kernels.includes("flipleftright")){let u=Se.flipLeftRight(l);ee(l),l=u}return{box:o,boxSize:i,crop:l}},ON=(e,t,n,s=!1)=>{let r=[];for(let a=0;a{let s=e[Ar[`${n}EyeUpper0`][kd.upperCenter]][2],r=e[Ar[`${n}EyeLower0`][kd.lowerCenter]][2],a=(s+r)/2;return t.map((o,i)=>{let l=a;return i===2?l=s:i===4&&(l=r),[o[0],o[1],l]})};async function LN(e,t,n,s){if(!_a)return n.debug&&oe("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:a,crop:o}=FN(e,t,wd.leftBounds[0],wd.leftBounds[1],s,!0),{box:i,boxSize:l,crop:u}=FN(e,t,wd.rightBounds[0],wd.rightBounds[1],s,!0),c=Ct([o,u]);ee(o),ee(u);let p=_a.execute(c);ee(c);let d=await p.data();ee(p);let h=d.slice(0,kd.numCoordinates*3),{rawCoords:f,iris:m}=ON(h,r,a,!0),g=d.slice(kd.numCoordinates*3),{rawCoords:y,iris:x}=ON(g,i,l,!1),A=F5e(e);Math.abs(A)<30?(Y2(e,f,"left",null),Y2(e,y,"right",null)):A<1?Y2(e,f,"left",["EyeUpper0","EyeLower0"]):Y2(e,y,"right",["EyeUpper0","EyeLower0"]);let b=MN(e,m,"left"),w=MN(e,x,"right");return e.concat(b).concat(w)}var O5e=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],M5e=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],z5e=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],L5e=[[474,475],[475,476],[476,477],[477,474]],B5e=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],W5e=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],V5e=[[469,470],[470,471],[471,472],[472,469]],U5e=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function xi(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var G5e={lips:xi(O5e),leftEye:xi(M5e),leftEyebrow:xi(z5e),leftIris:xi(L5e),rightEye:xi(B5e),rightEyebrow:xi(W5e),rightIris:xi(V5e),faceOval:xi(U5e)},H5e=Object.entries(G5e).map(([e,t])=>t.map(n=>[n,e])).flat(),Gke=new Map(H5e),Zh=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],pu=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],hu=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function VN(e,t){let n={lips:await t.filter(a=>a.size===160)[0].data(),irisL:await t.filter(a=>a.size===10)[0].data(),eyeL:await t.filter(a=>a.size===142)[0].data(),irisR:await t.filter(a=>a.size===10)[1].data(),eyeR:await t.filter(a=>a.size===142)[1].data()},s=pu.reduce((a,o)=>a+=e[o][2],0)/pu.length;for(let a=0;aa+=e[o][2],0)/hu.length;for(let a=0;aue()-na.timestamp,s=na.skipped<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);!t.skipAllowed||!n||!s||na.boxes.length===0?(na.boxes=await rN(e,t),na.timestamp=ue(),na.skipped=0):na.skipped++;let r=[],a=[],o=0;for(let A=0;AR.shape[R.shape.length-1]===1).data();if(I.faceScore=Math.round(100*P[0])/100,I.faceScore<(((f=t.face.detector)==null?void 0:f.minConfidence)||1)){if(b.confidence=I.faceScore,(m=t.face.mesh)!=null&&m.keepInvalid){I.box=B2(b,e),I.boxRaw=W2(b,e),I.score=I.boxScore,I.mesh=b.landmarks.map(R=>[(b.startPoint[0]+b.endPoint[0])/2+(b.endPoint[0]+b.startPoint[0])*R[0]/xd(),(b.startPoint[1]+b.endPoint[1])/2+(b.endPoint[1]+b.startPoint[1])*R[1]/xd()]),I.meshRaw=I.mesh.map(R=>[R[0]/(e.shape[2]||1),R[1]/(e.shape[1]||1),(R[2]||0)/fu]);for(let R of Object.keys(lu))I.annotations[R]=[I.mesh[lu[R]]]}}else{let R=E.find(V=>V.shape[V.shape.length-1]===1404),$=G(R,[-1,3]),C=await $.array();ee($),(g=t.face.attention)!=null&&g.enabled?C=await VN(C,E):(y=t.face.iris)!=null&&y.enabled&&(C=await LN(C,I.tensor,t,fu)),I.mesh=JT(C,b,w,S,fu),I.meshRaw=I.mesh.map(V=>[V[0]/(e.shape[2]||0),V[1]/(e.shape[1]||0),(V[2]||0)/fu]);for(let V of Object.keys(Ar))I.annotations[V]=Ar[V].map(q=>I.mesh[q]);I.score=I.faceScore;let F={...eN(I.mesh,b),confidence:b.confidence,landmarks:b.landmarks};I.box=B2(F,e),I.boxRaw=W2(F,e),a.push(F)}ee(E)}else{I.box=B2(b,e),I.boxRaw=W2(b,e),I.score=I.boxScore,I.mesh=b.landmarks.map(E=>[(b.startPoint[0]+b.endPoint[0])/2+(b.endPoint[0]+b.startPoint[0])*E[0]/xd(),(b.startPoint[1]+b.endPoint[1])/2+(b.endPoint[1]+b.startPoint[1])*E[1]/xd()]),I.meshRaw=I.mesh.map(E=>[E[0]/(e.shape[2]||0),E[1]/(e.shape[1]||0),(E[2]||0)/fu]);for(let E of Object.keys(lu))I.annotations[E]=[I.mesh[lu[E]]]}I.score>(((x=t.face.detector)==null?void 0:x.minConfidence)||1)?r.push(I):ee(I.tensor)}return na.boxes=a,r}async function GN(e){var t,n,s,r,a,o;return pe.initial&&(Un=null),((n=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:n.enabled)&&(Un==null?void 0:Un.signature)&&Object.keys(((s=Un==null?void 0:Un.signature)==null?void 0:s.outputs)||{}).length<6&&(Un=null),Un?e.debug&&oe("cached model:",Un.modelUrl):(r=e.face.attention)!=null&&r.enabled?Un=await He((a=e.face.attention)==null?void 0:a.modelPath):Un=await He((o=e.face.mesh)==null?void 0:o.modelPath),fu=Un.inputs[0].shape?Un.inputs[0].shape[2]:0,Un}var HN=uu,jN=qh;var Ws,J2=[],qN=0,XN=0,Qb=Number.MAX_SAFE_INTEGER;async function KN(e){var t;return pe.initial&&(Ws=null),Ws?e.debug&&oe("cached model:",Ws.modelUrl):Ws=await He((t=e.face.description)==null?void 0:t.modelPath),Ws}function e4(e){let t=e.image||e.tensor||e;if(!(Ws!=null&&Ws.inputs[0].shape))return t;let n=Se.resizeBilinear(t,[Ws.inputs[0].shape[2],Ws.inputs[0].shape[1]],!1),s=L(n,rt.tf255);return ee(n),s}async function t4(e,t,n,s){var o,i,l,u;if(!Ws)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=Qb<(((o=t.face.description)==null?void 0:o.skipFrames)||0),a=(((i=t.face.description)==null?void 0:i.skipTime)||0)>ue()-qN;return t.skipAllowed&&r&&a&&XN===s&&((l=J2[n])==null?void 0:l.age)&&((u=J2[n])==null?void 0:u.age)>0?(Qb++,J2[n]):(Qb=0,new Promise(async c=>{var d,h;let p={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((d=t.face.description)!=null&&d.enabled){let f=e4(e),m=Ws==null?void 0:Ws.execute(f);qN=ue(),ee(f);let y=await(await m.find(_=>_.shape[1]===1)).data(),x=Math.trunc(200*Math.abs(y[0]-.5))/100;x>(((h=t.face.description)==null?void 0:h.minConfidence)||0)&&(p.gender=y[0]<=.5?"female":"male",p.genderScore=Math.min(.99,x));let A=Rs(m.find(_=>_.shape[1]===100),1),b=(await A.data())[0];ee(A);let S=await m.find(_=>_.shape[1]===100).data();p.age=Math.round(S[b-1]>S[b+1]?10*b-100*S[b-1]:10*b+100*S[b+1])/10;let I=m.find(_=>_.shape[1]===1024),E=I?await I.data():[];p.descriptor=Array.from(E),m.forEach(_=>ee(_))}J2[n]=p,XN=s,c(p)}))}function Q2(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function Yh(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function JN(e,t,n){let s=t.shape[1],r=t.shape[2],a=[[e.startPoint[1]/s,e.startPoint[0]/r,e.endPoint[1]/s,e.endPoint[0]/r]];return Se.cropAndResize(t,a,[0],n)}function QN(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],s=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(a=>[a[0]*t[0],a[1]*t[1]]);return{startPoint:n,endPoint:s,palmLandmarks:r,confidence:e.confidence}}function e1(e,t=1.5){let n=Yh(e),s=Q2(e),r=[t*s[0]/2,t*s[1]/2],a=[n[0]-r[0],n[1]-r[1]],o=[n[0]+r[0],n[1]+r[1]];return{startPoint:a,endPoint:o,palmLandmarks:e.palmLandmarks}}function t1(e){let t=Yh(e),n=Q2(e),r=Math.max(...n)/2,a=[t[0]-r,t[1]-r],o=[t[0]+r,t[1]+r];return{startPoint:a,endPoint:o,palmLandmarks:e.palmLandmarks}}function q5e(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function eE(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return q5e(n)}var ZN=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function bi(e,t){let n=0;for(let s=0;s[n.x,n.y]),this.anchorsTensor=lr(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=Ft([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Ft([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=Me(t,[0,0],[-1,2]),n.boxSizes=Me(t,[0,2],[-1,2]),n.div=he(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=ce(n.div,this.anchorsTensor),n.halfBoxSizes=he(n.boxSizes,this.doubleInputSizeTensor),n.sub=fe(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=L(n.sub,this.inputSizeTensor),n.add=ce(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=L(n.add,this.inputSizeTensor);let s=Zl([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>ee(n[r])),s}normalizeLandmarks(t,n){let s={};s.reshape=G(t,[-1,7,2]),s.div=he(s.reshape,this.inputSizeTensor),s.landmarks=ce(s.div,this.anchors[n]);let r=L(s.landmarks,this.inputSizeTensor);return Object.keys(s).forEach(a=>ee(s[a])),r}async predict(t,n){let s={};s.resize=Se.resizeBilinear(t,[this.inputSize,this.inputSize]),s.div=he(s.resize,rt.tf127),s.image=fe(s.div,rt.tf1),s.batched=this.model.execute(s.image),s.predictions=st(s.batched),s.slice=Me(s.predictions,[0,0],[-1,1]),s.sigmoid=Cn(s.slice),s.scores=st(s.sigmoid);let r=await s.scores.data();s.boxes=Me(s.predictions,[0,1],[-1,4]),s.norm=this.normalizeBoxes(s.boxes),s.nms=await Se.nonMaxSuppressionAsync(s.norm,s.scores,3*n.hand.maxDetected,n.hand.iouThreshold,n.hand.minConfidence);let a=await s.nms.array(),o=[];for(let i of a){let l={};l.box=Me(s.norm,[i,0],[1,-1]),l.slice=Me(s.predictions,[i,5],[1,14]),l.norm=this.normalizeLandmarks(l.slice,i),l.palmLandmarks=G(l.norm,[-1,2]);let u=await l.box.data(),c=u.slice(0,2),p=u.slice(2,4),d=await l.palmLandmarks.array(),h={startPoint:c,endPoint:p,palmLandmarks:d,confidence:r[i]},f=QN(h,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);o.push(f),Object.keys(l).forEach(m=>ee(l[m]))}return Object.keys(s).forEach(i=>ee(s[i])),o}};var Y5e=5,rE=1.65,aE=[0,5,9,13,17,1,2],J5e=0,Q5e=2,oE=0,s1=class{constructor(t,n){me(this,"handDetector");me(this,"handPoseModel");me(this,"inputSize");me(this,"storedBoxes");me(this,"skipped");me(this,"detectedHands");this.handDetector=t,this.handPoseModel=n,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(o=>o[0]),s=t.map(o=>o[1]),r=[Math.min(...n),Math.min(...s)],a=[Math.max(...n),Math.max(...s)];return{startPoint:r,endPoint:a}}getBoxForPalmLandmarks(t,n){let s=t.map(a=>r4([...a,1],n)),r=this.calculateLandmarksBoundingBox(s);return e1(t1(r),Y5e)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),s=e1(t1(n),rE);s.palmLandmarks=[];for(let r=0;r[o[0]*(h[0]-this.inputSize/2),o[1]*(h[1]-this.inputSize/2),o[2]*h[2]]),l=s4(s,[0,0]),u=i.map(h=>[...r4(h,l),h[2]]),c=tE(r),p=[...Yh(n),1],d=[bi(p,c[0]),bi(p,c[1])];return u.map(h=>[Math.trunc(h[0]+d[0]),Math.trunc(h[1]+d[1]),Math.trunc(h[2])])}async estimateHands(t,n){let s=!1,r,a=(n.hand.skipTime||0)>ue()-oE,o=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&a&&o&&(r=await this.handDetector.predict(t,n),this.skipped=0),n.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(s=!0));let i=[];for(let l=0;l=n.hand.minConfidence/4){let w=G(A,[-1,3]),S=await w.array();ee(A),ee(w);let I=this.transformRawCoords(S,m,c,f),E=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...E,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:u.confidence,fingerConfidence:b,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};i.push(_)}else this.storedBoxes[l]=null;ee(A)}else{let c=e1(t1(u),rE),p={confidence:u.confidence,boxConfidence:u.confidence,fingerConfidence:0,box:{topLeft:c.startPoint,bottomRight:c.endPoint},landmarks:[]};i.push(p)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=i.length,i.length>n.hand.maxDetected&&(i.length=n.hand.maxDetected),i}};var cs={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>cs.nameMapping[e],getPoints:e=>cs.pointsMapping[e]},wi={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>wi.nameMapping[e]},jt={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>jt.nameMapping[e]},vi=class{constructor(t){me(this,"name");me(this,"curls");me(this,"directions");me(this,"weights");me(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,s){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,s])}direction(t,n,s){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,s])}weight(t,n){this.weights[t]=n;let s=this.weights.reduce((r,a)=>r+a,0);this.weightsRelative=this.weights.map(r=>r*5/s)}matchAgainst(t,n){let s=0;for(let r in t){let a=t[r],o=this.curls[r];if(typeof o=="undefined"){s+=this.weightsRelative[r];continue}for(let[i,l]of o)if(a===i){s+=l*this.weightsRelative[r];break}}for(let r in n){let a=n[r],o=this.directions[r];if(typeof o=="undefined"){s+=this.weightsRelative[r];continue}for(let[i,l]of o)if(a===i){s+=l*this.weightsRelative[r];break}}return s/10}};var{thumb:Mr,index:Da,middle:$a,ring:mu,pinky:gu}=cs,{none:zr,half:txe,full:Lr}=wi,{verticalUp:Id,verticalDown:aIe,horizontalLeft:a4,horizontalRight:nxe,diagonalUpRight:sxe,diagonalUpLeft:Sd,diagonalDownRight:oIe,diagonalDownLeft:iIe}=jt,ki=new vi("thumbs up");ki.curl(Mr,zr,1);ki.direction(Mr,Id,1);ki.direction(Mr,Sd,.25);ki.direction(Mr,sxe,.25);for(let e of[cs.index,cs.middle,cs.ring,cs.pinky])ki.curl(e,Lr,1),ki.direction(e,a4,1),ki.direction(e,nxe,1);var dn=new vi("victory");dn.curl(Mr,txe,.5);dn.curl(Mr,zr,.5);dn.direction(Mr,Id,1);dn.direction(Mr,Sd,1);dn.curl(Da,zr,1);dn.direction(Da,Id,.75);dn.direction(Da,Sd,1);dn.curl($a,zr,1);dn.direction($a,Id,1);dn.direction($a,Sd,.75);dn.curl(mu,Lr,1);dn.direction(mu,Id,.2);dn.direction(mu,Sd,1);dn.direction(mu,a4,.2);dn.curl(gu,Lr,1);dn.direction(gu,Id,.2);dn.direction(gu,Sd,1);dn.direction(gu,a4,.2);dn.weight(Da,2);dn.weight($a,2);var Ii=new vi("point");Ii.curl(Mr,Lr,1);Ii.curl(Da,zr,.5);Ii.curl($a,Lr,.5);Ii.curl(mu,Lr,.5);Ii.curl(gu,Lr,.5);Ii.weight(Da,2);Ii.weight($a,2);var Si=new vi("middle finger");Si.curl(Mr,zr,1);Si.curl(Da,Lr,.5);Si.curl($a,Lr,.5);Si.curl(mu,Lr,.5);Si.curl(gu,Lr,.5);Si.weight(Da,2);Si.weight($a,2);var Cd=new vi("open palm");Cd.curl(Mr,zr,.75);Cd.curl(Da,zr,.75);Cd.curl($a,zr,.75);Cd.curl(mu,zr,.75);Cd.curl(gu,zr,.75);var iE=[ki,dn,Ii,Si,Cd];var rxe=.7,yu={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function lE(e,t,n,s){let r=(t-s)/(e-n),a=Math.atan(r)*180/Math.PI;return a<=0?a=-a:a>0&&(a=180-a),a}function cE(e,t){if(!e||!t)return[0,0];let n=lE(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let s=lE(e[1],e[2],t[1],t[2]);return[n,s]}function uE(e,t=1){let n=0,s=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?s=1*t:r=1*t,[n,s,r]}function axe(e,t,n){let s=e[0]-t[0],r=e[0]-n[0],a=t[0]-n[0],o=e[1]-t[1],i=e[1]-n[1],l=t[1]-n[1],u=e[2]-t[2],c=e[2]-n[2],p=t[2]-n[2],d=Math.sqrt(s*s+o*o+u*u),h=Math.sqrt(r*r+i*i+c*c),f=Math.sqrt(a*a+l*l+p*p),m=(f*f+d*d-h*h)/(2*f*d);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let y;return g>yu.NO_CURL_START_LIMIT?y=wi.none:g>yu.HALF_CURL_START_LIMIT?y=wi.half:y=wi.full,y}function dE(e,t,n,s){let r;return s===Math.abs(e)?e>0?r=jt.horizontalLeft:r=jt.horizontalRight:s===Math.abs(t)?t>0?r=jt.horizontalLeft:r=jt.horizontalRight:n>0?r=jt.horizontalLeft:r=jt.horizontalRight,r}function pE(e,t,n,s){let r;return s===Math.abs(e)?e<0?r=jt.verticalDown:r=jt.verticalUp:s===Math.abs(t)?t<0?r=jt.verticalDown:r=jt.verticalUp:n<0?r=jt.verticalDown:r=jt.verticalUp,r}function oxe(e,t,n,s,r,a,o,i){let l,u=pE(e,t,n,s),c=dE(r,a,o,i);return u===jt.verticalUp?c===jt.horizontalLeft?l=jt.diagonalUpLeft:l=jt.diagonalUpRight:c===jt.horizontalLeft?l=jt.diagonalDownLeft:l=jt.diagonalDownRight,l}function ixe(e,t,n,s){let r=e[0]-t[0],a=e[0]-n[0],o=t[0]-n[0],i=e[1]-t[1],l=e[1]-n[1],u=t[1]-n[1],c=Math.max(Math.abs(r),Math.abs(a),Math.abs(o)),p=Math.max(Math.abs(i),Math.abs(l),Math.abs(u)),d=0,h=0,f=0,m=p/(c+1e-5);m>1.5?d+=yu.DISTANCE_VOTE_POWER:m>.66?h+=yu.DISTANCE_VOTE_POWER:f+=yu.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+i*i),y=Math.sqrt(a*a+l*l),x=Math.sqrt(o*o+u*u),A=Math.max(g,y,x),b=e[0],w=e[1],S=n[0],I=n[1];A===g?(S=n[0],I=n[1]):A===x&&(b=t[0],w=t[1]);let P=cE([b,w],[S,I]),R=uE(P,yu.TOTAL_ANGLE_VOTE_POWER);d+=R[0],h+=R[1],f+=R[2];for(let C of s){let F=uE(C,yu.SINGLE_ANGLE_VOTE_POWER);d+=F[0],h+=F[1],f+=F[2]}let $;return d===Math.max(d,h,f)?$=pE(l,i,u,p):f===Math.max(h,f)?$=dE(a,r,o,c):$=oxe(l,i,u,p,a,r,o,c),$}function hE(e){let t=[],n=[],s=[],r=[];if(!e)return{curls:s,directions:r};for(let a of cs.all){let o=cs.getPoints(a),i=[],l=[];for(let u of o){let c=e[u[0]],p=e[u[1]],d=cE(c,p),h=d[0],f=d[1];i.push(h),l.push(f)}t.push(i),n.push(l)}for(let a of cs.all){let o=a===cs.thumb?1:0,i=cs.getPoints(a),l=e[i[o][0]],u=e[i[o+1][1]],c=e[i[3][1]],p=axe(l,u,c),d=ixe(l,u,c,t[a].slice(o));s[a]=p,r[a]=d}return{curls:s,directions:r}}function r1(e){if(!e||e.length===0)return null;let t=hE(e),n={};for(let s of cs.all)n[cs.getName(s)]={curl:wi.getName(t.curls[s]),direction:jt.getName(t.directions[s])};return n}function fE(e){let t=[];if(!e||e.length===0)return t;let n=hE(e);for(let s of iE){let r=s.matchAgainst(n.curls,n.directions);r>=rxe&&t.push({name:s.name,confidence:r})}return t}var mE={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Td,Nd,gE;async function i4(e,t){let n=await gE.estimateHands(e,t);if(!n)return[];let s=[];for(let r=0;rn[r].landmarks[p]);let o=n[r].landmarks,i=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(o&&o.length>0){for(let c of o)c[0]i[2]&&(i[2]=c[0]),c[1]>i[3]&&(i[3]=c[1]);i[2]-=i[0],i[3]-=i[1],l=[i[0]/(e.shape[2]||0),i[1]/(e.shape[1]||0),i[2]/(e.shape[2]||0),i[3]/(e.shape[1]||0)]}else i=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let u=r1(o);s.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:i,boxRaw:l,keypoints:o,annotations:a,landmarks:u})}return s}async function l4(e){var n,s;pe.initial&&(Td=null,Nd=null),!Td||!Nd?[Td,Nd]=await Promise.all([e.hand.enabled?He((n=e.hand.detector)==null?void 0:n.modelPath):null,e.hand.landmarks?He((s=e.hand.skeleton)==null?void 0:s.modelPath):null]):(e.debug&&oe("cached model:",Td.modelUrl),e.debug&&oe("cached model:",Nd.modelUrl));let t=new n1(Td);return gE=new s1(t,Nd),[Td,Nd]}var Pt={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function lxe(){let e=Pt.gl;!e||(Pt.extensions=e.getSupportedExtensions())}async function AE(e){var t;if(e.config.backend==="humangl"&&(Pt.name in sn().registry&&(!Pt.gl||!Pt.gl.getParameter(Pt.gl.VERSION))&&(oe("error: humangl backend invalid context"),a1(e)),!By(Pt.name))){try{Pt.canvas=await ls(100,100)}catch(s){oe("error: cannot create canvas:",s);return}try{if(Pt.gl=(t=Pt.canvas)==null?void 0:t.getContext("webgl2",Pt.webGLattr),!Pt.gl.getParameter(Pt.gl.VERSION).includes("2.0")){oe("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}Pt.canvas&&(Pt.canvas.addEventListener("webglcontextlost",async r=>{throw oe("error: humangl:",r.type),oe("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),Pt.canvas.addEventListener("webglcontextrestored",r=>{oe("error: humangl context restored:",r)}),Pt.canvas.addEventListener("webglcontextcreationerror",r=>{oe("error: humangl context create:",r)}))}catch(s){oe("error: cannot get WebGL context:",s);return}try{v2(2,Pt.gl)}catch(s){oe("error: cannot set WebGL context:",s);return}try{let s=new qu(Pt.gl);Xl(Pt.name,()=>new ld(s),Pt.priority)}catch(s){oe("error: cannot register WebGL backend:",s);return}try{Xr("webgl").forEach(r=>{let a={...r,backendName:Pt.name};pr(a)})}catch(s){oe("error: cannot update WebGL backend registration:",s);return}let n=Bn().getGPGPUContext?Bn().getGPGPUContext().gl:null;if(n)oe(`humangl webgl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`);else{oe("error: no current gl context:",n,Pt.gl);return}try{X().flagRegistry.WEBGL_VERSION&&X().set("WEBGL_VERSION",2)}catch(s){oe("error: cannot set WebGL backend flags:",s);return}lxe(),oe("backend registered:",Pt.name)}}function uxe(){if(!pe.kernels.includes("mod")){let e={kernelName:"Mod",backendName:Ln(),kernelFunc:t=>Y(()=>fe(t.inputs.a,L(he(t.inputs.a,t.inputs.b),t.inputs.b)))};pr(e),pe.kernels.push("mod")}if(!pe.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:Ln(),kernelFunc:t=>Y(()=>Wc(t.inputs.a/t.inputs.b)*t.inputs.b+Jl(t.inputs.a,t.inputs.b))};pr(e),pe.kernels.push("floormod")}}async function i1(e,t=!1){if(e.state="backend",t||pe.initial||e.config.backend&&e.config.backend.length>0&&Ln()!==e.config.backend){let n=ue();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&oe("running inside web worker"),pe.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&oe("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),pe.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&oe(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),pe.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")oe("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&oe("enumerated webgpu adapter:",r),!r)oe("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let a="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;oe("webgpu adapter info:",a)}}e.config.backend==="humangl"&&await AE(e);let s=Object.keys(sn().registryFactory);if(e.config.debug&&oe("available backends:",s),s.includes(e.config.backend)||(oe(`error: backend ${e.config.backend} not found in registry`),e.config.backend=pe.node?"tensorflow":"webgl",e.config.debug&&oe(`override: setting backend ${e.config.backend}`)),e.config.debug&&oe("setting backend:",e.config.backend),e.config.backend==="wasm"){if(X().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&X().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&oe("wasm path:",e.config.wasmPath),typeof(qe==null?void 0:qe.setWasmPaths)!="undefined")await ab(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,a=!1;try{r=await X().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await X().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&oe(`wasm execution: ${a?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&oe("warning: wasm simd support is not enabled")}catch(o){oe("wasm detection failed")}}try{await Ly(e.config.backend),await Bc(),$T()}catch(r){return oe("error: cannot set backend:",e.config.backend,r),!1}}if(Ln()==="humangl"&&(X().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&X().set("CHECK_COMPUTATION_FOR_ERRORS",!1),X().flagRegistry.WEBGL_CPU_FORWARD&&X().set("WEBGL_CPU_FORWARD",!0),X().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&X().set("WEBGL_USE_SHAPES_UNIFORMS",!0),X().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&X().set("CPU_HANDOFF_SIZE_THRESHOLD",256),X().flagRegistry.WEBGL_EXP_CONV&&X().set("WEBGL_EXP_CONV",!0),X().flagRegistry.USE_SETTIMEOUTCUSTOM&&X().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(oe("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),X().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),Bn().getGPGPUContext)){let s=await Bn().getGPGPUContext().gl;e.config.debug&&oe(`gl version:${s.getParameter(s.VERSION)} renderer:${s.getParameter(s.RENDERER)}`)}Ln(),My(),await Bc(),e.performance.initBackend=Math.trunc(ue()-n),e.config.backend=Ln(),await pe.updateBackend(),uxe()}return!0}function l1(e,t){for(let n of e){let s={kernelName:n,backendName:t.backend,kernelFunc:()=>{t.debug&&oe("kernelFunc",n,t.backend)}};pr(s)}pe.kernels=Xr(Ln()).map(n=>n.kernelName.toLowerCase())}var An=[null,null],dxe=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Ci=[[0,0],[0,0]],pxe=["hand","fist","pinch","point","face","tip","pinchtip"],bE=4,vE=1.6,hxe=512,fxe=1.4,u1=Number.MAX_SAFE_INTEGER,u4=0,Pa=[0,0],Jt={boxes:[],hands:[]},wE={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function kE(e){var t;if(pe.initial&&(An[0]=null),An[0])e.debug&&oe("cached model:",An[0].modelUrl);else{l1(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),An[0]=await He((t=e.hand.detector)==null?void 0:t.modelPath);let n=Object.values(An[0].modelSignature.inputs);Ci[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ci[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return An[0]}async function IE(e){var t;if(pe.initial&&(An[1]=null),An[1])e.debug&&oe("cached model:",An[1].modelUrl);else{An[1]=await He((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=Object.values(An[1].modelSignature.inputs);Ci[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ci[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return An[1]}async function mxe(e,t){let n=[];if(!e||!An[0])return n;let s={},r=(e.shape[2]||1)/(e.shape[1]||1),a=Math.min(Math.round((e.shape[1]||0)/8)*8,hxe),o=Math.round(a*r/8)*8;s.resize=Se.resizeBilinear(e,[a,o]),s.cast=ye(s.resize,"int32"),[s.rawScores,s.rawBoxes]=await An[0].executeAsync(s.cast,dxe),s.boxes=st(s.rawBoxes,[0,2]),s.scores=st(s.rawScores,[0]);let i=En(s.scores,1);ee(i[bE]),i.splice(bE,1),s.filtered=on(i,1),ee(i),s.max=mn(s.filtered,1),s.argmax=Rs(s.filtered,1);let l=0;s.nms=await Se.nonMaxSuppressionAsync(s.boxes,s.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let u=await s.nms.data(),c=await s.max.data(),p=await s.argmax.data();for(let d of Array.from(u)){let h=Me(s.boxes,d,1),f=await h.data();ee(h);let m=[f[1],f[0],f[3]-f[1],f[2]-f[0]],g=j2(m,fxe),y=[Math.trunc(m[0]*Pa[0]),Math.trunc(m[1]*Pa[1]),Math.trunc(m[2]*Pa[0]),Math.trunc(m[3]*Pa[1])],x=c[d],A=pxe[p[d]],b={id:l++,score:x,box:y,boxRaw:g,label:A};n.push(b)}return Object.keys(s).forEach(d=>ee(s[d])),n.sort((d,h)=>h.score-d.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function c4(e,t,n){let s={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&An[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},a=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Se.cropAndResize(e,[a],[0],[Ci[1][0],Ci[1][1]],"bilinear"),r.div=he(r.crop,rt.tf255),[r.score,r.keypoints]=An[1].execute(r.div,["Identity_1","Identity"]);let o=(await r.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(o))))/100;if(i>=(n.hand.minConfidence||0)){s.fingerScore=i,r.reshaped=G(r.keypoints,[-1,3]);let c=(await r.reshaped.array()).map(p=>[p[0]/Ci[1][1],p[1]/Ci[1][0],p[2]||0]).map(p=>[p[0]*t.boxRaw[2],p[1]*t.boxRaw[3],p[2]||0]);s.keypoints=c.map(p=>[Pa[0]*(p[0]+t.boxRaw[0]),Pa[1]*(p[1]+t.boxRaw[1]),p[2]||0]),s.landmarks=r1(s.keypoints);for(let p of Object.keys(wE))s.annotations[p]=wE[p].map(d=>s.landmarks&&s.keypoints[d]?s.keypoints[d]:null)}Object.keys(r).forEach(l=>ee(r[l]))}return s}async function d4(e,t){var r,a;if(!An[0]||!An[1]||!((r=An[0])!=null&&r.inputs[0].shape)||!((a=An[1])!=null&&a.inputs[0].shape))return[];Pa=[e.shape[2]||0,e.shape[1]||0],u1++;let n=(t.hand.skipTime||0)>ue()-u4,s=u1<(t.hand.skipFrames||0);return t.skipAllowed&&n&&s?Jt.hands:new Promise(async o=>{let i=3*(t.hand.skipTime||0)>ue()-u4,l=u1<3*(t.hand.skipFrames||0);t.skipAllowed&&Jt.hands.length===t.hand.maxDetected?Jt.hands=await Promise.all(Jt.boxes.map(c=>c4(e,c,t))):t.skipAllowed&&i&&l&&Jt.hands.length>0?Jt.hands=await Promise.all(Jt.boxes.map(c=>c4(e,c,t))):(Jt.boxes=await mxe(e,t),u4=ue(),Jt.hands=await Promise.all(Jt.boxes.map(c=>c4(e,c,t))),u1=0);let u=[...Jt.boxes];if(Jt.boxes.length=0,t.cacheSensitivity>0)for(let c=0;c.05&&p.box[3]/(e.shape[1]||1)>.05&&Jt.hands[c].fingerScore&&Jt.hands[c].fingerScore>(t.hand.minConfidence||0)){let d=j2(p.box,vE),h=j2(p.boxRaw,vE);Jt.boxes.push({...u[c],box:d,boxRaw:h})}}for(let c=0;cue()-TE,a=p4<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&a&&CE===s&&c1[n]?(p4++,c1[n]):(p4=0,new Promise(async l=>{let u=Se.resizeBilinear(e,[Gn!=null&&Gn.inputs[0].shape?Gn.inputs[0].shape[2]:0,Gn!=null&&Gn.inputs[0].shape?Gn.inputs[0].shape[1]:0],!1),c=Gn==null?void 0:Gn.execute(u),p=(await c.data())[0];c1[n]=Math.round(100*p)/100,CE=s,TE=ue(),ee([u,c]),l(c1[n])}))}var Jh={};la(Jh,{connected:()=>p1,horizontal:()=>f4,kpt:()=>d1,relative:()=>g4,vertical:()=>m4});var d1=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],f4=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],m4=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],g4=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],p1={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var RE=.005,Vs={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function y4(e){for(let t of f4){let n=e.keypoints.findIndex(r=>r.part===t[0]),s=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[s]&&e.keypoints[n].position[0]r&&r.part===t[0]),s=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[s]&&e.keypoints[n].position[1]u&&u.part===t[0]),r=e.keypoints.findIndex(u=>u&&u.part===t[1]),a=e.keypoints.findIndex(u=>u&&u.part===n[0]),o=e.keypoints.findIndex(u=>u&&u.part===n[1]);if(!e.keypoints[a]||!e.keypoints[o])continue;let i=e.keypoints[s]?[Math.abs(e.keypoints[a].position[0]-e.keypoints[s].position[0]),Math.abs(e.keypoints[o].position[0]-e.keypoints[s].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[o].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[a].position[0]-e.keypoints[r].position[0])]:[0,0];if(i[0]>i[1]||l[0]>l[1]){let u=e.keypoints[s];e.keypoints[s]=e.keypoints[r],e.keypoints[r]=u}}}function _E(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Qs(e,Vs.padding),n.resize=Se.resizeBilinear(n.pad,[t,t]);let s=ye(n.resize,"int32");return Object.keys(n).forEach(r=>ee(n[r])),s}function $E(e,t){e.keypoints=e.keypoints.filter(s=>s&&s.position);for(let s of e.keypoints)s.position=[s.position[0]*(t[0]+Vs.padding[2][0]+Vs.padding[2][1])/t[0]-Vs.padding[2][0],s.position[1]*(t[1]+Vs.padding[1][0]+Vs.padding[1][1])/t[1]-Vs.padding[1][0]],s.positionRaw=[s.position[0]/t[0],s.position[1]/t[1]];let n=Ea(e.keypoints.map(s=>s.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var Us,h1=0,A4=Number.MAX_SAFE_INTEGER,Au={boxes:[],bodies:[],last:0};async function PE(e){return pe.initial&&(Us=null),Us?e.debug&&oe("cached model:",Us.modelUrl):(l1(["size"],e),Us=await He(e.body.modelPath)),h1=Us.inputs[0].shape?Us.inputs[0].shape[2]:0,h1<64&&(h1=256),Us}async function yxe(e,t,n){let s=e[0][0],r=[],a=0;for(let c=0;ct.body.minConfidence){let p=[s[c][1],s[c][0]];r.push({score:Math.round(100*a)/100,part:d1[c],positionRaw:p,position:[Math.round((n.shape[2]||0)*p[0]),Math.round((n.shape[1]||0)*p[1])]})}a=r.reduce((c,p)=>p.score>c?p.score:c,0);let o=[],i=Ea(r.map(c=>c.position),[n.shape[2],n.shape[1]]),l={};for(let[c,p]of Object.entries(p1)){let d=[];for(let h=0;hg.part===p[h]),m=r.find(g=>g.part===p[h+1]);f&&m&&f.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([f.position,m.position])}l[c]=d}let u={id:0,score:a,box:i.box,boxRaw:i.boxRaw,keypoints:r,annotations:l};return y4(u),o.push(u),o}async function Axe(e,t,n){let s=[];for(let r=0;rt.body.minConfidence){let i=[];for(let p=0;p<17;p++){let d=a[3*p+2];if(d>t.body.minConfidence){let h=[a[3*p+1],a[3*p+0]];i.push({part:d1[p],score:Math.round(100*d)/100,positionRaw:h,position:[Math.round((n.shape[2]||0)*h[0]),Math.round((n.shape[1]||0)*h[1])]})}}let l=Ea(i.map(p=>p.position),[n.shape[2],n.shape[1]]),u={};for(let[p,d]of Object.entries(p1)){let h=[];for(let f=0;fy.part===d[f]),g=i.find(y=>y.part===d[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}u[p]=h}let c={id:r,score:o,box:l.box,boxRaw:l.boxRaw,keypoints:[...i],annotations:u};y4(c),s.push(c)}}return s.sort((r,a)=>a.score-r.score),s.length>t.body.maxDetected&&(s.length=t.body.maxDetected),s}async function x4(e,t){if(!Us||!(Us!=null&&Us.inputs[0].shape))return[];t.skipAllowed||(Au.boxes.length=0),A4++;let n=(t.body.skipTime||0)>ue()-Au.last,s=A4<(t.body.skipFrames||0);return t.skipAllowed&&n&&s?Au.bodies:new Promise(async r=>{let a={};A4=0,a.input=DE(e,h1),a.res=Us==null?void 0:Us.execute(a.input),Au.last=ue();let o=await a.res.array();Au.bodies=a.res.shape[2]===17?await yxe(o,t,e):await Axe(o,t,e);for(let i of Au.bodies)$E(i,[e.shape[2]||1,e.shape[1]||1]),_E(i.keypoints);Object.keys(a).forEach(i=>ee(a[i])),r(Au.bodies)})}var Ed,f1=[],OE=0,b4=Number.MAX_SAFE_INTEGER,g1=0,m1=2.5;async function ME(e){if(!Ed||pe.initial){Ed=await He(e.object.modelPath);let t=Object.values(Ed.modelSignature.inputs);g1=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&oe("cached model:",Ed.modelUrl);return Ed}async function xxe(e,t,n){let s=0,r=[];for(let l of[1,2,4]){let u=l*13,c=st(e.find(g=>g.shape[1]===u**2&&(g.shape[2]||0)===vd.length)),p=await c.array(),d=st(e.find(g=>g.shape[1]===u**2&&(g.shape[2]||0)(n.object.minConfidence||0)&&y!==61){let A=(.5+Math.trunc(g%u))/u,b=(.5+Math.trunc(g/u))/u,w=m[g].map(C=>C*(u/l/g1)),[S,I]=[A-m1/l*w[0],b-m1/l*w[1]],[E,_]=[A+m1/l*w[2]-S,b+m1/l*w[3]-I],P=[S,I,E,_];P=P.map(C=>Math.max(0,Math.min(C,1)));let R=[P[0]*t[0],P[1]*t[1],P[2]*t[0],P[3]*t[1]],$={id:s++,score:Math.round(100*x)/100,class:y+1,label:vd[y].label,box:R.map(C=>Math.trunc(C)),boxRaw:P};r.push($)}}ee([c,d,h,f])}let a=r.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),o=r.map(l=>l.score),i=[];if(a&&a.length>0){let l=await Se.nonMaxSuppressionAsync(a,o,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence);i=await l.data(),ee(l)}return r=r.filter((l,u)=>i.includes(u)).sort((l,u)=>u.score-l.score),r}async function v4(e,t){let n=(t.object.skipTime||0)>ue()-OE,s=b4<(t.object.skipFrames||0);return t.skipAllowed&&n&&s&&f1.length>0?(b4++,f1):(b4=0,!pe.kernels.includes("mod")||!pe.kernels.includes("sparsetodense")?f1:new Promise(async r=>{let a=[e.shape[2]||0,e.shape[1]||0],o=Se.resizeBilinear(e,[g1,g1],!1),i=he(o,rt.tf255),l=et(i,[0,3,1,2]),u;t.object.enabled&&(u=Ed.execute(l)),OE=ue();let c=await xxe(u,a,t);f1=c,ee([o,i,l,...u]),r(c)}))}var ef=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],bxe=ef.length,Qh=ef.reduce((e,t,n)=>(e[t]=n,e),{}),vxe=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],PIe=vxe.map(([e,t])=>[Qh[e],Qh[t]]),LE=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function BE(e){let t=e.reduce(({maxX:n,maxY:s,minX:r,minY:a},{position:{x:o,y:i}})=>({maxX:Math.max(n,o),maxY:Math.max(s,i),minX:Math.min(r,o),minY:Math.min(a,i)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function WE(e,[t,n],[s,r]){let a=t/s,o=n/r,i=(u,c)=>({id:c,score:u.score,boxRaw:[u.box[0]/r,u.box[1]/s,u.box[2]/r,u.box[3]/s],box:[Math.trunc(u.box[0]*o),Math.trunc(u.box[1]*a),Math.trunc(u.box[2]*o),Math.trunc(u.box[3]*a)],keypoints:u.keypoints.map(({score:p,part:d,position:h})=>({score:p,part:d,position:[Math.trunc(h.x*o),Math.trunc(h.y*a)],positionRaw:[h.x/s,h.y/s]})),annotations:{}});return e.map((u,c)=>i(u,c))}var y1=class{constructor(t,n){me(this,"priorityQueue");me(this,"numberOfElements");me(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function VE(e,t,n,s){let r=n-e,a=s-t;return r*r+a*a}function S4(e,t){return{x:e.x+t.x,y:e.y+t.y}}var Br,kxe=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],A1=1,Rd=16,Ixe=50**2;function UE(e,t,n,s,r,a,o=2){let i=y=>({y:a.get(y.y,y.x,e),x:a.get(y.y,y.x,a.shape[2]/2+e)}),l=(y,x,A)=>({y:I4(Math.round(y.y/Rd),0,x-1),x:I4(Math.round(y.x/Rd),0,A-1)}),[u,c]=s.shape,p=l(t.position,u,c),d=i(p),f=S4(t.position,d);for(let y=0;y[Qh[d],Qh[h]]),o=a.map(([,d])=>d),i=a.map(([d])=>d),l=t.shape[2],u=o.length,c=new Array(l),p=k4(e.part,Rd,n);c[e.part.id]={score:e.score,part:ef[e.part.id],position:p};for(let d=u-1;d>=0;--d){let h=o[d],f=i[d];c[h]&&!c[f]&&(c[f]=UE(d,c[h],f,t,n,r))}for(let d=0;dt){i=!1;break}if(!i)break}return i}function Txe(e,t){let[n,s,r]=t.shape,a=new y1(n*s*r,({score:o})=>o);for(let o=0;o{var o;let a=(o=r[s])==null?void 0:o.position;return a?VE(n,t,a.y,a.x)<=Ixe:!1})}function Nxe(e,t){return t.reduce((s,{position:r,score:a},o)=>(GE(e,r,o)||(s+=a),s),0)/t.length}function Exe(e,t,n,s,r,a){let o=[],i=Txe(a,t);for(;o.lengthh.score>a);let p=Nxe(o,c),d=BE(c);p>a&&o.push({keypoints:c,box:d,score:Math.round(100*p)/100})}return o}async function C4(e,t){let n=Y(()=>{if(!Br.inputs[0].shape)return[];let o=Se.resizeBilinear(e,[Br.inputs[0].shape[2],Br.inputs[0].shape[1]]),i=fe(he(ye(o,"float32"),127.5),1),u=Br.execute(i,kxe).map(c=>st(c,[0]));return u[1]=Cn(u[1]),u}),s=await Promise.all(n.map(o=>o.buffer()));for(let o of n)ee(o);let r=await Exe(s[0],s[1],s[2],s[3],t.body.maxDetected,t.body.minConfidence);return Br.inputs[0].shape?WE(r,[e.shape[1],e.shape[2]],[Br.inputs[0].shape[2],Br.inputs[0].shape[1]]):[]}async function HE(e){return!Br||pe.initial?Br=await He(e.body.modelPath):e.debug&&oe("cached model:",Br.modelUrl),Br}var sa,T4=!1;async function N4(e){return!sa||pe.initial?sa=await He(e.segmentation.modelPath):e.debug&&oe("cached model:",sa.modelUrl),sa}async function qE(e,t,n){var m,g;if(T4)return{data:[],canvas:null,alpha:null};T4=!0,sa||await N4(n);let s=await yd(e,n),r=((m=s.tensor)==null?void 0:m.shape[2])||0,a=((g=s.tensor)==null?void 0:g.shape[1])||0;if(!s.tensor)return{data:[],canvas:null,alpha:null};let o={};o.resize=Se.resizeBilinear(s.tensor,[sa.inputs[0].shape?sa.inputs[0].shape[1]:0,sa.inputs[0].shape?sa.inputs[0].shape[2]:0],!1),ee(s.tensor),o.norm=he(o.resize,rt.tf255),o.res=sa.execute(o.norm),o.squeeze=st(o.res,0),o.squeeze.shape[2]===2?(o.softmax=Ql(o.squeeze),[o.bg,o.fg]=En(o.softmax,2),o.expand=Kt(o.fg,2),o.pad=Kt(o.expand,0),o.crop=Se.cropAndResize(o.pad,[[0,0,.5,.5]],[0],[r,a]),o.data=st(o.crop,0)):o.data=Se.resizeBilinear(o.squeeze,[a,r]);let i=Array.from(await o.data.data());if(pe.node&&!pe.Canvas&&typeof ImageData=="undefined")return n.debug&&oe("canvas support missing"),Object.keys(o).forEach(y=>ee(o[y])),{data:i,canvas:null,alpha:null};let l=ls(r,a);Js&&await Js.toPixels(o.data,l);let u=l.getContext("2d");n.segmentation.blur&&n.segmentation.blur>0&&(u.filter=`blur(${n.segmentation.blur}px)`);let c=u.getImageData(0,0,r,a),p=ls(r,a),d=p.getContext("2d");s.canvas&&d.drawImage(s.canvas,0,0),d.globalCompositeOperation="darken",n.segmentation.blur&&n.segmentation.blur>0&&(d.filter=`blur(${n.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let h=d.getImageData(0,0,r,a);for(let y=0;yee(o[y])),T4=!1,{data:i,canvas:p,alpha:l}}var tf=class{constructor(){me(this,"ssrnetage",null);me(this,"gear",null);me(this,"blazeposedetect",null);me(this,"blazepose",null);me(this,"centernet",null);me(this,"efficientpose",null);me(this,"mobilefacenet",null);me(this,"insightface",null);me(this,"emotion",null);me(this,"facedetect",null);me(this,"faceiris",null);me(this,"facemesh",null);me(this,"faceres",null);me(this,"ssrnetgender",null);me(this,"handpose",null);me(this,"handskeleton",null);me(this,"handtrack",null);me(this,"liveness",null);me(this,"movenet",null);me(this,"nanodet",null);me(this,"posenet",null);me(this,"segmentation",null);me(this,"antispoof",null)}},E4=e=>{let t=0,n=0,s=0;for(let a of Object.values(Wr))t+=a.sizeFromManifest,n+=a.sizeLoadedWeights,s+=a.sizeDesired;let r=s>0?n/s:0;return{numLoadedModels:Object.values(Wr).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:s,totalSizeEnabled:void 0,modelStats:Object.values(Wr)}};function a1(e){for(let t of Object.keys(e.models))e.models[t]=null}async function R4(e){var t,n,s,r,a,o,i,l,u,c,p,d,h,f,m,g,y,x,A,b,w,S,I,E,_,P,R,$,C,F,V,q;pe.initial&&a1(e),e.config.hand.enabled&&(!e.models.handpose&&((n=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:n.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await l4(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(s=e.config.hand.detector)==null?void 0:s.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await l4(e.config))),e.config.body.enabled&&!e.models.blazepose&&((o=(a=e.config.body)==null?void 0:a.modelPath)==null?void 0:o.includes("blazepose"))&&(e.models.blazepose=hN(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=pN(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((l=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:l.includes("efficientpose"))&&(e.models.efficientpose=xN(e.config)),e.config.body.enabled&&!e.models.movenet&&((c=(u=e.config.body)==null?void 0:u.modelPath)==null?void 0:c.includes("movenet"))&&(e.models.movenet=PE(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(p=e.config.body)==null?void 0:p.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=HE(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=sN(e.config)),e.config.face.enabled&&((h=e.config.face.antispoof)==null?void 0:h.enabled)&&!e.models.antispoof&&(e.models.antispoof=GT(e.config)),e.config.face.enabled&&((f=e.config.face.liveness)==null?void 0:f.enabled)&&!e.models.liveness&&(e.models.liveness=NE(e.config)),e.config.face.enabled&&((m=e.config.face.description)==null?void 0:m.enabled)&&!e.models.faceres&&(e.models.faceres=KN(e.config)),e.config.face.enabled&&((g=e.config.face.emotion)==null?void 0:g.enabled)&&!e.models.emotion&&(e.models.emotion=kN(e.config)),e.config.face.enabled&&((y=e.config.face.iris)==null?void 0:y.enabled)&&!((x=e.config.face.attention)!=null&&x.enabled)&&!e.models.faceiris&&(e.models.faceiris=zN(e.config)),e.config.face.enabled&&((A=e.config.face.mesh)==null?void 0:A.enabled)&&!e.models.facemesh&&(e.models.facemesh=GN(e.config)),e.config.face.enabled&&((b=e.config.face.gear)==null?void 0:b.enabled)&&!e.models.gear&&(e.models.gear=_T(e.config)),e.config.face.enabled&&((w=e.config.face.ssrnet)==null?void 0:w.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=OT(e.config)),e.config.face.enabled&&((S=e.config.face.ssrnet)==null?void 0:S.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=BT(e.config)),e.config.face.enabled&&((I=e.config.face.mobilefacenet)==null?void 0:I.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=NN(e.config)),e.config.face.enabled&&((E=e.config.face.insightface)==null?void 0:E.enabled)&&!e.models.insightface&&(e.models.insightface=$N(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((P=(_=e.config.hand.detector)==null?void 0:_.modelPath)==null?void 0:P.includes("handtrack"))&&(e.models.handtrack=kE(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&(($=(R=e.config.hand.detector)==null?void 0:R.modelPath)==null?void 0:$.includes("handtrack"))&&(e.models.handskeleton=IE(e.config)),e.config.object.enabled&&!e.models.centernet&&((F=(C=e.config.object)==null?void 0:C.modelPath)==null?void 0:F.includes("centernet"))&&(e.models.centernet=gN(e.config)),e.config.object.enabled&&!e.models.nanodet&&((q=(V=e.config.object)==null?void 0:V.modelPath)==null?void 0:q.includes("nanodet"))&&(e.models.nanodet=ME(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=N4(e.config));for await(let z of Object.keys(e.models))e.models[z]&&typeof e.models[z]!="undefined"&&(e.models[z]=await e.models[z])}var nr;function _d(e,t,n){if(e&&(nr=e),!t||(nr||oe("instance not registred"),!nr.config.validateModels))return null;let s=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],a=[],o=[],i=t.modelUrl,l=t.executor;if(l&&l.graph.nodes)for(let u of Object.values(l.graph.nodes)){let c=u.op.toLowerCase();a.includes(c)||a.push(c)}else!l&&nr.config.debug&&oe("model signature not determined:",n);for(let u of a)!s.includes(u)&&!r.includes(u)&&!nr.env.kernels.includes(u)&&!nr.env.kernels.includes(u.replace("_",""))&&!nr.env.kernels.includes(u.replace("native",""))&&!nr.env.kernels.includes(u.replace("v2",""))&&o.push(u);return nr.config.debug&&o.length>0&&oe("model validation failed:",n,o),o.length>0?{name:n,missing:o,ops:a,url:i}:null}function x1(e){nr=e;let t=[];for(let n of Object.keys(nr.models)){let s=nr.models[n];if(!s)continue;let r=_d(nr,s,n);r&&t.push(r)}return t}var ds={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},Wr={};async function Rxe(e,t){return ds.debug&&oe("load model fetch:",e,t),fetch(e,t)}function KE(e){ds.cacheModels=e.cacheModels,ds.verbose=e.debug,ds.modelBasePath=e.modelBasePath}async function He(e){var u,c,p;let t=fv(ds.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),s=n[n.length-1].replace(".json",""),r="indexeddb://"+s;Wr[s]={name:s,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:gb[s],inCache:!1},ds.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let a={};try{a=ds.cacheSupported&&ds.cacheModels?await Ns.listModels():{}}catch(d){ds.cacheSupported=!1}Wr[s].inCache=ds.cacheSupported&&ds.cacheModels&&Object.keys(a).includes(r);let o=typeof fetch=="undefined"?{}:{fetchFunc:(d,h)=>Rxe(d,h)},i=new Fh(Wr[s].inCache?r:t,o),l=!1;try{i.findIOHandler(),ds.debug&&oe("model load handler:",i.handler);let d=await i.handler.load();Wr[s].sizeFromManifest=((u=d==null?void 0:d.weightData)==null?void 0:u.byteLength)||0,i.loadSync(d),Wr[s].sizeLoadedWeights=((p=(c=i==null?void 0:i.artifacts)==null?void 0:c.weightData)==null?void 0:p.byteLength)||0,ds.verbose&&oe("load model:",i.modelUrl,{bytes:Wr[s].sizeLoadedWeights},ds),l=!0}catch(d){oe("error loading model:",t,d)}if(l&&ds.cacheModels&&ds.cacheSupported&&!Wr[s].inCache)try{let d=await i.save(r);oe("model saved:",r,d)}catch(d){oe("error saving model:",t,d)}return _d(null,i,`${e}`),i}var _4="2.9.4";var z4={};la(z4,{all:()=>M4,body:()=>$d,canvas:()=>O4,face:()=>Dd,gesture:()=>Od,hand:()=>Pd,object:()=>Fd,options:()=>Hn,person:()=>F4});var sr=e=>{if(!e)oe("draw error: invalid canvas");else if(!e.getContext)oe("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)oe("draw error: cannot get canvas context");else return t}return null},xu=e=>Math.round(e*180/Math.PI),Fa=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function Oa(e,t,n,s,r){e.fillStyle=Fa(s,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function ra(e,t,n,s,r,a){if(e.beginPath(),e.lineWidth=a.lineWidth,a.useCurves){let o=(t+t+s)/2,i=(n+n+r)/2;e.ellipse(o,i,s/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+a.roundRect,n),e.lineTo(t+s-a.roundRect,n),e.quadraticCurveTo(t+s,n,t+s,n+a.roundRect),e.lineTo(t+s,n+r-a.roundRect),e.quadraticCurveTo(t+s,n+r,t+s-a.roundRect,n+r),e.lineTo(t+a.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-a.roundRect),e.lineTo(t,n+a.roundRect),e.quadraticCurveTo(t,n,t+a.roundRect,n),e.closePath();e.stroke()}function D4(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let s of t)e.strokeStyle=Fa(s[2]||0,n),e.lineTo(Math.trunc(s[0]),Math.trunc(s[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function ZE(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){D4(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let s=0;s0){let s=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);s.length>3&&(s.length=3),n.push(s.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&n.push(`roll: ${xu(e.rotation.angle.roll)}\xB0 yaw:${xu(e.rotation.angle.yaw)}\xB0 pitch:${xu(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&n.push(`gaze: ${xu(e.rotation.gaze.bearing)}\xB0`)),n.length===0&&n.push("face"),t.fillStyle=gt.color;for(let s=n.length-1;s>=0;s--){let r=Math.max(e.box[0],0),a=s*gt.lineHeight+e.box[1];gt.shadowColor&>.shadowColor!==""&&(t.fillStyle=gt.shadowColor,t.fillText(n[s],r+5,a+16)),t.fillStyle=gt.labelColor,t.fillText(n[s],r+4,a+15)}}}function Pxe(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=gt.useDepth?"rgba(255, 200, 255, 0.3)":gt.color,t.beginPath();let n=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,s=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],n,s,0,0,2*Math.PI),t.stroke(),gt.fillPolygons&&(t.fillStyle=gt.useDepth?"rgba(255, 255, 200, 0.3)":gt.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=gt.useDepth?"rgba(255, 200, 255, 0.3)":gt.color,t.beginPath();let n=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,s=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],n,s,0,0,2*Math.PI),t.stroke(),gt.fillPolygons&&(t.fillStyle=gt.useDepth?"rgba(255, 255, 200, 0.3)":gt.color,t.fill())}}function Fxe(e,t){var n;if(gt.drawGaze&&((n=e.rotation)==null?void 0:n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let s=e.box[0]+e.box[2]/2-e.box[3]*xu(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*xu(e.rotation.angle.pitch)/90,a=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C ${s} ${e.box[1]}, diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index 8d53bad9..a05536f3 100644 --- a/dist/human.node-gpu.js +++ b/dist/human.node-gpu.js @@ -96,7 +96,7 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var W5=(e,t,o)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,A)=>(o[A]=0,r))},F5=class{constructor(t,o,n){T(this,"uniform",{});T(this,"attribute",{});T(this,"gl");T(this,"id");T(this,"compile",(t,o)=>{let n=this.gl.createShader(o);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(p(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)}`),null)):(p("filter: could not create shader"),null)});this.gl=t;let r=this.compile(o,this.gl.VERTEX_SHADER),A=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!A)){if(!this.id){p("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){p(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),W5(o,"attribute",this.attribute);for(let s in this.attribute)this.attribute[s]=this.gl.getAttribLocation(this.id,s);W5(o,"uniform",this.uniform),W5(n,"uniform",this.uniform);for(let s in this.uniform)this.uniform[s]=this.gl.getUniformLocation(this.id,s)}}};function Ct(){let e=0,t=null,o=!1,n=-1,r=[null,null],A=[],s=null,a=null,l=T0(100,100),y={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){p("filter: cannot get webgl context");return}this.gl=i;function d(g,f){if(!(g===l.width&&f===l.height)){if(l.width=g,l.height=f,!s){let u=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);s=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,s),i.bufferData(i.ARRAY_BUFFER,u,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function c(g,f){let u=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,u);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let N=i.createTexture();return i.bindTexture(i.TEXTURE_2D,N),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,g,f,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,N,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:u,texture:N}}function h(g){return r[g]=r[g]||c(l.width,l.height),r[g]}function m(g=0){if(!a)return;let f=null,u=null,S=!1;e===0?f=t:f=h(n).texture||null,e++,o&&!(g&x.INTERMEDIATE)?(u=null,S=e%2===0):(n=(n+1)%2,u=h(n).fbo||null),i.bindTexture(i.TEXTURE_2D,f),i.bindFramebuffer(i.FRAMEBUFFER,u),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function P(g){if(y[g])return a=y[g],i.useProgram((a?a.id:null)||null),a;if(a=new F5(i,Tt,g),!a)return p("filter: could not get webgl program"),null;let f=Float32Array.BYTES_PER_ELEMENT,u=4*f;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,u,0*f),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,u,2*f),y[g]=a,a}let M={colorMatrix:g=>{let f=new Float32Array(g);f[4]/=255,f[9]/=255,f[14]/=255,f[19]/=255;let u=f[18]===1&&f[3]===0&&f[8]===0&&f[13]===0&&f[15]===0&&f[16]===0&&f[17]===0&&f[19]===0?kt:wt,S=P(u);!S||(i.uniform1fv(S.uniform.m,f),m())},brightness:g=>{let f=(g||0)+1;M.colorMatrix([f,0,0,0,0,0,f,0,0,0,0,0,f,0,0,0,0,0,1,0])},saturation:g=>{let f=(g||0)*2/3+1,u=(f-1)*-.5;M.colorMatrix([f,u,u,0,0,u,f,u,0,0,u,u,f,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:g=>{let f=(g||0)+1,u=-128*(f-1);M.colorMatrix([f,0,0,0,u,0,f,0,0,u,0,0,f,0,u,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let f=Math.cos(g),u=Math.sin(g),S=.213,N=.715,w=.072;M.colorMatrix([S+f*(1-S)+u*-S,N+f*-N+u*-N,w+f*-w+u*(1-w),0,0,S+f*-S+u*.143,N+f*(1-N)+u*.14,w+f*-w+u*-.283,0,0,S+f*-S+u*-(1-S),N+f*-N+u*N,w+f*(1-w)+u*w,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:g=>{let f=new Float32Array(g),u=1/l.width,S=1/l.height,N=P(St);!N||(i.uniform1fv(N.uniform.m,f),i.uniform2f(N.uniform.px,u,S),m())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:g=>{let f=g||1;M.convolution.call(this,[0,-1*f,0,-1*f,1+4*f,-1*f,0,-1*f,0])},emboss:g=>{let f=g||1;M.convolution.call(this,[-2*f,-1*f,0,-1*f,1,1*f,0,1*f,2*f])},blur:g=>{let f=g/7/l.width,u=g/7/l.height,S=P(zt);!S||(i.uniform2f(S.uniform.px,0,u),m(x.INTERMEDIATE),i.uniform2f(S.uniform.px,f,0),m())},pixelate:g=>{let f=g/l.width,u=g/l.height,S=P(Et);!S||(i.uniform2f(S.uniform.size,f,u),m())}};this.add=function(g){let f=Array.prototype.slice.call(arguments,1),u=M[g];A.push({func:u,args:f})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(g){d(g.width,g.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,g);for(let f=0;fc.data())),s=.99*Math.max(A[0][0],A[1][0],A[2][0]),a=[U.sub(o[0],n[0]),U.sub(o[1],n[1]),U.sub(o[2],n[2])],l=[U.sub(r[0],n[0]),U.sub(r[1],n[1]),U.sub(r[2],n[2])],y=[U.div(s,l[0]),U.div(s,l[1]),U.div(s,l[2])],x=[U.mul(a[0],y[0]),U.mul(a[1],y[1]),U.mul(a[2],y[2])],i=U.stack([x[0],x[1],x[2]],2),d=U.reshape(i,[1,t.shape[0],t.shape[1],3]);return U.dispose([...o,...n,...r,...a,...l,...y,...x,i,t]),d}var G2=3840,Y=null,c0=null,Ke=null,e0,le={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function T0(e,t){let o;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");o=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");o=document.createElement("canvas"),o.width=e,o.height=t}else typeof R.Canvas!="undefined"?o=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(o=new globalThis.Canvas(e,t));return o}function B2(e,t){let o=t||T0(e.width,e.height);return o.getContext("2d").drawImage(e,0,0),o}async function Je(e,t,o=!0){if(!e)return t.debug&&p("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof O.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof R.Canvas!="undefined"&&e instanceof R.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof O.Tensor){let n=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)n=O.expandDims(e,0);else if(e.shape[2]===4){let r=O.slice3d(e,[0,0,0],[-1,-1,3]);n=O.expandDims(r,0),O.dispose(r)}}else e.shape.length===4&&(e.shape[3]===3?n=O.clone(e):e.shape[3]===4&&(n=O.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(n==null||n.shape.length!==4||n.shape[0]!==1||n.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(n.dtype==="int32"){let r=O.cast(n,"float32");O.dispose(n),n=r}return{tensor:n,canvas:t.filter.return?c0:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&p("input stream is not ready"),{tensor:null,canvas:Y};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&p("cannot determine input dimensions"),{tensor:null,canvas:Y};let A=n,s=r;if(A>G2&&(A=G2,s=Math.trunc(A*r/n)),s>G2&&(s=G2,A=Math.trunc(s*n/r)),(t.filter.width||0)>0?A=t.filter.width:(t.filter.height||0)>0&&(A=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?s=t.filter.height:(t.filter.width||0)>0&&(s=r*((t.filter.width||0)/n)),!A||!s)throw new Error("input error: cannot determine dimension");(!Y||(Y==null?void 0:Y.width)!==A||(Y==null?void 0:Y.height)!==s)&&(Y=T0(A,s));let a=Y.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(n,0),a.scale(-1,1),a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),(!c0||Y.width!==c0.width||(Y==null?void 0:Y.height)!==(c0==null?void 0:c0.height))&&(c0=T0(Y.width,Y.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new Ct:null),R.filter=!!e0,!e0||!e0.add?(t.debug&&p("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,B2(Y,c0)):(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),e0.get()>0?c0=e0.apply(Y):c0=e0.draw(Y))):(B2(Y,c0),e0&&(e0=null),R.filter=!!e0),!o)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let l,y=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&O.browser)l=O.browser?O.browser.fromPixels(e):null;else{y=e.data.length/e.height/e.width;let d=new Uint8Array(e.data.buffer);l=O.tensor(d,[e.height,e.width,y],"int32")}else if((!Ke||c0.width!==Ke.width||c0.height!==Ke.height)&&(Ke=T0(c0.width,c0.height)),O.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=O.browser.fromPixels(c0):(Ke=B2(c0),l=O.browser.fromPixels(Ke));else{let h=B2(c0).getContext("2d").getImageData(0,0,A,s);y=h.data.length/A/s;let m=new Uint8Array(h.data.buffer);l=O.tensor(m,[A,s,y])}if(y===4){let d=O.slice3d(l,[0,0,0],[-1,-1,3]);O.dispose(l),l=d}if(!l)throw new Error("input error: cannot create tensor");let x=O.cast(l,"float32"),i=t.filter.equalization?await F2(x):O.expandDims(x,0);return O.dispose([l,x]),{tensor:i,canvas:t.filter.return?c0:null}}}async function It(e,t){let o=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return o;if(!le.inputTensor)le.inputTensor=O.clone(t);else if(le.inputTensor.shape[1]!==t.shape[1]||le.inputTensor.shape[2]!==t.shape[2])O.dispose(le.inputTensor),le.inputTensor=O.clone(t);else{let n={};n.diff=O.sub(t,le.inputTensor),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;O.dispose([le.inputTensor,n.diff,n.squared,n.sum]),le.inputTensor=O.clone(t),o=A<=(e.cacheSensitivity||0)}return o}async function jt(e,t,o){let n={};if(!t||!o||t.shape.length!==4||t.shape.length!==o.shape.length)return e.debug||p("invalid input tensor or tensor shapes do not match:",t.shape,o.shape),0;if(t.shape[0]!==1||o.shape[0]!==1||t.shape[3]!==3||o.shape[3]!==3)return e.debug||p("input tensors must be of shape [1, height, width, 3]:",t.shape,o.shape),0;n.input1=O.clone(t),n.input2=t.shape[1]!==o.shape[1]||t.shape[2]!==o.shape[2]?O.image.resizeBilinear(o,[t.shape[1],t.shape[2]]):O.clone(o),n.diff=O.sub(n.input1,n.input2),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return O.dispose([n.input1,n.input2,n.diff,n.squared,n.sum]),A}var G5=class{constructor(){T(this,"browser");T(this,"node");T(this,"worker");T(this,"platform","");T(this,"agent","");T(this,"backends",[]);T(this,"initial");T(this,"filter");T(this,"tfjs");T(this,"offscreen");T(this,"perfadd",!1);T(this,"tensorflow",{version:void 0,gpu:void 0});T(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});T(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});T(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});T(this,"cpu",{model:void 0,flags:[]});T(this,"kernels",[]);T(this,"Canvas");T(this,"Image");T(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:x0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let o=t[0].match(/\(([^()]+)\)/g);this.platform=o&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(x0.engine().registryFactory),this.tensorflow={version:x0.backend().binding?x0.backend().binding.TF_Version:void 0,gpu:x0.backend().binding?x0.backend().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&x0.getBackend()==="wasm"&&(this.wasm.simd=x0.env().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=x0.env().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=T0(100,100),o=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof o!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(x0.getBackend()==="webgl"||x0.getBackend()==="humangl")){let n=x0.backend().gpgpu!=="undefined"?await x0.backend().getGPGPUContext().gl:null;n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.renderer=n.getParameter(n.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(n){this.webgpu.supported=!1}try{this.kernels=x0.getKernelsForBackend(x0.getBackend()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},R=new G5;var S5=Z(D());var B5={};be(B5,{age:()=>qn,"anti-spoofing":()=>vr,antispoof:()=>jn,blazeface:()=>On,"blazeface-back":()=>Un,"blazeface-front":()=>Yn,"blazepose-detect":()=>Pr,"blazepose-detector2d":()=>Kn,"blazepose-detector3d":()=>Jn,"blazepose-full":()=>Qn,"blazepose-heavy":()=>_n,"blazepose-lite":()=>$n,default:()=>Lr,efficientpose:()=>er,"efficientpose-i-lite":()=>Rr,"efficientpose-ii-lite":()=>Tr,"efficientpose-iv":()=>wr,emotion:()=>Nn,faceboxes:()=>tr,facemesh:()=>Ln,"facemesh-attention":()=>nr,"facemesh-attention-alt":()=>or,"facemesh-detection-full":()=>rr,"facemesh-detection-short":()=>Ar,"facemesh-orig":()=>sr,faceres:()=>Wn,"faceres-deep":()=>ar,gear:()=>ir,gender:()=>yr,"gender-ssrnet-imdb":()=>lr,handdetect:()=>cr,"handlandmark-full":()=>Fn,"handlandmark-lite":()=>xr,"handlandmark-sparse":()=>dr,handskeleton:()=>fr,handtrack:()=>Gn,"insightface-efficientnet-b0":()=>kr,"insightface-ghostnet-strides1":()=>Er,"insightface-ghostnet-strides2":()=>zr,"insightface-mobilenet-emore":()=>Sr,"insightface-mobilenet-swish":()=>Cr,iris:()=>Bn,liveness:()=>Hn,"mb3-centernet":()=>Vn,meet:()=>mr,mobileface:()=>pr,mobilefacenet:()=>ur,models:()=>Dn,"movenet-lightning":()=>Zn,"movenet-multipose":()=>hr,"movenet-thunder":()=>br,nanodet:()=>gr,"nanodet-e":()=>Ir,"nanodet-g":()=>jr,"nanodet-m":()=>Or,"nanodet-t":()=>Nr,posenet:()=>Mr,selfie:()=>Xn});var jn=853098,On=538928,Nn=820516,Ln=1477958,Wn=6978814,Fn=5431368,Gn=2964837,Bn=2599092,Hn=592976,Vn=4030290,Dn=0,Zn=4650216,Xn=212886,qn=161240,Un=538928,Yn=402048,Kn=7499400,Jn=5928856,Qn=6338290,_n=27501554,$n=2725490,er=5651240,tr=2013002,or=2387598,nr=2382414,rr=1026192,Ar=201268,sr=2955780,ar=13957620,ir=1498916,lr=161236,yr=201808,cr=3515612,xr=2023432,dr=5286322,fr=5502280,mr=372228,pr=2183192,ur=5171976,hr=9448838,br=12477112,gr=7574558,Mr=5032780,Pr=5928804,vr=853098,Rr=2269064,Tr=5651240,wr=25643252,kr=13013224,Er=8093408,zr=8049584,Sr=6938536,Cr=12168584,Ir=12319156,jr=7574558,Or=1887474,Nr=5294216,Lr={antispoof:jn,blazeface:On,emotion:Nn,facemesh:Ln,faceres:Wn,"handlandmark-full":Fn,handtrack:Gn,iris:Bn,liveness:Hn,"mb3-centernet":Vn,models:Dn,"movenet-lightning":Zn,selfie:Xn,age:qn,"blazeface-back":Un,"blazeface-front":Yn,"blazepose-detector2d":Kn,"blazepose-detector3d":Jn,"blazepose-full":Qn,"blazepose-heavy":_n,"blazepose-lite":$n,efficientpose:er,faceboxes:tr,"facemesh-attention-alt":or,"facemesh-attention":nr,"facemesh-detection-full":rr,"facemesh-detection-short":Ar,"facemesh-orig":sr,"faceres-deep":ar,gear:ir,"gender-ssrnet-imdb":lr,gender:yr,handdetect:cr,"handlandmark-lite":xr,"handlandmark-sparse":dr,handskeleton:fr,meet:mr,mobileface:pr,mobilefacenet:ur,"movenet-multipose":hr,"movenet-thunder":br,nanodet:gr,posenet:Mr,"blazepose-detect":Pr,"anti-spoofing":vr,"efficientpose-i-lite":Rr,"efficientpose-ii-lite":Tr,"efficientpose-iv":wr,"insightface-efficientnet-b0":kr,"insightface-ghostnet-strides1":Er,"insightface-ghostnet-strides2":zr,"insightface-mobilenet-emore":Sr,"insightface-mobilenet-swish":Cr,"nanodet-e":Ir,"nanodet-g":jr,"nanodet-m":Or,"nanodet-t":Nr};var m5={};be(m5,{Models:()=>O2,getModelStats:()=>$1,load:()=>et,reset:()=>f5,validate:()=>z5,validateModel:()=>c2});var H2=Z(D());var q0,H5=[],Wr=["white","black","asian","indian","other"],Fr=[15,23,28,35.5,45.5,55.5,65],Ot=0,Nt=0,V5=Number.MAX_SAFE_INTEGER;async function Lt(e){var t;return R.initial&&(q0=null),q0?e.debug&&p("cached model:",q0.modelUrl):q0=await W((t=e.face.gear)==null?void 0:t.modelPath),q0}async function D5(e,t,o,n){var s,a;if(!q0)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=V5<(((s=t.face.gear)==null?void 0:s.skipFrames)||0),A=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>b()-Nt;return t.skipAllowed&&A&&r&&Ot===n&&H5[o]?(V5++,H5[o]):(V5=0,new Promise(async l=>{var M,g;if(!(q0!=null&&q0.inputs[0].shape))return;let y={},x=[[0,.1,.9,.9]];y.resize=H2.image.cropAndResize(e,x,[0],[q0.inputs[0].shape[2],q0.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([y.age,y.gender,y.race]=q0.execute(y.resize,["age_output","gender_output","race_output"]));let d=await y.gender.data();i.gender=d[0]>d[1]?"male":"female",i.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let c=await y.race.data();for(let f=0;f(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&i.race.push({score:Math.round(100*c[f])/100,race:Wr[f]});i.race.sort((f,u)=>u.score-f.score);let m=Array.from(await y.age.data()).map((f,u)=>[Fr[u],f]).sort((f,u)=>u[1]-f[1]),P=m[0][0];for(let f=1;fH2.dispose(y[f])),H5[o]=i,Ot=n,Nt=b(),l(i)}))}var Qe=Z(D());var Me=Z(D()),B={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Ft(){B.tf255=Me.scalar(255,"float32"),B.tf1=Me.scalar(1,"float32"),B.tf2=Me.scalar(2,"float32"),B.tf05=Me.scalar(.5,"float32"),B.tf127=Me.scalar(127.5,"float32"),B.rgb=Me.tensor1d([.2989,.587,.114],"float32")}var C0,V2=[],Gt=0,Bt=0,Z5=Number.MAX_SAFE_INTEGER;async function Ht(e){return R.initial&&(C0=null),C0?e.debug&&p("cached model:",C0.modelUrl):C0=await W(e.face.ssrnet.modelPathAge),C0}async function X5(e,t,o,n){var s,a,l,y;if(!C0)return{age:0};let r=Z5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Bt;return t.skipAllowed&&r&&A&&Gt===n&&((l=V2[o])==null?void 0:l.age)&&((y=V2[o])==null?void 0:y.age)>0?(Z5++,V2[o]):(Z5=0,new Promise(async x=>{if(!(C0!=null&&C0.inputs)||!C0.inputs[0]||!C0.inputs[0].shape)return;let i={};i.resize=Qe.image.resizeBilinear(e,[C0.inputs[0].shape[2],C0.inputs[0].shape[1]],!1),i.enhance=Qe.mul(i.resize,B.tf255);let d={age:0};if(t.face.ssrnet.enabled&&(i.age=C0.execute(i.enhance)),i.age){let c=await i.age.data();d.age=Math.trunc(10*c[0])/10}Object.keys(i).forEach(c=>Qe.dispose(i[c])),V2[o]=d,Gt=n,Bt=b(),x(d)}))}var h0=Z(D());var U0,D2=[],Dt=0,Zt=0,q5=Number.MAX_SAFE_INTEGER,U5=[.2989,.587,.114];async function Xt(e){return R.initial&&(U0=null),U0?e.debug&&p("cached model:",U0.modelUrl):U0=await W(e.face.ssrnet.modelPathGender),U0}async function Y5(e,t,o,n){var s,a,l,y;if(!U0)return{gender:"unknown",genderScore:0};let r=q5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Zt;return t.skipAllowed&&r&&A&&Dt===n&&((l=D2[o])==null?void 0:l.gender)&&((y=D2[o])==null?void 0:y.genderScore)>0?(q5++,D2[o]):(q5=0,new Promise(async x=>{if(!(U0!=null&&U0.inputs[0].shape))return;let i={};i.resize=h0.image.resizeBilinear(e,[U0.inputs[0].shape[2],U0.inputs[0].shape[1]],!1),i.enhance=h0.tidy(()=>{let[h,m,P]=h0.split(i.resize,3,3),M=h0.mul(h,U5[0]),g=h0.mul(m,U5[1]),f=h0.mul(P,U5[2]),u=h0.addN([M,g,f]);return h0.mul(h0.sub(u,B.tf05),2)});let d={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(i.gender=U0.execute(i.enhance));let c=await i.gender.data();d.gender=c[0]>c[1]?"female":"male",d.genderScore=c[0]>c[1]?Math.trunc(100*c[0])/100:Math.trunc(100*c[1])/100,Object.keys(i).forEach(h=>h0.dispose(i[h])),D2[o]=d,Dt=n,Zt=b(),x(d)}))}var X2=Z(D());var b0,Z2=[],K5=Number.MAX_SAFE_INTEGER,Ut=0,Yt=0;async function Kt(e){var t;return R.initial&&(b0=null),b0?e.debug&&p("cached model:",b0.modelUrl):b0=await W((t=e.face.antispoof)==null?void 0:t.modelPath),b0}async function J5(e,t,o,n){var s,a;if(!b0)return 0;let r=(((s=t.face.antispoof)==null?void 0:s.skipTime)||0)>b()-Yt,A=K5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&Ut===n&&Z2[o]?(K5++,Z2[o]):(K5=0,new Promise(async l=>{let y=X2.image.resizeBilinear(e,[b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[2]:0,b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[1]:0],!1),x=b0==null?void 0:b0.execute(y),i=(await x.data())[0];Z2[o]=Math.round(100*i)/100,Ut=n,Yt=b(),X2.dispose([y,x]),l(Z2[o])}))}var L=Z(D());var ye=Z(D());var Y0={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},Q5={count:468,mouth:13,symmetryLine:[13,Y0.midwayBetweenEyes[0]]},Le={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},_5=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],w2=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],We=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var Br=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],Hr=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],Vr=[33,133,362,263,1,78,308],s4=Br.map(e=>w2[e]),a4=Hr.map(e=>w2[e]),i4=Vr.map(e=>w2[e]);function Pe(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var Dr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Zr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Xr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],qr=[[474,475],[475,476],[476,477],[477,474]],Ur=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Yr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Kr=[[469,470],[470,471],[471,472],[472,469]],Jr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],l4={lips:Pe(Dr),leftEye:Pe(Zr),leftEyebrow:Pe(Xr),leftIris:Pe(qr),rightEye:Pe(Ur),rightEyebrow:Pe(Yr),rightIris:Pe(Kr),faceOval:Pe(Jr)};var _e=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],q2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],U2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],Y2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],$t=(e,t)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:o,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},e1=(e,t,o)=>{let n=t.shape[1],r=t.shape[2],A=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],s=ye.image.cropAndResize(t,[A],[0],o),a=ye.div(s,B.tf255);return ye.dispose(s),a},K2=(e,t)=>{let o=q2(e),n=_e(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[o[0]-r[0],o[1]-r[1]],endPoint:[o[0]+r[0],o[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},J2=e=>{let t=q2(e),o=_e(e),n=Math.max(...o)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},e3=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...o)],endPoint:[Math.max(...t),Math.max(...o)],landmarks:e}},t1=[[1,0,0],[0,1,0],[0,0,1]],Qr=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),_r=(e,t)=>Qr(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var Qt=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Fe=(e,t)=>{let o=0;for(let n=0;n{let o=[];for(let n=0;n{let o=[],n=e.length;for(let r=0;r{let o=Math.cos(e),n=Math.sin(e),r=[[o,-n,0],[n,o,0],[0,0,1]],A=Qt(t[0],t[1]),s=_t(A,r),a=Qt(-t[0],-t[1]);return _t(s,a)},eA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],o=[e[0][2],e[1][2]],n=[-Fe(t[0],o),-Fe(t[1],o)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},tA=(e,t)=>[Fe(e,t[0]),Fe(e,t[1])];function o3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},o=[];for(let n=0;n[A[0]/r*(c[0]-r/2),A[1]/r*(c[1]-r/2),c[2]||0]),a=o&&o!==0&&Math.abs(o)>.2,l=a?t3(o,[0,0]):t1,y=a?s.map(c=>[...tA(c,l),c[2]]):s,x=a?eA(n):t1,i=q2(t),d=[Fe(i,x[0]),Fe(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2]||0)])}function r3(e,t,o,n){let r=t.landmarks.length>=Q5.count?Q5.symmetryLine:Le.symmetryLine,A=0,s=t1,a;if(e&&R.kernels.includes("rotatewithoffset"))if(A=_r(t.landmarks[r[0]],t.landmarks[r[1]]),A&&A!==0&&Math.abs(A)>.2){let y=q2(t),x=[y[0]/o.shape[2],y[1]/o.shape[1]],i=ye.image.rotateWithOffset(o,A,0,x);s=t3(-A,y),a=e1(t,i,[n,n]),ye.dispose(i)}else a=e1(t,o,[n,n]);else a=e1(t,o,[n,n]);return[A,s,a]}var oA=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...o)+(Math.max(...o)-Math.min(...o))/2]},A3=(e,t)=>{let o=oA(e),n=_e(t);return{startPoint:[o[0]-n[0]/2,o[1]-n[1]/2],endPoint:[o[0]+n[0]/2,o[1]+n[1]/2]}};var s3=6,nA=1.4,Ae,a3=null,ve=0,k2=null,$e=()=>ve;async function i3(e){var t;return R.initial&&(Ae=null),Ae?e.debug&&p("cached model:",Ae.modelUrl):Ae=await W((t=e.face.detector)==null?void 0:t.modelPath),ve=Ae.inputs[0].shape?Ae.inputs[0].shape[2]:0,k2=L.scalar(ve,"int32"),a3=L.tensor2d(o3(ve)),Ae}function rA(e){let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,a3),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,k2),t.centersNormalized=L.div(t.centers,k2),t.halfBoxSize=L.div(t.boxSizesNormalized,B.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,k2),t.endNormalized=L.mul(t.ends,k2);let o=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>L.dispose(t[n])),o}async function l3(e,t){var a,l,y,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let o={};o.resized=L.image.resizeBilinear(e,[ve,ve]),o.div=L.div(o.resized,B.tf127),o.normalized=L.sub(o.div,B.tf05);let n=Ae==null?void 0:Ae.execute(o.normalized);if(Array.isArray(n)&&n.length>2){let i=n.sort((d,c)=>d.size-c.size);o.concat384=L.concat([i[0],i[2]],2),o.concat512=L.concat([i[1],i[3]],2),o.concat=L.concat([o.concat512,o.concat384],1),o.batch=L.squeeze(o.concat,0)}else Array.isArray(n)?o.batch=L.squeeze(n[0]):o.batch=L.squeeze(n);L.dispose(n),o.boxes=rA(o.batch),o.logits=L.slice(o.batch,[0,0],[-1,1]),o.sigmoid=L.sigmoid(o.logits),o.scores=L.squeeze(o.sigmoid),o.nms=await L.image.nonMaxSuppressionAsync(o.boxes,o.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((y=t.face.detector)==null?void 0:y.minConfidence)||0);let r=await o.nms.array(),A=[],s=await o.scores.data();for(let i=0;i(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let c={};c.bbox=L.slice(o.boxes,[r[i],0],[1,-1]),c.slice=L.slice(o.batch,[r[i],s3-1],[1,-1]),c.squeeze=L.squeeze(c.slice),c.landmarks=L.reshape(c.squeeze,[s3,-1]);let h=await c.bbox.data(),m={startPoint:[h[0],h[1]],endPoint:[h[2],h[3]],landmarks:await c.landmarks.array(),confidence:d},P=$t(m,[(e.shape[2]||0)/ve,(e.shape[1]||0)/ve]),M=K2(P,t.face.scale||nA),g=J2(M);A.push(g),Object.keys(c).forEach(f=>L.dispose(c[f]))}}return Object.keys(o).forEach(i=>L.dispose(o[i])),A}var O0=Z(D());var Q2={};be(Q2,{connected:()=>r1,kpt:()=>n1});var n1=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],r1={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var I0=Z(D()),c3=224,AA,sA=5,_2=[8,16,32,32,32];async function x3(){let e=[],t=0;for(;to.x)),y:I0.tensor1d(e.map(o=>o.y))}}function ce(e,t=[1,1]){let o=[e.map(a=>a[0]),e.map(a=>a[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[n[0],n[1],r[0]-n[0],r[1]-n[1]],s=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:s}}function d3(e,t=[1,1]){let o=[e.map(y=>y[0]),e.map(y=>y[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[(n[0]+r[0])/2,(n[1]+r[1])/2],s=Math.max(A[0]-n[0],A[1]-n[1],-A[0]+r[0],-A[1]+r[1]),a=[Math.trunc(A[0]-s),Math.trunc(A[1]-s),Math.trunc(2*s),Math.trunc(2*s)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function $2(e,t){let o=[e[2]*t,e[3]*t];return[e[0]-(o[0]-e[2])/2,e[1]-(o[1]-e[3])/2,o[0],o[1]]}var p3={initial:!0},j0={detector:null,landmarks:null},e2={detector:[224,224],landmarks:[256,256]},A1=Number.MAX_SAFE_INTEGER,iA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},t5=null,E2,Re=[[0,0],[0,0],[0,0],[0,0]],f3=0,m3=e=>1-1/(1+Math.exp(e));async function u3(e){if(p3.initial&&(j0.detector=null),!j0.detector&&e.body.detector&&e.body.detector.modelPath){j0.detector=await W(e.body.detector.modelPath);let t=Object.values(j0.detector.modelSignature.inputs);e2.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&j0.detector&&p("cached model:",j0.detector.modelUrl);return await x3(),j0.detector}async function h3(e){if(p3.initial&&(j0.landmarks=null),j0.landmarks)e.debug&&p("cached model:",j0.landmarks.modelUrl);else{j0.landmarks=await W(e.body.modelPath);let t=Object.values(j0.landmarks.modelSignature.inputs);e2.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return j0.landmarks}async function lA(e,t){let o={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let n;if(E2&&(o.cropped=O0.image.cropAndResize(e,[E2],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],A=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Re=[[0,0],r,A,[0,0]],o.pad=O0.pad(o.cropped||e,Re),o.resize=O0.image.resizeBilinear(o.pad,[t,t]),n=O0.div(o.resize,B.tf255)}else e.shape[1]!==t?(o.resize=O0.image.resizeBilinear(o.cropped||e,[t,t]),n=O0.div(o.resize,B.tf255)):n=O0.div(o.cropped||e,B.tf255);return Object.keys(o).forEach(r=>O0.dispose(o[r])),n}function yA(e,t){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Re[2][0]+Re[2][1])/t[0]-Re[2][0]),Math.trunc(o.position[1]*(t[1]+Re[1][0]+Re[1][1])/t[1]-Re[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(E2)for(let o of e)o.positionRaw=[o.positionRaw[0]+E2[1],o.positionRaw[1]+E2[0],o.positionRaw[2]],o.position=[Math.trunc(o.positionRaw[0]*t[0]),Math.trunc(o.positionRaw[1]*t[1]),o.positionRaw[2]];return e}async function cA(e){let t=e.find(a=>a.part==="leftPalm"),o=e.find(a=>a.part==="leftWrist"),n=e.find(a=>a.part==="leftIndex");t.position[2]=((o.position[2]||0)+(n.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),A=e.find(a=>a.part==="rightWrist"),s=e.find(a=>a.part==="rightIndex");r.position[2]=((A.position[2]||0)+(s.position[2]||0))/2}async function xA(e,t,o){var h;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=(h=j0.landmarks)==null?void 0:h.execute(e,iA.landmarks);let r=(await n.poseflag.data())[0],A=await n.ld.data(),s=await n.world.data();Object.keys(n).forEach(m=>O0.dispose(n[m]));let a=[],l=5;for(let m=0;mm.position),i=ce(x,[o[0],o[1]]),d={};for(let[m,P]of Object.entries(r1)){let M=[];for(let g=0;gS.part===P[g]),u=y.find(S=>S.part===P[g+1]);f&&u&&M.push([f.position,u.position])}d[m]=M}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:y,annotations:d}}async function s1(e,t){let o=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>b()-f3,r=A1<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&t5!==null)A1++;else{let A={};A.landmarks=await lA(e,256),t5=await xA(A.landmarks,t,o),Object.keys(A).forEach(s=>O0.dispose(A[s])),f3=b(),A1=0}return t5?[t5]:[]}var w0=Z(D());var t2=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var xe,Ge=0,a1=[],g3=0,i1=Number.MAX_SAFE_INTEGER;async function M3(e){if(R.initial&&(xe=null),xe)e.debug&&p("cached model:",xe.modelUrl);else{xe=await W(e.object.modelPath);let t=Object.values(xe.modelSignature.inputs);Ge=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return xe}async function dA(e,t,o){if(!e)return[];let n={},r=[],A=await e.array();n.squeeze=w0.squeeze(e);let s=w0.split(n.squeeze,6,1);n.stack=w0.stack([s[1],s[0],s[3],s[2]],1),n.boxes=w0.squeeze(n.stack),n.scores=w0.squeeze(s[4]),n.classes=w0.squeeze(s[5]),w0.dispose([e,...s]),n.nms=await w0.image.nonMaxSuppressionAsync(n.boxes,n.scores,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence||0);let a=await n.nms.data(),l=0;for(let y of Array.from(a)){let x=Math.trunc(100*A[0][y][4])/100,i=A[0][y][5],d=t2[i].label,[c,h]=[A[0][y][0]/Ge,A[0][y][1]/Ge],m=[c,h,A[0][y][2]/Ge-c,A[0][y][3]/Ge-h],P=[Math.trunc(m[0]*t[0]),Math.trunc(m[1]*t[1]),Math.trunc(m[2]*t[0]),Math.trunc(m[3]*t[1])];r.push({id:l++,score:x,class:i,label:d,box:P,boxRaw:m})}return Object.keys(n).forEach(y=>w0.dispose(n[y])),r}async function l1(e,t){let o=(t.object.skipTime||0)>b()-g3,n=i1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&a1.length>0?(i1++,a1):(i1=0,new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=w0.image.resizeBilinear(e,[Ge,Ge]),a=t.object.enabled?xe==null?void 0:xe.execute(s,["tower_0/detections"]):null;g3=b(),w0.dispose(s);let l=await dA(a,A,t);a1=l,r(l)}))}var J=Z(D());var o5={};be(o5,{connected:()=>c1,kpt:()=>y1});var y1=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],c1={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var g0,v3=0,k0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},x1=Number.MAX_SAFE_INTEGER;async function R3(e){return R.initial&&(g0=null),g0?e.debug&&p("cached model:",g0.modelUrl):g0=await W(e.body.modelPath),g0}async function fA(e,t){let[o,n]=e.shape,r=J.reshape(e,[n*o]),A=J.max(r,0),s=(await A.data())[0];if(s>t){let a=J.argMax(r,0),l=J.mod(a,o),y=(await l.data())[0],x=J.div(a,o),i=(await x.data())[0];return J.dispose([r,A,a,l,x]),[y,i,s]}else return J.dispose([r,A]),[0,0,s]}async function d1(e,t){let o=(t.body.skipTime||0)>b()-v3,n=x1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n&&Object.keys(k0.keypoints).length>0?(x1++,[k0]):(x1=0,new Promise(async r=>{var i;let A=J.tidy(()=>{if(!(g0!=null&&g0.inputs[0].shape))return null;let d=J.image.resizeBilinear(e,[g0.inputs[0].shape[2],g0.inputs[0].shape[1]],!1),c=J.mul(d,B.tf2);return J.sub(c,B.tf1)}),s;if(t.body.enabled&&(s=g0==null?void 0:g0.execute(A)),v3=b(),J.dispose(A),s){k0.keypoints.length=0;let d=J.squeeze(s);J.dispose(s);let c=J.unstack(d,2);J.dispose(d);for(let h=0;h(((i=t.body)==null?void 0:i.minConfidence)||0)&&k0.keypoints.push({score:Math.round(100*M)/100,part:y1[h],positionRaw:[m/g0.inputs[0].shape[2],P/g0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/g0.inputs[0].shape[2]),Math.round(e.shape[1]*P/g0.inputs[0].shape[1])]})}c.forEach(h=>J.dispose(h))}k0.score=k0.keypoints.reduce((d,c)=>c.score>d?c.score:d,0);let a=k0.keypoints.map(d=>d.position[0]),l=k0.keypoints.map(d=>d.position[1]);k0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let y=k0.keypoints.map(d=>d.positionRaw[0]),x=k0.keypoints.map(d=>d.positionRaw[1]);k0.boxRaw=[Math.min(...y),Math.min(...x),Math.max(...y)-Math.min(...y),Math.max(...x)-Math.min(...x)];for(let[d,c]of Object.entries(c1)){let h=[];for(let m=0;mg.part===c[m]),M=k0.keypoints.find(g=>g.part===c[m+1]);P&&M&&P.score>(t.body.minConfidence||0)&&M.score>(t.body.minConfidence||0)&&h.push([P.position,M.position])}k0.annotations[d]=h}r([k0])}))}var J0=Z(D());var mA=["angry","disgust","fear","happy","sad","surprise","neutral"],D0,n5=[],w3=0,k3=0,f1=Number.MAX_SAFE_INTEGER;async function E3(e){var t;return R.initial&&(D0=null),D0?e.debug&&p("cached model:",D0.modelUrl):D0=await W((t=e.face.emotion)==null?void 0:t.modelPath),D0}async function m1(e,t,o,n){var s,a;if(!D0)return[];let r=f1<(((s=t.face.emotion)==null?void 0:s.skipFrames)||0),A=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>b()-k3;return t.skipAllowed&&A&&r&&w3===n&&n5[o]&&n5[o].length>0?(f1++,n5[o]):(f1=0,new Promise(async l=>{var x,i;let y=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},c=D0!=null&&D0.inputs[0].shape?D0.inputs[0].shape[2]:0;d.resize=J0.image.resizeBilinear(e,[c,c],!1),d.channels=J0.mul(d.resize,B.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,B.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,B.tf2),d.emotion=D0==null?void 0:D0.execute(d.grayscaleMul),k3=b();let h=await d.emotion.data();for(let m=0;m(((i=t.face.emotion)==null?void 0:i.minConfidence)||0)&&y.push({score:Math.min(.99,Math.trunc(100*h[m])/100),emotion:mA[m]});y.sort((m,P)=>P.score-m.score),Object.keys(d).forEach(m=>J0.dispose(d[m]))}n5[o]=y,w3=n,l(y)}))}var r5=Z(D());var N0,p1=[],S3=0,C3=0,I3=Number.MAX_SAFE_INTEGER;async function j3(e){return R.initial&&(N0=null),N0?e.debug&&p("cached model:",N0.modelUrl):N0=await W(e.face.mobilefacenet.modelPath),N0}async function u1(e,t,o,n){var s,a;if(!N0)return[];let r=I3<(((s=t.face.mobilefacenet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>b()-C3;return t.skipAllowed&&A&&r&&S3===n&&p1[o]?(I3++,p1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.mobilefacenet)==null?void 0:x.enabled)&&(N0==null?void 0:N0.inputs[0].shape)){let i={};i.crop=r5.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1),i.data=N0==null?void 0:N0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>r5.dispose(i[c]))}p1[o]=y,S3=n,C3=b(),l(y)})}var A5=Z(D());var L0,h1=[],N3=0,L3=0,W3=Number.MAX_SAFE_INTEGER;async function F3(e){return R.initial&&(L0=null),L0?e.debug&&p("cached model:",L0.modelUrl):L0=await W(e.face.insightface.modelPath),L0}async function b1(e,t,o,n){var s,a;if(!L0)return[];let r=W3<(((s=t.face.insightface)==null?void 0:s.skipFrames)||0),A=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>b()-L3;return t.skipAllowed&&A&&r&&N3===n&&h1[o]?(W3++,h1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.insightface)==null?void 0:x.enabled)&&(L0==null?void 0:L0.inputs[0].shape)){let i={};i.crop=A5.image.resizeBilinear(e,[L0.inputs[0].shape[2],L0.inputs[0].shape[1]],!1),i.data=L0==null?void 0:L0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>A5.dispose(i[c]))}h1[o]=y,N3=n,L3=b(),l(y)})}var ke=Z(D());var Q0=Z(D());var de,Te=0,pA=2.3,g1=Y0.leftEyeLower0,M1=Y0.rightEyeLower0,o2={leftBounds:[g1[0],g1[g1.length-1]],rightBounds:[M1[0],M1[M1.length-1]]},n2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function D3(e){var t;return R.initial&&(de=null),de?e.debug&&p("cached model:",de.modelUrl):de=await W((t=e.face.iris)==null?void 0:t.modelPath),Te=de.inputs[0].shape?de.inputs[0].shape[2]:0,Te===-1&&(Te=64),de}function s5(e,t,o,n){for(let r=0;r<_5.length;r++){let{key:A,indices:s}=_5[r],a=Y0[`${o}${A}`];if(!n||n.includes(A))for(let l=0;l{let t=e[o2.leftBounds[0]][2],o=e[o2.rightBounds[0]][2];return t-o},B3=(e,t,o,n,r,A=!1)=>{let s=J2(K2(e3([e[o],e[n]]),pA)),a=_e(s),l=Q0.image.cropAndResize(t,[[s.startPoint[1]/r,s.startPoint[0]/r,s.endPoint[1]/r,s.endPoint[0]/r]],[0],[Te,Te]);if(A&&R.kernels.includes("flipleftright")){let y=Q0.image.flipLeftRight(l);Q0.dispose(l),l=y}return{box:s,boxSize:a,crop:l}},H3=(e,t,o,n=!1)=>{let r=[];for(let A=0;A{let n=e[Y0[`${o}EyeUpper0`][n2.upperCenter]][2],r=e[Y0[`${o}EyeLower0`][n2.lowerCenter]][2],A=(n+r)/2;return t.map((s,a)=>{let l=A;return a===2?l=n:a===4&&(l=r),[s[0],s[1],l]})};async function Z3(e,t,o,n){if(!de)return o.debug&&p("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:A,crop:s}=B3(e,t,o2.leftBounds[0],o2.leftBounds[1],n,!0),{box:a,boxSize:l,crop:y}=B3(e,t,o2.rightBounds[0],o2.rightBounds[1],n,!0),x=Q0.concat([s,y]);Q0.dispose(s),Q0.dispose(y);let i=de.execute(x);Q0.dispose(x);let d=await i.data();Q0.dispose(i);let c=d.slice(0,n2.numCoordinates*3),{rawCoords:h,iris:m}=H3(c,r,A,!0),P=d.slice(n2.numCoordinates*3),{rawCoords:M,iris:g}=H3(P,a,l,!1),f=uA(e);Math.abs(f)<30?(s5(e,h,"left",null),s5(e,M,"right",null)):f<1?s5(e,h,"left",["EyeUpper0","EyeLower0"]):s5(e,M,"right",["EyeUpper0","EyeLower0"]);let u=V3(e,m,"left"),S=V3(e,g,"right");return e.concat(u).concat(S)}var hA=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],bA=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],gA=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],MA=[[474,475],[475,476],[476,477],[477,474]],PA=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],vA=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],RA=[[469,470],[470,471],[471,472],[472,469]],TA=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function we(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var wA={lips:we(hA),leftEye:we(bA),leftEyebrow:we(gA),leftIris:we(MA),rightEye:we(PA),rightEyebrow:we(vA),rightIris:we(RA),faceOval:we(TA)},kA=Object.entries(wA).map(([e,t])=>t.map(o=>[o,e])).flat(),H4=new Map(kA),z2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Be=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],He=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function U3(e,t){let o={lips:await t.filter(A=>A.size===160)[0].data(),irisL:await t.filter(A=>A.size===10)[0].data(),eyeL:await t.filter(A=>A.size===142)[0].data(),irisR:await t.filter(A=>A.size===10)[1].data(),eyeR:await t.filter(A=>A.size===142)[1].data()},n=Be.reduce((A,s)=>A+=e[s][2],0)/Be.length;for(let A=0;AA+=e[s][2],0)/He.length;for(let A=0;Ab()-se.timestamp,n=se.skipped<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);!t.skipAllowed||!o||!n||se.boxes.length===0?(se.boxes=await l3(e,t),se.timestamp=b(),se.skipped=0):se.skipped++;let r=[],A=[],s=0;for(let f=0;fG.shape[G.shape.length-1]===1).data();if(w.faceScore=Math.round(100*X[0])/100,w.faceScore<(((h=t.face.detector)==null?void 0:h.minConfidence)||1)){if(u.confidence=w.faceScore,(m=t.face.mesh)!=null&&m.keepInvalid){w.box=U2(u,e),w.boxRaw=Y2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(G=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*G[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*G[1]/$e()]),w.meshRaw=w.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/Ve]);for(let G of Object.keys(Le))w.annotations[G]=[w.mesh[Le[G]]]}}else{let G=E.find(y0=>y0.shape[y0.shape.length-1]===1404),o0=ke.reshape(G,[-1,3]),_=await o0.array();ke.dispose(o0),(P=t.face.attention)!=null&&P.enabled?_=await U3(_,E):(M=t.face.iris)!=null&&M.enabled&&(_=await Z3(_,w.tensor,t,Ve)),w.mesh=n3(_,u,S,N,Ve),w.meshRaw=w.mesh.map(y0=>[y0[0]/(e.shape[2]||0),y0[1]/(e.shape[1]||0),(y0[2]||0)/Ve]);for(let y0 of Object.keys(Y0))w.annotations[y0]=Y0[y0].map(V0=>w.mesh[V0]);w.score=w.faceScore;let z={...A3(w.mesh,u),confidence:u.confidence,landmarks:u.landmarks};w.box=U2(z,e),w.boxRaw=Y2(z,e),A.push(z)}ke.dispose(E)}else{w.box=U2(u,e),w.boxRaw=Y2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(E=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*E[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*E[1]/$e()]),w.meshRaw=w.mesh.map(E=>[E[0]/(e.shape[2]||0),E[1]/(e.shape[1]||0),(E[2]||0)/Ve]);for(let E of Object.keys(Le))w.annotations[E]=[w.mesh[Le[E]]]}w.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(w):ke.dispose(w.tensor)}return se.boxes=A,r}async function K3(e){var t,o,n,r,A,s;return R.initial&&(M0=null),((o=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:o.enabled)&&(M0==null?void 0:M0.signature)&&Object.keys(((n=M0==null?void 0:M0.signature)==null?void 0:n.outputs)||{}).length<6&&(M0=null),M0?e.debug&&p("cached model:",M0.modelUrl):(r=e.face.attention)!=null&&r.enabled?M0=await W((A=e.face.attention)==null?void 0:A.modelPath):M0=await W((s=e.face.mesh)==null?void 0:s.modelPath),Ve=M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0}var J3=We,Q3=w2;var _0=Z(D());var W0,a5=[],_3=0,$3=0,v1=Number.MAX_SAFE_INTEGER;async function eo(e){var t;return R.initial&&(W0=null),W0?e.debug&&p("cached model:",W0.modelUrl):W0=await W((t=e.face.description)==null?void 0:t.modelPath),W0}function R1(e){let t=e.image||e.tensor||e;if(!(W0!=null&&W0.inputs[0].shape))return t;let o=_0.image.resizeBilinear(t,[W0.inputs[0].shape[2],W0.inputs[0].shape[1]],!1),n=_0.mul(o,B.tf255);return _0.dispose(o),n}async function T1(e,t,o,n){var s,a,l,y;if(!W0)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=v1<(((s=t.face.description)==null?void 0:s.skipFrames)||0),A=(((a=t.face.description)==null?void 0:a.skipTime)||0)>b()-_3;return t.skipAllowed&&r&&A&&$3===n&&((l=a5[o])==null?void 0:l.age)&&((y=a5[o])==null?void 0:y.age)>0?(v1++,a5[o]):(v1=0,new Promise(async x=>{var d,c;let i={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((d=t.face.description)!=null&&d.enabled){let h=R1(e),m=W0==null?void 0:W0.execute(h);_3=b(),_0.dispose(h);let M=await(await m.find(H=>H.shape[1]===1)).data(),g=Math.trunc(200*Math.abs(M[0]-.5))/100;g>(((c=t.face.description)==null?void 0:c.minConfidence)||0)&&(i.gender=M[0]<=.5?"female":"male",i.genderScore=Math.min(.99,g));let f=_0.argMax(m.find(H=>H.shape[1]===100),1),u=(await f.data())[0];_0.dispose(f);let N=await m.find(H=>H.shape[1]===100).data();i.age=Math.round(N[u-1]>N[u+1]?10*u-100*N[u-1]:10*u+100*N[u+1])/10;let w=m.find(H=>H.shape[1]===1024),E=w?await w.data():[];i.descriptor=Array.from(E),m.forEach(H=>_0.dispose(H))}a5[o]=i,$3=n,x(i)}))}var F=Z(D());var no=Z(D());function i5(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function S2(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function ro(e,t,o){let n=t.shape[1],r=t.shape[2],A=[[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r]];return no.image.cropAndResize(t,A,[0],o)}function Ao(e,t){let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(A=>[A[0]*t[0],A[1]*t[1]]);return{startPoint:o,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function l5(e,t=1.5){let o=S2(e),n=i5(e),r=[t*n[0]/2,t*n[1]/2],A=[o[0]-r[0],o[1]-r[1]],s=[o[0]+r[0],o[1]+r[1]];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function y5(e){let t=S2(e),o=i5(e),r=Math.max(...o)/2,A=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function zA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function so(e,t){let o=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return zA(o)}var to=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ee(e,t){let o=0;for(let n=0;n[o.x,o.y]),this.anchorsTensor=F.tensor2d(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=F.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=F.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let o={};o.boxOffsets=F.slice(t,[0,0],[-1,2]),o.boxSizes=F.slice(t,[0,2],[-1,2]),o.div=F.div(o.boxOffsets,this.inputSizeTensor),o.boxCenterPoints=F.add(o.div,this.anchorsTensor),o.halfBoxSizes=F.div(o.boxSizes,this.doubleInputSizeTensor),o.sub=F.sub(o.boxCenterPoints,o.halfBoxSizes),o.startPoints=F.mul(o.sub,this.inputSizeTensor),o.add=F.add(o.boxCenterPoints,o.halfBoxSizes),o.endPoints=F.mul(o.add,this.inputSizeTensor);let n=F.concat2d([o.startPoints,o.endPoints],1);return Object.keys(o).forEach(r=>F.dispose(o[r])),n}normalizeLandmarks(t,o){let n={};n.reshape=F.reshape(t,[-1,7,2]),n.div=F.div(n.reshape,this.inputSizeTensor),n.landmarks=F.add(n.div,this.anchors[o]);let r=F.mul(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(A=>F.dispose(n[A])),r}async predict(t,o){let n={};n.resize=F.image.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=F.div(n.resize,B.tf127),n.image=F.sub(n.div,B.tf1),n.batched=this.model.execute(n.image),n.predictions=F.squeeze(n.batched),n.slice=F.slice(n.predictions,[0,0],[-1,1]),n.sigmoid=F.sigmoid(n.slice),n.scores=F.squeeze(n.sigmoid);let r=await n.scores.data();n.boxes=F.slice(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await F.image.nonMaxSuppressionAsync(n.norm,n.scores,3*o.hand.maxDetected,o.hand.iouThreshold,o.hand.minConfidence);let A=await n.nms.array(),s=[];for(let a of A){let l={};l.box=F.slice(n.norm,[a,0],[1,-1]),l.slice=F.slice(n.predictions,[a,5],[1,14]),l.norm=this.normalizeLandmarks(l.slice,a),l.palmLandmarks=F.reshape(l.norm,[-1,2]);let y=await l.box.data(),x=y.slice(0,2),i=y.slice(2,4),d=await l.palmLandmarks.array(),c={startPoint:x,endPoint:i,palmLandmarks:d,confidence:r[a]},h=Ao(c,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);s.push(h),Object.keys(l).forEach(m=>F.dispose(l[m]))}return Object.keys(n).forEach(a=>F.dispose(n[a])),s}};var F0=Z(D());var jA=5,yo=1.65,co=[0,5,9,13,17,1,2],OA=0,NA=2,xo=0,x5=class{constructor(t,o){T(this,"handDetector");T(this,"handPoseModel");T(this,"inputSize");T(this,"storedBoxes");T(this,"skipped");T(this,"detectedHands");this.handDetector=t,this.handPoseModel=o,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let o=t.map(s=>s[0]),n=t.map(s=>s[1]),r=[Math.min(...o),Math.min(...n)],A=[Math.max(...o),Math.max(...n)];return{startPoint:r,endPoint:A}}getBoxForPalmLandmarks(t,o){let n=t.map(A=>E1([...A,1],o)),r=this.calculateLandmarksBoundingBox(n);return l5(y5(r),jA)}getBoxForHandLandmarks(t){let o=this.calculateLandmarksBoundingBox(t),n=l5(y5(o),yo);n.palmLandmarks=[];for(let r=0;r[s[0]*(c[0]-this.inputSize/2),s[1]*(c[1]-this.inputSize/2),s[2]*c[2]]),l=k1(n,[0,0]),y=a.map(c=>[...E1(c,l),c[2]]),x=ao(r),i=[...S2(o),1],d=[Ee(i,x[0]),Ee(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2])])}async estimateHands(t,o){let n=!1,r,A=(o.hand.skipTime||0)>b()-xo,s=this.skipped<(o.hand.skipFrames||0);o.skipAllowed&&A&&s&&(r=await this.handDetector.predict(t,o),this.skipped=0),o.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==o.hand.maxDetected||!o.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let a=[];for(let l=0;l=o.hand.minConfidence/4){let S=F0.reshape(f,[-1,3]),N=await S.array();F0.dispose(f),F0.dispose(S);let w=this.transformRawCoords(N,m,x,h),E=this.getBoxForHandLandmarks(w);this.storedBoxes[l]={...E,confidence:u};let H={landmarks:w,confidence:u,boxConfidence:y.confidence,fingerConfidence:u,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};a.push(H)}else this.storedBoxes[l]=null;F0.dispose(f)}else{let x=l5(y5(y),yo),i={confidence:y.confidence,boxConfidence:y.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>o.hand.maxDetected&&(a.length=o.hand.maxDetected),a}};var E0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>E0.nameMapping[e],getPoints:e=>E0.pointsMapping[e]},Se={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Se.nameMapping[e]},n0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>n0.nameMapping[e]},ze=class{constructor(t){T(this,"name");T(this,"curls");T(this,"directions");T(this,"weights");T(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,o,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([o,n])}direction(t,o,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([o,n])}weight(t,o){this.weights[t]=o;let n=this.weights.reduce((r,A)=>r+A,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,o){let n=0;for(let r in t){let A=t[r],s=this.curls[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}for(let r in o){let A=o[r],s=this.directions[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:$0,index:fe,middle:me,ring:De,pinky:Ze}=E0,{none:ee,half:WA,full:te}=Se,{verticalUp:r2,verticalDown:os,horizontalLeft:z1,horizontalRight:FA,diagonalUpRight:GA,diagonalUpLeft:A2,diagonalDownRight:ns,diagonalDownLeft:rs}=n0,Ce=new ze("thumbs up");Ce.curl($0,ee,1);Ce.direction($0,r2,1);Ce.direction($0,A2,.25);Ce.direction($0,GA,.25);for(let e of[E0.index,E0.middle,E0.ring,E0.pinky])Ce.curl(e,te,1),Ce.direction(e,z1,1),Ce.direction(e,FA,1);var d0=new ze("victory");d0.curl($0,WA,.5);d0.curl($0,ee,.5);d0.direction($0,r2,1);d0.direction($0,A2,1);d0.curl(fe,ee,1);d0.direction(fe,r2,.75);d0.direction(fe,A2,1);d0.curl(me,ee,1);d0.direction(me,r2,1);d0.direction(me,A2,.75);d0.curl(De,te,1);d0.direction(De,r2,.2);d0.direction(De,A2,1);d0.direction(De,z1,.2);d0.curl(Ze,te,1);d0.direction(Ze,r2,.2);d0.direction(Ze,A2,1);d0.direction(Ze,z1,.2);d0.weight(fe,2);d0.weight(me,2);var Ie=new ze("point");Ie.curl($0,te,1);Ie.curl(fe,ee,.5);Ie.curl(me,te,.5);Ie.curl(De,te,.5);Ie.curl(Ze,te,.5);Ie.weight(fe,2);Ie.weight(me,2);var je=new ze("middle finger");je.curl($0,ee,1);je.curl(fe,te,.5);je.curl(me,te,.5);je.curl(De,te,.5);je.curl(Ze,te,.5);je.weight(fe,2);je.weight(me,2);var s2=new ze("open palm");s2.curl($0,ee,.75);s2.curl(fe,ee,.75);s2.curl(me,ee,.75);s2.curl(De,ee,.75);s2.curl(Ze,ee,.75);var fo=[Ce,d0,Ie,je,s2];var BA=.7,Xe={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function mo(e,t,o,n){let r=(t-n)/(e-o),A=Math.atan(r)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function uo(e,t){if(!e||!t)return[0,0];let o=mo(e[0],e[1],t[0],t[1]);if(e.length===2)return o;let n=mo(e[1],e[2],t[1],t[2]);return[o,n]}function po(e,t=1){let o=0,n=0,r=0;return e>=75&&e<=105?o=1*t:e>=25&&e<=155?n=1*t:r=1*t,[o,n,r]}function HA(e,t,o){let n=e[0]-t[0],r=e[0]-o[0],A=t[0]-o[0],s=e[1]-t[1],a=e[1]-o[1],l=t[1]-o[1],y=e[2]-t[2],x=e[2]-o[2],i=t[2]-o[2],d=Math.sqrt(n*n+s*s+y*y),c=Math.sqrt(r*r+a*a+x*x),h=Math.sqrt(A*A+l*l+i*i),m=(h*h+d*d-c*c)/(2*h*d);m>1?m=1:m<-1&&(m=-1);let P=Math.acos(m);P=57.2958*P%180;let M;return P>Xe.NO_CURL_START_LIMIT?M=Se.none:P>Xe.HALF_CURL_START_LIMIT?M=Se.half:M=Se.full,M}function ho(e,t,o,n){let r;return n===Math.abs(e)?e>0?r=n0.horizontalLeft:r=n0.horizontalRight:n===Math.abs(t)?t>0?r=n0.horizontalLeft:r=n0.horizontalRight:o>0?r=n0.horizontalLeft:r=n0.horizontalRight,r}function bo(e,t,o,n){let r;return n===Math.abs(e)?e<0?r=n0.verticalDown:r=n0.verticalUp:n===Math.abs(t)?t<0?r=n0.verticalDown:r=n0.verticalUp:o<0?r=n0.verticalDown:r=n0.verticalUp,r}function VA(e,t,o,n,r,A,s,a){let l,y=bo(e,t,o,n),x=ho(r,A,s,a);return y===n0.verticalUp?x===n0.horizontalLeft?l=n0.diagonalUpLeft:l=n0.diagonalUpRight:x===n0.horizontalLeft?l=n0.diagonalDownLeft:l=n0.diagonalDownRight,l}function DA(e,t,o,n){let r=e[0]-t[0],A=e[0]-o[0],s=t[0]-o[0],a=e[1]-t[1],l=e[1]-o[1],y=t[1]-o[1],x=Math.max(Math.abs(r),Math.abs(A),Math.abs(s)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(y)),d=0,c=0,h=0,m=i/(x+1e-5);m>1.5?d+=Xe.DISTANCE_VOTE_POWER:m>.66?c+=Xe.DISTANCE_VOTE_POWER:h+=Xe.DISTANCE_VOTE_POWER;let P=Math.sqrt(r*r+a*a),M=Math.sqrt(A*A+l*l),g=Math.sqrt(s*s+y*y),f=Math.max(P,M,g),u=e[0],S=e[1],N=o[0],w=o[1];f===P?(N=o[0],w=o[1]):f===g&&(u=t[0],S=t[1]);let X=uo([u,S],[N,w]),G=po(X,Xe.TOTAL_ANGLE_VOTE_POWER);d+=G[0],c+=G[1],h+=G[2];for(let _ of n){let z=po(_,Xe.SINGLE_ANGLE_VOTE_POWER);d+=z[0],c+=z[1],h+=z[2]}let o0;return d===Math.max(d,c,h)?o0=bo(l,a,y,i):h===Math.max(c,h)?o0=ho(A,r,s,x):o0=VA(l,a,y,i,A,r,s,x),o0}function go(e){let t=[],o=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let A of E0.all){let s=E0.getPoints(A),a=[],l=[];for(let y of s){let x=e[y[0]],i=e[y[1]],d=uo(x,i),c=d[0],h=d[1];a.push(c),l.push(h)}t.push(a),o.push(l)}for(let A of E0.all){let s=A===E0.thumb?1:0,a=E0.getPoints(A),l=e[a[s][0]],y=e[a[s+1][1]],x=e[a[3][1]],i=HA(l,y,x),d=DA(l,y,x,t[A].slice(s));n[A]=i,r[A]=d}return{curls:n,directions:r}}function d5(e){if(!e||e.length===0)return null;let t=go(e),o={};for(let n of E0.all)o[E0.getName(n)]={curl:Se.getName(t.curls[n]),direction:n0.getName(t.directions[n])};return o}function Mo(e){let t=[];if(!e||e.length===0)return t;let o=go(e);for(let n of fo){let r=n.matchAgainst(o.curls,o.directions);r>=BA&&t.push({name:n.name,confidence:r})}return t}var Po={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},a2,i2,vo;async function C1(e,t){let o=await vo.estimateHands(e,t);if(!o)return[];let n=[];for(let r=0;ro[r].landmarks[i]);let s=o[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(s&&s.length>0){for(let x of s)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=o[r].box?[Math.trunc(Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.max(0,o[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,o[r].box.bottomRight[0])-Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,o[r].box.bottomRight[1])-Math.max(0,o[r].box.topLeft[1]))]:[0,0,0,0],l=[o[r].box.topLeft[0]/(e.shape[2]||0),o[r].box.topLeft[1]/(e.shape[1]||0),(o[r].box.bottomRight[0]-o[r].box.topLeft[0])/(e.shape[2]||0),(o[r].box.bottomRight[1]-o[r].box.topLeft[1])/(e.shape[1]||0)];let y=d5(s);n.push({id:r,score:Math.round(100*o[r].confidence)/100,boxScore:Math.round(100*o[r].boxConfidence)/100,fingerScore:Math.round(100*o[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:s,annotations:A,landmarks:y})}return n}async function I1(e){var o,n;R.initial&&(a2=null,i2=null),!a2||!i2?[a2,i2]=await Promise.all([e.hand.enabled?W((o=e.hand.detector)==null?void 0:o.modelPath):null,e.hand.landmarks?W((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&p("cached model:",a2.modelUrl),e.debug&&p("cached model:",i2.modelUrl));let t=new c5(a2);return vo=new x5(t,i2),[a2,i2]}var Q=Z(D());var i0=Z(D());var t0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ZA(){let e=t0.gl;!e||(t0.extensions=e.getSupportedExtensions())}async function To(e){var t;if(e.config.backend==="humangl"&&(t0.name in i0.engine().registry&&(!t0.gl||!t0.gl.getParameter(t0.gl.VERSION))&&(p("error: humangl backend invalid context"),f5(e)),!i0.findBackend(t0.name))){try{t0.canvas=await T0(100,100)}catch(n){p("error: cannot create canvas:",n);return}try{if(t0.gl=(t=t0.canvas)==null?void 0:t.getContext("webgl2",t0.webGLattr),!t0.gl.getParameter(t0.gl.VERSION).includes("2.0")){p("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}t0.canvas&&(t0.canvas.addEventListener("webglcontextlost",async r=>{throw p("error: humangl:",r.type),p("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),t0.canvas.addEventListener("webglcontextrestored",r=>{p("error: humangl context restored:",r)}),t0.canvas.addEventListener("webglcontextcreationerror",r=>{p("error: humangl context create:",r)}))}catch(n){p("error: cannot get WebGL context:",n);return}try{i0.setWebGLContext(2,t0.gl)}catch(n){p("error: cannot set WebGL context:",n);return}try{let n=new i0.GPGPUContext(t0.gl);i0.registerBackend(t0.name,()=>new i0.MathBackendWebGL(n),t0.priority)}catch(n){p("error: cannot register WebGL backend:",n);return}try{i0.getKernelsForBackend("webgl").forEach(r=>{let A={...r,backendName:t0.name};i0.registerKernel(A)})}catch(n){p("error: cannot update WebGL backend registration:",n);return}let o=i0.backend().getGPGPUContext?i0.backend().getGPGPUContext().gl:null;if(o)p(`humangl webgl version:${o.getParameter(o.VERSION)} renderer:${o.getParameter(o.RENDERER)}`);else{p("error: no current gl context:",o,t0.gl);return}try{i0.env().flagRegistry.WEBGL_VERSION&&i0.env().set("WEBGL_VERSION",2)}catch(n){p("error: cannot set WebGL backend flags:",n);return}ZA(),p("backend registered:",t0.name)}}var I=Z(D());function XA(){if(!R.kernels.includes("mod")){let e={kernelName:"Mod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.sub(t.inputs.a,I.mul(I.div(t.inputs.a,t.inputs.b),t.inputs.b)))};I.registerKernel(e),R.kernels.push("mod")}if(!R.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.floorDiv(t.inputs.a/t.inputs.b)*t.inputs.b+I.mod(t.inputs.a,t.inputs.b))};I.registerKernel(e),R.kernels.push("floormod")}}async function p5(e,t=!1){if(e.state="backend",t||R.initial||e.config.backend&&e.config.backend.length>0&&I.getBackend()!==e.config.backend){let o=b();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&p("running inside web worker"),R.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&p("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),R.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&p(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")p("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&p("enumerated webgpu adapter:",r),!r)p("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let A="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;p("webgpu adapter info:",A)}}e.config.backend==="humangl"&&await To(e);let n=Object.keys(I.engine().registryFactory);if(e.config.debug&&p("available backends:",n),n.includes(e.config.backend)||(p(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&p(`override: setting backend ${e.config.backend}`)),e.config.debug&&p("setting backend:",e.config.backend),e.config.backend==="wasm"){if(I.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&I.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&p("wasm path:",e.config.wasmPath),typeof(I==null?void 0:I.setWasmPaths)!="undefined")await I.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,A=!1;try{r=await I.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await I.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&p(`wasm execution: ${A?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&p("warning: wasm simd support is not enabled")}catch(s){p("wasm detection failed")}}try{await I.setBackend(e.config.backend),await I.ready(),Ft()}catch(r){return p("error: cannot set backend:",e.config.backend,r),!1}}if(I.getBackend()==="humangl"&&(I.env().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&I.env().set("CHECK_COMPUTATION_FOR_ERRORS",!1),I.env().flagRegistry.WEBGL_CPU_FORWARD&&I.env().set("WEBGL_CPU_FORWARD",!0),I.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&I.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),I.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&I.env().set("CPU_HANDOFF_SIZE_THRESHOLD",256),I.env().flagRegistry.WEBGL_EXP_CONV&&I.env().set("WEBGL_EXP_CONV",!0),I.env().flagRegistry.USE_SETTIMEOUTCUSTOM&&I.env().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(p("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),I.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),I.backend().getGPGPUContext)){let n=await I.backend().getGPGPUContext().gl;e.config.debug&&p(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}I.getBackend(),I.enableProdMode(),await I.ready(),e.performance.initBackend=Math.trunc(b()-o),e.config.backend=I.getBackend(),await R.updateBackend(),XA()}return!0}function u5(e,t){for(let o of e){let n={kernelName:o,backendName:t.backend,kernelFunc:()=>{t.debug&&p("kernelFunc",o,t.backend)}};I.registerKernel(n)}R.kernels=I.getKernelsForBackend(I.getBackend()).map(o=>o.kernelName.toLowerCase())}var p0=[null,null],UA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Oe=[[0,0],[0,0]],YA=["hand","fist","pinch","point","face","tip","pinchtip"],ko=4,Eo=1.6,KA=512,JA=1.4,h5=Number.MAX_SAFE_INTEGER,j1=0,pe=[0,0],l0={boxes:[],hands:[]},zo={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function So(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&p("cached model:",p0[0].modelUrl);else{u5(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await W((t=e.hand.detector)==null?void 0:t.modelPath);let o=Object.values(p0[0].modelSignature.inputs);Oe[0][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[0][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[0]}async function Co(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&p("cached model:",p0[1].modelUrl);else{p0[1]=await W((t=e.hand.skeleton)==null?void 0:t.modelPath);let o=Object.values(p0[1].modelSignature.inputs);Oe[1][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[1][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[1]}async function QA(e,t){let o=[];if(!e||!p0[0])return o;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,KA),s=Math.round(A*r/8)*8;n.resize=Q.image.resizeBilinear(e,[A,s]),n.cast=Q.cast(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await p0[0].executeAsync(n.cast,UA),n.boxes=Q.squeeze(n.rawBoxes,[0,2]),n.scores=Q.squeeze(n.rawScores,[0]);let a=Q.unstack(n.scores,1);Q.dispose(a[ko]),a.splice(ko,1),n.filtered=Q.stack(a,1),Q.dispose(a),n.max=Q.max(n.filtered,1),n.argmax=Q.argMax(n.filtered,1);let l=0;n.nms=await Q.image.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let y=await n.nms.data(),x=await n.max.data(),i=await n.argmax.data();for(let d of Array.from(y)){let c=Q.slice(n.boxes,d,1),h=await c.data();Q.dispose(c);let m=[h[1],h[0],h[3]-h[1],h[2]-h[0]],P=$2(m,JA),M=[Math.trunc(m[0]*pe[0]),Math.trunc(m[1]*pe[1]),Math.trunc(m[2]*pe[0]),Math.trunc(m[3]*pe[1])],g=x[d],f=YA[i[d]],u={id:l++,score:g,box:M,boxRaw:P,label:f};o.push(u)}return Object.keys(n).forEach(d=>Q.dispose(n[d])),o.sort((d,c)=>c.score-d.score),o.length>(t.hand.maxDetected||1)&&(o.length=t.hand.maxDetected||1),o}async function O1(e,t,o){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&o.hand.landmarks&&t.score>(o.hand.minConfidence||0)){let r={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[A],[0],[Oe[1][0],Oe[1][1]],"bilinear"),r.div=Q.div(r.crop,B.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let s=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(s))))/100;if(a>=(o.hand.minConfidence||0)){n.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Oe[1][1],i[1]/Oe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);n.keypoints=x.map(i=>[pe[0]*(i[0]+t.boxRaw[0]),pe[1]*(i[1]+t.boxRaw[1]),i[2]||0]),n.landmarks=d5(n.keypoints);for(let i of Object.keys(zo))n.annotations[i]=zo[i].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return n}async function N1(e,t){var r,A;if(!p0[0]||!p0[1]||!((r=p0[0])!=null&&r.inputs[0].shape)||!((A=p0[1])!=null&&A.inputs[0].shape))return[];pe=[e.shape[2]||0,e.shape[1]||0],h5++;let o=(t.hand.skipTime||0)>b()-j1,n=h5<(t.hand.skipFrames||0);return t.skipAllowed&&o&&n?l0.hands:new Promise(async s=>{let a=3*(t.hand.skipTime||0)>b()-j1,l=h5<3*(t.hand.skipFrames||0);t.skipAllowed&&l0.hands.length===t.hand.maxDetected?l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))):t.skipAllowed&&a&&l&&l0.hands.length>0?l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))):(l0.boxes=await QA(e,t),j1=b(),l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))),h5=0);let y=[...l0.boxes];if(l0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&l0.hands[x].fingerScore&&l0.hands[x].fingerScore>(t.hand.minConfidence||0)){let d=$2(i.box,Eo),c=$2(i.boxRaw,Eo);l0.boxes.push({...y[x],box:d,boxRaw:c})}}for(let x=0;xb()-Oo,A=L1<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&jo===n&&b5[o]?(L1++,b5[o]):(L1=0,new Promise(async l=>{let y=g5.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),x=P0==null?void 0:P0.execute(y),i=(await x.data())[0];b5[o]=Math.round(100*i)/100,jo=n,Oo=b(),g5.dispose([y,x]),l(b5[o])}))}var Ho=Z(D());var C2={};be(C2,{connected:()=>P5,horizontal:()=>F1,kpt:()=>M5,relative:()=>B1,vertical:()=>G1});var M5=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],F1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],G1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],B1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],P5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ne=Z(D()),Wo=.005,G0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function H1(e){for(let t of F1){let o=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[1]y&&y.part===t[0]),r=e.keypoints.findIndex(y=>y&&y.part===t[1]),A=e.keypoints.findIndex(y=>y&&y.part===o[0]),s=e.keypoints.findIndex(y=>y&&y.part===o[1]);if(!e.keypoints[A]||!e.keypoints[s])continue;let a=e.keypoints[n]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let y=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=y}}}function Fo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],o.pad=Ne.pad(e,G0.padding),o.resize=Ne.image.resizeBilinear(o.pad,[t,t]);let n=Ne.cast(o.resize,"int32");return Object.keys(o).forEach(r=>Ne.dispose(o[r])),n}function Bo(e,t){e.keypoints=e.keypoints.filter(n=>n&&n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+G0.padding[2][0]+G0.padding[2][1])/t[0]-G0.padding[2][0],n.position[1]*(t[1]+G0.padding[1][0]+G0.padding[1][1])/t[1]-G0.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let o=ce(e.keypoints.map(n=>n.position),t);return e.box=o.box,e.boxRaw=o.boxRaw,e}var B0,v5=0,V1=Number.MAX_SAFE_INTEGER,qe={boxes:[],bodies:[],last:0};async function Vo(e){return R.initial&&(B0=null),B0?e.debug&&p("cached model:",B0.modelUrl):(u5(["size"],e),B0=await W(e.body.modelPath)),v5=B0.inputs[0].shape?B0.inputs[0].shape[2]:0,v5<64&&(v5=256),B0}async function $A(e,t,o){let n=e[0][0],r=[],A=0;for(let x=0;xt.body.minConfidence){let i=[n[x][1],n[x][0]];r.push({score:Math.round(100*A)/100,part:M5[x],positionRaw:i,position:[Math.round((o.shape[2]||0)*i[0]),Math.round((o.shape[1]||0)*i[1])]})}A=r.reduce((x,i)=>i.score>x?i.score:x,0);let s=[],a=ce(r.map(x=>x.position),[o.shape[2],o.shape[1]]),l={};for(let[x,i]of Object.entries(P5)){let d=[];for(let c=0;cP.part===i[c]),m=r.find(P=>P.part===i[c+1]);h&&m&&h.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([h.position,m.position])}l[x]=d}let y={id:0,score:A,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return H1(y),s.push(y),s}async function e7(e,t,o){let n=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let d=A[3*i+2];if(d>t.body.minConfidence){let c=[A[3*i+1],A[3*i+0]];a.push({part:M5[i],score:Math.round(100*d)/100,positionRaw:c,position:[Math.round((o.shape[2]||0)*c[0]),Math.round((o.shape[1]||0)*c[1])]})}}let l=ce(a.map(i=>i.position),[o.shape[2],o.shape[1]]),y={};for(let[i,d]of Object.entries(P5)){let c=[];for(let h=0;hM.part===d[h]),P=a.find(M=>M.part===d[h+1]);m&&P&&m.score>(t.body.minConfidence||0)&&P.score>(t.body.minConfidence||0)&&c.push([m.position,P.position])}y[i]=c}let x={id:r,score:s,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:y};H1(x),n.push(x)}}return n.sort((r,A)=>A.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function D1(e,t){if(!B0||!(B0!=null&&B0.inputs[0].shape))return[];t.skipAllowed||(qe.boxes.length=0),V1++;let o=(t.body.skipTime||0)>b()-qe.last,n=V1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n?qe.bodies:new Promise(async r=>{let A={};V1=0,A.input=Go(e,v5),A.res=B0==null?void 0:B0.execute(A.input),qe.last=b();let s=await A.res.array();qe.bodies=A.res.shape[2]===17?await $A(s,t,e):await e7(s,t,e);for(let a of qe.bodies)Bo(a,[e.shape[2]||1,e.shape[1]||1]),Fo(a.keypoints);Object.keys(A).forEach(a=>Ho.dispose(A[a])),r(qe.bodies)})}var H0=Z(D());var l2,R5=[],Zo=0,Z1=Number.MAX_SAFE_INTEGER,w5=0,T5=2.5;async function Xo(e){if(!l2||R.initial){l2=await W(e.object.modelPath);let t=Object.values(l2.modelSignature.inputs);w5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&p("cached model:",l2.modelUrl);return l2}async function t7(e,t,o){let n=0,r=[];for(let l of[1,2,4]){let y=l*13,x=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)===t2.length)),i=await x.array(),d=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)(o.object.minConfidence||0)&&M!==61){let f=(.5+Math.trunc(P%y))/y,u=(.5+Math.trunc(P/y))/y,S=m[P].map(_=>_*(y/l/w5)),[N,w]=[f-T5/l*S[0],u-T5/l*S[1]],[E,H]=[f+T5/l*S[2]-N,u+T5/l*S[3]-w],X=[N,w,E,H];X=X.map(_=>Math.max(0,Math.min(_,1)));let G=[X[0]*t[0],X[1]*t[1],X[2]*t[0],X[3]*t[1]],o0={id:n++,score:Math.round(100*g)/100,class:M+1,label:t2[M].label,box:G.map(_=>Math.trunc(_)),boxRaw:X};r.push(o0)}}H0.dispose([x,d,c,h])}let A=r.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),s=r.map(l=>l.score),a=[];if(A&&A.length>0){let l=await H0.image.nonMaxSuppressionAsync(A,s,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence);a=await l.data(),H0.dispose(l)}return r=r.filter((l,y)=>a.includes(y)).sort((l,y)=>y.score-l.score),r}async function X1(e,t){let o=(t.object.skipTime||0)>b()-Zo,n=Z1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&R5.length>0?(Z1++,R5):(Z1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?R5:new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=H0.image.resizeBilinear(e,[w5,w5],!1),a=H0.div(s,B.tf255),l=H0.transpose(a,[0,3,1,2]),y;t.object.enabled&&(y=l2.execute(l)),Zo=b();let x=await t7(y,A,t);R5=x,H0.dispose([s,a,l,...y]),r(x)}))}var z0=Z(D());var j2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],o7=j2.length,I2=j2.reduce((e,t,o)=>(e[t]=o,e),{}),n7=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Cs=n7.map(([e,t])=>[I2[e],I2[t]]),Uo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function Yo(e){let t=e.reduce(({maxX:o,maxY:n,minX:r,minY:A},{position:{x:s,y:a}})=>({maxX:Math.max(o,s),maxY:Math.max(n,a),minX:Math.min(r,s),minY:Math.min(A,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Ko(e,[t,o],[n,r]){let A=t/n,s=o/r,a=(y,x)=>({id:x,score:y.score,boxRaw:[y.box[0]/r,y.box[1]/n,y.box[2]/r,y.box[3]/n],box:[Math.trunc(y.box[0]*s),Math.trunc(y.box[1]*A),Math.trunc(y.box[2]*s),Math.trunc(y.box[3]*A)],keypoints:y.keypoints.map(({score:i,part:d,position:c})=>({score:i,part:d,position:[Math.trunc(c.x*s),Math.trunc(c.y*A)],positionRaw:[c.x/n,c.y/n]})),annotations:{}});return e.map((y,x)=>a(y,x))}var k5=class{constructor(t,o){T(this,"priorityQueue");T(this,"numberOfElements");T(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=o}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let o=2*t;if(oo?o:e}function Jo(e,t,o,n){let r=o-e,A=n-t;return r*r+A*A}function K1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var oe,A7=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],E5=1,y2=16,s7=50**2;function Qo(e,t,o,n,r,A,s=2){let a=M=>({y:A.get(M.y,M.x,e),x:A.get(M.y,M.x,A.shape[2]/2+e)}),l=(M,g,f)=>({y:Y1(Math.round(M.y/y2),0,g-1),x:Y1(Math.round(M.x/y2),0,f-1)}),[y,x]=n.shape,i=l(t.position,y,x),d=a(i),h=K1(t.position,d);for(let M=0;M[I2[d],I2[c]]),s=A.map(([,d])=>d),a=A.map(([d])=>d),l=t.shape[2],y=s.length,x=new Array(l),i=U1(e.part,y2,o);x[e.part.id]={score:e.score,part:j2[e.part.id],position:i};for(let d=y-1;d>=0;--d){let c=s[d],h=a[d];x[c]&&!x[h]&&(x[h]=Qo(d,x[c],h,t,o,r))}for(let d=0;dt){a=!1;break}if(!a)break}return a}function l7(e,t){let[o,n,r]=t.shape,A=new k5(o*n*r,({score:s})=>s);for(let s=0;s{var s;let A=(s=r[n])==null?void 0:s.position;return A?Jo(o,t,A.y,A.x)<=s7:!1})}function y7(e,t){return t.reduce((n,{position:r,score:A},s)=>(_o(e,r,s)||(n+=A),n),0)/t.length}function c7(e,t,o,n,r,A){let s=[],a=l7(A,t);for(;s.lengthc.score>A);let i=y7(s,x),d=Yo(x);i>A&&s.push({keypoints:x,box:d,score:Math.round(100*i)/100})}return s}async function J1(e,t){let o=z0.tidy(()=>{if(!oe.inputs[0].shape)return[];let s=z0.image.resizeBilinear(e,[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]),a=z0.sub(z0.div(z0.cast(s,"float32"),127.5),1),y=oe.execute(a,A7).map(x=>z0.squeeze(x,[0]));return y[1]=z0.sigmoid(y[1]),y}),n=await Promise.all(o.map(s=>s.buffer()));for(let s of o)z0.dispose(s);let r=await c7(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return oe.inputs[0].shape?Ko(r,[e.shape[1],e.shape[2]],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]):[]}async function $o(e){return!oe||R.initial?oe=await W(e.body.modelPath):e.debug&&p("cached model:",oe.modelUrl),oe}var r0=Z(D());var ae,Q1=!1;async function _1(e){return!ae||R.initial?ae=await W(e.segmentation.modelPath):e.debug&&p("cached model:",ae.modelUrl),ae}async function tn(e,t,o){var m,P;if(Q1)return{data:[],canvas:null,alpha:null};Q1=!0,ae||await _1(o);let n=await Je(e,o),r=((m=n.tensor)==null?void 0:m.shape[2])||0,A=((P=n.tensor)==null?void 0:P.shape[1])||0;if(!n.tensor)return{data:[],canvas:null,alpha:null};let s={};s.resize=r0.image.resizeBilinear(n.tensor,[ae.inputs[0].shape?ae.inputs[0].shape[1]:0,ae.inputs[0].shape?ae.inputs[0].shape[2]:0],!1),r0.dispose(n.tensor),s.norm=r0.div(s.resize,B.tf255),s.res=ae.execute(s.norm),s.squeeze=r0.squeeze(s.res,0),s.squeeze.shape[2]===2?(s.softmax=r0.softmax(s.squeeze),[s.bg,s.fg]=r0.unstack(s.softmax,2),s.expand=r0.expandDims(s.fg,2),s.pad=r0.expandDims(s.expand,0),s.crop=r0.image.cropAndResize(s.pad,[[0,0,.5,.5]],[0],[r,A]),s.data=r0.squeeze(s.crop,0)):s.data=r0.image.resizeBilinear(s.squeeze,[A,r]);let a=Array.from(await s.data.data());if(R.node&&!R.Canvas&&typeof ImageData=="undefined")return o.debug&&p("canvas support missing"),Object.keys(s).forEach(M=>r0.dispose(s[M])),{data:a,canvas:null,alpha:null};let l=T0(r,A);r0.browser&&await r0.browser.toPixels(s.data,l);let y=l.getContext("2d");o.segmentation.blur&&o.segmentation.blur>0&&(y.filter=`blur(${o.segmentation.blur}px)`);let x=y.getImageData(0,0,r,A),i=T0(r,A),d=i.getContext("2d");n.canvas&&d.drawImage(n.canvas,0,0),d.globalCompositeOperation="darken",o.segmentation.blur&&o.segmentation.blur>0&&(d.filter=`blur(${o.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let c=d.getImageData(0,0,r,A);for(let M=0;Mr0.dispose(s[M])),Q1=!1,{data:a,canvas:i,alpha:l}}var O2=class{constructor(){T(this,"ssrnetage",null);T(this,"gear",null);T(this,"blazeposedetect",null);T(this,"blazepose",null);T(this,"centernet",null);T(this,"efficientpose",null);T(this,"mobilefacenet",null);T(this,"insightface",null);T(this,"emotion",null);T(this,"facedetect",null);T(this,"faceiris",null);T(this,"facemesh",null);T(this,"faceres",null);T(this,"ssrnetgender",null);T(this,"handpose",null);T(this,"handskeleton",null);T(this,"handtrack",null);T(this,"liveness",null);T(this,"movenet",null);T(this,"nanodet",null);T(this,"posenet",null);T(this,"segmentation",null);T(this,"antispoof",null)}},$1=e=>{let t=0,o=0,n=0;for(let A of Object.values(ne))t+=A.sizeFromManifest,o+=A.sizeLoadedWeights,n+=A.sizeDesired;let r=n>0?o/n:0;return{numLoadedModels:Object.values(ne).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:o,totalSizeLoading:n,totalSizeEnabled:void 0,modelStats:Object.values(ne)}};function f5(e){for(let t of Object.keys(e.models))e.models[t]=null}async function et(e){var t,o,n,r,A,s,a,l,y,x,i,d,c,h,m,P,M,g,f,u,S,N,w,E,H,X,G,o0,_,z,y0,V0;R.initial&&f5(e),e.config.hand.enabled&&(!e.models.handpose&&((o=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:o.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await I1(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(n=e.config.hand.detector)==null?void 0:n.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await I1(e.config))),e.config.body.enabled&&!e.models.blazepose&&((s=(A=e.config.body)==null?void 0:A.modelPath)==null?void 0:s.includes("blazepose"))&&(e.models.blazepose=h3(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=u3(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((l=(a=e.config.body)==null?void 0:a.modelPath)==null?void 0:l.includes("efficientpose"))&&(e.models.efficientpose=R3(e.config)),e.config.body.enabled&&!e.models.movenet&&((x=(y=e.config.body)==null?void 0:y.modelPath)==null?void 0:x.includes("movenet"))&&(e.models.movenet=Vo(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=$o(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=i3(e.config)),e.config.face.enabled&&((c=e.config.face.antispoof)==null?void 0:c.enabled)&&!e.models.antispoof&&(e.models.antispoof=Kt(e.config)),e.config.face.enabled&&((h=e.config.face.liveness)==null?void 0:h.enabled)&&!e.models.liveness&&(e.models.liveness=No(e.config)),e.config.face.enabled&&((m=e.config.face.description)==null?void 0:m.enabled)&&!e.models.faceres&&(e.models.faceres=eo(e.config)),e.config.face.enabled&&((P=e.config.face.emotion)==null?void 0:P.enabled)&&!e.models.emotion&&(e.models.emotion=E3(e.config)),e.config.face.enabled&&((M=e.config.face.iris)==null?void 0:M.enabled)&&!((g=e.config.face.attention)!=null&&g.enabled)&&!e.models.faceiris&&(e.models.faceiris=D3(e.config)),e.config.face.enabled&&((f=e.config.face.mesh)==null?void 0:f.enabled)&&!e.models.facemesh&&(e.models.facemesh=K3(e.config)),e.config.face.enabled&&((u=e.config.face.gear)==null?void 0:u.enabled)&&!e.models.gear&&(e.models.gear=Lt(e.config)),e.config.face.enabled&&((S=e.config.face.ssrnet)==null?void 0:S.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=Ht(e.config)),e.config.face.enabled&&((N=e.config.face.ssrnet)==null?void 0:N.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=Xt(e.config)),e.config.face.enabled&&((w=e.config.face.mobilefacenet)==null?void 0:w.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=j3(e.config)),e.config.face.enabled&&((E=e.config.face.insightface)==null?void 0:E.enabled)&&!e.models.insightface&&(e.models.insightface=F3(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((X=(H=e.config.hand.detector)==null?void 0:H.modelPath)==null?void 0:X.includes("handtrack"))&&(e.models.handtrack=So(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((o0=(G=e.config.hand.detector)==null?void 0:G.modelPath)==null?void 0:o0.includes("handtrack"))&&(e.models.handskeleton=Co(e.config)),e.config.object.enabled&&!e.models.centernet&&((z=(_=e.config.object)==null?void 0:_.modelPath)==null?void 0:z.includes("centernet"))&&(e.models.centernet=M3(e.config)),e.config.object.enabled&&!e.models.nanodet&&((V0=(y0=e.config.object)==null?void 0:y0.modelPath)==null?void 0:V0.includes("nanodet"))&&(e.models.nanodet=Xo(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=_1(e.config));for await(let v of Object.keys(e.models))e.models[v]&&typeof e.models[v]!="undefined"&&(e.models[v]=await e.models[v])}var Z0;function c2(e,t,o){if(e&&(Z0=e),!t||(Z0||p("instance not registred"),!Z0.config.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],A=[],s=[],a=t.modelUrl,l=t.executor;if(l&&l.graph.nodes)for(let y of Object.values(l.graph.nodes)){let x=y.op.toLowerCase();A.includes(x)||A.push(x)}else!l&&Z0.config.debug&&p("model signature not determined:",o);for(let y of A)!n.includes(y)&&!r.includes(y)&&!Z0.env.kernels.includes(y)&&!Z0.env.kernels.includes(y.replace("_",""))&&!Z0.env.kernels.includes(y.replace("native",""))&&!Z0.env.kernels.includes(y.replace("v2",""))&&s.push(y);return Z0.config.debug&&s.length>0&&p("model validation failed:",o,s),s.length>0?{name:o,missing:s,ops:A,url:a}:null}function z5(e){Z0=e;let t=[];for(let o of Object.keys(Z0.models)){let n=Z0.models[o];if(!n)continue;let r=c2(Z0,n,o);r&&t.push(r)}return t}var S0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ne={};async function x7(e,t){return S0.debug&&p("load model fetch:",e,t),fetch(e,t)}function nn(e){S0.cacheModels=e.cacheModels,S0.verbose=e.debug,S0.modelBasePath=e.modelBasePath}async function W(e){var y,x,i;let t=Pt(S0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let o=t.includes("/")?t.split("/"):t.split("\\"),n=o[o.length-1].replace(".json",""),r="indexeddb://"+n;ne[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:B5[n],inCache:!1},S0.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let A={};try{A=S0.cacheSupported&&S0.cacheModels?await S5.io.listModels():{}}catch(d){S0.cacheSupported=!1}ne[n].inCache=S0.cacheSupported&&S0.cacheModels&&Object.keys(A).includes(r);let s=typeof fetch=="undefined"?{}:{fetchFunc:(d,c)=>x7(d,c)},a=new S5.GraphModel(ne[n].inCache?r:t,s),l=!1;try{a.findIOHandler(),S0.debug&&p("model load handler:",a.handler);let d=await a.handler.load();ne[n].sizeFromManifest=((y=d==null?void 0:d.weightData)==null?void 0:y.byteLength)||0,a.loadSync(d),ne[n].sizeLoadedWeights=((i=(x=a==null?void 0:a.artifacts)==null?void 0:x.weightData)==null?void 0:i.byteLength)||0,S0.verbose&&p("load model:",a.modelUrl,{bytes:ne[n].sizeLoadedWeights},S0),l=!0}catch(d){p("error loading model:",t,d)}if(l&&S0.cacheModels&&S0.cacheSupported&&!ne[n].inCache)try{let d=await a.save(r);p("model saved:",r,d)}catch(d){p("error saving model:",t,d)}return c2(null,a,`${e}`),a}var re=Z(D());var tt="2.9.3";var it={};be(it,{all:()=>at,body:()=>d2,canvas:()=>st,face:()=>x2,gesture:()=>p2,hand:()=>f2,object:()=>m2,options:()=>v0,person:()=>At});var X0=e=>{if(!e)p("draw error: invalid canvas");else if(!e.getContext)p("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)p("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),ue=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let o=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${t.alpha})`};function he(e,t,o,n,r){e.fillStyle=ue(n,r),e.beginPath(),e.arc(t,o,r.pointSize,0,2*Math.PI),e.fill()}function ie(e,t,o,n,r,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let s=(t+t+n)/2,a=(o+o+r)/2;e.ellipse(s,a,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,o),e.lineTo(t+n-A.roundRect,o),e.quadraticCurveTo(t+n,o,t+n,o+A.roundRect),e.lineTo(t+n,o+r-A.roundRect),e.quadraticCurveTo(t+n,o+r,t+n-A.roundRect,o+r),e.lineTo(t+A.roundRect,o+r),e.quadraticCurveTo(t,o+r,t,o+r-A.roundRect),e.lineTo(t,o+A.roundRect),e.quadraticCurveTo(t,o,t+A.roundRect,o),e.closePath();e.stroke()}function ot(e,t,o){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=ue(n[2]||0,o),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),o.fillPolygons&&(e.closePath(),e.fill())}}function rn(e,t,o){if(!(t.length<2)){if(e.lineWidth=o.lineWidth,!o.useCurves||t.length<=2){ot(e,t,o);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n0){let n=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);n.length>3&&(n.length=3),o.push(n.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&o.push(`roll: ${Ue(e.rotation.angle.roll)}\xB0 yaw:${Ue(e.rotation.angle.yaw)}\xB0 pitch:${Ue(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&o.push(`gaze: ${Ue(e.rotation.gaze.bearing)}\xB0`)),o.length===0&&o.push("face"),t.fillStyle=K.color;for(let n=o.length-1;n>=0;n--){let r=Math.max(e.box[0],0),A=n*K.lineHeight+e.box[1];K.shadowColor&&K.shadowColor!==""&&(t.fillStyle=K.shadowColor,t.fillText(o[n],r+5,A+16)),t.fillStyle=K.labelColor,t.fillText(o[n],r+4,A+15)}}}function p7(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,n=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,n=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function u7(e,t){var o;if(K.drawGaze&&((o=e.rotation)==null?void 0:o.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,A=new Path2D(` +`;var W5=(e,t,o)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,A)=>(o[A]=0,r))},F5=class{constructor(t,o,n){T(this,"uniform",{});T(this,"attribute",{});T(this,"gl");T(this,"id");T(this,"compile",(t,o)=>{let n=this.gl.createShader(o);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(p(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)}`),null)):(p("filter: could not create shader"),null)});this.gl=t;let r=this.compile(o,this.gl.VERTEX_SHADER),A=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!A)){if(!this.id){p("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){p(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),W5(o,"attribute",this.attribute);for(let s in this.attribute)this.attribute[s]=this.gl.getAttribLocation(this.id,s);W5(o,"uniform",this.uniform),W5(n,"uniform",this.uniform);for(let s in this.uniform)this.uniform[s]=this.gl.getUniformLocation(this.id,s)}}};function Ct(){let e=0,t=null,o=!1,n=-1,r=[null,null],A=[],s=null,a=null,l=T0(100,100),y={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){p("filter: cannot get webgl context");return}this.gl=i;function d(g,f){if(!(g===l.width&&f===l.height)){if(l.width=g,l.height=f,!s){let u=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);s=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,s),i.bufferData(i.ARRAY_BUFFER,u,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function c(g,f){let u=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,u);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let N=i.createTexture();return i.bindTexture(i.TEXTURE_2D,N),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,g,f,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,N,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:u,texture:N}}function h(g){return r[g]=r[g]||c(l.width,l.height),r[g]}function m(g=0){if(!a)return;let f=null,u=null,S=!1;e===0?f=t:f=h(n).texture||null,e++,o&&!(g&x.INTERMEDIATE)?(u=null,S=e%2===0):(n=(n+1)%2,u=h(n).fbo||null),i.bindTexture(i.TEXTURE_2D,f),i.bindFramebuffer(i.FRAMEBUFFER,u),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function P(g){if(y[g])return a=y[g],i.useProgram((a?a.id:null)||null),a;if(a=new F5(i,Tt,g),!a)return p("filter: could not get webgl program"),null;let f=Float32Array.BYTES_PER_ELEMENT,u=4*f;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,u,0*f),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,u,2*f),y[g]=a,a}let M={colorMatrix:g=>{let f=new Float32Array(g);f[4]/=255,f[9]/=255,f[14]/=255,f[19]/=255;let u=f[18]===1&&f[3]===0&&f[8]===0&&f[13]===0&&f[15]===0&&f[16]===0&&f[17]===0&&f[19]===0?kt:wt,S=P(u);!S||(i.uniform1fv(S.uniform.m,f),m())},brightness:g=>{let f=(g||0)+1;M.colorMatrix([f,0,0,0,0,0,f,0,0,0,0,0,f,0,0,0,0,0,1,0])},saturation:g=>{let f=(g||0)*2/3+1,u=(f-1)*-.5;M.colorMatrix([f,u,u,0,0,u,f,u,0,0,u,u,f,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:g=>{let f=(g||0)+1,u=-128*(f-1);M.colorMatrix([f,0,0,0,u,0,f,0,0,u,0,0,f,0,u,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let f=Math.cos(g),u=Math.sin(g),S=.213,N=.715,w=.072;M.colorMatrix([S+f*(1-S)+u*-S,N+f*-N+u*-N,w+f*-w+u*(1-w),0,0,S+f*-S+u*.143,N+f*(1-N)+u*.14,w+f*-w+u*-.283,0,0,S+f*-S+u*-(1-S),N+f*-N+u*N,w+f*(1-w)+u*w,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:g=>{let f=new Float32Array(g),u=1/l.width,S=1/l.height,N=P(St);!N||(i.uniform1fv(N.uniform.m,f),i.uniform2f(N.uniform.px,u,S),m())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:g=>{let f=g||1;M.convolution.call(this,[0,-1*f,0,-1*f,1+4*f,-1*f,0,-1*f,0])},emboss:g=>{let f=g||1;M.convolution.call(this,[-2*f,-1*f,0,-1*f,1,1*f,0,1*f,2*f])},blur:g=>{let f=g/7/l.width,u=g/7/l.height,S=P(zt);!S||(i.uniform2f(S.uniform.px,0,u),m(x.INTERMEDIATE),i.uniform2f(S.uniform.px,f,0),m())},pixelate:g=>{let f=g/l.width,u=g/l.height,S=P(Et);!S||(i.uniform2f(S.uniform.size,f,u),m())}};this.add=function(g){let f=Array.prototype.slice.call(arguments,1),u=M[g];A.push({func:u,args:f})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(g){d(g.width,g.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,g);for(let f=0;fc.data())),s=.99*Math.max(A[0][0],A[1][0],A[2][0]),a=[U.sub(o[0],n[0]),U.sub(o[1],n[1]),U.sub(o[2],n[2])],l=[U.sub(r[0],n[0]),U.sub(r[1],n[1]),U.sub(r[2],n[2])],y=[U.div(s,l[0]),U.div(s,l[1]),U.div(s,l[2])],x=[U.mul(a[0],y[0]),U.mul(a[1],y[1]),U.mul(a[2],y[2])],i=U.stack([x[0],x[1],x[2]],2),d=U.reshape(i,[1,t.shape[0],t.shape[1],3]);return U.dispose([...o,...n,...r,...a,...l,...y,...x,i,t]),d}var G2=3840,Y=null,c0=null,Ke=null,e0,le={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function T0(e,t){let o;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");o=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");o=document.createElement("canvas"),o.width=e,o.height=t}else typeof R.Canvas!="undefined"?o=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(o=new globalThis.Canvas(e,t));return o}function B2(e,t){let o=t||T0(e.width,e.height);return o.getContext("2d").drawImage(e,0,0),o}async function Je(e,t,o=!0){if(!e)return t.debug&&p("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof O.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof R.Canvas!="undefined"&&e instanceof R.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof O.Tensor){let n=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)n=O.expandDims(e,0);else if(e.shape[2]===4){let r=O.slice3d(e,[0,0,0],[-1,-1,3]);n=O.expandDims(r,0),O.dispose(r)}}else e.shape.length===4&&(e.shape[3]===3?n=O.clone(e):e.shape[3]===4&&(n=O.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(n==null||n.shape.length!==4||n.shape[0]!==1||n.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(n.dtype==="int32"){let r=O.cast(n,"float32");O.dispose(n),n=r}return{tensor:n,canvas:t.filter.return?c0:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&p("input stream is not ready"),{tensor:null,canvas:Y};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&p("cannot determine input dimensions"),{tensor:null,canvas:Y};let A=n,s=r;if(A>G2&&(A=G2,s=Math.trunc(A*r/n)),s>G2&&(s=G2,A=Math.trunc(s*n/r)),(t.filter.width||0)>0?A=t.filter.width:(t.filter.height||0)>0&&(A=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?s=t.filter.height:(t.filter.width||0)>0&&(s=r*((t.filter.width||0)/n)),!A||!s)throw new Error("input error: cannot determine dimension");(!Y||(Y==null?void 0:Y.width)!==A||(Y==null?void 0:Y.height)!==s)&&(Y=T0(A,s));let a=Y.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(n,0),a.scale(-1,1),a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),(!c0||Y.width!==c0.width||(Y==null?void 0:Y.height)!==(c0==null?void 0:c0.height))&&(c0=T0(Y.width,Y.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new Ct:null),R.filter=!!e0,!e0||!e0.add?(t.debug&&p("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,B2(Y,c0)):(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),e0.get()>0?c0=e0.apply(Y):c0=e0.draw(Y))):(B2(Y,c0),e0&&(e0=null),R.filter=!!e0),!o)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let l,y=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&O.browser)l=O.browser?O.browser.fromPixels(e):null;else{y=e.data.length/e.height/e.width;let d=new Uint8Array(e.data.buffer);l=O.tensor(d,[e.height,e.width,y],"int32")}else if((!Ke||c0.width!==Ke.width||c0.height!==Ke.height)&&(Ke=T0(c0.width,c0.height)),O.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=O.browser.fromPixels(c0):(Ke=B2(c0),l=O.browser.fromPixels(Ke));else{let h=B2(c0).getContext("2d").getImageData(0,0,A,s);y=h.data.length/A/s;let m=new Uint8Array(h.data.buffer);l=O.tensor(m,[A,s,y])}if(y===4){let d=O.slice3d(l,[0,0,0],[-1,-1,3]);O.dispose(l),l=d}if(!l)throw new Error("input error: cannot create tensor");let x=O.cast(l,"float32"),i=t.filter.equalization?await F2(x):O.expandDims(x,0);return O.dispose([l,x]),{tensor:i,canvas:t.filter.return?c0:null}}}async function It(e,t){let o=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return o;if(!le.inputTensor)le.inputTensor=O.clone(t);else if(le.inputTensor.shape[1]!==t.shape[1]||le.inputTensor.shape[2]!==t.shape[2])O.dispose(le.inputTensor),le.inputTensor=O.clone(t);else{let n={};n.diff=O.sub(t,le.inputTensor),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;O.dispose([le.inputTensor,n.diff,n.squared,n.sum]),le.inputTensor=O.clone(t),o=A<=(e.cacheSensitivity||0)}return o}async function jt(e,t,o){let n={};if(!t||!o||t.shape.length!==4||t.shape.length!==o.shape.length)return e.debug||p("invalid input tensor or tensor shapes do not match:",t.shape,o.shape),0;if(t.shape[0]!==1||o.shape[0]!==1||t.shape[3]!==3||o.shape[3]!==3)return e.debug||p("input tensors must be of shape [1, height, width, 3]:",t.shape,o.shape),0;n.input1=O.clone(t),n.input2=t.shape[1]!==o.shape[1]||t.shape[2]!==o.shape[2]?O.image.resizeBilinear(o,[t.shape[1],t.shape[2]]):O.clone(o),n.diff=O.sub(n.input1,n.input2),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return O.dispose([n.input1,n.input2,n.diff,n.squared,n.sum]),A}var G5=class{constructor(){T(this,"browser");T(this,"node");T(this,"worker");T(this,"platform","");T(this,"agent","");T(this,"backends",[]);T(this,"initial");T(this,"filter");T(this,"tfjs");T(this,"offscreen");T(this,"perfadd",!1);T(this,"tensorflow",{version:void 0,gpu:void 0});T(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});T(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});T(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});T(this,"cpu",{model:void 0,flags:[]});T(this,"kernels",[]);T(this,"Canvas");T(this,"Image");T(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:x0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let o=t[0].match(/\(([^()]+)\)/g);this.platform=o&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(x0.engine().registryFactory),this.tensorflow={version:x0.backend().binding?x0.backend().binding.TF_Version:void 0,gpu:x0.backend().binding?x0.backend().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&x0.getBackend()==="wasm"&&(this.wasm.simd=x0.env().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=x0.env().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=T0(100,100),o=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof o!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(x0.getBackend()==="webgl"||x0.getBackend()==="humangl")){let n=x0.backend().gpgpu!=="undefined"?await x0.backend().getGPGPUContext().gl:null;n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.renderer=n.getParameter(n.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(n){this.webgpu.supported=!1}try{this.kernels=x0.getKernelsForBackend(x0.getBackend()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},R=new G5;var S5=Z(D());var B5={};be(B5,{age:()=>qn,"anti-spoofing":()=>vr,antispoof:()=>jn,blazeface:()=>On,"blazeface-back":()=>Un,"blazeface-front":()=>Yn,"blazepose-detect":()=>Pr,"blazepose-detector2d":()=>Kn,"blazepose-detector3d":()=>Jn,"blazepose-full":()=>Qn,"blazepose-heavy":()=>_n,"blazepose-lite":()=>$n,default:()=>Lr,efficientpose:()=>er,"efficientpose-i-lite":()=>Rr,"efficientpose-ii-lite":()=>Tr,"efficientpose-iv":()=>wr,emotion:()=>Nn,faceboxes:()=>tr,facemesh:()=>Ln,"facemesh-attention":()=>nr,"facemesh-attention-alt":()=>or,"facemesh-detection-full":()=>rr,"facemesh-detection-short":()=>Ar,"facemesh-orig":()=>sr,faceres:()=>Wn,"faceres-deep":()=>ar,gear:()=>ir,gender:()=>yr,"gender-ssrnet-imdb":()=>lr,handdetect:()=>cr,"handlandmark-full":()=>Fn,"handlandmark-lite":()=>xr,"handlandmark-sparse":()=>dr,handskeleton:()=>fr,handtrack:()=>Gn,"insightface-efficientnet-b0":()=>kr,"insightface-ghostnet-strides1":()=>Er,"insightface-ghostnet-strides2":()=>zr,"insightface-mobilenet-emore":()=>Sr,"insightface-mobilenet-swish":()=>Cr,iris:()=>Bn,liveness:()=>Hn,"mb3-centernet":()=>Vn,meet:()=>mr,mobileface:()=>pr,mobilefacenet:()=>ur,models:()=>Dn,"movenet-lightning":()=>Zn,"movenet-multipose":()=>hr,"movenet-thunder":()=>br,nanodet:()=>gr,"nanodet-e":()=>Ir,"nanodet-g":()=>jr,"nanodet-m":()=>Or,"nanodet-t":()=>Nr,posenet:()=>Mr,selfie:()=>Xn});var jn=853098,On=538928,Nn=820516,Ln=1477958,Wn=6978814,Fn=5431368,Gn=2964837,Bn=2599092,Hn=592976,Vn=4030290,Dn=0,Zn=4650216,Xn=212886,qn=161240,Un=538928,Yn=402048,Kn=7499400,Jn=5928856,Qn=6338290,_n=27501554,$n=2725490,er=5651240,tr=2013002,or=2387598,nr=2382414,rr=1026192,Ar=201268,sr=2955780,ar=13957620,ir=1498916,lr=161236,yr=201808,cr=3515612,xr=2023432,dr=5286322,fr=5502280,mr=372228,pr=2183192,ur=5171976,hr=9448838,br=12477112,gr=7574558,Mr=5032780,Pr=5928804,vr=853098,Rr=2269064,Tr=5651240,wr=25643252,kr=13013224,Er=8093408,zr=8049584,Sr=6938536,Cr=12168584,Ir=12319156,jr=7574558,Or=1887474,Nr=5294216,Lr={antispoof:jn,blazeface:On,emotion:Nn,facemesh:Ln,faceres:Wn,"handlandmark-full":Fn,handtrack:Gn,iris:Bn,liveness:Hn,"mb3-centernet":Vn,models:Dn,"movenet-lightning":Zn,selfie:Xn,age:qn,"blazeface-back":Un,"blazeface-front":Yn,"blazepose-detector2d":Kn,"blazepose-detector3d":Jn,"blazepose-full":Qn,"blazepose-heavy":_n,"blazepose-lite":$n,efficientpose:er,faceboxes:tr,"facemesh-attention-alt":or,"facemesh-attention":nr,"facemesh-detection-full":rr,"facemesh-detection-short":Ar,"facemesh-orig":sr,"faceres-deep":ar,gear:ir,"gender-ssrnet-imdb":lr,gender:yr,handdetect:cr,"handlandmark-lite":xr,"handlandmark-sparse":dr,handskeleton:fr,meet:mr,mobileface:pr,mobilefacenet:ur,"movenet-multipose":hr,"movenet-thunder":br,nanodet:gr,posenet:Mr,"blazepose-detect":Pr,"anti-spoofing":vr,"efficientpose-i-lite":Rr,"efficientpose-ii-lite":Tr,"efficientpose-iv":wr,"insightface-efficientnet-b0":kr,"insightface-ghostnet-strides1":Er,"insightface-ghostnet-strides2":zr,"insightface-mobilenet-emore":Sr,"insightface-mobilenet-swish":Cr,"nanodet-e":Ir,"nanodet-g":jr,"nanodet-m":Or,"nanodet-t":Nr};var m5={};be(m5,{Models:()=>O2,getModelStats:()=>$1,load:()=>et,reset:()=>f5,validate:()=>z5,validateModel:()=>c2});var H2=Z(D());var q0,H5=[],Wr=["white","black","asian","indian","other"],Fr=[15,23,28,35.5,45.5,55.5,65],Ot=0,Nt=0,V5=Number.MAX_SAFE_INTEGER;async function Lt(e){var t;return R.initial&&(q0=null),q0?e.debug&&p("cached model:",q0.modelUrl):q0=await W((t=e.face.gear)==null?void 0:t.modelPath),q0}async function D5(e,t,o,n){var s,a;if(!q0)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=V5<(((s=t.face.gear)==null?void 0:s.skipFrames)||0),A=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>b()-Nt;return t.skipAllowed&&A&&r&&Ot===n&&H5[o]?(V5++,H5[o]):(V5=0,new Promise(async l=>{var M,g;if(!(q0!=null&&q0.inputs[0].shape))return;let y={},x=[[0,.1,.9,.9]];y.resize=H2.image.cropAndResize(e,x,[0],[q0.inputs[0].shape[2],q0.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([y.age,y.gender,y.race]=q0.execute(y.resize,["age_output","gender_output","race_output"]));let d=await y.gender.data();i.gender=d[0]>d[1]?"male":"female",i.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let c=await y.race.data();for(let f=0;f(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&i.race.push({score:Math.round(100*c[f])/100,race:Wr[f]});i.race.sort((f,u)=>u.score-f.score);let m=Array.from(await y.age.data()).map((f,u)=>[Fr[u],f]).sort((f,u)=>u[1]-f[1]),P=m[0][0];for(let f=1;fH2.dispose(y[f])),H5[o]=i,Ot=n,Nt=b(),l(i)}))}var Qe=Z(D());var Me=Z(D()),B={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Ft(){B.tf255=Me.scalar(255,"float32"),B.tf1=Me.scalar(1,"float32"),B.tf2=Me.scalar(2,"float32"),B.tf05=Me.scalar(.5,"float32"),B.tf127=Me.scalar(127.5,"float32"),B.rgb=Me.tensor1d([.2989,.587,.114],"float32")}var C0,V2=[],Gt=0,Bt=0,Z5=Number.MAX_SAFE_INTEGER;async function Ht(e){return R.initial&&(C0=null),C0?e.debug&&p("cached model:",C0.modelUrl):C0=await W(e.face.ssrnet.modelPathAge),C0}async function X5(e,t,o,n){var s,a,l,y;if(!C0)return{age:0};let r=Z5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Bt;return t.skipAllowed&&r&&A&&Gt===n&&((l=V2[o])==null?void 0:l.age)&&((y=V2[o])==null?void 0:y.age)>0?(Z5++,V2[o]):(Z5=0,new Promise(async x=>{if(!(C0!=null&&C0.inputs)||!C0.inputs[0]||!C0.inputs[0].shape)return;let i={};i.resize=Qe.image.resizeBilinear(e,[C0.inputs[0].shape[2],C0.inputs[0].shape[1]],!1),i.enhance=Qe.mul(i.resize,B.tf255);let d={age:0};if(t.face.ssrnet.enabled&&(i.age=C0.execute(i.enhance)),i.age){let c=await i.age.data();d.age=Math.trunc(10*c[0])/10}Object.keys(i).forEach(c=>Qe.dispose(i[c])),V2[o]=d,Gt=n,Bt=b(),x(d)}))}var h0=Z(D());var U0,D2=[],Dt=0,Zt=0,q5=Number.MAX_SAFE_INTEGER,U5=[.2989,.587,.114];async function Xt(e){return R.initial&&(U0=null),U0?e.debug&&p("cached model:",U0.modelUrl):U0=await W(e.face.ssrnet.modelPathGender),U0}async function Y5(e,t,o,n){var s,a,l,y;if(!U0)return{gender:"unknown",genderScore:0};let r=q5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Zt;return t.skipAllowed&&r&&A&&Dt===n&&((l=D2[o])==null?void 0:l.gender)&&((y=D2[o])==null?void 0:y.genderScore)>0?(q5++,D2[o]):(q5=0,new Promise(async x=>{if(!(U0!=null&&U0.inputs[0].shape))return;let i={};i.resize=h0.image.resizeBilinear(e,[U0.inputs[0].shape[2],U0.inputs[0].shape[1]],!1),i.enhance=h0.tidy(()=>{let[h,m,P]=h0.split(i.resize,3,3),M=h0.mul(h,U5[0]),g=h0.mul(m,U5[1]),f=h0.mul(P,U5[2]),u=h0.addN([M,g,f]);return h0.mul(h0.sub(u,B.tf05),2)});let d={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(i.gender=U0.execute(i.enhance));let c=await i.gender.data();d.gender=c[0]>c[1]?"female":"male",d.genderScore=c[0]>c[1]?Math.trunc(100*c[0])/100:Math.trunc(100*c[1])/100,Object.keys(i).forEach(h=>h0.dispose(i[h])),D2[o]=d,Dt=n,Zt=b(),x(d)}))}var X2=Z(D());var b0,Z2=[],K5=Number.MAX_SAFE_INTEGER,Ut=0,Yt=0;async function Kt(e){var t;return R.initial&&(b0=null),b0?e.debug&&p("cached model:",b0.modelUrl):b0=await W((t=e.face.antispoof)==null?void 0:t.modelPath),b0}async function J5(e,t,o,n){var s,a;if(!b0)return 0;let r=(((s=t.face.antispoof)==null?void 0:s.skipTime)||0)>b()-Yt,A=K5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&Ut===n&&Z2[o]?(K5++,Z2[o]):(K5=0,new Promise(async l=>{let y=X2.image.resizeBilinear(e,[b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[2]:0,b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[1]:0],!1),x=b0==null?void 0:b0.execute(y),i=(await x.data())[0];Z2[o]=Math.round(100*i)/100,Ut=n,Yt=b(),X2.dispose([y,x]),l(Z2[o])}))}var L=Z(D());var ye=Z(D());var Y0={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},Q5={count:468,mouth:13,symmetryLine:[13,Y0.midwayBetweenEyes[0]]},Le={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},_5=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],w2=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],We=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var Br=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],Hr=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],Vr=[33,133,362,263,1,78,308],s4=Br.map(e=>w2[e]),a4=Hr.map(e=>w2[e]),i4=Vr.map(e=>w2[e]);function Pe(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var Dr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Zr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Xr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],qr=[[474,475],[475,476],[476,477],[477,474]],Ur=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Yr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Kr=[[469,470],[470,471],[471,472],[472,469]],Jr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],l4={lips:Pe(Dr),leftEye:Pe(Zr),leftEyebrow:Pe(Xr),leftIris:Pe(qr),rightEye:Pe(Ur),rightEyebrow:Pe(Yr),rightIris:Pe(Kr),faceOval:Pe(Jr)};var _e=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],q2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],U2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],Y2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],$t=(e,t)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:o,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},e1=(e,t,o)=>{let n=t.shape[1],r=t.shape[2],A=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],s=ye.image.cropAndResize(t,[A],[0],o),a=ye.div(s,B.tf255);return ye.dispose(s),a},K2=(e,t)=>{let o=q2(e),n=_e(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[o[0]-r[0],o[1]-r[1]],endPoint:[o[0]+r[0],o[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},J2=e=>{let t=q2(e),o=_e(e),n=Math.max(...o)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},e3=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...o)],endPoint:[Math.max(...t),Math.max(...o)],landmarks:e}},t1=[[1,0,0],[0,1,0],[0,0,1]],Qr=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),_r=(e,t)=>Qr(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var Qt=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Fe=(e,t)=>{let o=0;for(let n=0;n{let o=[];for(let n=0;n{let o=[],n=e.length;for(let r=0;r{let o=Math.cos(e),n=Math.sin(e),r=[[o,-n,0],[n,o,0],[0,0,1]],A=Qt(t[0],t[1]),s=_t(A,r),a=Qt(-t[0],-t[1]);return _t(s,a)},eA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],o=[e[0][2],e[1][2]],n=[-Fe(t[0],o),-Fe(t[1],o)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},tA=(e,t)=>[Fe(e,t[0]),Fe(e,t[1])];function o3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},o=[];for(let n=0;n[A[0]/r*(c[0]-r/2),A[1]/r*(c[1]-r/2),c[2]||0]),a=o&&o!==0&&Math.abs(o)>.2,l=a?t3(o,[0,0]):t1,y=a?s.map(c=>[...tA(c,l),c[2]]):s,x=a?eA(n):t1,i=q2(t),d=[Fe(i,x[0]),Fe(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2]||0)])}function r3(e,t,o,n){let r=t.landmarks.length>=Q5.count?Q5.symmetryLine:Le.symmetryLine,A=0,s=t1,a;if(e&&R.kernels.includes("rotatewithoffset"))if(A=_r(t.landmarks[r[0]],t.landmarks[r[1]]),A&&A!==0&&Math.abs(A)>.2){let y=q2(t),x=[y[0]/o.shape[2],y[1]/o.shape[1]],i=ye.image.rotateWithOffset(o,A,0,x);s=t3(-A,y),a=e1(t,i,[n,n]),ye.dispose(i)}else a=e1(t,o,[n,n]);else a=e1(t,o,[n,n]);return[A,s,a]}var oA=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...o)+(Math.max(...o)-Math.min(...o))/2]},A3=(e,t)=>{let o=oA(e),n=_e(t);return{startPoint:[o[0]-n[0]/2,o[1]-n[1]/2],endPoint:[o[0]+n[0]/2,o[1]+n[1]/2]}};var s3=6,nA=1.4,Ae,a3=null,ve=0,k2=null,$e=()=>ve;async function i3(e){var t;return R.initial&&(Ae=null),Ae?e.debug&&p("cached model:",Ae.modelUrl):Ae=await W((t=e.face.detector)==null?void 0:t.modelPath),ve=Ae.inputs[0].shape?Ae.inputs[0].shape[2]:0,k2=L.scalar(ve,"int32"),a3=L.tensor2d(o3(ve)),Ae}function rA(e){let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,a3),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,k2),t.centersNormalized=L.div(t.centers,k2),t.halfBoxSize=L.div(t.boxSizesNormalized,B.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,k2),t.endNormalized=L.mul(t.ends,k2);let o=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>L.dispose(t[n])),o}async function l3(e,t){var a,l,y,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let o={};o.resized=L.image.resizeBilinear(e,[ve,ve]),o.div=L.div(o.resized,B.tf127),o.normalized=L.sub(o.div,B.tf05);let n=Ae==null?void 0:Ae.execute(o.normalized);if(Array.isArray(n)&&n.length>2){let i=n.sort((d,c)=>d.size-c.size);o.concat384=L.concat([i[0],i[2]],2),o.concat512=L.concat([i[1],i[3]],2),o.concat=L.concat([o.concat512,o.concat384],1),o.batch=L.squeeze(o.concat,0)}else Array.isArray(n)?o.batch=L.squeeze(n[0]):o.batch=L.squeeze(n);L.dispose(n),o.boxes=rA(o.batch),o.logits=L.slice(o.batch,[0,0],[-1,1]),o.sigmoid=L.sigmoid(o.logits),o.scores=L.squeeze(o.sigmoid),o.nms=await L.image.nonMaxSuppressionAsync(o.boxes,o.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((y=t.face.detector)==null?void 0:y.minConfidence)||0);let r=await o.nms.array(),A=[],s=await o.scores.data();for(let i=0;i(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let c={};c.bbox=L.slice(o.boxes,[r[i],0],[1,-1]),c.slice=L.slice(o.batch,[r[i],s3-1],[1,-1]),c.squeeze=L.squeeze(c.slice),c.landmarks=L.reshape(c.squeeze,[s3,-1]);let h=await c.bbox.data(),m={startPoint:[h[0],h[1]],endPoint:[h[2],h[3]],landmarks:await c.landmarks.array(),confidence:d},P=$t(m,[(e.shape[2]||0)/ve,(e.shape[1]||0)/ve]),M=K2(P,t.face.scale||nA),g=J2(M);A.push(g),Object.keys(c).forEach(f=>L.dispose(c[f]))}}return Object.keys(o).forEach(i=>L.dispose(o[i])),A}var O0=Z(D());var Q2={};be(Q2,{connected:()=>r1,kpt:()=>n1});var n1=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],r1={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var I0=Z(D()),c3=224,AA,sA=5,_2=[8,16,32,32,32];async function x3(){let e=[],t=0;for(;to.x)),y:I0.tensor1d(e.map(o=>o.y))}}function ce(e,t=[1,1]){let o=[e.map(a=>a[0]),e.map(a=>a[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[n[0],n[1],r[0]-n[0],r[1]-n[1]],s=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:s}}function d3(e,t=[1,1]){let o=[e.map(y=>y[0]),e.map(y=>y[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[(n[0]+r[0])/2,(n[1]+r[1])/2],s=Math.max(A[0]-n[0],A[1]-n[1],-A[0]+r[0],-A[1]+r[1]),a=[Math.trunc(A[0]-s),Math.trunc(A[1]-s),Math.trunc(2*s),Math.trunc(2*s)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function $2(e,t){let o=[e[2]*t,e[3]*t];return[e[0]-(o[0]-e[2])/2,e[1]-(o[1]-e[3])/2,o[0],o[1]]}var p3={initial:!0},j0={detector:null,landmarks:null},e2={detector:[224,224],landmarks:[256,256]},A1=Number.MAX_SAFE_INTEGER,iA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},t5=null,E2,Re=[[0,0],[0,0],[0,0],[0,0]],f3=0,m3=e=>1-1/(1+Math.exp(e));async function u3(e){if(p3.initial&&(j0.detector=null),!j0.detector&&e.body.detector&&e.body.detector.modelPath){j0.detector=await W(e.body.detector.modelPath);let t=Object.values(j0.detector.modelSignature.inputs);e2.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&j0.detector&&p("cached model:",j0.detector.modelUrl);return await x3(),j0.detector}async function h3(e){if(p3.initial&&(j0.landmarks=null),j0.landmarks)e.debug&&p("cached model:",j0.landmarks.modelUrl);else{j0.landmarks=await W(e.body.modelPath);let t=Object.values(j0.landmarks.modelSignature.inputs);e2.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return j0.landmarks}async function lA(e,t){let o={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let n;if(E2&&(o.cropped=O0.image.cropAndResize(e,[E2],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],A=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Re=[[0,0],r,A,[0,0]],o.pad=O0.pad(o.cropped||e,Re),o.resize=O0.image.resizeBilinear(o.pad,[t,t]),n=O0.div(o.resize,B.tf255)}else e.shape[1]!==t?(o.resize=O0.image.resizeBilinear(o.cropped||e,[t,t]),n=O0.div(o.resize,B.tf255)):n=O0.div(o.cropped||e,B.tf255);return Object.keys(o).forEach(r=>O0.dispose(o[r])),n}function yA(e,t){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Re[2][0]+Re[2][1])/t[0]-Re[2][0]),Math.trunc(o.position[1]*(t[1]+Re[1][0]+Re[1][1])/t[1]-Re[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(E2)for(let o of e)o.positionRaw=[o.positionRaw[0]+E2[1],o.positionRaw[1]+E2[0],o.positionRaw[2]],o.position=[Math.trunc(o.positionRaw[0]*t[0]),Math.trunc(o.positionRaw[1]*t[1]),o.positionRaw[2]];return e}async function cA(e){let t=e.find(a=>a.part==="leftPalm"),o=e.find(a=>a.part==="leftWrist"),n=e.find(a=>a.part==="leftIndex");t.position[2]=((o.position[2]||0)+(n.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),A=e.find(a=>a.part==="rightWrist"),s=e.find(a=>a.part==="rightIndex");r.position[2]=((A.position[2]||0)+(s.position[2]||0))/2}async function xA(e,t,o){var h;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=(h=j0.landmarks)==null?void 0:h.execute(e,iA.landmarks);let r=(await n.poseflag.data())[0],A=await n.ld.data(),s=await n.world.data();Object.keys(n).forEach(m=>O0.dispose(n[m]));let a=[],l=5;for(let m=0;mm.position),i=ce(x,[o[0],o[1]]),d={};for(let[m,P]of Object.entries(r1)){let M=[];for(let g=0;gS.part===P[g]),u=y.find(S=>S.part===P[g+1]);f&&u&&M.push([f.position,u.position])}d[m]=M}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:y,annotations:d}}async function s1(e,t){let o=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>b()-f3,r=A1<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&t5!==null)A1++;else{let A={};A.landmarks=await lA(e,256),t5=await xA(A.landmarks,t,o),Object.keys(A).forEach(s=>O0.dispose(A[s])),f3=b(),A1=0}return t5?[t5]:[]}var w0=Z(D());var t2=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var xe,Ge=0,a1=[],g3=0,i1=Number.MAX_SAFE_INTEGER;async function M3(e){if(R.initial&&(xe=null),xe)e.debug&&p("cached model:",xe.modelUrl);else{xe=await W(e.object.modelPath);let t=Object.values(xe.modelSignature.inputs);Ge=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return xe}async function dA(e,t,o){if(!e)return[];let n={},r=[],A=await e.array();n.squeeze=w0.squeeze(e);let s=w0.split(n.squeeze,6,1);n.stack=w0.stack([s[1],s[0],s[3],s[2]],1),n.boxes=w0.squeeze(n.stack),n.scores=w0.squeeze(s[4]),n.classes=w0.squeeze(s[5]),w0.dispose([e,...s]),n.nms=await w0.image.nonMaxSuppressionAsync(n.boxes,n.scores,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence||0);let a=await n.nms.data(),l=0;for(let y of Array.from(a)){let x=Math.trunc(100*A[0][y][4])/100,i=A[0][y][5],d=t2[i].label,[c,h]=[A[0][y][0]/Ge,A[0][y][1]/Ge],m=[c,h,A[0][y][2]/Ge-c,A[0][y][3]/Ge-h],P=[Math.trunc(m[0]*t[0]),Math.trunc(m[1]*t[1]),Math.trunc(m[2]*t[0]),Math.trunc(m[3]*t[1])];r.push({id:l++,score:x,class:i,label:d,box:P,boxRaw:m})}return Object.keys(n).forEach(y=>w0.dispose(n[y])),r}async function l1(e,t){let o=(t.object.skipTime||0)>b()-g3,n=i1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&a1.length>0?(i1++,a1):(i1=0,new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=w0.image.resizeBilinear(e,[Ge,Ge]),a=t.object.enabled?xe==null?void 0:xe.execute(s,["tower_0/detections"]):null;g3=b(),w0.dispose(s);let l=await dA(a,A,t);a1=l,r(l)}))}var J=Z(D());var o5={};be(o5,{connected:()=>c1,kpt:()=>y1});var y1=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],c1={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var g0,v3=0,k0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},x1=Number.MAX_SAFE_INTEGER;async function R3(e){return R.initial&&(g0=null),g0?e.debug&&p("cached model:",g0.modelUrl):g0=await W(e.body.modelPath),g0}async function fA(e,t){let[o,n]=e.shape,r=J.reshape(e,[n*o]),A=J.max(r,0),s=(await A.data())[0];if(s>t){let a=J.argMax(r,0),l=J.mod(a,o),y=(await l.data())[0],x=J.div(a,o),i=(await x.data())[0];return J.dispose([r,A,a,l,x]),[y,i,s]}else return J.dispose([r,A]),[0,0,s]}async function d1(e,t){let o=(t.body.skipTime||0)>b()-v3,n=x1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n&&Object.keys(k0.keypoints).length>0?(x1++,[k0]):(x1=0,new Promise(async r=>{var i;let A=J.tidy(()=>{if(!(g0!=null&&g0.inputs[0].shape))return null;let d=J.image.resizeBilinear(e,[g0.inputs[0].shape[2],g0.inputs[0].shape[1]],!1),c=J.mul(d,B.tf2);return J.sub(c,B.tf1)}),s;if(t.body.enabled&&(s=g0==null?void 0:g0.execute(A)),v3=b(),J.dispose(A),s){k0.keypoints.length=0;let d=J.squeeze(s);J.dispose(s);let c=J.unstack(d,2);J.dispose(d);for(let h=0;h(((i=t.body)==null?void 0:i.minConfidence)||0)&&k0.keypoints.push({score:Math.round(100*M)/100,part:y1[h],positionRaw:[m/g0.inputs[0].shape[2],P/g0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/g0.inputs[0].shape[2]),Math.round(e.shape[1]*P/g0.inputs[0].shape[1])]})}c.forEach(h=>J.dispose(h))}k0.score=k0.keypoints.reduce((d,c)=>c.score>d?c.score:d,0);let a=k0.keypoints.map(d=>d.position[0]),l=k0.keypoints.map(d=>d.position[1]);k0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let y=k0.keypoints.map(d=>d.positionRaw[0]),x=k0.keypoints.map(d=>d.positionRaw[1]);k0.boxRaw=[Math.min(...y),Math.min(...x),Math.max(...y)-Math.min(...y),Math.max(...x)-Math.min(...x)];for(let[d,c]of Object.entries(c1)){let h=[];for(let m=0;mg.part===c[m]),M=k0.keypoints.find(g=>g.part===c[m+1]);P&&M&&P.score>(t.body.minConfidence||0)&&M.score>(t.body.minConfidence||0)&&h.push([P.position,M.position])}k0.annotations[d]=h}r([k0])}))}var J0=Z(D());var mA=["angry","disgust","fear","happy","sad","surprise","neutral"],D0,n5=[],w3=0,k3=0,f1=Number.MAX_SAFE_INTEGER;async function E3(e){var t;return R.initial&&(D0=null),D0?e.debug&&p("cached model:",D0.modelUrl):D0=await W((t=e.face.emotion)==null?void 0:t.modelPath),D0}async function m1(e,t,o,n){var s,a;if(!D0)return[];let r=f1<(((s=t.face.emotion)==null?void 0:s.skipFrames)||0),A=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>b()-k3;return t.skipAllowed&&A&&r&&w3===n&&n5[o]&&n5[o].length>0?(f1++,n5[o]):(f1=0,new Promise(async l=>{var x,i;let y=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},c=D0!=null&&D0.inputs[0].shape?D0.inputs[0].shape[2]:0;d.resize=J0.image.resizeBilinear(e,[c,c],!1),d.channels=J0.mul(d.resize,B.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,B.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,B.tf2),d.emotion=D0==null?void 0:D0.execute(d.grayscaleMul),k3=b();let h=await d.emotion.data();for(let m=0;m(((i=t.face.emotion)==null?void 0:i.minConfidence)||0)&&y.push({score:Math.min(.99,Math.trunc(100*h[m])/100),emotion:mA[m]});y.sort((m,P)=>P.score-m.score),Object.keys(d).forEach(m=>J0.dispose(d[m]))}n5[o]=y,w3=n,l(y)}))}var r5=Z(D());var N0,p1=[],S3=0,C3=0,I3=Number.MAX_SAFE_INTEGER;async function j3(e){return R.initial&&(N0=null),N0?e.debug&&p("cached model:",N0.modelUrl):N0=await W(e.face.mobilefacenet.modelPath),N0}async function u1(e,t,o,n){var s,a;if(!N0)return[];let r=I3<(((s=t.face.mobilefacenet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>b()-C3;return t.skipAllowed&&A&&r&&S3===n&&p1[o]?(I3++,p1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.mobilefacenet)==null?void 0:x.enabled)&&(N0==null?void 0:N0.inputs[0].shape)){let i={};i.crop=r5.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1),i.data=N0==null?void 0:N0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>r5.dispose(i[c]))}p1[o]=y,S3=n,C3=b(),l(y)})}var A5=Z(D());var L0,h1=[],N3=0,L3=0,W3=Number.MAX_SAFE_INTEGER;async function F3(e){return R.initial&&(L0=null),L0?e.debug&&p("cached model:",L0.modelUrl):L0=await W(e.face.insightface.modelPath),L0}async function b1(e,t,o,n){var s,a;if(!L0)return[];let r=W3<(((s=t.face.insightface)==null?void 0:s.skipFrames)||0),A=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>b()-L3;return t.skipAllowed&&A&&r&&N3===n&&h1[o]?(W3++,h1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.insightface)==null?void 0:x.enabled)&&(L0==null?void 0:L0.inputs[0].shape)){let i={};i.crop=A5.image.resizeBilinear(e,[L0.inputs[0].shape[2],L0.inputs[0].shape[1]],!1),i.data=L0==null?void 0:L0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>A5.dispose(i[c]))}h1[o]=y,N3=n,L3=b(),l(y)})}var ke=Z(D());var Q0=Z(D());var de,Te=0,pA=2.3,g1=Y0.leftEyeLower0,M1=Y0.rightEyeLower0,o2={leftBounds:[g1[0],g1[g1.length-1]],rightBounds:[M1[0],M1[M1.length-1]]},n2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function D3(e){var t;return R.initial&&(de=null),de?e.debug&&p("cached model:",de.modelUrl):de=await W((t=e.face.iris)==null?void 0:t.modelPath),Te=de.inputs[0].shape?de.inputs[0].shape[2]:0,Te===-1&&(Te=64),de}function s5(e,t,o,n){for(let r=0;r<_5.length;r++){let{key:A,indices:s}=_5[r],a=Y0[`${o}${A}`];if(!n||n.includes(A))for(let l=0;l{let t=e[o2.leftBounds[0]][2],o=e[o2.rightBounds[0]][2];return t-o},B3=(e,t,o,n,r,A=!1)=>{let s=J2(K2(e3([e[o],e[n]]),pA)),a=_e(s),l=Q0.image.cropAndResize(t,[[s.startPoint[1]/r,s.startPoint[0]/r,s.endPoint[1]/r,s.endPoint[0]/r]],[0],[Te,Te]);if(A&&R.kernels.includes("flipleftright")){let y=Q0.image.flipLeftRight(l);Q0.dispose(l),l=y}return{box:s,boxSize:a,crop:l}},H3=(e,t,o,n=!1)=>{let r=[];for(let A=0;A{let n=e[Y0[`${o}EyeUpper0`][n2.upperCenter]][2],r=e[Y0[`${o}EyeLower0`][n2.lowerCenter]][2],A=(n+r)/2;return t.map((s,a)=>{let l=A;return a===2?l=n:a===4&&(l=r),[s[0],s[1],l]})};async function Z3(e,t,o,n){if(!de)return o.debug&&p("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:A,crop:s}=B3(e,t,o2.leftBounds[0],o2.leftBounds[1],n,!0),{box:a,boxSize:l,crop:y}=B3(e,t,o2.rightBounds[0],o2.rightBounds[1],n,!0),x=Q0.concat([s,y]);Q0.dispose(s),Q0.dispose(y);let i=de.execute(x);Q0.dispose(x);let d=await i.data();Q0.dispose(i);let c=d.slice(0,n2.numCoordinates*3),{rawCoords:h,iris:m}=H3(c,r,A,!0),P=d.slice(n2.numCoordinates*3),{rawCoords:M,iris:g}=H3(P,a,l,!1),f=uA(e);Math.abs(f)<30?(s5(e,h,"left",null),s5(e,M,"right",null)):f<1?s5(e,h,"left",["EyeUpper0","EyeLower0"]):s5(e,M,"right",["EyeUpper0","EyeLower0"]);let u=V3(e,m,"left"),S=V3(e,g,"right");return e.concat(u).concat(S)}var hA=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],bA=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],gA=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],MA=[[474,475],[475,476],[476,477],[477,474]],PA=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],vA=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],RA=[[469,470],[470,471],[471,472],[472,469]],TA=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function we(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var wA={lips:we(hA),leftEye:we(bA),leftEyebrow:we(gA),leftIris:we(MA),rightEye:we(PA),rightEyebrow:we(vA),rightIris:we(RA),faceOval:we(TA)},kA=Object.entries(wA).map(([e,t])=>t.map(o=>[o,e])).flat(),H4=new Map(kA),z2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Be=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],He=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function U3(e,t){let o={lips:await t.filter(A=>A.size===160)[0].data(),irisL:await t.filter(A=>A.size===10)[0].data(),eyeL:await t.filter(A=>A.size===142)[0].data(),irisR:await t.filter(A=>A.size===10)[1].data(),eyeR:await t.filter(A=>A.size===142)[1].data()},n=Be.reduce((A,s)=>A+=e[s][2],0)/Be.length;for(let A=0;AA+=e[s][2],0)/He.length;for(let A=0;Ab()-se.timestamp,n=se.skipped<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);!t.skipAllowed||!o||!n||se.boxes.length===0?(se.boxes=await l3(e,t),se.timestamp=b(),se.skipped=0):se.skipped++;let r=[],A=[],s=0;for(let f=0;fG.shape[G.shape.length-1]===1).data();if(w.faceScore=Math.round(100*X[0])/100,w.faceScore<(((h=t.face.detector)==null?void 0:h.minConfidence)||1)){if(u.confidence=w.faceScore,(m=t.face.mesh)!=null&&m.keepInvalid){w.box=U2(u,e),w.boxRaw=Y2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(G=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*G[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*G[1]/$e()]),w.meshRaw=w.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/Ve]);for(let G of Object.keys(Le))w.annotations[G]=[w.mesh[Le[G]]]}}else{let G=E.find(y0=>y0.shape[y0.shape.length-1]===1404),o0=ke.reshape(G,[-1,3]),_=await o0.array();ke.dispose(o0),(P=t.face.attention)!=null&&P.enabled?_=await U3(_,E):(M=t.face.iris)!=null&&M.enabled&&(_=await Z3(_,w.tensor,t,Ve)),w.mesh=n3(_,u,S,N,Ve),w.meshRaw=w.mesh.map(y0=>[y0[0]/(e.shape[2]||0),y0[1]/(e.shape[1]||0),(y0[2]||0)/Ve]);for(let y0 of Object.keys(Y0))w.annotations[y0]=Y0[y0].map(V0=>w.mesh[V0]);w.score=w.faceScore;let z={...A3(w.mesh,u),confidence:u.confidence,landmarks:u.landmarks};w.box=U2(z,e),w.boxRaw=Y2(z,e),A.push(z)}ke.dispose(E)}else{w.box=U2(u,e),w.boxRaw=Y2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(E=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*E[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*E[1]/$e()]),w.meshRaw=w.mesh.map(E=>[E[0]/(e.shape[2]||0),E[1]/(e.shape[1]||0),(E[2]||0)/Ve]);for(let E of Object.keys(Le))w.annotations[E]=[w.mesh[Le[E]]]}w.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(w):ke.dispose(w.tensor)}return se.boxes=A,r}async function K3(e){var t,o,n,r,A,s;return R.initial&&(M0=null),((o=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:o.enabled)&&(M0==null?void 0:M0.signature)&&Object.keys(((n=M0==null?void 0:M0.signature)==null?void 0:n.outputs)||{}).length<6&&(M0=null),M0?e.debug&&p("cached model:",M0.modelUrl):(r=e.face.attention)!=null&&r.enabled?M0=await W((A=e.face.attention)==null?void 0:A.modelPath):M0=await W((s=e.face.mesh)==null?void 0:s.modelPath),Ve=M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0}var J3=We,Q3=w2;var _0=Z(D());var W0,a5=[],_3=0,$3=0,v1=Number.MAX_SAFE_INTEGER;async function eo(e){var t;return R.initial&&(W0=null),W0?e.debug&&p("cached model:",W0.modelUrl):W0=await W((t=e.face.description)==null?void 0:t.modelPath),W0}function R1(e){let t=e.image||e.tensor||e;if(!(W0!=null&&W0.inputs[0].shape))return t;let o=_0.image.resizeBilinear(t,[W0.inputs[0].shape[2],W0.inputs[0].shape[1]],!1),n=_0.mul(o,B.tf255);return _0.dispose(o),n}async function T1(e,t,o,n){var s,a,l,y;if(!W0)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=v1<(((s=t.face.description)==null?void 0:s.skipFrames)||0),A=(((a=t.face.description)==null?void 0:a.skipTime)||0)>b()-_3;return t.skipAllowed&&r&&A&&$3===n&&((l=a5[o])==null?void 0:l.age)&&((y=a5[o])==null?void 0:y.age)>0?(v1++,a5[o]):(v1=0,new Promise(async x=>{var d,c;let i={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((d=t.face.description)!=null&&d.enabled){let h=R1(e),m=W0==null?void 0:W0.execute(h);_3=b(),_0.dispose(h);let M=await(await m.find(H=>H.shape[1]===1)).data(),g=Math.trunc(200*Math.abs(M[0]-.5))/100;g>(((c=t.face.description)==null?void 0:c.minConfidence)||0)&&(i.gender=M[0]<=.5?"female":"male",i.genderScore=Math.min(.99,g));let f=_0.argMax(m.find(H=>H.shape[1]===100),1),u=(await f.data())[0];_0.dispose(f);let N=await m.find(H=>H.shape[1]===100).data();i.age=Math.round(N[u-1]>N[u+1]?10*u-100*N[u-1]:10*u+100*N[u+1])/10;let w=m.find(H=>H.shape[1]===1024),E=w?await w.data():[];i.descriptor=Array.from(E),m.forEach(H=>_0.dispose(H))}a5[o]=i,$3=n,x(i)}))}var F=Z(D());var no=Z(D());function i5(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function S2(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function ro(e,t,o){let n=t.shape[1],r=t.shape[2],A=[[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r]];return no.image.cropAndResize(t,A,[0],o)}function Ao(e,t){let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(A=>[A[0]*t[0],A[1]*t[1]]);return{startPoint:o,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function l5(e,t=1.5){let o=S2(e),n=i5(e),r=[t*n[0]/2,t*n[1]/2],A=[o[0]-r[0],o[1]-r[1]],s=[o[0]+r[0],o[1]+r[1]];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function y5(e){let t=S2(e),o=i5(e),r=Math.max(...o)/2,A=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function zA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function so(e,t){let o=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return zA(o)}var to=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ee(e,t){let o=0;for(let n=0;n[o.x,o.y]),this.anchorsTensor=F.tensor2d(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=F.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=F.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let o={};o.boxOffsets=F.slice(t,[0,0],[-1,2]),o.boxSizes=F.slice(t,[0,2],[-1,2]),o.div=F.div(o.boxOffsets,this.inputSizeTensor),o.boxCenterPoints=F.add(o.div,this.anchorsTensor),o.halfBoxSizes=F.div(o.boxSizes,this.doubleInputSizeTensor),o.sub=F.sub(o.boxCenterPoints,o.halfBoxSizes),o.startPoints=F.mul(o.sub,this.inputSizeTensor),o.add=F.add(o.boxCenterPoints,o.halfBoxSizes),o.endPoints=F.mul(o.add,this.inputSizeTensor);let n=F.concat2d([o.startPoints,o.endPoints],1);return Object.keys(o).forEach(r=>F.dispose(o[r])),n}normalizeLandmarks(t,o){let n={};n.reshape=F.reshape(t,[-1,7,2]),n.div=F.div(n.reshape,this.inputSizeTensor),n.landmarks=F.add(n.div,this.anchors[o]);let r=F.mul(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(A=>F.dispose(n[A])),r}async predict(t,o){let n={};n.resize=F.image.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=F.div(n.resize,B.tf127),n.image=F.sub(n.div,B.tf1),n.batched=this.model.execute(n.image),n.predictions=F.squeeze(n.batched),n.slice=F.slice(n.predictions,[0,0],[-1,1]),n.sigmoid=F.sigmoid(n.slice),n.scores=F.squeeze(n.sigmoid);let r=await n.scores.data();n.boxes=F.slice(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await F.image.nonMaxSuppressionAsync(n.norm,n.scores,3*o.hand.maxDetected,o.hand.iouThreshold,o.hand.minConfidence);let A=await n.nms.array(),s=[];for(let a of A){let l={};l.box=F.slice(n.norm,[a,0],[1,-1]),l.slice=F.slice(n.predictions,[a,5],[1,14]),l.norm=this.normalizeLandmarks(l.slice,a),l.palmLandmarks=F.reshape(l.norm,[-1,2]);let y=await l.box.data(),x=y.slice(0,2),i=y.slice(2,4),d=await l.palmLandmarks.array(),c={startPoint:x,endPoint:i,palmLandmarks:d,confidence:r[a]},h=Ao(c,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);s.push(h),Object.keys(l).forEach(m=>F.dispose(l[m]))}return Object.keys(n).forEach(a=>F.dispose(n[a])),s}};var F0=Z(D());var jA=5,yo=1.65,co=[0,5,9,13,17,1,2],OA=0,NA=2,xo=0,x5=class{constructor(t,o){T(this,"handDetector");T(this,"handPoseModel");T(this,"inputSize");T(this,"storedBoxes");T(this,"skipped");T(this,"detectedHands");this.handDetector=t,this.handPoseModel=o,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let o=t.map(s=>s[0]),n=t.map(s=>s[1]),r=[Math.min(...o),Math.min(...n)],A=[Math.max(...o),Math.max(...n)];return{startPoint:r,endPoint:A}}getBoxForPalmLandmarks(t,o){let n=t.map(A=>E1([...A,1],o)),r=this.calculateLandmarksBoundingBox(n);return l5(y5(r),jA)}getBoxForHandLandmarks(t){let o=this.calculateLandmarksBoundingBox(t),n=l5(y5(o),yo);n.palmLandmarks=[];for(let r=0;r[s[0]*(c[0]-this.inputSize/2),s[1]*(c[1]-this.inputSize/2),s[2]*c[2]]),l=k1(n,[0,0]),y=a.map(c=>[...E1(c,l),c[2]]),x=ao(r),i=[...S2(o),1],d=[Ee(i,x[0]),Ee(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2])])}async estimateHands(t,o){let n=!1,r,A=(o.hand.skipTime||0)>b()-xo,s=this.skipped<(o.hand.skipFrames||0);o.skipAllowed&&A&&s&&(r=await this.handDetector.predict(t,o),this.skipped=0),o.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==o.hand.maxDetected||!o.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let a=[];for(let l=0;l=o.hand.minConfidence/4){let S=F0.reshape(f,[-1,3]),N=await S.array();F0.dispose(f),F0.dispose(S);let w=this.transformRawCoords(N,m,x,h),E=this.getBoxForHandLandmarks(w);this.storedBoxes[l]={...E,confidence:u};let H={landmarks:w,confidence:u,boxConfidence:y.confidence,fingerConfidence:u,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};a.push(H)}else this.storedBoxes[l]=null;F0.dispose(f)}else{let x=l5(y5(y),yo),i={confidence:y.confidence,boxConfidence:y.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>o.hand.maxDetected&&(a.length=o.hand.maxDetected),a}};var E0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>E0.nameMapping[e],getPoints:e=>E0.pointsMapping[e]},Se={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Se.nameMapping[e]},n0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>n0.nameMapping[e]},ze=class{constructor(t){T(this,"name");T(this,"curls");T(this,"directions");T(this,"weights");T(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,o,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([o,n])}direction(t,o,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([o,n])}weight(t,o){this.weights[t]=o;let n=this.weights.reduce((r,A)=>r+A,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,o){let n=0;for(let r in t){let A=t[r],s=this.curls[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}for(let r in o){let A=o[r],s=this.directions[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:$0,index:fe,middle:me,ring:De,pinky:Ze}=E0,{none:ee,half:WA,full:te}=Se,{verticalUp:r2,verticalDown:os,horizontalLeft:z1,horizontalRight:FA,diagonalUpRight:GA,diagonalUpLeft:A2,diagonalDownRight:ns,diagonalDownLeft:rs}=n0,Ce=new ze("thumbs up");Ce.curl($0,ee,1);Ce.direction($0,r2,1);Ce.direction($0,A2,.25);Ce.direction($0,GA,.25);for(let e of[E0.index,E0.middle,E0.ring,E0.pinky])Ce.curl(e,te,1),Ce.direction(e,z1,1),Ce.direction(e,FA,1);var d0=new ze("victory");d0.curl($0,WA,.5);d0.curl($0,ee,.5);d0.direction($0,r2,1);d0.direction($0,A2,1);d0.curl(fe,ee,1);d0.direction(fe,r2,.75);d0.direction(fe,A2,1);d0.curl(me,ee,1);d0.direction(me,r2,1);d0.direction(me,A2,.75);d0.curl(De,te,1);d0.direction(De,r2,.2);d0.direction(De,A2,1);d0.direction(De,z1,.2);d0.curl(Ze,te,1);d0.direction(Ze,r2,.2);d0.direction(Ze,A2,1);d0.direction(Ze,z1,.2);d0.weight(fe,2);d0.weight(me,2);var Ie=new ze("point");Ie.curl($0,te,1);Ie.curl(fe,ee,.5);Ie.curl(me,te,.5);Ie.curl(De,te,.5);Ie.curl(Ze,te,.5);Ie.weight(fe,2);Ie.weight(me,2);var je=new ze("middle finger");je.curl($0,ee,1);je.curl(fe,te,.5);je.curl(me,te,.5);je.curl(De,te,.5);je.curl(Ze,te,.5);je.weight(fe,2);je.weight(me,2);var s2=new ze("open palm");s2.curl($0,ee,.75);s2.curl(fe,ee,.75);s2.curl(me,ee,.75);s2.curl(De,ee,.75);s2.curl(Ze,ee,.75);var fo=[Ce,d0,Ie,je,s2];var BA=.7,Xe={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function mo(e,t,o,n){let r=(t-n)/(e-o),A=Math.atan(r)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function uo(e,t){if(!e||!t)return[0,0];let o=mo(e[0],e[1],t[0],t[1]);if(e.length===2)return o;let n=mo(e[1],e[2],t[1],t[2]);return[o,n]}function po(e,t=1){let o=0,n=0,r=0;return e>=75&&e<=105?o=1*t:e>=25&&e<=155?n=1*t:r=1*t,[o,n,r]}function HA(e,t,o){let n=e[0]-t[0],r=e[0]-o[0],A=t[0]-o[0],s=e[1]-t[1],a=e[1]-o[1],l=t[1]-o[1],y=e[2]-t[2],x=e[2]-o[2],i=t[2]-o[2],d=Math.sqrt(n*n+s*s+y*y),c=Math.sqrt(r*r+a*a+x*x),h=Math.sqrt(A*A+l*l+i*i),m=(h*h+d*d-c*c)/(2*h*d);m>1?m=1:m<-1&&(m=-1);let P=Math.acos(m);P=57.2958*P%180;let M;return P>Xe.NO_CURL_START_LIMIT?M=Se.none:P>Xe.HALF_CURL_START_LIMIT?M=Se.half:M=Se.full,M}function ho(e,t,o,n){let r;return n===Math.abs(e)?e>0?r=n0.horizontalLeft:r=n0.horizontalRight:n===Math.abs(t)?t>0?r=n0.horizontalLeft:r=n0.horizontalRight:o>0?r=n0.horizontalLeft:r=n0.horizontalRight,r}function bo(e,t,o,n){let r;return n===Math.abs(e)?e<0?r=n0.verticalDown:r=n0.verticalUp:n===Math.abs(t)?t<0?r=n0.verticalDown:r=n0.verticalUp:o<0?r=n0.verticalDown:r=n0.verticalUp,r}function VA(e,t,o,n,r,A,s,a){let l,y=bo(e,t,o,n),x=ho(r,A,s,a);return y===n0.verticalUp?x===n0.horizontalLeft?l=n0.diagonalUpLeft:l=n0.diagonalUpRight:x===n0.horizontalLeft?l=n0.diagonalDownLeft:l=n0.diagonalDownRight,l}function DA(e,t,o,n){let r=e[0]-t[0],A=e[0]-o[0],s=t[0]-o[0],a=e[1]-t[1],l=e[1]-o[1],y=t[1]-o[1],x=Math.max(Math.abs(r),Math.abs(A),Math.abs(s)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(y)),d=0,c=0,h=0,m=i/(x+1e-5);m>1.5?d+=Xe.DISTANCE_VOTE_POWER:m>.66?c+=Xe.DISTANCE_VOTE_POWER:h+=Xe.DISTANCE_VOTE_POWER;let P=Math.sqrt(r*r+a*a),M=Math.sqrt(A*A+l*l),g=Math.sqrt(s*s+y*y),f=Math.max(P,M,g),u=e[0],S=e[1],N=o[0],w=o[1];f===P?(N=o[0],w=o[1]):f===g&&(u=t[0],S=t[1]);let X=uo([u,S],[N,w]),G=po(X,Xe.TOTAL_ANGLE_VOTE_POWER);d+=G[0],c+=G[1],h+=G[2];for(let _ of n){let z=po(_,Xe.SINGLE_ANGLE_VOTE_POWER);d+=z[0],c+=z[1],h+=z[2]}let o0;return d===Math.max(d,c,h)?o0=bo(l,a,y,i):h===Math.max(c,h)?o0=ho(A,r,s,x):o0=VA(l,a,y,i,A,r,s,x),o0}function go(e){let t=[],o=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let A of E0.all){let s=E0.getPoints(A),a=[],l=[];for(let y of s){let x=e[y[0]],i=e[y[1]],d=uo(x,i),c=d[0],h=d[1];a.push(c),l.push(h)}t.push(a),o.push(l)}for(let A of E0.all){let s=A===E0.thumb?1:0,a=E0.getPoints(A),l=e[a[s][0]],y=e[a[s+1][1]],x=e[a[3][1]],i=HA(l,y,x),d=DA(l,y,x,t[A].slice(s));n[A]=i,r[A]=d}return{curls:n,directions:r}}function d5(e){if(!e||e.length===0)return null;let t=go(e),o={};for(let n of E0.all)o[E0.getName(n)]={curl:Se.getName(t.curls[n]),direction:n0.getName(t.directions[n])};return o}function Mo(e){let t=[];if(!e||e.length===0)return t;let o=go(e);for(let n of fo){let r=n.matchAgainst(o.curls,o.directions);r>=BA&&t.push({name:n.name,confidence:r})}return t}var Po={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},a2,i2,vo;async function C1(e,t){let o=await vo.estimateHands(e,t);if(!o)return[];let n=[];for(let r=0;ro[r].landmarks[i]);let s=o[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(s&&s.length>0){for(let x of s)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=o[r].box?[Math.trunc(Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.max(0,o[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,o[r].box.bottomRight[0])-Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,o[r].box.bottomRight[1])-Math.max(0,o[r].box.topLeft[1]))]:[0,0,0,0],l=[o[r].box.topLeft[0]/(e.shape[2]||0),o[r].box.topLeft[1]/(e.shape[1]||0),(o[r].box.bottomRight[0]-o[r].box.topLeft[0])/(e.shape[2]||0),(o[r].box.bottomRight[1]-o[r].box.topLeft[1])/(e.shape[1]||0)];let y=d5(s);n.push({id:r,score:Math.round(100*o[r].confidence)/100,boxScore:Math.round(100*o[r].boxConfidence)/100,fingerScore:Math.round(100*o[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:s,annotations:A,landmarks:y})}return n}async function I1(e){var o,n;R.initial&&(a2=null,i2=null),!a2||!i2?[a2,i2]=await Promise.all([e.hand.enabled?W((o=e.hand.detector)==null?void 0:o.modelPath):null,e.hand.landmarks?W((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&p("cached model:",a2.modelUrl),e.debug&&p("cached model:",i2.modelUrl));let t=new c5(a2);return vo=new x5(t,i2),[a2,i2]}var Q=Z(D());var i0=Z(D());var t0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ZA(){let e=t0.gl;!e||(t0.extensions=e.getSupportedExtensions())}async function To(e){var t;if(e.config.backend==="humangl"&&(t0.name in i0.engine().registry&&(!t0.gl||!t0.gl.getParameter(t0.gl.VERSION))&&(p("error: humangl backend invalid context"),f5(e)),!i0.findBackend(t0.name))){try{t0.canvas=await T0(100,100)}catch(n){p("error: cannot create canvas:",n);return}try{if(t0.gl=(t=t0.canvas)==null?void 0:t.getContext("webgl2",t0.webGLattr),!t0.gl.getParameter(t0.gl.VERSION).includes("2.0")){p("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}t0.canvas&&(t0.canvas.addEventListener("webglcontextlost",async r=>{throw p("error: humangl:",r.type),p("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),t0.canvas.addEventListener("webglcontextrestored",r=>{p("error: humangl context restored:",r)}),t0.canvas.addEventListener("webglcontextcreationerror",r=>{p("error: humangl context create:",r)}))}catch(n){p("error: cannot get WebGL context:",n);return}try{i0.setWebGLContext(2,t0.gl)}catch(n){p("error: cannot set WebGL context:",n);return}try{let n=new i0.GPGPUContext(t0.gl);i0.registerBackend(t0.name,()=>new i0.MathBackendWebGL(n),t0.priority)}catch(n){p("error: cannot register WebGL backend:",n);return}try{i0.getKernelsForBackend("webgl").forEach(r=>{let A={...r,backendName:t0.name};i0.registerKernel(A)})}catch(n){p("error: cannot update WebGL backend registration:",n);return}let o=i0.backend().getGPGPUContext?i0.backend().getGPGPUContext().gl:null;if(o)p(`humangl webgl version:${o.getParameter(o.VERSION)} renderer:${o.getParameter(o.RENDERER)}`);else{p("error: no current gl context:",o,t0.gl);return}try{i0.env().flagRegistry.WEBGL_VERSION&&i0.env().set("WEBGL_VERSION",2)}catch(n){p("error: cannot set WebGL backend flags:",n);return}ZA(),p("backend registered:",t0.name)}}var I=Z(D());function XA(){if(!R.kernels.includes("mod")){let e={kernelName:"Mod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.sub(t.inputs.a,I.mul(I.div(t.inputs.a,t.inputs.b),t.inputs.b)))};I.registerKernel(e),R.kernels.push("mod")}if(!R.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.floorDiv(t.inputs.a/t.inputs.b)*t.inputs.b+I.mod(t.inputs.a,t.inputs.b))};I.registerKernel(e),R.kernels.push("floormod")}}async function p5(e,t=!1){if(e.state="backend",t||R.initial||e.config.backend&&e.config.backend.length>0&&I.getBackend()!==e.config.backend){let o=b();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&p("running inside web worker"),R.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&p("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),R.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&p(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")p("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&p("enumerated webgpu adapter:",r),!r)p("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let A="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;p("webgpu adapter info:",A)}}e.config.backend==="humangl"&&await To(e);let n=Object.keys(I.engine().registryFactory);if(e.config.debug&&p("available backends:",n),n.includes(e.config.backend)||(p(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&p(`override: setting backend ${e.config.backend}`)),e.config.debug&&p("setting backend:",e.config.backend),e.config.backend==="wasm"){if(I.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&I.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&p("wasm path:",e.config.wasmPath),typeof(I==null?void 0:I.setWasmPaths)!="undefined")await I.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,A=!1;try{r=await I.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await I.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&p(`wasm execution: ${A?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&p("warning: wasm simd support is not enabled")}catch(s){p("wasm detection failed")}}try{await I.setBackend(e.config.backend),await I.ready(),Ft()}catch(r){return p("error: cannot set backend:",e.config.backend,r),!1}}if(I.getBackend()==="humangl"&&(I.env().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&I.env().set("CHECK_COMPUTATION_FOR_ERRORS",!1),I.env().flagRegistry.WEBGL_CPU_FORWARD&&I.env().set("WEBGL_CPU_FORWARD",!0),I.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&I.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),I.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&I.env().set("CPU_HANDOFF_SIZE_THRESHOLD",256),I.env().flagRegistry.WEBGL_EXP_CONV&&I.env().set("WEBGL_EXP_CONV",!0),I.env().flagRegistry.USE_SETTIMEOUTCUSTOM&&I.env().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(p("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),I.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),I.backend().getGPGPUContext)){let n=await I.backend().getGPGPUContext().gl;e.config.debug&&p(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}I.getBackend(),I.enableProdMode(),await I.ready(),e.performance.initBackend=Math.trunc(b()-o),e.config.backend=I.getBackend(),await R.updateBackend(),XA()}return!0}function u5(e,t){for(let o of e){let n={kernelName:o,backendName:t.backend,kernelFunc:()=>{t.debug&&p("kernelFunc",o,t.backend)}};I.registerKernel(n)}R.kernels=I.getKernelsForBackend(I.getBackend()).map(o=>o.kernelName.toLowerCase())}var p0=[null,null],UA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Oe=[[0,0],[0,0]],YA=["hand","fist","pinch","point","face","tip","pinchtip"],ko=4,Eo=1.6,KA=512,JA=1.4,h5=Number.MAX_SAFE_INTEGER,j1=0,pe=[0,0],l0={boxes:[],hands:[]},zo={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function So(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&p("cached model:",p0[0].modelUrl);else{u5(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await W((t=e.hand.detector)==null?void 0:t.modelPath);let o=Object.values(p0[0].modelSignature.inputs);Oe[0][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[0][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[0]}async function Co(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&p("cached model:",p0[1].modelUrl);else{p0[1]=await W((t=e.hand.skeleton)==null?void 0:t.modelPath);let o=Object.values(p0[1].modelSignature.inputs);Oe[1][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[1][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[1]}async function QA(e,t){let o=[];if(!e||!p0[0])return o;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,KA),s=Math.round(A*r/8)*8;n.resize=Q.image.resizeBilinear(e,[A,s]),n.cast=Q.cast(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await p0[0].executeAsync(n.cast,UA),n.boxes=Q.squeeze(n.rawBoxes,[0,2]),n.scores=Q.squeeze(n.rawScores,[0]);let a=Q.unstack(n.scores,1);Q.dispose(a[ko]),a.splice(ko,1),n.filtered=Q.stack(a,1),Q.dispose(a),n.max=Q.max(n.filtered,1),n.argmax=Q.argMax(n.filtered,1);let l=0;n.nms=await Q.image.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let y=await n.nms.data(),x=await n.max.data(),i=await n.argmax.data();for(let d of Array.from(y)){let c=Q.slice(n.boxes,d,1),h=await c.data();Q.dispose(c);let m=[h[1],h[0],h[3]-h[1],h[2]-h[0]],P=$2(m,JA),M=[Math.trunc(m[0]*pe[0]),Math.trunc(m[1]*pe[1]),Math.trunc(m[2]*pe[0]),Math.trunc(m[3]*pe[1])],g=x[d],f=YA[i[d]],u={id:l++,score:g,box:M,boxRaw:P,label:f};o.push(u)}return Object.keys(n).forEach(d=>Q.dispose(n[d])),o.sort((d,c)=>c.score-d.score),o.length>(t.hand.maxDetected||1)&&(o.length=t.hand.maxDetected||1),o}async function O1(e,t,o){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&o.hand.landmarks&&t.score>(o.hand.minConfidence||0)){let r={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[A],[0],[Oe[1][0],Oe[1][1]],"bilinear"),r.div=Q.div(r.crop,B.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let s=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(s))))/100;if(a>=(o.hand.minConfidence||0)){n.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Oe[1][1],i[1]/Oe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);n.keypoints=x.map(i=>[pe[0]*(i[0]+t.boxRaw[0]),pe[1]*(i[1]+t.boxRaw[1]),i[2]||0]),n.landmarks=d5(n.keypoints);for(let i of Object.keys(zo))n.annotations[i]=zo[i].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return n}async function N1(e,t){var r,A;if(!p0[0]||!p0[1]||!((r=p0[0])!=null&&r.inputs[0].shape)||!((A=p0[1])!=null&&A.inputs[0].shape))return[];pe=[e.shape[2]||0,e.shape[1]||0],h5++;let o=(t.hand.skipTime||0)>b()-j1,n=h5<(t.hand.skipFrames||0);return t.skipAllowed&&o&&n?l0.hands:new Promise(async s=>{let a=3*(t.hand.skipTime||0)>b()-j1,l=h5<3*(t.hand.skipFrames||0);t.skipAllowed&&l0.hands.length===t.hand.maxDetected?l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))):t.skipAllowed&&a&&l&&l0.hands.length>0?l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))):(l0.boxes=await QA(e,t),j1=b(),l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))),h5=0);let y=[...l0.boxes];if(l0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&l0.hands[x].fingerScore&&l0.hands[x].fingerScore>(t.hand.minConfidence||0)){let d=$2(i.box,Eo),c=$2(i.boxRaw,Eo);l0.boxes.push({...y[x],box:d,boxRaw:c})}}for(let x=0;xb()-Oo,A=L1<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&jo===n&&b5[o]?(L1++,b5[o]):(L1=0,new Promise(async l=>{let y=g5.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),x=P0==null?void 0:P0.execute(y),i=(await x.data())[0];b5[o]=Math.round(100*i)/100,jo=n,Oo=b(),g5.dispose([y,x]),l(b5[o])}))}var Ho=Z(D());var C2={};be(C2,{connected:()=>P5,horizontal:()=>F1,kpt:()=>M5,relative:()=>B1,vertical:()=>G1});var M5=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],F1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],G1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],B1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],P5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ne=Z(D()),Wo=.005,G0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function H1(e){for(let t of F1){let o=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[1]y&&y.part===t[0]),r=e.keypoints.findIndex(y=>y&&y.part===t[1]),A=e.keypoints.findIndex(y=>y&&y.part===o[0]),s=e.keypoints.findIndex(y=>y&&y.part===o[1]);if(!e.keypoints[A]||!e.keypoints[s])continue;let a=e.keypoints[n]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let y=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=y}}}function Fo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],o.pad=Ne.pad(e,G0.padding),o.resize=Ne.image.resizeBilinear(o.pad,[t,t]);let n=Ne.cast(o.resize,"int32");return Object.keys(o).forEach(r=>Ne.dispose(o[r])),n}function Bo(e,t){e.keypoints=e.keypoints.filter(n=>n&&n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+G0.padding[2][0]+G0.padding[2][1])/t[0]-G0.padding[2][0],n.position[1]*(t[1]+G0.padding[1][0]+G0.padding[1][1])/t[1]-G0.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let o=ce(e.keypoints.map(n=>n.position),t);return e.box=o.box,e.boxRaw=o.boxRaw,e}var B0,v5=0,V1=Number.MAX_SAFE_INTEGER,qe={boxes:[],bodies:[],last:0};async function Vo(e){return R.initial&&(B0=null),B0?e.debug&&p("cached model:",B0.modelUrl):(u5(["size"],e),B0=await W(e.body.modelPath)),v5=B0.inputs[0].shape?B0.inputs[0].shape[2]:0,v5<64&&(v5=256),B0}async function $A(e,t,o){let n=e[0][0],r=[],A=0;for(let x=0;xt.body.minConfidence){let i=[n[x][1],n[x][0]];r.push({score:Math.round(100*A)/100,part:M5[x],positionRaw:i,position:[Math.round((o.shape[2]||0)*i[0]),Math.round((o.shape[1]||0)*i[1])]})}A=r.reduce((x,i)=>i.score>x?i.score:x,0);let s=[],a=ce(r.map(x=>x.position),[o.shape[2],o.shape[1]]),l={};for(let[x,i]of Object.entries(P5)){let d=[];for(let c=0;cP.part===i[c]),m=r.find(P=>P.part===i[c+1]);h&&m&&h.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([h.position,m.position])}l[x]=d}let y={id:0,score:A,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return H1(y),s.push(y),s}async function e7(e,t,o){let n=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let d=A[3*i+2];if(d>t.body.minConfidence){let c=[A[3*i+1],A[3*i+0]];a.push({part:M5[i],score:Math.round(100*d)/100,positionRaw:c,position:[Math.round((o.shape[2]||0)*c[0]),Math.round((o.shape[1]||0)*c[1])]})}}let l=ce(a.map(i=>i.position),[o.shape[2],o.shape[1]]),y={};for(let[i,d]of Object.entries(P5)){let c=[];for(let h=0;hM.part===d[h]),P=a.find(M=>M.part===d[h+1]);m&&P&&m.score>(t.body.minConfidence||0)&&P.score>(t.body.minConfidence||0)&&c.push([m.position,P.position])}y[i]=c}let x={id:r,score:s,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:y};H1(x),n.push(x)}}return n.sort((r,A)=>A.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function D1(e,t){if(!B0||!(B0!=null&&B0.inputs[0].shape))return[];t.skipAllowed||(qe.boxes.length=0),V1++;let o=(t.body.skipTime||0)>b()-qe.last,n=V1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n?qe.bodies:new Promise(async r=>{let A={};V1=0,A.input=Go(e,v5),A.res=B0==null?void 0:B0.execute(A.input),qe.last=b();let s=await A.res.array();qe.bodies=A.res.shape[2]===17?await $A(s,t,e):await e7(s,t,e);for(let a of qe.bodies)Bo(a,[e.shape[2]||1,e.shape[1]||1]),Fo(a.keypoints);Object.keys(A).forEach(a=>Ho.dispose(A[a])),r(qe.bodies)})}var H0=Z(D());var l2,R5=[],Zo=0,Z1=Number.MAX_SAFE_INTEGER,w5=0,T5=2.5;async function Xo(e){if(!l2||R.initial){l2=await W(e.object.modelPath);let t=Object.values(l2.modelSignature.inputs);w5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&p("cached model:",l2.modelUrl);return l2}async function t7(e,t,o){let n=0,r=[];for(let l of[1,2,4]){let y=l*13,x=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)===t2.length)),i=await x.array(),d=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)(o.object.minConfidence||0)&&M!==61){let f=(.5+Math.trunc(P%y))/y,u=(.5+Math.trunc(P/y))/y,S=m[P].map(_=>_*(y/l/w5)),[N,w]=[f-T5/l*S[0],u-T5/l*S[1]],[E,H]=[f+T5/l*S[2]-N,u+T5/l*S[3]-w],X=[N,w,E,H];X=X.map(_=>Math.max(0,Math.min(_,1)));let G=[X[0]*t[0],X[1]*t[1],X[2]*t[0],X[3]*t[1]],o0={id:n++,score:Math.round(100*g)/100,class:M+1,label:t2[M].label,box:G.map(_=>Math.trunc(_)),boxRaw:X};r.push(o0)}}H0.dispose([x,d,c,h])}let A=r.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),s=r.map(l=>l.score),a=[];if(A&&A.length>0){let l=await H0.image.nonMaxSuppressionAsync(A,s,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence);a=await l.data(),H0.dispose(l)}return r=r.filter((l,y)=>a.includes(y)).sort((l,y)=>y.score-l.score),r}async function X1(e,t){let o=(t.object.skipTime||0)>b()-Zo,n=Z1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&R5.length>0?(Z1++,R5):(Z1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?R5:new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=H0.image.resizeBilinear(e,[w5,w5],!1),a=H0.div(s,B.tf255),l=H0.transpose(a,[0,3,1,2]),y;t.object.enabled&&(y=l2.execute(l)),Zo=b();let x=await t7(y,A,t);R5=x,H0.dispose([s,a,l,...y]),r(x)}))}var z0=Z(D());var j2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],o7=j2.length,I2=j2.reduce((e,t,o)=>(e[t]=o,e),{}),n7=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Cs=n7.map(([e,t])=>[I2[e],I2[t]]),Uo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function Yo(e){let t=e.reduce(({maxX:o,maxY:n,minX:r,minY:A},{position:{x:s,y:a}})=>({maxX:Math.max(o,s),maxY:Math.max(n,a),minX:Math.min(r,s),minY:Math.min(A,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Ko(e,[t,o],[n,r]){let A=t/n,s=o/r,a=(y,x)=>({id:x,score:y.score,boxRaw:[y.box[0]/r,y.box[1]/n,y.box[2]/r,y.box[3]/n],box:[Math.trunc(y.box[0]*s),Math.trunc(y.box[1]*A),Math.trunc(y.box[2]*s),Math.trunc(y.box[3]*A)],keypoints:y.keypoints.map(({score:i,part:d,position:c})=>({score:i,part:d,position:[Math.trunc(c.x*s),Math.trunc(c.y*A)],positionRaw:[c.x/n,c.y/n]})),annotations:{}});return e.map((y,x)=>a(y,x))}var k5=class{constructor(t,o){T(this,"priorityQueue");T(this,"numberOfElements");T(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=o}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let o=2*t;if(oo?o:e}function Jo(e,t,o,n){let r=o-e,A=n-t;return r*r+A*A}function K1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var oe,A7=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],E5=1,y2=16,s7=50**2;function Qo(e,t,o,n,r,A,s=2){let a=M=>({y:A.get(M.y,M.x,e),x:A.get(M.y,M.x,A.shape[2]/2+e)}),l=(M,g,f)=>({y:Y1(Math.round(M.y/y2),0,g-1),x:Y1(Math.round(M.x/y2),0,f-1)}),[y,x]=n.shape,i=l(t.position,y,x),d=a(i),h=K1(t.position,d);for(let M=0;M[I2[d],I2[c]]),s=A.map(([,d])=>d),a=A.map(([d])=>d),l=t.shape[2],y=s.length,x=new Array(l),i=U1(e.part,y2,o);x[e.part.id]={score:e.score,part:j2[e.part.id],position:i};for(let d=y-1;d>=0;--d){let c=s[d],h=a[d];x[c]&&!x[h]&&(x[h]=Qo(d,x[c],h,t,o,r))}for(let d=0;dt){a=!1;break}if(!a)break}return a}function l7(e,t){let[o,n,r]=t.shape,A=new k5(o*n*r,({score:s})=>s);for(let s=0;s{var s;let A=(s=r[n])==null?void 0:s.position;return A?Jo(o,t,A.y,A.x)<=s7:!1})}function y7(e,t){return t.reduce((n,{position:r,score:A},s)=>(_o(e,r,s)||(n+=A),n),0)/t.length}function c7(e,t,o,n,r,A){let s=[],a=l7(A,t);for(;s.lengthc.score>A);let i=y7(s,x),d=Yo(x);i>A&&s.push({keypoints:x,box:d,score:Math.round(100*i)/100})}return s}async function J1(e,t){let o=z0.tidy(()=>{if(!oe.inputs[0].shape)return[];let s=z0.image.resizeBilinear(e,[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]),a=z0.sub(z0.div(z0.cast(s,"float32"),127.5),1),y=oe.execute(a,A7).map(x=>z0.squeeze(x,[0]));return y[1]=z0.sigmoid(y[1]),y}),n=await Promise.all(o.map(s=>s.buffer()));for(let s of o)z0.dispose(s);let r=await c7(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return oe.inputs[0].shape?Ko(r,[e.shape[1],e.shape[2]],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]):[]}async function $o(e){return!oe||R.initial?oe=await W(e.body.modelPath):e.debug&&p("cached model:",oe.modelUrl),oe}var r0=Z(D());var ae,Q1=!1;async function _1(e){return!ae||R.initial?ae=await W(e.segmentation.modelPath):e.debug&&p("cached model:",ae.modelUrl),ae}async function tn(e,t,o){var m,P;if(Q1)return{data:[],canvas:null,alpha:null};Q1=!0,ae||await _1(o);let n=await Je(e,o),r=((m=n.tensor)==null?void 0:m.shape[2])||0,A=((P=n.tensor)==null?void 0:P.shape[1])||0;if(!n.tensor)return{data:[],canvas:null,alpha:null};let s={};s.resize=r0.image.resizeBilinear(n.tensor,[ae.inputs[0].shape?ae.inputs[0].shape[1]:0,ae.inputs[0].shape?ae.inputs[0].shape[2]:0],!1),r0.dispose(n.tensor),s.norm=r0.div(s.resize,B.tf255),s.res=ae.execute(s.norm),s.squeeze=r0.squeeze(s.res,0),s.squeeze.shape[2]===2?(s.softmax=r0.softmax(s.squeeze),[s.bg,s.fg]=r0.unstack(s.softmax,2),s.expand=r0.expandDims(s.fg,2),s.pad=r0.expandDims(s.expand,0),s.crop=r0.image.cropAndResize(s.pad,[[0,0,.5,.5]],[0],[r,A]),s.data=r0.squeeze(s.crop,0)):s.data=r0.image.resizeBilinear(s.squeeze,[A,r]);let a=Array.from(await s.data.data());if(R.node&&!R.Canvas&&typeof ImageData=="undefined")return o.debug&&p("canvas support missing"),Object.keys(s).forEach(M=>r0.dispose(s[M])),{data:a,canvas:null,alpha:null};let l=T0(r,A);r0.browser&&await r0.browser.toPixels(s.data,l);let y=l.getContext("2d");o.segmentation.blur&&o.segmentation.blur>0&&(y.filter=`blur(${o.segmentation.blur}px)`);let x=y.getImageData(0,0,r,A),i=T0(r,A),d=i.getContext("2d");n.canvas&&d.drawImage(n.canvas,0,0),d.globalCompositeOperation="darken",o.segmentation.blur&&o.segmentation.blur>0&&(d.filter=`blur(${o.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let c=d.getImageData(0,0,r,A);for(let M=0;Mr0.dispose(s[M])),Q1=!1,{data:a,canvas:i,alpha:l}}var O2=class{constructor(){T(this,"ssrnetage",null);T(this,"gear",null);T(this,"blazeposedetect",null);T(this,"blazepose",null);T(this,"centernet",null);T(this,"efficientpose",null);T(this,"mobilefacenet",null);T(this,"insightface",null);T(this,"emotion",null);T(this,"facedetect",null);T(this,"faceiris",null);T(this,"facemesh",null);T(this,"faceres",null);T(this,"ssrnetgender",null);T(this,"handpose",null);T(this,"handskeleton",null);T(this,"handtrack",null);T(this,"liveness",null);T(this,"movenet",null);T(this,"nanodet",null);T(this,"posenet",null);T(this,"segmentation",null);T(this,"antispoof",null)}},$1=e=>{let t=0,o=0,n=0;for(let A of Object.values(ne))t+=A.sizeFromManifest,o+=A.sizeLoadedWeights,n+=A.sizeDesired;let r=n>0?o/n:0;return{numLoadedModels:Object.values(ne).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:o,totalSizeLoading:n,totalSizeEnabled:void 0,modelStats:Object.values(ne)}};function f5(e){for(let t of Object.keys(e.models))e.models[t]=null}async function et(e){var t,o,n,r,A,s,a,l,y,x,i,d,c,h,m,P,M,g,f,u,S,N,w,E,H,X,G,o0,_,z,y0,V0;R.initial&&f5(e),e.config.hand.enabled&&(!e.models.handpose&&((o=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:o.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await I1(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(n=e.config.hand.detector)==null?void 0:n.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await I1(e.config))),e.config.body.enabled&&!e.models.blazepose&&((s=(A=e.config.body)==null?void 0:A.modelPath)==null?void 0:s.includes("blazepose"))&&(e.models.blazepose=h3(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=u3(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((l=(a=e.config.body)==null?void 0:a.modelPath)==null?void 0:l.includes("efficientpose"))&&(e.models.efficientpose=R3(e.config)),e.config.body.enabled&&!e.models.movenet&&((x=(y=e.config.body)==null?void 0:y.modelPath)==null?void 0:x.includes("movenet"))&&(e.models.movenet=Vo(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=$o(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=i3(e.config)),e.config.face.enabled&&((c=e.config.face.antispoof)==null?void 0:c.enabled)&&!e.models.antispoof&&(e.models.antispoof=Kt(e.config)),e.config.face.enabled&&((h=e.config.face.liveness)==null?void 0:h.enabled)&&!e.models.liveness&&(e.models.liveness=No(e.config)),e.config.face.enabled&&((m=e.config.face.description)==null?void 0:m.enabled)&&!e.models.faceres&&(e.models.faceres=eo(e.config)),e.config.face.enabled&&((P=e.config.face.emotion)==null?void 0:P.enabled)&&!e.models.emotion&&(e.models.emotion=E3(e.config)),e.config.face.enabled&&((M=e.config.face.iris)==null?void 0:M.enabled)&&!((g=e.config.face.attention)!=null&&g.enabled)&&!e.models.faceiris&&(e.models.faceiris=D3(e.config)),e.config.face.enabled&&((f=e.config.face.mesh)==null?void 0:f.enabled)&&!e.models.facemesh&&(e.models.facemesh=K3(e.config)),e.config.face.enabled&&((u=e.config.face.gear)==null?void 0:u.enabled)&&!e.models.gear&&(e.models.gear=Lt(e.config)),e.config.face.enabled&&((S=e.config.face.ssrnet)==null?void 0:S.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=Ht(e.config)),e.config.face.enabled&&((N=e.config.face.ssrnet)==null?void 0:N.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=Xt(e.config)),e.config.face.enabled&&((w=e.config.face.mobilefacenet)==null?void 0:w.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=j3(e.config)),e.config.face.enabled&&((E=e.config.face.insightface)==null?void 0:E.enabled)&&!e.models.insightface&&(e.models.insightface=F3(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((X=(H=e.config.hand.detector)==null?void 0:H.modelPath)==null?void 0:X.includes("handtrack"))&&(e.models.handtrack=So(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((o0=(G=e.config.hand.detector)==null?void 0:G.modelPath)==null?void 0:o0.includes("handtrack"))&&(e.models.handskeleton=Co(e.config)),e.config.object.enabled&&!e.models.centernet&&((z=(_=e.config.object)==null?void 0:_.modelPath)==null?void 0:z.includes("centernet"))&&(e.models.centernet=M3(e.config)),e.config.object.enabled&&!e.models.nanodet&&((V0=(y0=e.config.object)==null?void 0:y0.modelPath)==null?void 0:V0.includes("nanodet"))&&(e.models.nanodet=Xo(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=_1(e.config));for await(let v of Object.keys(e.models))e.models[v]&&typeof e.models[v]!="undefined"&&(e.models[v]=await e.models[v])}var Z0;function c2(e,t,o){if(e&&(Z0=e),!t||(Z0||p("instance not registred"),!Z0.config.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],A=[],s=[],a=t.modelUrl,l=t.executor;if(l&&l.graph.nodes)for(let y of Object.values(l.graph.nodes)){let x=y.op.toLowerCase();A.includes(x)||A.push(x)}else!l&&Z0.config.debug&&p("model signature not determined:",o);for(let y of A)!n.includes(y)&&!r.includes(y)&&!Z0.env.kernels.includes(y)&&!Z0.env.kernels.includes(y.replace("_",""))&&!Z0.env.kernels.includes(y.replace("native",""))&&!Z0.env.kernels.includes(y.replace("v2",""))&&s.push(y);return Z0.config.debug&&s.length>0&&p("model validation failed:",o,s),s.length>0?{name:o,missing:s,ops:A,url:a}:null}function z5(e){Z0=e;let t=[];for(let o of Object.keys(Z0.models)){let n=Z0.models[o];if(!n)continue;let r=c2(Z0,n,o);r&&t.push(r)}return t}var S0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ne={};async function x7(e,t){return S0.debug&&p("load model fetch:",e,t),fetch(e,t)}function nn(e){S0.cacheModels=e.cacheModels,S0.verbose=e.debug,S0.modelBasePath=e.modelBasePath}async function W(e){var y,x,i;let t=Pt(S0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let o=t.includes("/")?t.split("/"):t.split("\\"),n=o[o.length-1].replace(".json",""),r="indexeddb://"+n;ne[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:B5[n],inCache:!1},S0.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let A={};try{A=S0.cacheSupported&&S0.cacheModels?await S5.io.listModels():{}}catch(d){S0.cacheSupported=!1}ne[n].inCache=S0.cacheSupported&&S0.cacheModels&&Object.keys(A).includes(r);let s=typeof fetch=="undefined"?{}:{fetchFunc:(d,c)=>x7(d,c)},a=new S5.GraphModel(ne[n].inCache?r:t,s),l=!1;try{a.findIOHandler(),S0.debug&&p("model load handler:",a.handler);let d=await a.handler.load();ne[n].sizeFromManifest=((y=d==null?void 0:d.weightData)==null?void 0:y.byteLength)||0,a.loadSync(d),ne[n].sizeLoadedWeights=((i=(x=a==null?void 0:a.artifacts)==null?void 0:x.weightData)==null?void 0:i.byteLength)||0,S0.verbose&&p("load model:",a.modelUrl,{bytes:ne[n].sizeLoadedWeights},S0),l=!0}catch(d){p("error loading model:",t,d)}if(l&&S0.cacheModels&&S0.cacheSupported&&!ne[n].inCache)try{let d=await a.save(r);p("model saved:",r,d)}catch(d){p("error saving model:",t,d)}return c2(null,a,`${e}`),a}var re=Z(D());var tt="2.9.4";var it={};be(it,{all:()=>at,body:()=>d2,canvas:()=>st,face:()=>x2,gesture:()=>p2,hand:()=>f2,object:()=>m2,options:()=>v0,person:()=>At});var X0=e=>{if(!e)p("draw error: invalid canvas");else if(!e.getContext)p("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)p("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),ue=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let o=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${t.alpha})`};function he(e,t,o,n,r){e.fillStyle=ue(n,r),e.beginPath(),e.arc(t,o,r.pointSize,0,2*Math.PI),e.fill()}function ie(e,t,o,n,r,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let s=(t+t+n)/2,a=(o+o+r)/2;e.ellipse(s,a,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,o),e.lineTo(t+n-A.roundRect,o),e.quadraticCurveTo(t+n,o,t+n,o+A.roundRect),e.lineTo(t+n,o+r-A.roundRect),e.quadraticCurveTo(t+n,o+r,t+n-A.roundRect,o+r),e.lineTo(t+A.roundRect,o+r),e.quadraticCurveTo(t,o+r,t,o+r-A.roundRect),e.lineTo(t,o+A.roundRect),e.quadraticCurveTo(t,o,t+A.roundRect,o),e.closePath();e.stroke()}function ot(e,t,o){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=ue(n[2]||0,o),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),o.fillPolygons&&(e.closePath(),e.fill())}}function rn(e,t,o){if(!(t.length<2)){if(e.lineWidth=o.lineWidth,!o.useCurves||t.length<=2){ot(e,t,o);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n0){let n=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);n.length>3&&(n.length=3),o.push(n.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&o.push(`roll: ${Ue(e.rotation.angle.roll)}\xB0 yaw:${Ue(e.rotation.angle.yaw)}\xB0 pitch:${Ue(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&o.push(`gaze: ${Ue(e.rotation.gaze.bearing)}\xB0`)),o.length===0&&o.push("face"),t.fillStyle=K.color;for(let n=o.length-1;n>=0;n--){let r=Math.max(e.box[0],0),A=n*K.lineHeight+e.box[1];K.shadowColor&&K.shadowColor!==""&&(t.fillStyle=K.shadowColor,t.fillText(o[n],r+5,A+16)),t.fillStyle=K.labelColor,t.fillText(o[n],r+4,A+15)}}}function p7(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,n=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,n=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function u7(e,t){var o;if(K.drawGaze&&((o=e.rotation)==null?void 0:o.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,A=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C ${n} ${e.box[1]}, diff --git a/dist/human.node-wasm.js b/dist/human.node-wasm.js index fa59416d..5ea02150 100644 --- a/dist/human.node-wasm.js +++ b/dist/human.node-wasm.js @@ -96,7 +96,7 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var F5=(e,t,o)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,A)=>(o[A]=0,r))},G5=class{constructor(t,o,n){T(this,"uniform",{});T(this,"attribute",{});T(this,"gl");T(this,"id");T(this,"compile",(t,o)=>{let n=this.gl.createShader(o);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(p(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)}`),null)):(p("filter: could not create shader"),null)});this.gl=t;let r=this.compile(o,this.gl.VERTEX_SHADER),A=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!A)){if(!this.id){p("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){p(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),F5(o,"attribute",this.attribute);for(let s in this.attribute)this.attribute[s]=this.gl.getAttribLocation(this.id,s);F5(o,"uniform",this.uniform),F5(n,"uniform",this.uniform);for(let s in this.uniform)this.uniform[s]=this.gl.getUniformLocation(this.id,s)}}};function It(){let e=0,t=null,o=!1,n=-1,r=[null,null],A=[],s=null,a=null,l=T0(100,100),y={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){p("filter: cannot get webgl context");return}this.gl=i;function d(g,f){if(!(g===l.width&&f===l.height)){if(l.width=g,l.height=f,!s){let u=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);s=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,s),i.bufferData(i.ARRAY_BUFFER,u,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function c(g,f){let u=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,u);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let N=i.createTexture();return i.bindTexture(i.TEXTURE_2D,N),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,g,f,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,N,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:u,texture:N}}function h(g){return r[g]=r[g]||c(l.width,l.height),r[g]}function m(g=0){if(!a)return;let f=null,u=null,S=!1;e===0?f=t:f=h(n).texture||null,e++,o&&!(g&x.INTERMEDIATE)?(u=null,S=e%2===0):(n=(n+1)%2,u=h(n).fbo||null),i.bindTexture(i.TEXTURE_2D,f),i.bindFramebuffer(i.FRAMEBUFFER,u),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function P(g){if(y[g])return a=y[g],i.useProgram((a?a.id:null)||null),a;if(a=new G5(i,wt,g),!a)return p("filter: could not get webgl program"),null;let f=Float32Array.BYTES_PER_ELEMENT,u=4*f;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,u,0*f),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,u,2*f),y[g]=a,a}let M={colorMatrix:g=>{let f=new Float32Array(g);f[4]/=255,f[9]/=255,f[14]/=255,f[19]/=255;let u=f[18]===1&&f[3]===0&&f[8]===0&&f[13]===0&&f[15]===0&&f[16]===0&&f[17]===0&&f[19]===0?Et:kt,S=P(u);!S||(i.uniform1fv(S.uniform.m,f),m())},brightness:g=>{let f=(g||0)+1;M.colorMatrix([f,0,0,0,0,0,f,0,0,0,0,0,f,0,0,0,0,0,1,0])},saturation:g=>{let f=(g||0)*2/3+1,u=(f-1)*-.5;M.colorMatrix([f,u,u,0,0,u,f,u,0,0,u,u,f,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:g=>{let f=(g||0)+1,u=-128*(f-1);M.colorMatrix([f,0,0,0,u,0,f,0,0,u,0,0,f,0,u,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let f=Math.cos(g),u=Math.sin(g),S=.213,N=.715,w=.072;M.colorMatrix([S+f*(1-S)+u*-S,N+f*-N+u*-N,w+f*-w+u*(1-w),0,0,S+f*-S+u*.143,N+f*(1-N)+u*.14,w+f*-w+u*-.283,0,0,S+f*-S+u*-(1-S),N+f*-N+u*N,w+f*(1-w)+u*w,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:g=>{let f=new Float32Array(g),u=1/l.width,S=1/l.height,N=P(Ct);!N||(i.uniform1fv(N.uniform.m,f),i.uniform2f(N.uniform.px,u,S),m())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:g=>{let f=g||1;M.convolution.call(this,[0,-1*f,0,-1*f,1+4*f,-1*f,0,-1*f,0])},emboss:g=>{let f=g||1;M.convolution.call(this,[-2*f,-1*f,0,-1*f,1,1*f,0,1*f,2*f])},blur:g=>{let f=g/7/l.width,u=g/7/l.height,S=P(St);!S||(i.uniform2f(S.uniform.px,0,u),m(x.INTERMEDIATE),i.uniform2f(S.uniform.px,f,0),m())},pixelate:g=>{let f=g/l.width,u=g/l.height,S=P(zt);!S||(i.uniform2f(S.uniform.size,f,u),m())}};this.add=function(g){let f=Array.prototype.slice.call(arguments,1),u=M[g];A.push({func:u,args:f})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(g){d(g.width,g.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,g);for(let f=0;fc.data())),s=.99*Math.max(A[0][0],A[1][0],A[2][0]),a=[U.sub(o[0],n[0]),U.sub(o[1],n[1]),U.sub(o[2],n[2])],l=[U.sub(r[0],n[0]),U.sub(r[1],n[1]),U.sub(r[2],n[2])],y=[U.div(s,l[0]),U.div(s,l[1]),U.div(s,l[2])],x=[U.mul(a[0],y[0]),U.mul(a[1],y[1]),U.mul(a[2],y[2])],i=U.stack([x[0],x[1],x[2]],2),d=U.reshape(i,[1,t.shape[0],t.shape[1],3]);return U.dispose([...o,...n,...r,...a,...l,...y,...x,i,t]),d}var B2=3840,Y=null,c0=null,Ke=null,e0,le={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function T0(e,t){let o;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");o=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");o=document.createElement("canvas"),o.width=e,o.height=t}else typeof R.Canvas!="undefined"?o=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(o=new globalThis.Canvas(e,t));return o}function H2(e,t){let o=t||T0(e.width,e.height);return o.getContext("2d").drawImage(e,0,0),o}async function Je(e,t,o=!0){if(!e)return t.debug&&p("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof O.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof R.Canvas!="undefined"&&e instanceof R.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof O.Tensor){let n=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)n=O.expandDims(e,0);else if(e.shape[2]===4){let r=O.slice3d(e,[0,0,0],[-1,-1,3]);n=O.expandDims(r,0),O.dispose(r)}}else e.shape.length===4&&(e.shape[3]===3?n=O.clone(e):e.shape[3]===4&&(n=O.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(n==null||n.shape.length!==4||n.shape[0]!==1||n.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(n.dtype==="int32"){let r=O.cast(n,"float32");O.dispose(n),n=r}return{tensor:n,canvas:t.filter.return?c0:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&p("input stream is not ready"),{tensor:null,canvas:Y};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&p("cannot determine input dimensions"),{tensor:null,canvas:Y};let A=n,s=r;if(A>B2&&(A=B2,s=Math.trunc(A*r/n)),s>B2&&(s=B2,A=Math.trunc(s*n/r)),(t.filter.width||0)>0?A=t.filter.width:(t.filter.height||0)>0&&(A=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?s=t.filter.height:(t.filter.width||0)>0&&(s=r*((t.filter.width||0)/n)),!A||!s)throw new Error("input error: cannot determine dimension");(!Y||(Y==null?void 0:Y.width)!==A||(Y==null?void 0:Y.height)!==s)&&(Y=T0(A,s));let a=Y.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(n,0),a.scale(-1,1),a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),(!c0||Y.width!==c0.width||(Y==null?void 0:Y.height)!==(c0==null?void 0:c0.height))&&(c0=T0(Y.width,Y.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new It:null),R.filter=!!e0,!e0||!e0.add?(t.debug&&p("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,H2(Y,c0)):(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),e0.get()>0?c0=e0.apply(Y):c0=e0.draw(Y))):(H2(Y,c0),e0&&(e0=null),R.filter=!!e0),!o)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let l,y=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&O.browser)l=O.browser?O.browser.fromPixels(e):null;else{y=e.data.length/e.height/e.width;let d=new Uint8Array(e.data.buffer);l=O.tensor(d,[e.height,e.width,y],"int32")}else if((!Ke||c0.width!==Ke.width||c0.height!==Ke.height)&&(Ke=T0(c0.width,c0.height)),O.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=O.browser.fromPixels(c0):(Ke=H2(c0),l=O.browser.fromPixels(Ke));else{let h=H2(c0).getContext("2d").getImageData(0,0,A,s);y=h.data.length/A/s;let m=new Uint8Array(h.data.buffer);l=O.tensor(m,[A,s,y])}if(y===4){let d=O.slice3d(l,[0,0,0],[-1,-1,3]);O.dispose(l),l=d}if(!l)throw new Error("input error: cannot create tensor");let x=O.cast(l,"float32"),i=t.filter.equalization?await G2(x):O.expandDims(x,0);return O.dispose([l,x]),{tensor:i,canvas:t.filter.return?c0:null}}}async function jt(e,t){let o=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return o;if(!le.inputTensor)le.inputTensor=O.clone(t);else if(le.inputTensor.shape[1]!==t.shape[1]||le.inputTensor.shape[2]!==t.shape[2])O.dispose(le.inputTensor),le.inputTensor=O.clone(t);else{let n={};n.diff=O.sub(t,le.inputTensor),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;O.dispose([le.inputTensor,n.diff,n.squared,n.sum]),le.inputTensor=O.clone(t),o=A<=(e.cacheSensitivity||0)}return o}async function Ot(e,t,o){let n={};if(!t||!o||t.shape.length!==4||t.shape.length!==o.shape.length)return e.debug||p("invalid input tensor or tensor shapes do not match:",t.shape,o.shape),0;if(t.shape[0]!==1||o.shape[0]!==1||t.shape[3]!==3||o.shape[3]!==3)return e.debug||p("input tensors must be of shape [1, height, width, 3]:",t.shape,o.shape),0;n.input1=O.clone(t),n.input2=t.shape[1]!==o.shape[1]||t.shape[2]!==o.shape[2]?O.image.resizeBilinear(o,[t.shape[1],t.shape[2]]):O.clone(o),n.diff=O.sub(n.input1,n.input2),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return O.dispose([n.input1,n.input2,n.diff,n.squared,n.sum]),A}var B5=class{constructor(){T(this,"browser");T(this,"node");T(this,"worker");T(this,"platform","");T(this,"agent","");T(this,"backends",[]);T(this,"initial");T(this,"filter");T(this,"tfjs");T(this,"offscreen");T(this,"perfadd",!1);T(this,"tensorflow",{version:void 0,gpu:void 0});T(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});T(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});T(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});T(this,"cpu",{model:void 0,flags:[]});T(this,"kernels",[]);T(this,"Canvas");T(this,"Image");T(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:x0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let o=t[0].match(/\(([^()]+)\)/g);this.platform=o&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(x0.engine().registryFactory),this.tensorflow={version:x0.backend().binding?x0.backend().binding.TF_Version:void 0,gpu:x0.backend().binding?x0.backend().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&x0.getBackend()==="wasm"&&(this.wasm.simd=x0.env().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=x0.env().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=T0(100,100),o=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof o!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(x0.getBackend()==="webgl"||x0.getBackend()==="humangl")){let n=x0.backend().gpgpu!=="undefined"?await x0.backend().getGPGPUContext().gl:null;n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.renderer=n.getParameter(n.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(n){this.webgpu.supported=!1}try{this.kernels=x0.getKernelsForBackend(x0.getBackend()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},R=new B5;var C5=Z(D());var H5={};be(H5,{age:()=>qn,"anti-spoofing":()=>vr,antispoof:()=>jn,blazeface:()=>On,"blazeface-back":()=>Un,"blazeface-front":()=>Yn,"blazepose-detect":()=>Pr,"blazepose-detector2d":()=>Kn,"blazepose-detector3d":()=>Jn,"blazepose-full":()=>Qn,"blazepose-heavy":()=>_n,"blazepose-lite":()=>$n,default:()=>Lr,efficientpose:()=>er,"efficientpose-i-lite":()=>Rr,"efficientpose-ii-lite":()=>Tr,"efficientpose-iv":()=>wr,emotion:()=>Nn,faceboxes:()=>tr,facemesh:()=>Ln,"facemesh-attention":()=>nr,"facemesh-attention-alt":()=>or,"facemesh-detection-full":()=>rr,"facemesh-detection-short":()=>Ar,"facemesh-orig":()=>sr,faceres:()=>Wn,"faceres-deep":()=>ar,gear:()=>ir,gender:()=>yr,"gender-ssrnet-imdb":()=>lr,handdetect:()=>cr,"handlandmark-full":()=>Fn,"handlandmark-lite":()=>xr,"handlandmark-sparse":()=>dr,handskeleton:()=>fr,handtrack:()=>Gn,"insightface-efficientnet-b0":()=>kr,"insightface-ghostnet-strides1":()=>Er,"insightface-ghostnet-strides2":()=>zr,"insightface-mobilenet-emore":()=>Sr,"insightface-mobilenet-swish":()=>Cr,iris:()=>Bn,liveness:()=>Hn,"mb3-centernet":()=>Vn,meet:()=>mr,mobileface:()=>pr,mobilefacenet:()=>ur,models:()=>Dn,"movenet-lightning":()=>Zn,"movenet-multipose":()=>hr,"movenet-thunder":()=>br,nanodet:()=>gr,"nanodet-e":()=>Ir,"nanodet-g":()=>jr,"nanodet-m":()=>Or,"nanodet-t":()=>Nr,posenet:()=>Mr,selfie:()=>Xn});var jn=853098,On=538928,Nn=820516,Ln=1477958,Wn=6978814,Fn=5431368,Gn=2964837,Bn=2599092,Hn=592976,Vn=4030290,Dn=0,Zn=4650216,Xn=212886,qn=161240,Un=538928,Yn=402048,Kn=7499400,Jn=5928856,Qn=6338290,_n=27501554,$n=2725490,er=5651240,tr=2013002,or=2387598,nr=2382414,rr=1026192,Ar=201268,sr=2955780,ar=13957620,ir=1498916,lr=161236,yr=201808,cr=3515612,xr=2023432,dr=5286322,fr=5502280,mr=372228,pr=2183192,ur=5171976,hr=9448838,br=12477112,gr=7574558,Mr=5032780,Pr=5928804,vr=853098,Rr=2269064,Tr=5651240,wr=25643252,kr=13013224,Er=8093408,zr=8049584,Sr=6938536,Cr=12168584,Ir=12319156,jr=7574558,Or=1887474,Nr=5294216,Lr={antispoof:jn,blazeface:On,emotion:Nn,facemesh:Ln,faceres:Wn,"handlandmark-full":Fn,handtrack:Gn,iris:Bn,liveness:Hn,"mb3-centernet":Vn,models:Dn,"movenet-lightning":Zn,selfie:Xn,age:qn,"blazeface-back":Un,"blazeface-front":Yn,"blazepose-detector2d":Kn,"blazepose-detector3d":Jn,"blazepose-full":Qn,"blazepose-heavy":_n,"blazepose-lite":$n,efficientpose:er,faceboxes:tr,"facemesh-attention-alt":or,"facemesh-attention":nr,"facemesh-detection-full":rr,"facemesh-detection-short":Ar,"facemesh-orig":sr,"faceres-deep":ar,gear:ir,"gender-ssrnet-imdb":lr,gender:yr,handdetect:cr,"handlandmark-lite":xr,"handlandmark-sparse":dr,handskeleton:fr,meet:mr,mobileface:pr,mobilefacenet:ur,"movenet-multipose":hr,"movenet-thunder":br,nanodet:gr,posenet:Mr,"blazepose-detect":Pr,"anti-spoofing":vr,"efficientpose-i-lite":Rr,"efficientpose-ii-lite":Tr,"efficientpose-iv":wr,"insightface-efficientnet-b0":kr,"insightface-ghostnet-strides1":Er,"insightface-ghostnet-strides2":zr,"insightface-mobilenet-emore":Sr,"insightface-mobilenet-swish":Cr,"nanodet-e":Ir,"nanodet-g":jr,"nanodet-m":Or,"nanodet-t":Nr};var p5={};be(p5,{Models:()=>O2,getModelStats:()=>et,load:()=>tt,reset:()=>m5,validate:()=>S5,validateModel:()=>c2});var V2=Z(D());var q0,V5=[],Wr=["white","black","asian","indian","other"],Fr=[15,23,28,35.5,45.5,55.5,65],Nt=0,Lt=0,D5=Number.MAX_SAFE_INTEGER;async function Wt(e){var t;return R.initial&&(q0=null),q0?e.debug&&p("cached model:",q0.modelUrl):q0=await W((t=e.face.gear)==null?void 0:t.modelPath),q0}async function Z5(e,t,o,n){var s,a;if(!q0)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=D5<(((s=t.face.gear)==null?void 0:s.skipFrames)||0),A=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>b()-Lt;return t.skipAllowed&&A&&r&&Nt===n&&V5[o]?(D5++,V5[o]):(D5=0,new Promise(async l=>{var M,g;if(!(q0!=null&&q0.inputs[0].shape))return;let y={},x=[[0,.1,.9,.9]];y.resize=V2.image.cropAndResize(e,x,[0],[q0.inputs[0].shape[2],q0.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([y.age,y.gender,y.race]=q0.execute(y.resize,["age_output","gender_output","race_output"]));let d=await y.gender.data();i.gender=d[0]>d[1]?"male":"female",i.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let c=await y.race.data();for(let f=0;f(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&i.race.push({score:Math.round(100*c[f])/100,race:Wr[f]});i.race.sort((f,u)=>u.score-f.score);let m=Array.from(await y.age.data()).map((f,u)=>[Fr[u],f]).sort((f,u)=>u[1]-f[1]),P=m[0][0];for(let f=1;fV2.dispose(y[f])),V5[o]=i,Nt=n,Lt=b(),l(i)}))}var Qe=Z(D());var Me=Z(D()),B={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Gt(){B.tf255=Me.scalar(255,"float32"),B.tf1=Me.scalar(1,"float32"),B.tf2=Me.scalar(2,"float32"),B.tf05=Me.scalar(.5,"float32"),B.tf127=Me.scalar(127.5,"float32"),B.rgb=Me.tensor1d([.2989,.587,.114],"float32")}var C0,D2=[],Bt=0,Ht=0,X5=Number.MAX_SAFE_INTEGER;async function Vt(e){return R.initial&&(C0=null),C0?e.debug&&p("cached model:",C0.modelUrl):C0=await W(e.face.ssrnet.modelPathAge),C0}async function q5(e,t,o,n){var s,a,l,y;if(!C0)return{age:0};let r=X5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Ht;return t.skipAllowed&&r&&A&&Bt===n&&((l=D2[o])==null?void 0:l.age)&&((y=D2[o])==null?void 0:y.age)>0?(X5++,D2[o]):(X5=0,new Promise(async x=>{if(!(C0!=null&&C0.inputs)||!C0.inputs[0]||!C0.inputs[0].shape)return;let i={};i.resize=Qe.image.resizeBilinear(e,[C0.inputs[0].shape[2],C0.inputs[0].shape[1]],!1),i.enhance=Qe.mul(i.resize,B.tf255);let d={age:0};if(t.face.ssrnet.enabled&&(i.age=C0.execute(i.enhance)),i.age){let c=await i.age.data();d.age=Math.trunc(10*c[0])/10}Object.keys(i).forEach(c=>Qe.dispose(i[c])),D2[o]=d,Bt=n,Ht=b(),x(d)}))}var h0=Z(D());var U0,Z2=[],Zt=0,Xt=0,U5=Number.MAX_SAFE_INTEGER,Y5=[.2989,.587,.114];async function qt(e){return R.initial&&(U0=null),U0?e.debug&&p("cached model:",U0.modelUrl):U0=await W(e.face.ssrnet.modelPathGender),U0}async function K5(e,t,o,n){var s,a,l,y;if(!U0)return{gender:"unknown",genderScore:0};let r=U5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Xt;return t.skipAllowed&&r&&A&&Zt===n&&((l=Z2[o])==null?void 0:l.gender)&&((y=Z2[o])==null?void 0:y.genderScore)>0?(U5++,Z2[o]):(U5=0,new Promise(async x=>{if(!(U0!=null&&U0.inputs[0].shape))return;let i={};i.resize=h0.image.resizeBilinear(e,[U0.inputs[0].shape[2],U0.inputs[0].shape[1]],!1),i.enhance=h0.tidy(()=>{let[h,m,P]=h0.split(i.resize,3,3),M=h0.mul(h,Y5[0]),g=h0.mul(m,Y5[1]),f=h0.mul(P,Y5[2]),u=h0.addN([M,g,f]);return h0.mul(h0.sub(u,B.tf05),2)});let d={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(i.gender=U0.execute(i.enhance));let c=await i.gender.data();d.gender=c[0]>c[1]?"female":"male",d.genderScore=c[0]>c[1]?Math.trunc(100*c[0])/100:Math.trunc(100*c[1])/100,Object.keys(i).forEach(h=>h0.dispose(i[h])),Z2[o]=d,Zt=n,Xt=b(),x(d)}))}var q2=Z(D());var b0,X2=[],J5=Number.MAX_SAFE_INTEGER,Yt=0,Kt=0;async function Jt(e){var t;return R.initial&&(b0=null),b0?e.debug&&p("cached model:",b0.modelUrl):b0=await W((t=e.face.antispoof)==null?void 0:t.modelPath),b0}async function Q5(e,t,o,n){var s,a;if(!b0)return 0;let r=(((s=t.face.antispoof)==null?void 0:s.skipTime)||0)>b()-Kt,A=J5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&Yt===n&&X2[o]?(J5++,X2[o]):(J5=0,new Promise(async l=>{let y=q2.image.resizeBilinear(e,[b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[2]:0,b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[1]:0],!1),x=b0==null?void 0:b0.execute(y),i=(await x.data())[0];X2[o]=Math.round(100*i)/100,Yt=n,Kt=b(),q2.dispose([y,x]),l(X2[o])}))}var L=Z(D());var ye=Z(D());var Y0={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},_5={count:468,mouth:13,symmetryLine:[13,Y0.midwayBetweenEyes[0]]},Le={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},$5=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],w2=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],We=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var Br=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],Hr=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],Vr=[33,133,362,263,1,78,308],s4=Br.map(e=>w2[e]),a4=Hr.map(e=>w2[e]),i4=Vr.map(e=>w2[e]);function Pe(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var Dr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Zr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Xr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],qr=[[474,475],[475,476],[476,477],[477,474]],Ur=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Yr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Kr=[[469,470],[470,471],[471,472],[472,469]],Jr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],l4={lips:Pe(Dr),leftEye:Pe(Zr),leftEyebrow:Pe(Xr),leftIris:Pe(qr),rightEye:Pe(Ur),rightEyebrow:Pe(Yr),rightIris:Pe(Kr),faceOval:Pe(Jr)};var _e=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],U2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],Y2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],K2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],e3=(e,t)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:o,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},t1=(e,t,o)=>{let n=t.shape[1],r=t.shape[2],A=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],s=ye.image.cropAndResize(t,[A],[0],o),a=ye.div(s,B.tf255);return ye.dispose(s),a},J2=(e,t)=>{let o=U2(e),n=_e(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[o[0]-r[0],o[1]-r[1]],endPoint:[o[0]+r[0],o[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},Q2=e=>{let t=U2(e),o=_e(e),n=Math.max(...o)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},t3=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...o)],endPoint:[Math.max(...t),Math.max(...o)],landmarks:e}},o1=[[1,0,0],[0,1,0],[0,0,1]],Qr=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),_r=(e,t)=>Qr(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var _t=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Fe=(e,t)=>{let o=0;for(let n=0;n{let o=[];for(let n=0;n{let o=[],n=e.length;for(let r=0;r{let o=Math.cos(e),n=Math.sin(e),r=[[o,-n,0],[n,o,0],[0,0,1]],A=_t(t[0],t[1]),s=$t(A,r),a=_t(-t[0],-t[1]);return $t(s,a)},eA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],o=[e[0][2],e[1][2]],n=[-Fe(t[0],o),-Fe(t[1],o)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},tA=(e,t)=>[Fe(e,t[0]),Fe(e,t[1])];function n3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},o=[];for(let n=0;n[A[0]/r*(c[0]-r/2),A[1]/r*(c[1]-r/2),c[2]||0]),a=o&&o!==0&&Math.abs(o)>.2,l=a?o3(o,[0,0]):o1,y=a?s.map(c=>[...tA(c,l),c[2]]):s,x=a?eA(n):o1,i=U2(t),d=[Fe(i,x[0]),Fe(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2]||0)])}function A3(e,t,o,n){let r=t.landmarks.length>=_5.count?_5.symmetryLine:Le.symmetryLine,A=0,s=o1,a;if(e&&R.kernels.includes("rotatewithoffset"))if(A=_r(t.landmarks[r[0]],t.landmarks[r[1]]),A&&A!==0&&Math.abs(A)>.2){let y=U2(t),x=[y[0]/o.shape[2],y[1]/o.shape[1]],i=ye.image.rotateWithOffset(o,A,0,x);s=o3(-A,y),a=t1(t,i,[n,n]),ye.dispose(i)}else a=t1(t,o,[n,n]);else a=t1(t,o,[n,n]);return[A,s,a]}var oA=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...o)+(Math.max(...o)-Math.min(...o))/2]},s3=(e,t)=>{let o=oA(e),n=_e(t);return{startPoint:[o[0]-n[0]/2,o[1]-n[1]/2],endPoint:[o[0]+n[0]/2,o[1]+n[1]/2]}};var a3=6,nA=1.4,Ae,i3=null,ve=0,k2=null,$e=()=>ve;async function l3(e){var t;return R.initial&&(Ae=null),Ae?e.debug&&p("cached model:",Ae.modelUrl):Ae=await W((t=e.face.detector)==null?void 0:t.modelPath),ve=Ae.inputs[0].shape?Ae.inputs[0].shape[2]:0,k2=L.scalar(ve,"int32"),i3=L.tensor2d(n3(ve)),Ae}function rA(e){let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,i3),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,k2),t.centersNormalized=L.div(t.centers,k2),t.halfBoxSize=L.div(t.boxSizesNormalized,B.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,k2),t.endNormalized=L.mul(t.ends,k2);let o=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>L.dispose(t[n])),o}async function y3(e,t){var a,l,y,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let o={};o.resized=L.image.resizeBilinear(e,[ve,ve]),o.div=L.div(o.resized,B.tf127),o.normalized=L.sub(o.div,B.tf05);let n=Ae==null?void 0:Ae.execute(o.normalized);if(Array.isArray(n)&&n.length>2){let i=n.sort((d,c)=>d.size-c.size);o.concat384=L.concat([i[0],i[2]],2),o.concat512=L.concat([i[1],i[3]],2),o.concat=L.concat([o.concat512,o.concat384],1),o.batch=L.squeeze(o.concat,0)}else Array.isArray(n)?o.batch=L.squeeze(n[0]):o.batch=L.squeeze(n);L.dispose(n),o.boxes=rA(o.batch),o.logits=L.slice(o.batch,[0,0],[-1,1]),o.sigmoid=L.sigmoid(o.logits),o.scores=L.squeeze(o.sigmoid),o.nms=await L.image.nonMaxSuppressionAsync(o.boxes,o.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((y=t.face.detector)==null?void 0:y.minConfidence)||0);let r=await o.nms.array(),A=[],s=await o.scores.data();for(let i=0;i(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let c={};c.bbox=L.slice(o.boxes,[r[i],0],[1,-1]),c.slice=L.slice(o.batch,[r[i],a3-1],[1,-1]),c.squeeze=L.squeeze(c.slice),c.landmarks=L.reshape(c.squeeze,[a3,-1]);let h=await c.bbox.data(),m={startPoint:[h[0],h[1]],endPoint:[h[2],h[3]],landmarks:await c.landmarks.array(),confidence:d},P=e3(m,[(e.shape[2]||0)/ve,(e.shape[1]||0)/ve]),M=J2(P,t.face.scale||nA),g=Q2(M);A.push(g),Object.keys(c).forEach(f=>L.dispose(c[f]))}}return Object.keys(o).forEach(i=>L.dispose(o[i])),A}var O0=Z(D());var _2={};be(_2,{connected:()=>A1,kpt:()=>r1});var r1=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],A1={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var I0=Z(D()),x3=224,AA,sA=5,$2=[8,16,32,32,32];async function d3(){let e=[],t=0;for(;to.x)),y:I0.tensor1d(e.map(o=>o.y))}}function ce(e,t=[1,1]){let o=[e.map(a=>a[0]),e.map(a=>a[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[n[0],n[1],r[0]-n[0],r[1]-n[1]],s=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:s}}function f3(e,t=[1,1]){let o=[e.map(y=>y[0]),e.map(y=>y[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[(n[0]+r[0])/2,(n[1]+r[1])/2],s=Math.max(A[0]-n[0],A[1]-n[1],-A[0]+r[0],-A[1]+r[1]),a=[Math.trunc(A[0]-s),Math.trunc(A[1]-s),Math.trunc(2*s),Math.trunc(2*s)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function e5(e,t){let o=[e[2]*t,e[3]*t];return[e[0]-(o[0]-e[2])/2,e[1]-(o[1]-e[3])/2,o[0],o[1]]}var u3={initial:!0},j0={detector:null,landmarks:null},e2={detector:[224,224],landmarks:[256,256]},s1=Number.MAX_SAFE_INTEGER,iA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},o5=null,E2,Re=[[0,0],[0,0],[0,0],[0,0]],m3=0,p3=e=>1-1/(1+Math.exp(e));async function h3(e){if(u3.initial&&(j0.detector=null),!j0.detector&&e.body.detector&&e.body.detector.modelPath){j0.detector=await W(e.body.detector.modelPath);let t=Object.values(j0.detector.modelSignature.inputs);e2.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&j0.detector&&p("cached model:",j0.detector.modelUrl);return await d3(),j0.detector}async function b3(e){if(u3.initial&&(j0.landmarks=null),j0.landmarks)e.debug&&p("cached model:",j0.landmarks.modelUrl);else{j0.landmarks=await W(e.body.modelPath);let t=Object.values(j0.landmarks.modelSignature.inputs);e2.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return j0.landmarks}async function lA(e,t){let o={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let n;if(E2&&(o.cropped=O0.image.cropAndResize(e,[E2],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],A=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Re=[[0,0],r,A,[0,0]],o.pad=O0.pad(o.cropped||e,Re),o.resize=O0.image.resizeBilinear(o.pad,[t,t]),n=O0.div(o.resize,B.tf255)}else e.shape[1]!==t?(o.resize=O0.image.resizeBilinear(o.cropped||e,[t,t]),n=O0.div(o.resize,B.tf255)):n=O0.div(o.cropped||e,B.tf255);return Object.keys(o).forEach(r=>O0.dispose(o[r])),n}function yA(e,t){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Re[2][0]+Re[2][1])/t[0]-Re[2][0]),Math.trunc(o.position[1]*(t[1]+Re[1][0]+Re[1][1])/t[1]-Re[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(E2)for(let o of e)o.positionRaw=[o.positionRaw[0]+E2[1],o.positionRaw[1]+E2[0],o.positionRaw[2]],o.position=[Math.trunc(o.positionRaw[0]*t[0]),Math.trunc(o.positionRaw[1]*t[1]),o.positionRaw[2]];return e}async function cA(e){let t=e.find(a=>a.part==="leftPalm"),o=e.find(a=>a.part==="leftWrist"),n=e.find(a=>a.part==="leftIndex");t.position[2]=((o.position[2]||0)+(n.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),A=e.find(a=>a.part==="rightWrist"),s=e.find(a=>a.part==="rightIndex");r.position[2]=((A.position[2]||0)+(s.position[2]||0))/2}async function xA(e,t,o){var h;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=(h=j0.landmarks)==null?void 0:h.execute(e,iA.landmarks);let r=(await n.poseflag.data())[0],A=await n.ld.data(),s=await n.world.data();Object.keys(n).forEach(m=>O0.dispose(n[m]));let a=[],l=5;for(let m=0;mm.position),i=ce(x,[o[0],o[1]]),d={};for(let[m,P]of Object.entries(A1)){let M=[];for(let g=0;gS.part===P[g]),u=y.find(S=>S.part===P[g+1]);f&&u&&M.push([f.position,u.position])}d[m]=M}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:y,annotations:d}}async function a1(e,t){let o=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>b()-m3,r=s1<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&o5!==null)s1++;else{let A={};A.landmarks=await lA(e,256),o5=await xA(A.landmarks,t,o),Object.keys(A).forEach(s=>O0.dispose(A[s])),m3=b(),s1=0}return o5?[o5]:[]}var w0=Z(D());var t2=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var xe,Ge=0,i1=[],M3=0,l1=Number.MAX_SAFE_INTEGER;async function P3(e){if(R.initial&&(xe=null),xe)e.debug&&p("cached model:",xe.modelUrl);else{xe=await W(e.object.modelPath);let t=Object.values(xe.modelSignature.inputs);Ge=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return xe}async function dA(e,t,o){if(!e)return[];let n={},r=[],A=await e.array();n.squeeze=w0.squeeze(e);let s=w0.split(n.squeeze,6,1);n.stack=w0.stack([s[1],s[0],s[3],s[2]],1),n.boxes=w0.squeeze(n.stack),n.scores=w0.squeeze(s[4]),n.classes=w0.squeeze(s[5]),w0.dispose([e,...s]),n.nms=await w0.image.nonMaxSuppressionAsync(n.boxes,n.scores,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence||0);let a=await n.nms.data(),l=0;for(let y of Array.from(a)){let x=Math.trunc(100*A[0][y][4])/100,i=A[0][y][5],d=t2[i].label,[c,h]=[A[0][y][0]/Ge,A[0][y][1]/Ge],m=[c,h,A[0][y][2]/Ge-c,A[0][y][3]/Ge-h],P=[Math.trunc(m[0]*t[0]),Math.trunc(m[1]*t[1]),Math.trunc(m[2]*t[0]),Math.trunc(m[3]*t[1])];r.push({id:l++,score:x,class:i,label:d,box:P,boxRaw:m})}return Object.keys(n).forEach(y=>w0.dispose(n[y])),r}async function y1(e,t){let o=(t.object.skipTime||0)>b()-M3,n=l1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&i1.length>0?(l1++,i1):(l1=0,new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=w0.image.resizeBilinear(e,[Ge,Ge]),a=t.object.enabled?xe==null?void 0:xe.execute(s,["tower_0/detections"]):null;M3=b(),w0.dispose(s);let l=await dA(a,A,t);i1=l,r(l)}))}var J=Z(D());var n5={};be(n5,{connected:()=>x1,kpt:()=>c1});var c1=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],x1={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var g0,R3=0,k0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},d1=Number.MAX_SAFE_INTEGER;async function T3(e){return R.initial&&(g0=null),g0?e.debug&&p("cached model:",g0.modelUrl):g0=await W(e.body.modelPath),g0}async function fA(e,t){let[o,n]=e.shape,r=J.reshape(e,[n*o]),A=J.max(r,0),s=(await A.data())[0];if(s>t){let a=J.argMax(r,0),l=J.mod(a,o),y=(await l.data())[0],x=J.div(a,o),i=(await x.data())[0];return J.dispose([r,A,a,l,x]),[y,i,s]}else return J.dispose([r,A]),[0,0,s]}async function f1(e,t){let o=(t.body.skipTime||0)>b()-R3,n=d1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n&&Object.keys(k0.keypoints).length>0?(d1++,[k0]):(d1=0,new Promise(async r=>{var i;let A=J.tidy(()=>{if(!(g0!=null&&g0.inputs[0].shape))return null;let d=J.image.resizeBilinear(e,[g0.inputs[0].shape[2],g0.inputs[0].shape[1]],!1),c=J.mul(d,B.tf2);return J.sub(c,B.tf1)}),s;if(t.body.enabled&&(s=g0==null?void 0:g0.execute(A)),R3=b(),J.dispose(A),s){k0.keypoints.length=0;let d=J.squeeze(s);J.dispose(s);let c=J.unstack(d,2);J.dispose(d);for(let h=0;h(((i=t.body)==null?void 0:i.minConfidence)||0)&&k0.keypoints.push({score:Math.round(100*M)/100,part:c1[h],positionRaw:[m/g0.inputs[0].shape[2],P/g0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/g0.inputs[0].shape[2]),Math.round(e.shape[1]*P/g0.inputs[0].shape[1])]})}c.forEach(h=>J.dispose(h))}k0.score=k0.keypoints.reduce((d,c)=>c.score>d?c.score:d,0);let a=k0.keypoints.map(d=>d.position[0]),l=k0.keypoints.map(d=>d.position[1]);k0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let y=k0.keypoints.map(d=>d.positionRaw[0]),x=k0.keypoints.map(d=>d.positionRaw[1]);k0.boxRaw=[Math.min(...y),Math.min(...x),Math.max(...y)-Math.min(...y),Math.max(...x)-Math.min(...x)];for(let[d,c]of Object.entries(x1)){let h=[];for(let m=0;mg.part===c[m]),M=k0.keypoints.find(g=>g.part===c[m+1]);P&&M&&P.score>(t.body.minConfidence||0)&&M.score>(t.body.minConfidence||0)&&h.push([P.position,M.position])}k0.annotations[d]=h}r([k0])}))}var J0=Z(D());var mA=["angry","disgust","fear","happy","sad","surprise","neutral"],D0,r5=[],k3=0,E3=0,m1=Number.MAX_SAFE_INTEGER;async function z3(e){var t;return R.initial&&(D0=null),D0?e.debug&&p("cached model:",D0.modelUrl):D0=await W((t=e.face.emotion)==null?void 0:t.modelPath),D0}async function p1(e,t,o,n){var s,a;if(!D0)return[];let r=m1<(((s=t.face.emotion)==null?void 0:s.skipFrames)||0),A=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>b()-E3;return t.skipAllowed&&A&&r&&k3===n&&r5[o]&&r5[o].length>0?(m1++,r5[o]):(m1=0,new Promise(async l=>{var x,i;let y=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},c=D0!=null&&D0.inputs[0].shape?D0.inputs[0].shape[2]:0;d.resize=J0.image.resizeBilinear(e,[c,c],!1),d.channels=J0.mul(d.resize,B.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,B.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,B.tf2),d.emotion=D0==null?void 0:D0.execute(d.grayscaleMul),E3=b();let h=await d.emotion.data();for(let m=0;m(((i=t.face.emotion)==null?void 0:i.minConfidence)||0)&&y.push({score:Math.min(.99,Math.trunc(100*h[m])/100),emotion:mA[m]});y.sort((m,P)=>P.score-m.score),Object.keys(d).forEach(m=>J0.dispose(d[m]))}r5[o]=y,k3=n,l(y)}))}var A5=Z(D());var N0,u1=[],C3=0,I3=0,j3=Number.MAX_SAFE_INTEGER;async function O3(e){return R.initial&&(N0=null),N0?e.debug&&p("cached model:",N0.modelUrl):N0=await W(e.face.mobilefacenet.modelPath),N0}async function h1(e,t,o,n){var s,a;if(!N0)return[];let r=j3<(((s=t.face.mobilefacenet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>b()-I3;return t.skipAllowed&&A&&r&&C3===n&&u1[o]?(j3++,u1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.mobilefacenet)==null?void 0:x.enabled)&&(N0==null?void 0:N0.inputs[0].shape)){let i={};i.crop=A5.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1),i.data=N0==null?void 0:N0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>A5.dispose(i[c]))}u1[o]=y,C3=n,I3=b(),l(y)})}var s5=Z(D());var L0,b1=[],L3=0,W3=0,F3=Number.MAX_SAFE_INTEGER;async function G3(e){return R.initial&&(L0=null),L0?e.debug&&p("cached model:",L0.modelUrl):L0=await W(e.face.insightface.modelPath),L0}async function g1(e,t,o,n){var s,a;if(!L0)return[];let r=F3<(((s=t.face.insightface)==null?void 0:s.skipFrames)||0),A=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>b()-W3;return t.skipAllowed&&A&&r&&L3===n&&b1[o]?(F3++,b1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.insightface)==null?void 0:x.enabled)&&(L0==null?void 0:L0.inputs[0].shape)){let i={};i.crop=s5.image.resizeBilinear(e,[L0.inputs[0].shape[2],L0.inputs[0].shape[1]],!1),i.data=L0==null?void 0:L0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>s5.dispose(i[c]))}b1[o]=y,L3=n,W3=b(),l(y)})}var ke=Z(D());var Q0=Z(D());var de,Te=0,pA=2.3,M1=Y0.leftEyeLower0,P1=Y0.rightEyeLower0,o2={leftBounds:[M1[0],M1[M1.length-1]],rightBounds:[P1[0],P1[P1.length-1]]},n2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function Z3(e){var t;return R.initial&&(de=null),de?e.debug&&p("cached model:",de.modelUrl):de=await W((t=e.face.iris)==null?void 0:t.modelPath),Te=de.inputs[0].shape?de.inputs[0].shape[2]:0,Te===-1&&(Te=64),de}function a5(e,t,o,n){for(let r=0;r<$5.length;r++){let{key:A,indices:s}=$5[r],a=Y0[`${o}${A}`];if(!n||n.includes(A))for(let l=0;l{let t=e[o2.leftBounds[0]][2],o=e[o2.rightBounds[0]][2];return t-o},H3=(e,t,o,n,r,A=!1)=>{let s=Q2(J2(t3([e[o],e[n]]),pA)),a=_e(s),l=Q0.image.cropAndResize(t,[[s.startPoint[1]/r,s.startPoint[0]/r,s.endPoint[1]/r,s.endPoint[0]/r]],[0],[Te,Te]);if(A&&R.kernels.includes("flipleftright")){let y=Q0.image.flipLeftRight(l);Q0.dispose(l),l=y}return{box:s,boxSize:a,crop:l}},V3=(e,t,o,n=!1)=>{let r=[];for(let A=0;A{let n=e[Y0[`${o}EyeUpper0`][n2.upperCenter]][2],r=e[Y0[`${o}EyeLower0`][n2.lowerCenter]][2],A=(n+r)/2;return t.map((s,a)=>{let l=A;return a===2?l=n:a===4&&(l=r),[s[0],s[1],l]})};async function X3(e,t,o,n){if(!de)return o.debug&&p("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:A,crop:s}=H3(e,t,o2.leftBounds[0],o2.leftBounds[1],n,!0),{box:a,boxSize:l,crop:y}=H3(e,t,o2.rightBounds[0],o2.rightBounds[1],n,!0),x=Q0.concat([s,y]);Q0.dispose(s),Q0.dispose(y);let i=de.execute(x);Q0.dispose(x);let d=await i.data();Q0.dispose(i);let c=d.slice(0,n2.numCoordinates*3),{rawCoords:h,iris:m}=V3(c,r,A,!0),P=d.slice(n2.numCoordinates*3),{rawCoords:M,iris:g}=V3(P,a,l,!1),f=uA(e);Math.abs(f)<30?(a5(e,h,"left",null),a5(e,M,"right",null)):f<1?a5(e,h,"left",["EyeUpper0","EyeLower0"]):a5(e,M,"right",["EyeUpper0","EyeLower0"]);let u=D3(e,m,"left"),S=D3(e,g,"right");return e.concat(u).concat(S)}var hA=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],bA=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],gA=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],MA=[[474,475],[475,476],[476,477],[477,474]],PA=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],vA=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],RA=[[469,470],[470,471],[471,472],[472,469]],TA=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function we(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var wA={lips:we(hA),leftEye:we(bA),leftEyebrow:we(gA),leftIris:we(MA),rightEye:we(PA),rightEyebrow:we(vA),rightIris:we(RA),faceOval:we(TA)},kA=Object.entries(wA).map(([e,t])=>t.map(o=>[o,e])).flat(),H4=new Map(kA),z2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Be=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],He=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function Y3(e,t){let o={lips:await t.filter(A=>A.size===160)[0].data(),irisL:await t.filter(A=>A.size===10)[0].data(),eyeL:await t.filter(A=>A.size===142)[0].data(),irisR:await t.filter(A=>A.size===10)[1].data(),eyeR:await t.filter(A=>A.size===142)[1].data()},n=Be.reduce((A,s)=>A+=e[s][2],0)/Be.length;for(let A=0;AA+=e[s][2],0)/He.length;for(let A=0;Ab()-se.timestamp,n=se.skipped<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);!t.skipAllowed||!o||!n||se.boxes.length===0?(se.boxes=await y3(e,t),se.timestamp=b(),se.skipped=0):se.skipped++;let r=[],A=[],s=0;for(let f=0;fG.shape[G.shape.length-1]===1).data();if(w.faceScore=Math.round(100*X[0])/100,w.faceScore<(((h=t.face.detector)==null?void 0:h.minConfidence)||1)){if(u.confidence=w.faceScore,(m=t.face.mesh)!=null&&m.keepInvalid){w.box=Y2(u,e),w.boxRaw=K2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(G=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*G[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*G[1]/$e()]),w.meshRaw=w.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/Ve]);for(let G of Object.keys(Le))w.annotations[G]=[w.mesh[Le[G]]]}}else{let G=E.find(y0=>y0.shape[y0.shape.length-1]===1404),o0=ke.reshape(G,[-1,3]),_=await o0.array();ke.dispose(o0),(P=t.face.attention)!=null&&P.enabled?_=await Y3(_,E):(M=t.face.iris)!=null&&M.enabled&&(_=await X3(_,w.tensor,t,Ve)),w.mesh=r3(_,u,S,N,Ve),w.meshRaw=w.mesh.map(y0=>[y0[0]/(e.shape[2]||0),y0[1]/(e.shape[1]||0),(y0[2]||0)/Ve]);for(let y0 of Object.keys(Y0))w.annotations[y0]=Y0[y0].map(V0=>w.mesh[V0]);w.score=w.faceScore;let z={...s3(w.mesh,u),confidence:u.confidence,landmarks:u.landmarks};w.box=Y2(z,e),w.boxRaw=K2(z,e),A.push(z)}ke.dispose(E)}else{w.box=Y2(u,e),w.boxRaw=K2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(E=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*E[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*E[1]/$e()]),w.meshRaw=w.mesh.map(E=>[E[0]/(e.shape[2]||0),E[1]/(e.shape[1]||0),(E[2]||0)/Ve]);for(let E of Object.keys(Le))w.annotations[E]=[w.mesh[Le[E]]]}w.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(w):ke.dispose(w.tensor)}return se.boxes=A,r}async function J3(e){var t,o,n,r,A,s;return R.initial&&(M0=null),((o=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:o.enabled)&&(M0==null?void 0:M0.signature)&&Object.keys(((n=M0==null?void 0:M0.signature)==null?void 0:n.outputs)||{}).length<6&&(M0=null),M0?e.debug&&p("cached model:",M0.modelUrl):(r=e.face.attention)!=null&&r.enabled?M0=await W((A=e.face.attention)==null?void 0:A.modelPath):M0=await W((s=e.face.mesh)==null?void 0:s.modelPath),Ve=M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0}var Q3=We,_3=w2;var _0=Z(D());var W0,i5=[],$3=0,eo=0,R1=Number.MAX_SAFE_INTEGER;async function to(e){var t;return R.initial&&(W0=null),W0?e.debug&&p("cached model:",W0.modelUrl):W0=await W((t=e.face.description)==null?void 0:t.modelPath),W0}function T1(e){let t=e.image||e.tensor||e;if(!(W0!=null&&W0.inputs[0].shape))return t;let o=_0.image.resizeBilinear(t,[W0.inputs[0].shape[2],W0.inputs[0].shape[1]],!1),n=_0.mul(o,B.tf255);return _0.dispose(o),n}async function w1(e,t,o,n){var s,a,l,y;if(!W0)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=R1<(((s=t.face.description)==null?void 0:s.skipFrames)||0),A=(((a=t.face.description)==null?void 0:a.skipTime)||0)>b()-$3;return t.skipAllowed&&r&&A&&eo===n&&((l=i5[o])==null?void 0:l.age)&&((y=i5[o])==null?void 0:y.age)>0?(R1++,i5[o]):(R1=0,new Promise(async x=>{var d,c;let i={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((d=t.face.description)!=null&&d.enabled){let h=T1(e),m=W0==null?void 0:W0.execute(h);$3=b(),_0.dispose(h);let M=await(await m.find(H=>H.shape[1]===1)).data(),g=Math.trunc(200*Math.abs(M[0]-.5))/100;g>(((c=t.face.description)==null?void 0:c.minConfidence)||0)&&(i.gender=M[0]<=.5?"female":"male",i.genderScore=Math.min(.99,g));let f=_0.argMax(m.find(H=>H.shape[1]===100),1),u=(await f.data())[0];_0.dispose(f);let N=await m.find(H=>H.shape[1]===100).data();i.age=Math.round(N[u-1]>N[u+1]?10*u-100*N[u-1]:10*u+100*N[u+1])/10;let w=m.find(H=>H.shape[1]===1024),E=w?await w.data():[];i.descriptor=Array.from(E),m.forEach(H=>_0.dispose(H))}i5[o]=i,eo=n,x(i)}))}var F=Z(D());var ro=Z(D());function l5(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function S2(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function Ao(e,t,o){let n=t.shape[1],r=t.shape[2],A=[[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r]];return ro.image.cropAndResize(t,A,[0],o)}function so(e,t){let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(A=>[A[0]*t[0],A[1]*t[1]]);return{startPoint:o,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function y5(e,t=1.5){let o=S2(e),n=l5(e),r=[t*n[0]/2,t*n[1]/2],A=[o[0]-r[0],o[1]-r[1]],s=[o[0]+r[0],o[1]+r[1]];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function c5(e){let t=S2(e),o=l5(e),r=Math.max(...o)/2,A=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function zA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function ao(e,t){let o=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return zA(o)}var oo=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ee(e,t){let o=0;for(let n=0;n[o.x,o.y]),this.anchorsTensor=F.tensor2d(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=F.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=F.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let o={};o.boxOffsets=F.slice(t,[0,0],[-1,2]),o.boxSizes=F.slice(t,[0,2],[-1,2]),o.div=F.div(o.boxOffsets,this.inputSizeTensor),o.boxCenterPoints=F.add(o.div,this.anchorsTensor),o.halfBoxSizes=F.div(o.boxSizes,this.doubleInputSizeTensor),o.sub=F.sub(o.boxCenterPoints,o.halfBoxSizes),o.startPoints=F.mul(o.sub,this.inputSizeTensor),o.add=F.add(o.boxCenterPoints,o.halfBoxSizes),o.endPoints=F.mul(o.add,this.inputSizeTensor);let n=F.concat2d([o.startPoints,o.endPoints],1);return Object.keys(o).forEach(r=>F.dispose(o[r])),n}normalizeLandmarks(t,o){let n={};n.reshape=F.reshape(t,[-1,7,2]),n.div=F.div(n.reshape,this.inputSizeTensor),n.landmarks=F.add(n.div,this.anchors[o]);let r=F.mul(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(A=>F.dispose(n[A])),r}async predict(t,o){let n={};n.resize=F.image.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=F.div(n.resize,B.tf127),n.image=F.sub(n.div,B.tf1),n.batched=this.model.execute(n.image),n.predictions=F.squeeze(n.batched),n.slice=F.slice(n.predictions,[0,0],[-1,1]),n.sigmoid=F.sigmoid(n.slice),n.scores=F.squeeze(n.sigmoid);let r=await n.scores.data();n.boxes=F.slice(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await F.image.nonMaxSuppressionAsync(n.norm,n.scores,3*o.hand.maxDetected,o.hand.iouThreshold,o.hand.minConfidence);let A=await n.nms.array(),s=[];for(let a of A){let l={};l.box=F.slice(n.norm,[a,0],[1,-1]),l.slice=F.slice(n.predictions,[a,5],[1,14]),l.norm=this.normalizeLandmarks(l.slice,a),l.palmLandmarks=F.reshape(l.norm,[-1,2]);let y=await l.box.data(),x=y.slice(0,2),i=y.slice(2,4),d=await l.palmLandmarks.array(),c={startPoint:x,endPoint:i,palmLandmarks:d,confidence:r[a]},h=so(c,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);s.push(h),Object.keys(l).forEach(m=>F.dispose(l[m]))}return Object.keys(n).forEach(a=>F.dispose(n[a])),s}};var F0=Z(D());var jA=5,co=1.65,xo=[0,5,9,13,17,1,2],OA=0,NA=2,fo=0,d5=class{constructor(t,o){T(this,"handDetector");T(this,"handPoseModel");T(this,"inputSize");T(this,"storedBoxes");T(this,"skipped");T(this,"detectedHands");this.handDetector=t,this.handPoseModel=o,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let o=t.map(s=>s[0]),n=t.map(s=>s[1]),r=[Math.min(...o),Math.min(...n)],A=[Math.max(...o),Math.max(...n)];return{startPoint:r,endPoint:A}}getBoxForPalmLandmarks(t,o){let n=t.map(A=>z1([...A,1],o)),r=this.calculateLandmarksBoundingBox(n);return y5(c5(r),jA)}getBoxForHandLandmarks(t){let o=this.calculateLandmarksBoundingBox(t),n=y5(c5(o),co);n.palmLandmarks=[];for(let r=0;r[s[0]*(c[0]-this.inputSize/2),s[1]*(c[1]-this.inputSize/2),s[2]*c[2]]),l=E1(n,[0,0]),y=a.map(c=>[...z1(c,l),c[2]]),x=io(r),i=[...S2(o),1],d=[Ee(i,x[0]),Ee(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2])])}async estimateHands(t,o){let n=!1,r,A=(o.hand.skipTime||0)>b()-fo,s=this.skipped<(o.hand.skipFrames||0);o.skipAllowed&&A&&s&&(r=await this.handDetector.predict(t,o),this.skipped=0),o.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==o.hand.maxDetected||!o.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let a=[];for(let l=0;l=o.hand.minConfidence/4){let S=F0.reshape(f,[-1,3]),N=await S.array();F0.dispose(f),F0.dispose(S);let w=this.transformRawCoords(N,m,x,h),E=this.getBoxForHandLandmarks(w);this.storedBoxes[l]={...E,confidence:u};let H={landmarks:w,confidence:u,boxConfidence:y.confidence,fingerConfidence:u,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};a.push(H)}else this.storedBoxes[l]=null;F0.dispose(f)}else{let x=y5(c5(y),co),i={confidence:y.confidence,boxConfidence:y.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>o.hand.maxDetected&&(a.length=o.hand.maxDetected),a}};var E0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>E0.nameMapping[e],getPoints:e=>E0.pointsMapping[e]},Se={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Se.nameMapping[e]},n0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>n0.nameMapping[e]},ze=class{constructor(t){T(this,"name");T(this,"curls");T(this,"directions");T(this,"weights");T(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,o,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([o,n])}direction(t,o,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([o,n])}weight(t,o){this.weights[t]=o;let n=this.weights.reduce((r,A)=>r+A,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,o){let n=0;for(let r in t){let A=t[r],s=this.curls[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}for(let r in o){let A=o[r],s=this.directions[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:$0,index:fe,middle:me,ring:De,pinky:Ze}=E0,{none:ee,half:WA,full:te}=Se,{verticalUp:r2,verticalDown:os,horizontalLeft:S1,horizontalRight:FA,diagonalUpRight:GA,diagonalUpLeft:A2,diagonalDownRight:ns,diagonalDownLeft:rs}=n0,Ce=new ze("thumbs up");Ce.curl($0,ee,1);Ce.direction($0,r2,1);Ce.direction($0,A2,.25);Ce.direction($0,GA,.25);for(let e of[E0.index,E0.middle,E0.ring,E0.pinky])Ce.curl(e,te,1),Ce.direction(e,S1,1),Ce.direction(e,FA,1);var d0=new ze("victory");d0.curl($0,WA,.5);d0.curl($0,ee,.5);d0.direction($0,r2,1);d0.direction($0,A2,1);d0.curl(fe,ee,1);d0.direction(fe,r2,.75);d0.direction(fe,A2,1);d0.curl(me,ee,1);d0.direction(me,r2,1);d0.direction(me,A2,.75);d0.curl(De,te,1);d0.direction(De,r2,.2);d0.direction(De,A2,1);d0.direction(De,S1,.2);d0.curl(Ze,te,1);d0.direction(Ze,r2,.2);d0.direction(Ze,A2,1);d0.direction(Ze,S1,.2);d0.weight(fe,2);d0.weight(me,2);var Ie=new ze("point");Ie.curl($0,te,1);Ie.curl(fe,ee,.5);Ie.curl(me,te,.5);Ie.curl(De,te,.5);Ie.curl(Ze,te,.5);Ie.weight(fe,2);Ie.weight(me,2);var je=new ze("middle finger");je.curl($0,ee,1);je.curl(fe,te,.5);je.curl(me,te,.5);je.curl(De,te,.5);je.curl(Ze,te,.5);je.weight(fe,2);je.weight(me,2);var s2=new ze("open palm");s2.curl($0,ee,.75);s2.curl(fe,ee,.75);s2.curl(me,ee,.75);s2.curl(De,ee,.75);s2.curl(Ze,ee,.75);var mo=[Ce,d0,Ie,je,s2];var BA=.7,Xe={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function po(e,t,o,n){let r=(t-n)/(e-o),A=Math.atan(r)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function ho(e,t){if(!e||!t)return[0,0];let o=po(e[0],e[1],t[0],t[1]);if(e.length===2)return o;let n=po(e[1],e[2],t[1],t[2]);return[o,n]}function uo(e,t=1){let o=0,n=0,r=0;return e>=75&&e<=105?o=1*t:e>=25&&e<=155?n=1*t:r=1*t,[o,n,r]}function HA(e,t,o){let n=e[0]-t[0],r=e[0]-o[0],A=t[0]-o[0],s=e[1]-t[1],a=e[1]-o[1],l=t[1]-o[1],y=e[2]-t[2],x=e[2]-o[2],i=t[2]-o[2],d=Math.sqrt(n*n+s*s+y*y),c=Math.sqrt(r*r+a*a+x*x),h=Math.sqrt(A*A+l*l+i*i),m=(h*h+d*d-c*c)/(2*h*d);m>1?m=1:m<-1&&(m=-1);let P=Math.acos(m);P=57.2958*P%180;let M;return P>Xe.NO_CURL_START_LIMIT?M=Se.none:P>Xe.HALF_CURL_START_LIMIT?M=Se.half:M=Se.full,M}function bo(e,t,o,n){let r;return n===Math.abs(e)?e>0?r=n0.horizontalLeft:r=n0.horizontalRight:n===Math.abs(t)?t>0?r=n0.horizontalLeft:r=n0.horizontalRight:o>0?r=n0.horizontalLeft:r=n0.horizontalRight,r}function go(e,t,o,n){let r;return n===Math.abs(e)?e<0?r=n0.verticalDown:r=n0.verticalUp:n===Math.abs(t)?t<0?r=n0.verticalDown:r=n0.verticalUp:o<0?r=n0.verticalDown:r=n0.verticalUp,r}function VA(e,t,o,n,r,A,s,a){let l,y=go(e,t,o,n),x=bo(r,A,s,a);return y===n0.verticalUp?x===n0.horizontalLeft?l=n0.diagonalUpLeft:l=n0.diagonalUpRight:x===n0.horizontalLeft?l=n0.diagonalDownLeft:l=n0.diagonalDownRight,l}function DA(e,t,o,n){let r=e[0]-t[0],A=e[0]-o[0],s=t[0]-o[0],a=e[1]-t[1],l=e[1]-o[1],y=t[1]-o[1],x=Math.max(Math.abs(r),Math.abs(A),Math.abs(s)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(y)),d=0,c=0,h=0,m=i/(x+1e-5);m>1.5?d+=Xe.DISTANCE_VOTE_POWER:m>.66?c+=Xe.DISTANCE_VOTE_POWER:h+=Xe.DISTANCE_VOTE_POWER;let P=Math.sqrt(r*r+a*a),M=Math.sqrt(A*A+l*l),g=Math.sqrt(s*s+y*y),f=Math.max(P,M,g),u=e[0],S=e[1],N=o[0],w=o[1];f===P?(N=o[0],w=o[1]):f===g&&(u=t[0],S=t[1]);let X=ho([u,S],[N,w]),G=uo(X,Xe.TOTAL_ANGLE_VOTE_POWER);d+=G[0],c+=G[1],h+=G[2];for(let _ of n){let z=uo(_,Xe.SINGLE_ANGLE_VOTE_POWER);d+=z[0],c+=z[1],h+=z[2]}let o0;return d===Math.max(d,c,h)?o0=go(l,a,y,i):h===Math.max(c,h)?o0=bo(A,r,s,x):o0=VA(l,a,y,i,A,r,s,x),o0}function Mo(e){let t=[],o=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let A of E0.all){let s=E0.getPoints(A),a=[],l=[];for(let y of s){let x=e[y[0]],i=e[y[1]],d=ho(x,i),c=d[0],h=d[1];a.push(c),l.push(h)}t.push(a),o.push(l)}for(let A of E0.all){let s=A===E0.thumb?1:0,a=E0.getPoints(A),l=e[a[s][0]],y=e[a[s+1][1]],x=e[a[3][1]],i=HA(l,y,x),d=DA(l,y,x,t[A].slice(s));n[A]=i,r[A]=d}return{curls:n,directions:r}}function f5(e){if(!e||e.length===0)return null;let t=Mo(e),o={};for(let n of E0.all)o[E0.getName(n)]={curl:Se.getName(t.curls[n]),direction:n0.getName(t.directions[n])};return o}function Po(e){let t=[];if(!e||e.length===0)return t;let o=Mo(e);for(let n of mo){let r=n.matchAgainst(o.curls,o.directions);r>=BA&&t.push({name:n.name,confidence:r})}return t}var vo={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},a2,i2,Ro;async function I1(e,t){let o=await Ro.estimateHands(e,t);if(!o)return[];let n=[];for(let r=0;ro[r].landmarks[i]);let s=o[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(s&&s.length>0){for(let x of s)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=o[r].box?[Math.trunc(Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.max(0,o[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,o[r].box.bottomRight[0])-Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,o[r].box.bottomRight[1])-Math.max(0,o[r].box.topLeft[1]))]:[0,0,0,0],l=[o[r].box.topLeft[0]/(e.shape[2]||0),o[r].box.topLeft[1]/(e.shape[1]||0),(o[r].box.bottomRight[0]-o[r].box.topLeft[0])/(e.shape[2]||0),(o[r].box.bottomRight[1]-o[r].box.topLeft[1])/(e.shape[1]||0)];let y=f5(s);n.push({id:r,score:Math.round(100*o[r].confidence)/100,boxScore:Math.round(100*o[r].boxConfidence)/100,fingerScore:Math.round(100*o[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:s,annotations:A,landmarks:y})}return n}async function j1(e){var o,n;R.initial&&(a2=null,i2=null),!a2||!i2?[a2,i2]=await Promise.all([e.hand.enabled?W((o=e.hand.detector)==null?void 0:o.modelPath):null,e.hand.landmarks?W((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&p("cached model:",a2.modelUrl),e.debug&&p("cached model:",i2.modelUrl));let t=new x5(a2);return Ro=new d5(t,i2),[a2,i2]}var Q=Z(D());var i0=Z(D());var t0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ZA(){let e=t0.gl;!e||(t0.extensions=e.getSupportedExtensions())}async function wo(e){var t;if(e.config.backend==="humangl"&&(t0.name in i0.engine().registry&&(!t0.gl||!t0.gl.getParameter(t0.gl.VERSION))&&(p("error: humangl backend invalid context"),m5(e)),!i0.findBackend(t0.name))){try{t0.canvas=await T0(100,100)}catch(n){p("error: cannot create canvas:",n);return}try{if(t0.gl=(t=t0.canvas)==null?void 0:t.getContext("webgl2",t0.webGLattr),!t0.gl.getParameter(t0.gl.VERSION).includes("2.0")){p("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}t0.canvas&&(t0.canvas.addEventListener("webglcontextlost",async r=>{throw p("error: humangl:",r.type),p("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),t0.canvas.addEventListener("webglcontextrestored",r=>{p("error: humangl context restored:",r)}),t0.canvas.addEventListener("webglcontextcreationerror",r=>{p("error: humangl context create:",r)}))}catch(n){p("error: cannot get WebGL context:",n);return}try{i0.setWebGLContext(2,t0.gl)}catch(n){p("error: cannot set WebGL context:",n);return}try{let n=new i0.GPGPUContext(t0.gl);i0.registerBackend(t0.name,()=>new i0.MathBackendWebGL(n),t0.priority)}catch(n){p("error: cannot register WebGL backend:",n);return}try{i0.getKernelsForBackend("webgl").forEach(r=>{let A={...r,backendName:t0.name};i0.registerKernel(A)})}catch(n){p("error: cannot update WebGL backend registration:",n);return}let o=i0.backend().getGPGPUContext?i0.backend().getGPGPUContext().gl:null;if(o)p(`humangl webgl version:${o.getParameter(o.VERSION)} renderer:${o.getParameter(o.RENDERER)}`);else{p("error: no current gl context:",o,t0.gl);return}try{i0.env().flagRegistry.WEBGL_VERSION&&i0.env().set("WEBGL_VERSION",2)}catch(n){p("error: cannot set WebGL backend flags:",n);return}ZA(),p("backend registered:",t0.name)}}var I=Z(D());function XA(){if(!R.kernels.includes("mod")){let e={kernelName:"Mod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.sub(t.inputs.a,I.mul(I.div(t.inputs.a,t.inputs.b),t.inputs.b)))};I.registerKernel(e),R.kernels.push("mod")}if(!R.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.floorDiv(t.inputs.a/t.inputs.b)*t.inputs.b+I.mod(t.inputs.a,t.inputs.b))};I.registerKernel(e),R.kernels.push("floormod")}}async function u5(e,t=!1){if(e.state="backend",t||R.initial||e.config.backend&&e.config.backend.length>0&&I.getBackend()!==e.config.backend){let o=b();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&p("running inside web worker"),R.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&p("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),R.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&p(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")p("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&p("enumerated webgpu adapter:",r),!r)p("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let A="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;p("webgpu adapter info:",A)}}e.config.backend==="humangl"&&await wo(e);let n=Object.keys(I.engine().registryFactory);if(e.config.debug&&p("available backends:",n),n.includes(e.config.backend)||(p(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&p(`override: setting backend ${e.config.backend}`)),e.config.debug&&p("setting backend:",e.config.backend),e.config.backend==="wasm"){if(I.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&I.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&p("wasm path:",e.config.wasmPath),typeof(I==null?void 0:I.setWasmPaths)!="undefined")await I.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,A=!1;try{r=await I.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await I.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&p(`wasm execution: ${A?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&p("warning: wasm simd support is not enabled")}catch(s){p("wasm detection failed")}}try{await I.setBackend(e.config.backend),await I.ready(),Gt()}catch(r){return p("error: cannot set backend:",e.config.backend,r),!1}}if(I.getBackend()==="humangl"&&(I.env().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&I.env().set("CHECK_COMPUTATION_FOR_ERRORS",!1),I.env().flagRegistry.WEBGL_CPU_FORWARD&&I.env().set("WEBGL_CPU_FORWARD",!0),I.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&I.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),I.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&I.env().set("CPU_HANDOFF_SIZE_THRESHOLD",256),I.env().flagRegistry.WEBGL_EXP_CONV&&I.env().set("WEBGL_EXP_CONV",!0),I.env().flagRegistry.USE_SETTIMEOUTCUSTOM&&I.env().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(p("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),I.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),I.backend().getGPGPUContext)){let n=await I.backend().getGPGPUContext().gl;e.config.debug&&p(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}I.getBackend(),I.enableProdMode(),await I.ready(),e.performance.initBackend=Math.trunc(b()-o),e.config.backend=I.getBackend(),await R.updateBackend(),XA()}return!0}function h5(e,t){for(let o of e){let n={kernelName:o,backendName:t.backend,kernelFunc:()=>{t.debug&&p("kernelFunc",o,t.backend)}};I.registerKernel(n)}R.kernels=I.getKernelsForBackend(I.getBackend()).map(o=>o.kernelName.toLowerCase())}var p0=[null,null],UA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Oe=[[0,0],[0,0]],YA=["hand","fist","pinch","point","face","tip","pinchtip"],Eo=4,zo=1.6,KA=512,JA=1.4,b5=Number.MAX_SAFE_INTEGER,O1=0,pe=[0,0],l0={boxes:[],hands:[]},So={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Co(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&p("cached model:",p0[0].modelUrl);else{h5(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await W((t=e.hand.detector)==null?void 0:t.modelPath);let o=Object.values(p0[0].modelSignature.inputs);Oe[0][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[0][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[0]}async function Io(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&p("cached model:",p0[1].modelUrl);else{p0[1]=await W((t=e.hand.skeleton)==null?void 0:t.modelPath);let o=Object.values(p0[1].modelSignature.inputs);Oe[1][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[1][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[1]}async function QA(e,t){let o=[];if(!e||!p0[0])return o;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,KA),s=Math.round(A*r/8)*8;n.resize=Q.image.resizeBilinear(e,[A,s]),n.cast=Q.cast(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await p0[0].executeAsync(n.cast,UA),n.boxes=Q.squeeze(n.rawBoxes,[0,2]),n.scores=Q.squeeze(n.rawScores,[0]);let a=Q.unstack(n.scores,1);Q.dispose(a[Eo]),a.splice(Eo,1),n.filtered=Q.stack(a,1),Q.dispose(a),n.max=Q.max(n.filtered,1),n.argmax=Q.argMax(n.filtered,1);let l=0;n.nms=await Q.image.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let y=await n.nms.data(),x=await n.max.data(),i=await n.argmax.data();for(let d of Array.from(y)){let c=Q.slice(n.boxes,d,1),h=await c.data();Q.dispose(c);let m=[h[1],h[0],h[3]-h[1],h[2]-h[0]],P=e5(m,JA),M=[Math.trunc(m[0]*pe[0]),Math.trunc(m[1]*pe[1]),Math.trunc(m[2]*pe[0]),Math.trunc(m[3]*pe[1])],g=x[d],f=YA[i[d]],u={id:l++,score:g,box:M,boxRaw:P,label:f};o.push(u)}return Object.keys(n).forEach(d=>Q.dispose(n[d])),o.sort((d,c)=>c.score-d.score),o.length>(t.hand.maxDetected||1)&&(o.length=t.hand.maxDetected||1),o}async function N1(e,t,o){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&o.hand.landmarks&&t.score>(o.hand.minConfidence||0)){let r={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[A],[0],[Oe[1][0],Oe[1][1]],"bilinear"),r.div=Q.div(r.crop,B.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let s=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(s))))/100;if(a>=(o.hand.minConfidence||0)){n.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Oe[1][1],i[1]/Oe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);n.keypoints=x.map(i=>[pe[0]*(i[0]+t.boxRaw[0]),pe[1]*(i[1]+t.boxRaw[1]),i[2]||0]),n.landmarks=f5(n.keypoints);for(let i of Object.keys(So))n.annotations[i]=So[i].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return n}async function L1(e,t){var r,A;if(!p0[0]||!p0[1]||!((r=p0[0])!=null&&r.inputs[0].shape)||!((A=p0[1])!=null&&A.inputs[0].shape))return[];pe=[e.shape[2]||0,e.shape[1]||0],b5++;let o=(t.hand.skipTime||0)>b()-O1,n=b5<(t.hand.skipFrames||0);return t.skipAllowed&&o&&n?l0.hands:new Promise(async s=>{let a=3*(t.hand.skipTime||0)>b()-O1,l=b5<3*(t.hand.skipFrames||0);t.skipAllowed&&l0.hands.length===t.hand.maxDetected?l0.hands=await Promise.all(l0.boxes.map(x=>N1(e,x,t))):t.skipAllowed&&a&&l&&l0.hands.length>0?l0.hands=await Promise.all(l0.boxes.map(x=>N1(e,x,t))):(l0.boxes=await QA(e,t),O1=b(),l0.hands=await Promise.all(l0.boxes.map(x=>N1(e,x,t))),b5=0);let y=[...l0.boxes];if(l0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&l0.hands[x].fingerScore&&l0.hands[x].fingerScore>(t.hand.minConfidence||0)){let d=e5(i.box,zo),c=e5(i.boxRaw,zo);l0.boxes.push({...y[x],box:d,boxRaw:c})}}for(let x=0;xb()-No,A=W1<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&Oo===n&&g5[o]?(W1++,g5[o]):(W1=0,new Promise(async l=>{let y=M5.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),x=P0==null?void 0:P0.execute(y),i=(await x.data())[0];g5[o]=Math.round(100*i)/100,Oo=n,No=b(),M5.dispose([y,x]),l(g5[o])}))}var Vo=Z(D());var C2={};be(C2,{connected:()=>v5,horizontal:()=>G1,kpt:()=>P5,relative:()=>H1,vertical:()=>B1});var P5=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],G1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],B1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],H1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],v5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ne=Z(D()),Fo=.005,G0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function V1(e){for(let t of G1){let o=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[1]y&&y.part===t[0]),r=e.keypoints.findIndex(y=>y&&y.part===t[1]),A=e.keypoints.findIndex(y=>y&&y.part===o[0]),s=e.keypoints.findIndex(y=>y&&y.part===o[1]);if(!e.keypoints[A]||!e.keypoints[s])continue;let a=e.keypoints[n]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let y=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=y}}}function Go(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],o.pad=Ne.pad(e,G0.padding),o.resize=Ne.image.resizeBilinear(o.pad,[t,t]);let n=Ne.cast(o.resize,"int32");return Object.keys(o).forEach(r=>Ne.dispose(o[r])),n}function Ho(e,t){e.keypoints=e.keypoints.filter(n=>n&&n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+G0.padding[2][0]+G0.padding[2][1])/t[0]-G0.padding[2][0],n.position[1]*(t[1]+G0.padding[1][0]+G0.padding[1][1])/t[1]-G0.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let o=ce(e.keypoints.map(n=>n.position),t);return e.box=o.box,e.boxRaw=o.boxRaw,e}var B0,R5=0,D1=Number.MAX_SAFE_INTEGER,qe={boxes:[],bodies:[],last:0};async function Do(e){return R.initial&&(B0=null),B0?e.debug&&p("cached model:",B0.modelUrl):(h5(["size"],e),B0=await W(e.body.modelPath)),R5=B0.inputs[0].shape?B0.inputs[0].shape[2]:0,R5<64&&(R5=256),B0}async function $A(e,t,o){let n=e[0][0],r=[],A=0;for(let x=0;xt.body.minConfidence){let i=[n[x][1],n[x][0]];r.push({score:Math.round(100*A)/100,part:P5[x],positionRaw:i,position:[Math.round((o.shape[2]||0)*i[0]),Math.round((o.shape[1]||0)*i[1])]})}A=r.reduce((x,i)=>i.score>x?i.score:x,0);let s=[],a=ce(r.map(x=>x.position),[o.shape[2],o.shape[1]]),l={};for(let[x,i]of Object.entries(v5)){let d=[];for(let c=0;cP.part===i[c]),m=r.find(P=>P.part===i[c+1]);h&&m&&h.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([h.position,m.position])}l[x]=d}let y={id:0,score:A,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return V1(y),s.push(y),s}async function e7(e,t,o){let n=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let d=A[3*i+2];if(d>t.body.minConfidence){let c=[A[3*i+1],A[3*i+0]];a.push({part:P5[i],score:Math.round(100*d)/100,positionRaw:c,position:[Math.round((o.shape[2]||0)*c[0]),Math.round((o.shape[1]||0)*c[1])]})}}let l=ce(a.map(i=>i.position),[o.shape[2],o.shape[1]]),y={};for(let[i,d]of Object.entries(v5)){let c=[];for(let h=0;hM.part===d[h]),P=a.find(M=>M.part===d[h+1]);m&&P&&m.score>(t.body.minConfidence||0)&&P.score>(t.body.minConfidence||0)&&c.push([m.position,P.position])}y[i]=c}let x={id:r,score:s,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:y};V1(x),n.push(x)}}return n.sort((r,A)=>A.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function Z1(e,t){if(!B0||!(B0!=null&&B0.inputs[0].shape))return[];t.skipAllowed||(qe.boxes.length=0),D1++;let o=(t.body.skipTime||0)>b()-qe.last,n=D1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n?qe.bodies:new Promise(async r=>{let A={};D1=0,A.input=Bo(e,R5),A.res=B0==null?void 0:B0.execute(A.input),qe.last=b();let s=await A.res.array();qe.bodies=A.res.shape[2]===17?await $A(s,t,e):await e7(s,t,e);for(let a of qe.bodies)Ho(a,[e.shape[2]||1,e.shape[1]||1]),Go(a.keypoints);Object.keys(A).forEach(a=>Vo.dispose(A[a])),r(qe.bodies)})}var H0=Z(D());var l2,T5=[],Xo=0,X1=Number.MAX_SAFE_INTEGER,k5=0,w5=2.5;async function qo(e){if(!l2||R.initial){l2=await W(e.object.modelPath);let t=Object.values(l2.modelSignature.inputs);k5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&p("cached model:",l2.modelUrl);return l2}async function t7(e,t,o){let n=0,r=[];for(let l of[1,2,4]){let y=l*13,x=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)===t2.length)),i=await x.array(),d=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)(o.object.minConfidence||0)&&M!==61){let f=(.5+Math.trunc(P%y))/y,u=(.5+Math.trunc(P/y))/y,S=m[P].map(_=>_*(y/l/k5)),[N,w]=[f-w5/l*S[0],u-w5/l*S[1]],[E,H]=[f+w5/l*S[2]-N,u+w5/l*S[3]-w],X=[N,w,E,H];X=X.map(_=>Math.max(0,Math.min(_,1)));let G=[X[0]*t[0],X[1]*t[1],X[2]*t[0],X[3]*t[1]],o0={id:n++,score:Math.round(100*g)/100,class:M+1,label:t2[M].label,box:G.map(_=>Math.trunc(_)),boxRaw:X};r.push(o0)}}H0.dispose([x,d,c,h])}let A=r.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),s=r.map(l=>l.score),a=[];if(A&&A.length>0){let l=await H0.image.nonMaxSuppressionAsync(A,s,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence);a=await l.data(),H0.dispose(l)}return r=r.filter((l,y)=>a.includes(y)).sort((l,y)=>y.score-l.score),r}async function q1(e,t){let o=(t.object.skipTime||0)>b()-Xo,n=X1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&T5.length>0?(X1++,T5):(X1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?T5:new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=H0.image.resizeBilinear(e,[k5,k5],!1),a=H0.div(s,B.tf255),l=H0.transpose(a,[0,3,1,2]),y;t.object.enabled&&(y=l2.execute(l)),Xo=b();let x=await t7(y,A,t);T5=x,H0.dispose([s,a,l,...y]),r(x)}))}var z0=Z(D());var j2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],o7=j2.length,I2=j2.reduce((e,t,o)=>(e[t]=o,e),{}),n7=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Cs=n7.map(([e,t])=>[I2[e],I2[t]]),Yo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function Ko(e){let t=e.reduce(({maxX:o,maxY:n,minX:r,minY:A},{position:{x:s,y:a}})=>({maxX:Math.max(o,s),maxY:Math.max(n,a),minX:Math.min(r,s),minY:Math.min(A,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Jo(e,[t,o],[n,r]){let A=t/n,s=o/r,a=(y,x)=>({id:x,score:y.score,boxRaw:[y.box[0]/r,y.box[1]/n,y.box[2]/r,y.box[3]/n],box:[Math.trunc(y.box[0]*s),Math.trunc(y.box[1]*A),Math.trunc(y.box[2]*s),Math.trunc(y.box[3]*A)],keypoints:y.keypoints.map(({score:i,part:d,position:c})=>({score:i,part:d,position:[Math.trunc(c.x*s),Math.trunc(c.y*A)],positionRaw:[c.x/n,c.y/n]})),annotations:{}});return e.map((y,x)=>a(y,x))}var E5=class{constructor(t,o){T(this,"priorityQueue");T(this,"numberOfElements");T(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=o}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let o=2*t;if(oo?o:e}function Qo(e,t,o,n){let r=o-e,A=n-t;return r*r+A*A}function J1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var oe,A7=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],z5=1,y2=16,s7=50**2;function _o(e,t,o,n,r,A,s=2){let a=M=>({y:A.get(M.y,M.x,e),x:A.get(M.y,M.x,A.shape[2]/2+e)}),l=(M,g,f)=>({y:K1(Math.round(M.y/y2),0,g-1),x:K1(Math.round(M.x/y2),0,f-1)}),[y,x]=n.shape,i=l(t.position,y,x),d=a(i),h=J1(t.position,d);for(let M=0;M[I2[d],I2[c]]),s=A.map(([,d])=>d),a=A.map(([d])=>d),l=t.shape[2],y=s.length,x=new Array(l),i=Y1(e.part,y2,o);x[e.part.id]={score:e.score,part:j2[e.part.id],position:i};for(let d=y-1;d>=0;--d){let c=s[d],h=a[d];x[c]&&!x[h]&&(x[h]=_o(d,x[c],h,t,o,r))}for(let d=0;dt){a=!1;break}if(!a)break}return a}function l7(e,t){let[o,n,r]=t.shape,A=new E5(o*n*r,({score:s})=>s);for(let s=0;s{var s;let A=(s=r[n])==null?void 0:s.position;return A?Qo(o,t,A.y,A.x)<=s7:!1})}function y7(e,t){return t.reduce((n,{position:r,score:A},s)=>($o(e,r,s)||(n+=A),n),0)/t.length}function c7(e,t,o,n,r,A){let s=[],a=l7(A,t);for(;s.lengthc.score>A);let i=y7(s,x),d=Ko(x);i>A&&s.push({keypoints:x,box:d,score:Math.round(100*i)/100})}return s}async function Q1(e,t){let o=z0.tidy(()=>{if(!oe.inputs[0].shape)return[];let s=z0.image.resizeBilinear(e,[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]),a=z0.sub(z0.div(z0.cast(s,"float32"),127.5),1),y=oe.execute(a,A7).map(x=>z0.squeeze(x,[0]));return y[1]=z0.sigmoid(y[1]),y}),n=await Promise.all(o.map(s=>s.buffer()));for(let s of o)z0.dispose(s);let r=await c7(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return oe.inputs[0].shape?Jo(r,[e.shape[1],e.shape[2]],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]):[]}async function en(e){return!oe||R.initial?oe=await W(e.body.modelPath):e.debug&&p("cached model:",oe.modelUrl),oe}var r0=Z(D());var ae,_1=!1;async function $1(e){return!ae||R.initial?ae=await W(e.segmentation.modelPath):e.debug&&p("cached model:",ae.modelUrl),ae}async function on(e,t,o){var m,P;if(_1)return{data:[],canvas:null,alpha:null};_1=!0,ae||await $1(o);let n=await Je(e,o),r=((m=n.tensor)==null?void 0:m.shape[2])||0,A=((P=n.tensor)==null?void 0:P.shape[1])||0;if(!n.tensor)return{data:[],canvas:null,alpha:null};let s={};s.resize=r0.image.resizeBilinear(n.tensor,[ae.inputs[0].shape?ae.inputs[0].shape[1]:0,ae.inputs[0].shape?ae.inputs[0].shape[2]:0],!1),r0.dispose(n.tensor),s.norm=r0.div(s.resize,B.tf255),s.res=ae.execute(s.norm),s.squeeze=r0.squeeze(s.res,0),s.squeeze.shape[2]===2?(s.softmax=r0.softmax(s.squeeze),[s.bg,s.fg]=r0.unstack(s.softmax,2),s.expand=r0.expandDims(s.fg,2),s.pad=r0.expandDims(s.expand,0),s.crop=r0.image.cropAndResize(s.pad,[[0,0,.5,.5]],[0],[r,A]),s.data=r0.squeeze(s.crop,0)):s.data=r0.image.resizeBilinear(s.squeeze,[A,r]);let a=Array.from(await s.data.data());if(R.node&&!R.Canvas&&typeof ImageData=="undefined")return o.debug&&p("canvas support missing"),Object.keys(s).forEach(M=>r0.dispose(s[M])),{data:a,canvas:null,alpha:null};let l=T0(r,A);r0.browser&&await r0.browser.toPixels(s.data,l);let y=l.getContext("2d");o.segmentation.blur&&o.segmentation.blur>0&&(y.filter=`blur(${o.segmentation.blur}px)`);let x=y.getImageData(0,0,r,A),i=T0(r,A),d=i.getContext("2d");n.canvas&&d.drawImage(n.canvas,0,0),d.globalCompositeOperation="darken",o.segmentation.blur&&o.segmentation.blur>0&&(d.filter=`blur(${o.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let c=d.getImageData(0,0,r,A);for(let M=0;Mr0.dispose(s[M])),_1=!1,{data:a,canvas:i,alpha:l}}var O2=class{constructor(){T(this,"ssrnetage",null);T(this,"gear",null);T(this,"blazeposedetect",null);T(this,"blazepose",null);T(this,"centernet",null);T(this,"efficientpose",null);T(this,"mobilefacenet",null);T(this,"insightface",null);T(this,"emotion",null);T(this,"facedetect",null);T(this,"faceiris",null);T(this,"facemesh",null);T(this,"faceres",null);T(this,"ssrnetgender",null);T(this,"handpose",null);T(this,"handskeleton",null);T(this,"handtrack",null);T(this,"liveness",null);T(this,"movenet",null);T(this,"nanodet",null);T(this,"posenet",null);T(this,"segmentation",null);T(this,"antispoof",null)}},et=e=>{let t=0,o=0,n=0;for(let A of Object.values(ne))t+=A.sizeFromManifest,o+=A.sizeLoadedWeights,n+=A.sizeDesired;let r=n>0?o/n:0;return{numLoadedModels:Object.values(ne).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:o,totalSizeLoading:n,totalSizeEnabled:void 0,modelStats:Object.values(ne)}};function m5(e){for(let t of Object.keys(e.models))e.models[t]=null}async function tt(e){var t,o,n,r,A,s,a,l,y,x,i,d,c,h,m,P,M,g,f,u,S,N,w,E,H,X,G,o0,_,z,y0,V0;R.initial&&m5(e),e.config.hand.enabled&&(!e.models.handpose&&((o=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:o.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await j1(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(n=e.config.hand.detector)==null?void 0:n.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await j1(e.config))),e.config.body.enabled&&!e.models.blazepose&&((s=(A=e.config.body)==null?void 0:A.modelPath)==null?void 0:s.includes("blazepose"))&&(e.models.blazepose=b3(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=h3(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((l=(a=e.config.body)==null?void 0:a.modelPath)==null?void 0:l.includes("efficientpose"))&&(e.models.efficientpose=T3(e.config)),e.config.body.enabled&&!e.models.movenet&&((x=(y=e.config.body)==null?void 0:y.modelPath)==null?void 0:x.includes("movenet"))&&(e.models.movenet=Do(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=en(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=l3(e.config)),e.config.face.enabled&&((c=e.config.face.antispoof)==null?void 0:c.enabled)&&!e.models.antispoof&&(e.models.antispoof=Jt(e.config)),e.config.face.enabled&&((h=e.config.face.liveness)==null?void 0:h.enabled)&&!e.models.liveness&&(e.models.liveness=Lo(e.config)),e.config.face.enabled&&((m=e.config.face.description)==null?void 0:m.enabled)&&!e.models.faceres&&(e.models.faceres=to(e.config)),e.config.face.enabled&&((P=e.config.face.emotion)==null?void 0:P.enabled)&&!e.models.emotion&&(e.models.emotion=z3(e.config)),e.config.face.enabled&&((M=e.config.face.iris)==null?void 0:M.enabled)&&!((g=e.config.face.attention)!=null&&g.enabled)&&!e.models.faceiris&&(e.models.faceiris=Z3(e.config)),e.config.face.enabled&&((f=e.config.face.mesh)==null?void 0:f.enabled)&&!e.models.facemesh&&(e.models.facemesh=J3(e.config)),e.config.face.enabled&&((u=e.config.face.gear)==null?void 0:u.enabled)&&!e.models.gear&&(e.models.gear=Wt(e.config)),e.config.face.enabled&&((S=e.config.face.ssrnet)==null?void 0:S.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=Vt(e.config)),e.config.face.enabled&&((N=e.config.face.ssrnet)==null?void 0:N.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=qt(e.config)),e.config.face.enabled&&((w=e.config.face.mobilefacenet)==null?void 0:w.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=O3(e.config)),e.config.face.enabled&&((E=e.config.face.insightface)==null?void 0:E.enabled)&&!e.models.insightface&&(e.models.insightface=G3(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((X=(H=e.config.hand.detector)==null?void 0:H.modelPath)==null?void 0:X.includes("handtrack"))&&(e.models.handtrack=Co(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((o0=(G=e.config.hand.detector)==null?void 0:G.modelPath)==null?void 0:o0.includes("handtrack"))&&(e.models.handskeleton=Io(e.config)),e.config.object.enabled&&!e.models.centernet&&((z=(_=e.config.object)==null?void 0:_.modelPath)==null?void 0:z.includes("centernet"))&&(e.models.centernet=P3(e.config)),e.config.object.enabled&&!e.models.nanodet&&((V0=(y0=e.config.object)==null?void 0:y0.modelPath)==null?void 0:V0.includes("nanodet"))&&(e.models.nanodet=qo(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=$1(e.config));for await(let v of Object.keys(e.models))e.models[v]&&typeof e.models[v]!="undefined"&&(e.models[v]=await e.models[v])}var Z0;function c2(e,t,o){if(e&&(Z0=e),!t||(Z0||p("instance not registred"),!Z0.config.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],A=[],s=[],a=t.modelUrl,l=t.executor;if(l&&l.graph.nodes)for(let y of Object.values(l.graph.nodes)){let x=y.op.toLowerCase();A.includes(x)||A.push(x)}else!l&&Z0.config.debug&&p("model signature not determined:",o);for(let y of A)!n.includes(y)&&!r.includes(y)&&!Z0.env.kernels.includes(y)&&!Z0.env.kernels.includes(y.replace("_",""))&&!Z0.env.kernels.includes(y.replace("native",""))&&!Z0.env.kernels.includes(y.replace("v2",""))&&s.push(y);return Z0.config.debug&&s.length>0&&p("model validation failed:",o,s),s.length>0?{name:o,missing:s,ops:A,url:a}:null}function S5(e){Z0=e;let t=[];for(let o of Object.keys(Z0.models)){let n=Z0.models[o];if(!n)continue;let r=c2(Z0,n,o);r&&t.push(r)}return t}var S0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ne={};async function x7(e,t){return S0.debug&&p("load model fetch:",e,t),fetch(e,t)}function rn(e){S0.cacheModels=e.cacheModels,S0.verbose=e.debug,S0.modelBasePath=e.modelBasePath}async function W(e){var y,x,i;let t=vt(S0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let o=t.includes("/")?t.split("/"):t.split("\\"),n=o[o.length-1].replace(".json",""),r="indexeddb://"+n;ne[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:H5[n],inCache:!1},S0.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let A={};try{A=S0.cacheSupported&&S0.cacheModels?await C5.io.listModels():{}}catch(d){S0.cacheSupported=!1}ne[n].inCache=S0.cacheSupported&&S0.cacheModels&&Object.keys(A).includes(r);let s=typeof fetch=="undefined"?{}:{fetchFunc:(d,c)=>x7(d,c)},a=new C5.GraphModel(ne[n].inCache?r:t,s),l=!1;try{a.findIOHandler(),S0.debug&&p("model load handler:",a.handler);let d=await a.handler.load();ne[n].sizeFromManifest=((y=d==null?void 0:d.weightData)==null?void 0:y.byteLength)||0,a.loadSync(d),ne[n].sizeLoadedWeights=((i=(x=a==null?void 0:a.artifacts)==null?void 0:x.weightData)==null?void 0:i.byteLength)||0,S0.verbose&&p("load model:",a.modelUrl,{bytes:ne[n].sizeLoadedWeights},S0),l=!0}catch(d){p("error loading model:",t,d)}if(l&&S0.cacheModels&&S0.cacheSupported&&!ne[n].inCache)try{let d=await a.save(r);p("model saved:",r,d)}catch(d){p("error saving model:",t,d)}return c2(null,a,`${e}`),a}var re=Z(D());var ot="2.9.3";var lt={};be(lt,{all:()=>it,body:()=>d2,canvas:()=>at,face:()=>x2,gesture:()=>p2,hand:()=>f2,object:()=>m2,options:()=>v0,person:()=>st});var X0=e=>{if(!e)p("draw error: invalid canvas");else if(!e.getContext)p("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)p("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),ue=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let o=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${t.alpha})`};function he(e,t,o,n,r){e.fillStyle=ue(n,r),e.beginPath(),e.arc(t,o,r.pointSize,0,2*Math.PI),e.fill()}function ie(e,t,o,n,r,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let s=(t+t+n)/2,a=(o+o+r)/2;e.ellipse(s,a,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,o),e.lineTo(t+n-A.roundRect,o),e.quadraticCurveTo(t+n,o,t+n,o+A.roundRect),e.lineTo(t+n,o+r-A.roundRect),e.quadraticCurveTo(t+n,o+r,t+n-A.roundRect,o+r),e.lineTo(t+A.roundRect,o+r),e.quadraticCurveTo(t,o+r,t,o+r-A.roundRect),e.lineTo(t,o+A.roundRect),e.quadraticCurveTo(t,o,t+A.roundRect,o),e.closePath();e.stroke()}function nt(e,t,o){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=ue(n[2]||0,o),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),o.fillPolygons&&(e.closePath(),e.fill())}}function An(e,t,o){if(!(t.length<2)){if(e.lineWidth=o.lineWidth,!o.useCurves||t.length<=2){nt(e,t,o);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n0){let n=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);n.length>3&&(n.length=3),o.push(n.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&o.push(`roll: ${Ue(e.rotation.angle.roll)}\xB0 yaw:${Ue(e.rotation.angle.yaw)}\xB0 pitch:${Ue(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&o.push(`gaze: ${Ue(e.rotation.gaze.bearing)}\xB0`)),o.length===0&&o.push("face"),t.fillStyle=K.color;for(let n=o.length-1;n>=0;n--){let r=Math.max(e.box[0],0),A=n*K.lineHeight+e.box[1];K.shadowColor&&K.shadowColor!==""&&(t.fillStyle=K.shadowColor,t.fillText(o[n],r+5,A+16)),t.fillStyle=K.labelColor,t.fillText(o[n],r+4,A+15)}}}function p7(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,n=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,n=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function u7(e,t){var o;if(K.drawGaze&&((o=e.rotation)==null?void 0:o.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,A=new Path2D(` +`;var F5=(e,t,o)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,A)=>(o[A]=0,r))},G5=class{constructor(t,o,n){T(this,"uniform",{});T(this,"attribute",{});T(this,"gl");T(this,"id");T(this,"compile",(t,o)=>{let n=this.gl.createShader(o);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(p(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)}`),null)):(p("filter: could not create shader"),null)});this.gl=t;let r=this.compile(o,this.gl.VERTEX_SHADER),A=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!A)){if(!this.id){p("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){p(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),F5(o,"attribute",this.attribute);for(let s in this.attribute)this.attribute[s]=this.gl.getAttribLocation(this.id,s);F5(o,"uniform",this.uniform),F5(n,"uniform",this.uniform);for(let s in this.uniform)this.uniform[s]=this.gl.getUniformLocation(this.id,s)}}};function It(){let e=0,t=null,o=!1,n=-1,r=[null,null],A=[],s=null,a=null,l=T0(100,100),y={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){p("filter: cannot get webgl context");return}this.gl=i;function d(g,f){if(!(g===l.width&&f===l.height)){if(l.width=g,l.height=f,!s){let u=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);s=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,s),i.bufferData(i.ARRAY_BUFFER,u,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function c(g,f){let u=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,u);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let N=i.createTexture();return i.bindTexture(i.TEXTURE_2D,N),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,g,f,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,N,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:u,texture:N}}function h(g){return r[g]=r[g]||c(l.width,l.height),r[g]}function m(g=0){if(!a)return;let f=null,u=null,S=!1;e===0?f=t:f=h(n).texture||null,e++,o&&!(g&x.INTERMEDIATE)?(u=null,S=e%2===0):(n=(n+1)%2,u=h(n).fbo||null),i.bindTexture(i.TEXTURE_2D,f),i.bindFramebuffer(i.FRAMEBUFFER,u),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function P(g){if(y[g])return a=y[g],i.useProgram((a?a.id:null)||null),a;if(a=new G5(i,wt,g),!a)return p("filter: could not get webgl program"),null;let f=Float32Array.BYTES_PER_ELEMENT,u=4*f;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,u,0*f),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,u,2*f),y[g]=a,a}let M={colorMatrix:g=>{let f=new Float32Array(g);f[4]/=255,f[9]/=255,f[14]/=255,f[19]/=255;let u=f[18]===1&&f[3]===0&&f[8]===0&&f[13]===0&&f[15]===0&&f[16]===0&&f[17]===0&&f[19]===0?Et:kt,S=P(u);!S||(i.uniform1fv(S.uniform.m,f),m())},brightness:g=>{let f=(g||0)+1;M.colorMatrix([f,0,0,0,0,0,f,0,0,0,0,0,f,0,0,0,0,0,1,0])},saturation:g=>{let f=(g||0)*2/3+1,u=(f-1)*-.5;M.colorMatrix([f,u,u,0,0,u,f,u,0,0,u,u,f,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:g=>{let f=(g||0)+1,u=-128*(f-1);M.colorMatrix([f,0,0,0,u,0,f,0,0,u,0,0,f,0,u,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let f=Math.cos(g),u=Math.sin(g),S=.213,N=.715,w=.072;M.colorMatrix([S+f*(1-S)+u*-S,N+f*-N+u*-N,w+f*-w+u*(1-w),0,0,S+f*-S+u*.143,N+f*(1-N)+u*.14,w+f*-w+u*-.283,0,0,S+f*-S+u*-(1-S),N+f*-N+u*N,w+f*(1-w)+u*w,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:g=>{let f=new Float32Array(g),u=1/l.width,S=1/l.height,N=P(Ct);!N||(i.uniform1fv(N.uniform.m,f),i.uniform2f(N.uniform.px,u,S),m())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:g=>{let f=g||1;M.convolution.call(this,[0,-1*f,0,-1*f,1+4*f,-1*f,0,-1*f,0])},emboss:g=>{let f=g||1;M.convolution.call(this,[-2*f,-1*f,0,-1*f,1,1*f,0,1*f,2*f])},blur:g=>{let f=g/7/l.width,u=g/7/l.height,S=P(St);!S||(i.uniform2f(S.uniform.px,0,u),m(x.INTERMEDIATE),i.uniform2f(S.uniform.px,f,0),m())},pixelate:g=>{let f=g/l.width,u=g/l.height,S=P(zt);!S||(i.uniform2f(S.uniform.size,f,u),m())}};this.add=function(g){let f=Array.prototype.slice.call(arguments,1),u=M[g];A.push({func:u,args:f})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(g){d(g.width,g.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,g);for(let f=0;fc.data())),s=.99*Math.max(A[0][0],A[1][0],A[2][0]),a=[U.sub(o[0],n[0]),U.sub(o[1],n[1]),U.sub(o[2],n[2])],l=[U.sub(r[0],n[0]),U.sub(r[1],n[1]),U.sub(r[2],n[2])],y=[U.div(s,l[0]),U.div(s,l[1]),U.div(s,l[2])],x=[U.mul(a[0],y[0]),U.mul(a[1],y[1]),U.mul(a[2],y[2])],i=U.stack([x[0],x[1],x[2]],2),d=U.reshape(i,[1,t.shape[0],t.shape[1],3]);return U.dispose([...o,...n,...r,...a,...l,...y,...x,i,t]),d}var B2=3840,Y=null,c0=null,Ke=null,e0,le={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function T0(e,t){let o;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");o=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");o=document.createElement("canvas"),o.width=e,o.height=t}else typeof R.Canvas!="undefined"?o=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(o=new globalThis.Canvas(e,t));return o}function H2(e,t){let o=t||T0(e.width,e.height);return o.getContext("2d").drawImage(e,0,0),o}async function Je(e,t,o=!0){if(!e)return t.debug&&p("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof O.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof R.Canvas!="undefined"&&e instanceof R.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof O.Tensor){let n=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)n=O.expandDims(e,0);else if(e.shape[2]===4){let r=O.slice3d(e,[0,0,0],[-1,-1,3]);n=O.expandDims(r,0),O.dispose(r)}}else e.shape.length===4&&(e.shape[3]===3?n=O.clone(e):e.shape[3]===4&&(n=O.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(n==null||n.shape.length!==4||n.shape[0]!==1||n.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(n.dtype==="int32"){let r=O.cast(n,"float32");O.dispose(n),n=r}return{tensor:n,canvas:t.filter.return?c0:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&p("input stream is not ready"),{tensor:null,canvas:Y};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&p("cannot determine input dimensions"),{tensor:null,canvas:Y};let A=n,s=r;if(A>B2&&(A=B2,s=Math.trunc(A*r/n)),s>B2&&(s=B2,A=Math.trunc(s*n/r)),(t.filter.width||0)>0?A=t.filter.width:(t.filter.height||0)>0&&(A=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?s=t.filter.height:(t.filter.width||0)>0&&(s=r*((t.filter.width||0)/n)),!A||!s)throw new Error("input error: cannot determine dimension");(!Y||(Y==null?void 0:Y.width)!==A||(Y==null?void 0:Y.height)!==s)&&(Y=T0(A,s));let a=Y.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(n,0),a.scale(-1,1),a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),(!c0||Y.width!==c0.width||(Y==null?void 0:Y.height)!==(c0==null?void 0:c0.height))&&(c0=T0(Y.width,Y.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new It:null),R.filter=!!e0,!e0||!e0.add?(t.debug&&p("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,H2(Y,c0)):(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),e0.get()>0?c0=e0.apply(Y):c0=e0.draw(Y))):(H2(Y,c0),e0&&(e0=null),R.filter=!!e0),!o)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let l,y=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&O.browser)l=O.browser?O.browser.fromPixels(e):null;else{y=e.data.length/e.height/e.width;let d=new Uint8Array(e.data.buffer);l=O.tensor(d,[e.height,e.width,y],"int32")}else if((!Ke||c0.width!==Ke.width||c0.height!==Ke.height)&&(Ke=T0(c0.width,c0.height)),O.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=O.browser.fromPixels(c0):(Ke=H2(c0),l=O.browser.fromPixels(Ke));else{let h=H2(c0).getContext("2d").getImageData(0,0,A,s);y=h.data.length/A/s;let m=new Uint8Array(h.data.buffer);l=O.tensor(m,[A,s,y])}if(y===4){let d=O.slice3d(l,[0,0,0],[-1,-1,3]);O.dispose(l),l=d}if(!l)throw new Error("input error: cannot create tensor");let x=O.cast(l,"float32"),i=t.filter.equalization?await G2(x):O.expandDims(x,0);return O.dispose([l,x]),{tensor:i,canvas:t.filter.return?c0:null}}}async function jt(e,t){let o=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return o;if(!le.inputTensor)le.inputTensor=O.clone(t);else if(le.inputTensor.shape[1]!==t.shape[1]||le.inputTensor.shape[2]!==t.shape[2])O.dispose(le.inputTensor),le.inputTensor=O.clone(t);else{let n={};n.diff=O.sub(t,le.inputTensor),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;O.dispose([le.inputTensor,n.diff,n.squared,n.sum]),le.inputTensor=O.clone(t),o=A<=(e.cacheSensitivity||0)}return o}async function Ot(e,t,o){let n={};if(!t||!o||t.shape.length!==4||t.shape.length!==o.shape.length)return e.debug||p("invalid input tensor or tensor shapes do not match:",t.shape,o.shape),0;if(t.shape[0]!==1||o.shape[0]!==1||t.shape[3]!==3||o.shape[3]!==3)return e.debug||p("input tensors must be of shape [1, height, width, 3]:",t.shape,o.shape),0;n.input1=O.clone(t),n.input2=t.shape[1]!==o.shape[1]||t.shape[2]!==o.shape[2]?O.image.resizeBilinear(o,[t.shape[1],t.shape[2]]):O.clone(o),n.diff=O.sub(n.input1,n.input2),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return O.dispose([n.input1,n.input2,n.diff,n.squared,n.sum]),A}var B5=class{constructor(){T(this,"browser");T(this,"node");T(this,"worker");T(this,"platform","");T(this,"agent","");T(this,"backends",[]);T(this,"initial");T(this,"filter");T(this,"tfjs");T(this,"offscreen");T(this,"perfadd",!1);T(this,"tensorflow",{version:void 0,gpu:void 0});T(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});T(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});T(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});T(this,"cpu",{model:void 0,flags:[]});T(this,"kernels",[]);T(this,"Canvas");T(this,"Image");T(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:x0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let o=t[0].match(/\(([^()]+)\)/g);this.platform=o&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(x0.engine().registryFactory),this.tensorflow={version:x0.backend().binding?x0.backend().binding.TF_Version:void 0,gpu:x0.backend().binding?x0.backend().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&x0.getBackend()==="wasm"&&(this.wasm.simd=x0.env().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=x0.env().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=T0(100,100),o=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof o!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(x0.getBackend()==="webgl"||x0.getBackend()==="humangl")){let n=x0.backend().gpgpu!=="undefined"?await x0.backend().getGPGPUContext().gl:null;n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.renderer=n.getParameter(n.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(n){this.webgpu.supported=!1}try{this.kernels=x0.getKernelsForBackend(x0.getBackend()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},R=new B5;var C5=Z(D());var H5={};be(H5,{age:()=>qn,"anti-spoofing":()=>vr,antispoof:()=>jn,blazeface:()=>On,"blazeface-back":()=>Un,"blazeface-front":()=>Yn,"blazepose-detect":()=>Pr,"blazepose-detector2d":()=>Kn,"blazepose-detector3d":()=>Jn,"blazepose-full":()=>Qn,"blazepose-heavy":()=>_n,"blazepose-lite":()=>$n,default:()=>Lr,efficientpose:()=>er,"efficientpose-i-lite":()=>Rr,"efficientpose-ii-lite":()=>Tr,"efficientpose-iv":()=>wr,emotion:()=>Nn,faceboxes:()=>tr,facemesh:()=>Ln,"facemesh-attention":()=>nr,"facemesh-attention-alt":()=>or,"facemesh-detection-full":()=>rr,"facemesh-detection-short":()=>Ar,"facemesh-orig":()=>sr,faceres:()=>Wn,"faceres-deep":()=>ar,gear:()=>ir,gender:()=>yr,"gender-ssrnet-imdb":()=>lr,handdetect:()=>cr,"handlandmark-full":()=>Fn,"handlandmark-lite":()=>xr,"handlandmark-sparse":()=>dr,handskeleton:()=>fr,handtrack:()=>Gn,"insightface-efficientnet-b0":()=>kr,"insightface-ghostnet-strides1":()=>Er,"insightface-ghostnet-strides2":()=>zr,"insightface-mobilenet-emore":()=>Sr,"insightface-mobilenet-swish":()=>Cr,iris:()=>Bn,liveness:()=>Hn,"mb3-centernet":()=>Vn,meet:()=>mr,mobileface:()=>pr,mobilefacenet:()=>ur,models:()=>Dn,"movenet-lightning":()=>Zn,"movenet-multipose":()=>hr,"movenet-thunder":()=>br,nanodet:()=>gr,"nanodet-e":()=>Ir,"nanodet-g":()=>jr,"nanodet-m":()=>Or,"nanodet-t":()=>Nr,posenet:()=>Mr,selfie:()=>Xn});var jn=853098,On=538928,Nn=820516,Ln=1477958,Wn=6978814,Fn=5431368,Gn=2964837,Bn=2599092,Hn=592976,Vn=4030290,Dn=0,Zn=4650216,Xn=212886,qn=161240,Un=538928,Yn=402048,Kn=7499400,Jn=5928856,Qn=6338290,_n=27501554,$n=2725490,er=5651240,tr=2013002,or=2387598,nr=2382414,rr=1026192,Ar=201268,sr=2955780,ar=13957620,ir=1498916,lr=161236,yr=201808,cr=3515612,xr=2023432,dr=5286322,fr=5502280,mr=372228,pr=2183192,ur=5171976,hr=9448838,br=12477112,gr=7574558,Mr=5032780,Pr=5928804,vr=853098,Rr=2269064,Tr=5651240,wr=25643252,kr=13013224,Er=8093408,zr=8049584,Sr=6938536,Cr=12168584,Ir=12319156,jr=7574558,Or=1887474,Nr=5294216,Lr={antispoof:jn,blazeface:On,emotion:Nn,facemesh:Ln,faceres:Wn,"handlandmark-full":Fn,handtrack:Gn,iris:Bn,liveness:Hn,"mb3-centernet":Vn,models:Dn,"movenet-lightning":Zn,selfie:Xn,age:qn,"blazeface-back":Un,"blazeface-front":Yn,"blazepose-detector2d":Kn,"blazepose-detector3d":Jn,"blazepose-full":Qn,"blazepose-heavy":_n,"blazepose-lite":$n,efficientpose:er,faceboxes:tr,"facemesh-attention-alt":or,"facemesh-attention":nr,"facemesh-detection-full":rr,"facemesh-detection-short":Ar,"facemesh-orig":sr,"faceres-deep":ar,gear:ir,"gender-ssrnet-imdb":lr,gender:yr,handdetect:cr,"handlandmark-lite":xr,"handlandmark-sparse":dr,handskeleton:fr,meet:mr,mobileface:pr,mobilefacenet:ur,"movenet-multipose":hr,"movenet-thunder":br,nanodet:gr,posenet:Mr,"blazepose-detect":Pr,"anti-spoofing":vr,"efficientpose-i-lite":Rr,"efficientpose-ii-lite":Tr,"efficientpose-iv":wr,"insightface-efficientnet-b0":kr,"insightface-ghostnet-strides1":Er,"insightface-ghostnet-strides2":zr,"insightface-mobilenet-emore":Sr,"insightface-mobilenet-swish":Cr,"nanodet-e":Ir,"nanodet-g":jr,"nanodet-m":Or,"nanodet-t":Nr};var p5={};be(p5,{Models:()=>O2,getModelStats:()=>et,load:()=>tt,reset:()=>m5,validate:()=>S5,validateModel:()=>c2});var V2=Z(D());var q0,V5=[],Wr=["white","black","asian","indian","other"],Fr=[15,23,28,35.5,45.5,55.5,65],Nt=0,Lt=0,D5=Number.MAX_SAFE_INTEGER;async function Wt(e){var t;return R.initial&&(q0=null),q0?e.debug&&p("cached model:",q0.modelUrl):q0=await W((t=e.face.gear)==null?void 0:t.modelPath),q0}async function Z5(e,t,o,n){var s,a;if(!q0)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=D5<(((s=t.face.gear)==null?void 0:s.skipFrames)||0),A=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>b()-Lt;return t.skipAllowed&&A&&r&&Nt===n&&V5[o]?(D5++,V5[o]):(D5=0,new Promise(async l=>{var M,g;if(!(q0!=null&&q0.inputs[0].shape))return;let y={},x=[[0,.1,.9,.9]];y.resize=V2.image.cropAndResize(e,x,[0],[q0.inputs[0].shape[2],q0.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([y.age,y.gender,y.race]=q0.execute(y.resize,["age_output","gender_output","race_output"]));let d=await y.gender.data();i.gender=d[0]>d[1]?"male":"female",i.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let c=await y.race.data();for(let f=0;f(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&i.race.push({score:Math.round(100*c[f])/100,race:Wr[f]});i.race.sort((f,u)=>u.score-f.score);let m=Array.from(await y.age.data()).map((f,u)=>[Fr[u],f]).sort((f,u)=>u[1]-f[1]),P=m[0][0];for(let f=1;fV2.dispose(y[f])),V5[o]=i,Nt=n,Lt=b(),l(i)}))}var Qe=Z(D());var Me=Z(D()),B={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Gt(){B.tf255=Me.scalar(255,"float32"),B.tf1=Me.scalar(1,"float32"),B.tf2=Me.scalar(2,"float32"),B.tf05=Me.scalar(.5,"float32"),B.tf127=Me.scalar(127.5,"float32"),B.rgb=Me.tensor1d([.2989,.587,.114],"float32")}var C0,D2=[],Bt=0,Ht=0,X5=Number.MAX_SAFE_INTEGER;async function Vt(e){return R.initial&&(C0=null),C0?e.debug&&p("cached model:",C0.modelUrl):C0=await W(e.face.ssrnet.modelPathAge),C0}async function q5(e,t,o,n){var s,a,l,y;if(!C0)return{age:0};let r=X5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Ht;return t.skipAllowed&&r&&A&&Bt===n&&((l=D2[o])==null?void 0:l.age)&&((y=D2[o])==null?void 0:y.age)>0?(X5++,D2[o]):(X5=0,new Promise(async x=>{if(!(C0!=null&&C0.inputs)||!C0.inputs[0]||!C0.inputs[0].shape)return;let i={};i.resize=Qe.image.resizeBilinear(e,[C0.inputs[0].shape[2],C0.inputs[0].shape[1]],!1),i.enhance=Qe.mul(i.resize,B.tf255);let d={age:0};if(t.face.ssrnet.enabled&&(i.age=C0.execute(i.enhance)),i.age){let c=await i.age.data();d.age=Math.trunc(10*c[0])/10}Object.keys(i).forEach(c=>Qe.dispose(i[c])),D2[o]=d,Bt=n,Ht=b(),x(d)}))}var h0=Z(D());var U0,Z2=[],Zt=0,Xt=0,U5=Number.MAX_SAFE_INTEGER,Y5=[.2989,.587,.114];async function qt(e){return R.initial&&(U0=null),U0?e.debug&&p("cached model:",U0.modelUrl):U0=await W(e.face.ssrnet.modelPathGender),U0}async function K5(e,t,o,n){var s,a,l,y;if(!U0)return{gender:"unknown",genderScore:0};let r=U5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Xt;return t.skipAllowed&&r&&A&&Zt===n&&((l=Z2[o])==null?void 0:l.gender)&&((y=Z2[o])==null?void 0:y.genderScore)>0?(U5++,Z2[o]):(U5=0,new Promise(async x=>{if(!(U0!=null&&U0.inputs[0].shape))return;let i={};i.resize=h0.image.resizeBilinear(e,[U0.inputs[0].shape[2],U0.inputs[0].shape[1]],!1),i.enhance=h0.tidy(()=>{let[h,m,P]=h0.split(i.resize,3,3),M=h0.mul(h,Y5[0]),g=h0.mul(m,Y5[1]),f=h0.mul(P,Y5[2]),u=h0.addN([M,g,f]);return h0.mul(h0.sub(u,B.tf05),2)});let d={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(i.gender=U0.execute(i.enhance));let c=await i.gender.data();d.gender=c[0]>c[1]?"female":"male",d.genderScore=c[0]>c[1]?Math.trunc(100*c[0])/100:Math.trunc(100*c[1])/100,Object.keys(i).forEach(h=>h0.dispose(i[h])),Z2[o]=d,Zt=n,Xt=b(),x(d)}))}var q2=Z(D());var b0,X2=[],J5=Number.MAX_SAFE_INTEGER,Yt=0,Kt=0;async function Jt(e){var t;return R.initial&&(b0=null),b0?e.debug&&p("cached model:",b0.modelUrl):b0=await W((t=e.face.antispoof)==null?void 0:t.modelPath),b0}async function Q5(e,t,o,n){var s,a;if(!b0)return 0;let r=(((s=t.face.antispoof)==null?void 0:s.skipTime)||0)>b()-Kt,A=J5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&Yt===n&&X2[o]?(J5++,X2[o]):(J5=0,new Promise(async l=>{let y=q2.image.resizeBilinear(e,[b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[2]:0,b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[1]:0],!1),x=b0==null?void 0:b0.execute(y),i=(await x.data())[0];X2[o]=Math.round(100*i)/100,Yt=n,Kt=b(),q2.dispose([y,x]),l(X2[o])}))}var L=Z(D());var ye=Z(D());var Y0={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},_5={count:468,mouth:13,symmetryLine:[13,Y0.midwayBetweenEyes[0]]},Le={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},$5=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],w2=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],We=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var Br=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],Hr=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],Vr=[33,133,362,263,1,78,308],s4=Br.map(e=>w2[e]),a4=Hr.map(e=>w2[e]),i4=Vr.map(e=>w2[e]);function Pe(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var Dr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Zr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Xr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],qr=[[474,475],[475,476],[476,477],[477,474]],Ur=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Yr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Kr=[[469,470],[470,471],[471,472],[472,469]],Jr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],l4={lips:Pe(Dr),leftEye:Pe(Zr),leftEyebrow:Pe(Xr),leftIris:Pe(qr),rightEye:Pe(Ur),rightEyebrow:Pe(Yr),rightIris:Pe(Kr),faceOval:Pe(Jr)};var _e=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],U2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],Y2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],K2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],e3=(e,t)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:o,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},t1=(e,t,o)=>{let n=t.shape[1],r=t.shape[2],A=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],s=ye.image.cropAndResize(t,[A],[0],o),a=ye.div(s,B.tf255);return ye.dispose(s),a},J2=(e,t)=>{let o=U2(e),n=_e(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[o[0]-r[0],o[1]-r[1]],endPoint:[o[0]+r[0],o[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},Q2=e=>{let t=U2(e),o=_e(e),n=Math.max(...o)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},t3=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...o)],endPoint:[Math.max(...t),Math.max(...o)],landmarks:e}},o1=[[1,0,0],[0,1,0],[0,0,1]],Qr=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),_r=(e,t)=>Qr(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var _t=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Fe=(e,t)=>{let o=0;for(let n=0;n{let o=[];for(let n=0;n{let o=[],n=e.length;for(let r=0;r{let o=Math.cos(e),n=Math.sin(e),r=[[o,-n,0],[n,o,0],[0,0,1]],A=_t(t[0],t[1]),s=$t(A,r),a=_t(-t[0],-t[1]);return $t(s,a)},eA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],o=[e[0][2],e[1][2]],n=[-Fe(t[0],o),-Fe(t[1],o)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},tA=(e,t)=>[Fe(e,t[0]),Fe(e,t[1])];function n3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},o=[];for(let n=0;n[A[0]/r*(c[0]-r/2),A[1]/r*(c[1]-r/2),c[2]||0]),a=o&&o!==0&&Math.abs(o)>.2,l=a?o3(o,[0,0]):o1,y=a?s.map(c=>[...tA(c,l),c[2]]):s,x=a?eA(n):o1,i=U2(t),d=[Fe(i,x[0]),Fe(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2]||0)])}function A3(e,t,o,n){let r=t.landmarks.length>=_5.count?_5.symmetryLine:Le.symmetryLine,A=0,s=o1,a;if(e&&R.kernels.includes("rotatewithoffset"))if(A=_r(t.landmarks[r[0]],t.landmarks[r[1]]),A&&A!==0&&Math.abs(A)>.2){let y=U2(t),x=[y[0]/o.shape[2],y[1]/o.shape[1]],i=ye.image.rotateWithOffset(o,A,0,x);s=o3(-A,y),a=t1(t,i,[n,n]),ye.dispose(i)}else a=t1(t,o,[n,n]);else a=t1(t,o,[n,n]);return[A,s,a]}var oA=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...o)+(Math.max(...o)-Math.min(...o))/2]},s3=(e,t)=>{let o=oA(e),n=_e(t);return{startPoint:[o[0]-n[0]/2,o[1]-n[1]/2],endPoint:[o[0]+n[0]/2,o[1]+n[1]/2]}};var a3=6,nA=1.4,Ae,i3=null,ve=0,k2=null,$e=()=>ve;async function l3(e){var t;return R.initial&&(Ae=null),Ae?e.debug&&p("cached model:",Ae.modelUrl):Ae=await W((t=e.face.detector)==null?void 0:t.modelPath),ve=Ae.inputs[0].shape?Ae.inputs[0].shape[2]:0,k2=L.scalar(ve,"int32"),i3=L.tensor2d(n3(ve)),Ae}function rA(e){let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,i3),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,k2),t.centersNormalized=L.div(t.centers,k2),t.halfBoxSize=L.div(t.boxSizesNormalized,B.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,k2),t.endNormalized=L.mul(t.ends,k2);let o=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>L.dispose(t[n])),o}async function y3(e,t){var a,l,y,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let o={};o.resized=L.image.resizeBilinear(e,[ve,ve]),o.div=L.div(o.resized,B.tf127),o.normalized=L.sub(o.div,B.tf05);let n=Ae==null?void 0:Ae.execute(o.normalized);if(Array.isArray(n)&&n.length>2){let i=n.sort((d,c)=>d.size-c.size);o.concat384=L.concat([i[0],i[2]],2),o.concat512=L.concat([i[1],i[3]],2),o.concat=L.concat([o.concat512,o.concat384],1),o.batch=L.squeeze(o.concat,0)}else Array.isArray(n)?o.batch=L.squeeze(n[0]):o.batch=L.squeeze(n);L.dispose(n),o.boxes=rA(o.batch),o.logits=L.slice(o.batch,[0,0],[-1,1]),o.sigmoid=L.sigmoid(o.logits),o.scores=L.squeeze(o.sigmoid),o.nms=await L.image.nonMaxSuppressionAsync(o.boxes,o.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((y=t.face.detector)==null?void 0:y.minConfidence)||0);let r=await o.nms.array(),A=[],s=await o.scores.data();for(let i=0;i(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let c={};c.bbox=L.slice(o.boxes,[r[i],0],[1,-1]),c.slice=L.slice(o.batch,[r[i],a3-1],[1,-1]),c.squeeze=L.squeeze(c.slice),c.landmarks=L.reshape(c.squeeze,[a3,-1]);let h=await c.bbox.data(),m={startPoint:[h[0],h[1]],endPoint:[h[2],h[3]],landmarks:await c.landmarks.array(),confidence:d},P=e3(m,[(e.shape[2]||0)/ve,(e.shape[1]||0)/ve]),M=J2(P,t.face.scale||nA),g=Q2(M);A.push(g),Object.keys(c).forEach(f=>L.dispose(c[f]))}}return Object.keys(o).forEach(i=>L.dispose(o[i])),A}var O0=Z(D());var _2={};be(_2,{connected:()=>A1,kpt:()=>r1});var r1=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],A1={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var I0=Z(D()),x3=224,AA,sA=5,$2=[8,16,32,32,32];async function d3(){let e=[],t=0;for(;to.x)),y:I0.tensor1d(e.map(o=>o.y))}}function ce(e,t=[1,1]){let o=[e.map(a=>a[0]),e.map(a=>a[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[n[0],n[1],r[0]-n[0],r[1]-n[1]],s=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:s}}function f3(e,t=[1,1]){let o=[e.map(y=>y[0]),e.map(y=>y[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[(n[0]+r[0])/2,(n[1]+r[1])/2],s=Math.max(A[0]-n[0],A[1]-n[1],-A[0]+r[0],-A[1]+r[1]),a=[Math.trunc(A[0]-s),Math.trunc(A[1]-s),Math.trunc(2*s),Math.trunc(2*s)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function e5(e,t){let o=[e[2]*t,e[3]*t];return[e[0]-(o[0]-e[2])/2,e[1]-(o[1]-e[3])/2,o[0],o[1]]}var u3={initial:!0},j0={detector:null,landmarks:null},e2={detector:[224,224],landmarks:[256,256]},s1=Number.MAX_SAFE_INTEGER,iA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},o5=null,E2,Re=[[0,0],[0,0],[0,0],[0,0]],m3=0,p3=e=>1-1/(1+Math.exp(e));async function h3(e){if(u3.initial&&(j0.detector=null),!j0.detector&&e.body.detector&&e.body.detector.modelPath){j0.detector=await W(e.body.detector.modelPath);let t=Object.values(j0.detector.modelSignature.inputs);e2.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&j0.detector&&p("cached model:",j0.detector.modelUrl);return await d3(),j0.detector}async function b3(e){if(u3.initial&&(j0.landmarks=null),j0.landmarks)e.debug&&p("cached model:",j0.landmarks.modelUrl);else{j0.landmarks=await W(e.body.modelPath);let t=Object.values(j0.landmarks.modelSignature.inputs);e2.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return j0.landmarks}async function lA(e,t){let o={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let n;if(E2&&(o.cropped=O0.image.cropAndResize(e,[E2],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],A=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Re=[[0,0],r,A,[0,0]],o.pad=O0.pad(o.cropped||e,Re),o.resize=O0.image.resizeBilinear(o.pad,[t,t]),n=O0.div(o.resize,B.tf255)}else e.shape[1]!==t?(o.resize=O0.image.resizeBilinear(o.cropped||e,[t,t]),n=O0.div(o.resize,B.tf255)):n=O0.div(o.cropped||e,B.tf255);return Object.keys(o).forEach(r=>O0.dispose(o[r])),n}function yA(e,t){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Re[2][0]+Re[2][1])/t[0]-Re[2][0]),Math.trunc(o.position[1]*(t[1]+Re[1][0]+Re[1][1])/t[1]-Re[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(E2)for(let o of e)o.positionRaw=[o.positionRaw[0]+E2[1],o.positionRaw[1]+E2[0],o.positionRaw[2]],o.position=[Math.trunc(o.positionRaw[0]*t[0]),Math.trunc(o.positionRaw[1]*t[1]),o.positionRaw[2]];return e}async function cA(e){let t=e.find(a=>a.part==="leftPalm"),o=e.find(a=>a.part==="leftWrist"),n=e.find(a=>a.part==="leftIndex");t.position[2]=((o.position[2]||0)+(n.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),A=e.find(a=>a.part==="rightWrist"),s=e.find(a=>a.part==="rightIndex");r.position[2]=((A.position[2]||0)+(s.position[2]||0))/2}async function xA(e,t,o){var h;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=(h=j0.landmarks)==null?void 0:h.execute(e,iA.landmarks);let r=(await n.poseflag.data())[0],A=await n.ld.data(),s=await n.world.data();Object.keys(n).forEach(m=>O0.dispose(n[m]));let a=[],l=5;for(let m=0;mm.position),i=ce(x,[o[0],o[1]]),d={};for(let[m,P]of Object.entries(A1)){let M=[];for(let g=0;gS.part===P[g]),u=y.find(S=>S.part===P[g+1]);f&&u&&M.push([f.position,u.position])}d[m]=M}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:y,annotations:d}}async function a1(e,t){let o=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>b()-m3,r=s1<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&o5!==null)s1++;else{let A={};A.landmarks=await lA(e,256),o5=await xA(A.landmarks,t,o),Object.keys(A).forEach(s=>O0.dispose(A[s])),m3=b(),s1=0}return o5?[o5]:[]}var w0=Z(D());var t2=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var xe,Ge=0,i1=[],M3=0,l1=Number.MAX_SAFE_INTEGER;async function P3(e){if(R.initial&&(xe=null),xe)e.debug&&p("cached model:",xe.modelUrl);else{xe=await W(e.object.modelPath);let t=Object.values(xe.modelSignature.inputs);Ge=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return xe}async function dA(e,t,o){if(!e)return[];let n={},r=[],A=await e.array();n.squeeze=w0.squeeze(e);let s=w0.split(n.squeeze,6,1);n.stack=w0.stack([s[1],s[0],s[3],s[2]],1),n.boxes=w0.squeeze(n.stack),n.scores=w0.squeeze(s[4]),n.classes=w0.squeeze(s[5]),w0.dispose([e,...s]),n.nms=await w0.image.nonMaxSuppressionAsync(n.boxes,n.scores,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence||0);let a=await n.nms.data(),l=0;for(let y of Array.from(a)){let x=Math.trunc(100*A[0][y][4])/100,i=A[0][y][5],d=t2[i].label,[c,h]=[A[0][y][0]/Ge,A[0][y][1]/Ge],m=[c,h,A[0][y][2]/Ge-c,A[0][y][3]/Ge-h],P=[Math.trunc(m[0]*t[0]),Math.trunc(m[1]*t[1]),Math.trunc(m[2]*t[0]),Math.trunc(m[3]*t[1])];r.push({id:l++,score:x,class:i,label:d,box:P,boxRaw:m})}return Object.keys(n).forEach(y=>w0.dispose(n[y])),r}async function y1(e,t){let o=(t.object.skipTime||0)>b()-M3,n=l1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&i1.length>0?(l1++,i1):(l1=0,new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=w0.image.resizeBilinear(e,[Ge,Ge]),a=t.object.enabled?xe==null?void 0:xe.execute(s,["tower_0/detections"]):null;M3=b(),w0.dispose(s);let l=await dA(a,A,t);i1=l,r(l)}))}var J=Z(D());var n5={};be(n5,{connected:()=>x1,kpt:()=>c1});var c1=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],x1={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var g0,R3=0,k0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},d1=Number.MAX_SAFE_INTEGER;async function T3(e){return R.initial&&(g0=null),g0?e.debug&&p("cached model:",g0.modelUrl):g0=await W(e.body.modelPath),g0}async function fA(e,t){let[o,n]=e.shape,r=J.reshape(e,[n*o]),A=J.max(r,0),s=(await A.data())[0];if(s>t){let a=J.argMax(r,0),l=J.mod(a,o),y=(await l.data())[0],x=J.div(a,o),i=(await x.data())[0];return J.dispose([r,A,a,l,x]),[y,i,s]}else return J.dispose([r,A]),[0,0,s]}async function f1(e,t){let o=(t.body.skipTime||0)>b()-R3,n=d1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n&&Object.keys(k0.keypoints).length>0?(d1++,[k0]):(d1=0,new Promise(async r=>{var i;let A=J.tidy(()=>{if(!(g0!=null&&g0.inputs[0].shape))return null;let d=J.image.resizeBilinear(e,[g0.inputs[0].shape[2],g0.inputs[0].shape[1]],!1),c=J.mul(d,B.tf2);return J.sub(c,B.tf1)}),s;if(t.body.enabled&&(s=g0==null?void 0:g0.execute(A)),R3=b(),J.dispose(A),s){k0.keypoints.length=0;let d=J.squeeze(s);J.dispose(s);let c=J.unstack(d,2);J.dispose(d);for(let h=0;h(((i=t.body)==null?void 0:i.minConfidence)||0)&&k0.keypoints.push({score:Math.round(100*M)/100,part:c1[h],positionRaw:[m/g0.inputs[0].shape[2],P/g0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/g0.inputs[0].shape[2]),Math.round(e.shape[1]*P/g0.inputs[0].shape[1])]})}c.forEach(h=>J.dispose(h))}k0.score=k0.keypoints.reduce((d,c)=>c.score>d?c.score:d,0);let a=k0.keypoints.map(d=>d.position[0]),l=k0.keypoints.map(d=>d.position[1]);k0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let y=k0.keypoints.map(d=>d.positionRaw[0]),x=k0.keypoints.map(d=>d.positionRaw[1]);k0.boxRaw=[Math.min(...y),Math.min(...x),Math.max(...y)-Math.min(...y),Math.max(...x)-Math.min(...x)];for(let[d,c]of Object.entries(x1)){let h=[];for(let m=0;mg.part===c[m]),M=k0.keypoints.find(g=>g.part===c[m+1]);P&&M&&P.score>(t.body.minConfidence||0)&&M.score>(t.body.minConfidence||0)&&h.push([P.position,M.position])}k0.annotations[d]=h}r([k0])}))}var J0=Z(D());var mA=["angry","disgust","fear","happy","sad","surprise","neutral"],D0,r5=[],k3=0,E3=0,m1=Number.MAX_SAFE_INTEGER;async function z3(e){var t;return R.initial&&(D0=null),D0?e.debug&&p("cached model:",D0.modelUrl):D0=await W((t=e.face.emotion)==null?void 0:t.modelPath),D0}async function p1(e,t,o,n){var s,a;if(!D0)return[];let r=m1<(((s=t.face.emotion)==null?void 0:s.skipFrames)||0),A=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>b()-E3;return t.skipAllowed&&A&&r&&k3===n&&r5[o]&&r5[o].length>0?(m1++,r5[o]):(m1=0,new Promise(async l=>{var x,i;let y=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},c=D0!=null&&D0.inputs[0].shape?D0.inputs[0].shape[2]:0;d.resize=J0.image.resizeBilinear(e,[c,c],!1),d.channels=J0.mul(d.resize,B.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,B.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,B.tf2),d.emotion=D0==null?void 0:D0.execute(d.grayscaleMul),E3=b();let h=await d.emotion.data();for(let m=0;m(((i=t.face.emotion)==null?void 0:i.minConfidence)||0)&&y.push({score:Math.min(.99,Math.trunc(100*h[m])/100),emotion:mA[m]});y.sort((m,P)=>P.score-m.score),Object.keys(d).forEach(m=>J0.dispose(d[m]))}r5[o]=y,k3=n,l(y)}))}var A5=Z(D());var N0,u1=[],C3=0,I3=0,j3=Number.MAX_SAFE_INTEGER;async function O3(e){return R.initial&&(N0=null),N0?e.debug&&p("cached model:",N0.modelUrl):N0=await W(e.face.mobilefacenet.modelPath),N0}async function h1(e,t,o,n){var s,a;if(!N0)return[];let r=j3<(((s=t.face.mobilefacenet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>b()-I3;return t.skipAllowed&&A&&r&&C3===n&&u1[o]?(j3++,u1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.mobilefacenet)==null?void 0:x.enabled)&&(N0==null?void 0:N0.inputs[0].shape)){let i={};i.crop=A5.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1),i.data=N0==null?void 0:N0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>A5.dispose(i[c]))}u1[o]=y,C3=n,I3=b(),l(y)})}var s5=Z(D());var L0,b1=[],L3=0,W3=0,F3=Number.MAX_SAFE_INTEGER;async function G3(e){return R.initial&&(L0=null),L0?e.debug&&p("cached model:",L0.modelUrl):L0=await W(e.face.insightface.modelPath),L0}async function g1(e,t,o,n){var s,a;if(!L0)return[];let r=F3<(((s=t.face.insightface)==null?void 0:s.skipFrames)||0),A=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>b()-W3;return t.skipAllowed&&A&&r&&L3===n&&b1[o]?(F3++,b1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.insightface)==null?void 0:x.enabled)&&(L0==null?void 0:L0.inputs[0].shape)){let i={};i.crop=s5.image.resizeBilinear(e,[L0.inputs[0].shape[2],L0.inputs[0].shape[1]],!1),i.data=L0==null?void 0:L0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>s5.dispose(i[c]))}b1[o]=y,L3=n,W3=b(),l(y)})}var ke=Z(D());var Q0=Z(D());var de,Te=0,pA=2.3,M1=Y0.leftEyeLower0,P1=Y0.rightEyeLower0,o2={leftBounds:[M1[0],M1[M1.length-1]],rightBounds:[P1[0],P1[P1.length-1]]},n2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function Z3(e){var t;return R.initial&&(de=null),de?e.debug&&p("cached model:",de.modelUrl):de=await W((t=e.face.iris)==null?void 0:t.modelPath),Te=de.inputs[0].shape?de.inputs[0].shape[2]:0,Te===-1&&(Te=64),de}function a5(e,t,o,n){for(let r=0;r<$5.length;r++){let{key:A,indices:s}=$5[r],a=Y0[`${o}${A}`];if(!n||n.includes(A))for(let l=0;l{let t=e[o2.leftBounds[0]][2],o=e[o2.rightBounds[0]][2];return t-o},H3=(e,t,o,n,r,A=!1)=>{let s=Q2(J2(t3([e[o],e[n]]),pA)),a=_e(s),l=Q0.image.cropAndResize(t,[[s.startPoint[1]/r,s.startPoint[0]/r,s.endPoint[1]/r,s.endPoint[0]/r]],[0],[Te,Te]);if(A&&R.kernels.includes("flipleftright")){let y=Q0.image.flipLeftRight(l);Q0.dispose(l),l=y}return{box:s,boxSize:a,crop:l}},V3=(e,t,o,n=!1)=>{let r=[];for(let A=0;A{let n=e[Y0[`${o}EyeUpper0`][n2.upperCenter]][2],r=e[Y0[`${o}EyeLower0`][n2.lowerCenter]][2],A=(n+r)/2;return t.map((s,a)=>{let l=A;return a===2?l=n:a===4&&(l=r),[s[0],s[1],l]})};async function X3(e,t,o,n){if(!de)return o.debug&&p("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:A,crop:s}=H3(e,t,o2.leftBounds[0],o2.leftBounds[1],n,!0),{box:a,boxSize:l,crop:y}=H3(e,t,o2.rightBounds[0],o2.rightBounds[1],n,!0),x=Q0.concat([s,y]);Q0.dispose(s),Q0.dispose(y);let i=de.execute(x);Q0.dispose(x);let d=await i.data();Q0.dispose(i);let c=d.slice(0,n2.numCoordinates*3),{rawCoords:h,iris:m}=V3(c,r,A,!0),P=d.slice(n2.numCoordinates*3),{rawCoords:M,iris:g}=V3(P,a,l,!1),f=uA(e);Math.abs(f)<30?(a5(e,h,"left",null),a5(e,M,"right",null)):f<1?a5(e,h,"left",["EyeUpper0","EyeLower0"]):a5(e,M,"right",["EyeUpper0","EyeLower0"]);let u=D3(e,m,"left"),S=D3(e,g,"right");return e.concat(u).concat(S)}var hA=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],bA=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],gA=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],MA=[[474,475],[475,476],[476,477],[477,474]],PA=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],vA=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],RA=[[469,470],[470,471],[471,472],[472,469]],TA=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function we(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var wA={lips:we(hA),leftEye:we(bA),leftEyebrow:we(gA),leftIris:we(MA),rightEye:we(PA),rightEyebrow:we(vA),rightIris:we(RA),faceOval:we(TA)},kA=Object.entries(wA).map(([e,t])=>t.map(o=>[o,e])).flat(),H4=new Map(kA),z2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Be=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],He=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function Y3(e,t){let o={lips:await t.filter(A=>A.size===160)[0].data(),irisL:await t.filter(A=>A.size===10)[0].data(),eyeL:await t.filter(A=>A.size===142)[0].data(),irisR:await t.filter(A=>A.size===10)[1].data(),eyeR:await t.filter(A=>A.size===142)[1].data()},n=Be.reduce((A,s)=>A+=e[s][2],0)/Be.length;for(let A=0;AA+=e[s][2],0)/He.length;for(let A=0;Ab()-se.timestamp,n=se.skipped<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);!t.skipAllowed||!o||!n||se.boxes.length===0?(se.boxes=await y3(e,t),se.timestamp=b(),se.skipped=0):se.skipped++;let r=[],A=[],s=0;for(let f=0;fG.shape[G.shape.length-1]===1).data();if(w.faceScore=Math.round(100*X[0])/100,w.faceScore<(((h=t.face.detector)==null?void 0:h.minConfidence)||1)){if(u.confidence=w.faceScore,(m=t.face.mesh)!=null&&m.keepInvalid){w.box=Y2(u,e),w.boxRaw=K2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(G=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*G[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*G[1]/$e()]),w.meshRaw=w.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/Ve]);for(let G of Object.keys(Le))w.annotations[G]=[w.mesh[Le[G]]]}}else{let G=E.find(y0=>y0.shape[y0.shape.length-1]===1404),o0=ke.reshape(G,[-1,3]),_=await o0.array();ke.dispose(o0),(P=t.face.attention)!=null&&P.enabled?_=await Y3(_,E):(M=t.face.iris)!=null&&M.enabled&&(_=await X3(_,w.tensor,t,Ve)),w.mesh=r3(_,u,S,N,Ve),w.meshRaw=w.mesh.map(y0=>[y0[0]/(e.shape[2]||0),y0[1]/(e.shape[1]||0),(y0[2]||0)/Ve]);for(let y0 of Object.keys(Y0))w.annotations[y0]=Y0[y0].map(V0=>w.mesh[V0]);w.score=w.faceScore;let z={...s3(w.mesh,u),confidence:u.confidence,landmarks:u.landmarks};w.box=Y2(z,e),w.boxRaw=K2(z,e),A.push(z)}ke.dispose(E)}else{w.box=Y2(u,e),w.boxRaw=K2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(E=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*E[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*E[1]/$e()]),w.meshRaw=w.mesh.map(E=>[E[0]/(e.shape[2]||0),E[1]/(e.shape[1]||0),(E[2]||0)/Ve]);for(let E of Object.keys(Le))w.annotations[E]=[w.mesh[Le[E]]]}w.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(w):ke.dispose(w.tensor)}return se.boxes=A,r}async function J3(e){var t,o,n,r,A,s;return R.initial&&(M0=null),((o=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:o.enabled)&&(M0==null?void 0:M0.signature)&&Object.keys(((n=M0==null?void 0:M0.signature)==null?void 0:n.outputs)||{}).length<6&&(M0=null),M0?e.debug&&p("cached model:",M0.modelUrl):(r=e.face.attention)!=null&&r.enabled?M0=await W((A=e.face.attention)==null?void 0:A.modelPath):M0=await W((s=e.face.mesh)==null?void 0:s.modelPath),Ve=M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0}var Q3=We,_3=w2;var _0=Z(D());var W0,i5=[],$3=0,eo=0,R1=Number.MAX_SAFE_INTEGER;async function to(e){var t;return R.initial&&(W0=null),W0?e.debug&&p("cached model:",W0.modelUrl):W0=await W((t=e.face.description)==null?void 0:t.modelPath),W0}function T1(e){let t=e.image||e.tensor||e;if(!(W0!=null&&W0.inputs[0].shape))return t;let o=_0.image.resizeBilinear(t,[W0.inputs[0].shape[2],W0.inputs[0].shape[1]],!1),n=_0.mul(o,B.tf255);return _0.dispose(o),n}async function w1(e,t,o,n){var s,a,l,y;if(!W0)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=R1<(((s=t.face.description)==null?void 0:s.skipFrames)||0),A=(((a=t.face.description)==null?void 0:a.skipTime)||0)>b()-$3;return t.skipAllowed&&r&&A&&eo===n&&((l=i5[o])==null?void 0:l.age)&&((y=i5[o])==null?void 0:y.age)>0?(R1++,i5[o]):(R1=0,new Promise(async x=>{var d,c;let i={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((d=t.face.description)!=null&&d.enabled){let h=T1(e),m=W0==null?void 0:W0.execute(h);$3=b(),_0.dispose(h);let M=await(await m.find(H=>H.shape[1]===1)).data(),g=Math.trunc(200*Math.abs(M[0]-.5))/100;g>(((c=t.face.description)==null?void 0:c.minConfidence)||0)&&(i.gender=M[0]<=.5?"female":"male",i.genderScore=Math.min(.99,g));let f=_0.argMax(m.find(H=>H.shape[1]===100),1),u=(await f.data())[0];_0.dispose(f);let N=await m.find(H=>H.shape[1]===100).data();i.age=Math.round(N[u-1]>N[u+1]?10*u-100*N[u-1]:10*u+100*N[u+1])/10;let w=m.find(H=>H.shape[1]===1024),E=w?await w.data():[];i.descriptor=Array.from(E),m.forEach(H=>_0.dispose(H))}i5[o]=i,eo=n,x(i)}))}var F=Z(D());var ro=Z(D());function l5(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function S2(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function Ao(e,t,o){let n=t.shape[1],r=t.shape[2],A=[[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r]];return ro.image.cropAndResize(t,A,[0],o)}function so(e,t){let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(A=>[A[0]*t[0],A[1]*t[1]]);return{startPoint:o,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function y5(e,t=1.5){let o=S2(e),n=l5(e),r=[t*n[0]/2,t*n[1]/2],A=[o[0]-r[0],o[1]-r[1]],s=[o[0]+r[0],o[1]+r[1]];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function c5(e){let t=S2(e),o=l5(e),r=Math.max(...o)/2,A=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function zA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function ao(e,t){let o=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return zA(o)}var oo=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ee(e,t){let o=0;for(let n=0;n[o.x,o.y]),this.anchorsTensor=F.tensor2d(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=F.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=F.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let o={};o.boxOffsets=F.slice(t,[0,0],[-1,2]),o.boxSizes=F.slice(t,[0,2],[-1,2]),o.div=F.div(o.boxOffsets,this.inputSizeTensor),o.boxCenterPoints=F.add(o.div,this.anchorsTensor),o.halfBoxSizes=F.div(o.boxSizes,this.doubleInputSizeTensor),o.sub=F.sub(o.boxCenterPoints,o.halfBoxSizes),o.startPoints=F.mul(o.sub,this.inputSizeTensor),o.add=F.add(o.boxCenterPoints,o.halfBoxSizes),o.endPoints=F.mul(o.add,this.inputSizeTensor);let n=F.concat2d([o.startPoints,o.endPoints],1);return Object.keys(o).forEach(r=>F.dispose(o[r])),n}normalizeLandmarks(t,o){let n={};n.reshape=F.reshape(t,[-1,7,2]),n.div=F.div(n.reshape,this.inputSizeTensor),n.landmarks=F.add(n.div,this.anchors[o]);let r=F.mul(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(A=>F.dispose(n[A])),r}async predict(t,o){let n={};n.resize=F.image.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=F.div(n.resize,B.tf127),n.image=F.sub(n.div,B.tf1),n.batched=this.model.execute(n.image),n.predictions=F.squeeze(n.batched),n.slice=F.slice(n.predictions,[0,0],[-1,1]),n.sigmoid=F.sigmoid(n.slice),n.scores=F.squeeze(n.sigmoid);let r=await n.scores.data();n.boxes=F.slice(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await F.image.nonMaxSuppressionAsync(n.norm,n.scores,3*o.hand.maxDetected,o.hand.iouThreshold,o.hand.minConfidence);let A=await n.nms.array(),s=[];for(let a of A){let l={};l.box=F.slice(n.norm,[a,0],[1,-1]),l.slice=F.slice(n.predictions,[a,5],[1,14]),l.norm=this.normalizeLandmarks(l.slice,a),l.palmLandmarks=F.reshape(l.norm,[-1,2]);let y=await l.box.data(),x=y.slice(0,2),i=y.slice(2,4),d=await l.palmLandmarks.array(),c={startPoint:x,endPoint:i,palmLandmarks:d,confidence:r[a]},h=so(c,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);s.push(h),Object.keys(l).forEach(m=>F.dispose(l[m]))}return Object.keys(n).forEach(a=>F.dispose(n[a])),s}};var F0=Z(D());var jA=5,co=1.65,xo=[0,5,9,13,17,1,2],OA=0,NA=2,fo=0,d5=class{constructor(t,o){T(this,"handDetector");T(this,"handPoseModel");T(this,"inputSize");T(this,"storedBoxes");T(this,"skipped");T(this,"detectedHands");this.handDetector=t,this.handPoseModel=o,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let o=t.map(s=>s[0]),n=t.map(s=>s[1]),r=[Math.min(...o),Math.min(...n)],A=[Math.max(...o),Math.max(...n)];return{startPoint:r,endPoint:A}}getBoxForPalmLandmarks(t,o){let n=t.map(A=>z1([...A,1],o)),r=this.calculateLandmarksBoundingBox(n);return y5(c5(r),jA)}getBoxForHandLandmarks(t){let o=this.calculateLandmarksBoundingBox(t),n=y5(c5(o),co);n.palmLandmarks=[];for(let r=0;r[s[0]*(c[0]-this.inputSize/2),s[1]*(c[1]-this.inputSize/2),s[2]*c[2]]),l=E1(n,[0,0]),y=a.map(c=>[...z1(c,l),c[2]]),x=io(r),i=[...S2(o),1],d=[Ee(i,x[0]),Ee(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2])])}async estimateHands(t,o){let n=!1,r,A=(o.hand.skipTime||0)>b()-fo,s=this.skipped<(o.hand.skipFrames||0);o.skipAllowed&&A&&s&&(r=await this.handDetector.predict(t,o),this.skipped=0),o.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==o.hand.maxDetected||!o.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let a=[];for(let l=0;l=o.hand.minConfidence/4){let S=F0.reshape(f,[-1,3]),N=await S.array();F0.dispose(f),F0.dispose(S);let w=this.transformRawCoords(N,m,x,h),E=this.getBoxForHandLandmarks(w);this.storedBoxes[l]={...E,confidence:u};let H={landmarks:w,confidence:u,boxConfidence:y.confidence,fingerConfidence:u,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};a.push(H)}else this.storedBoxes[l]=null;F0.dispose(f)}else{let x=y5(c5(y),co),i={confidence:y.confidence,boxConfidence:y.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>o.hand.maxDetected&&(a.length=o.hand.maxDetected),a}};var E0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>E0.nameMapping[e],getPoints:e=>E0.pointsMapping[e]},Se={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Se.nameMapping[e]},n0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>n0.nameMapping[e]},ze=class{constructor(t){T(this,"name");T(this,"curls");T(this,"directions");T(this,"weights");T(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,o,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([o,n])}direction(t,o,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([o,n])}weight(t,o){this.weights[t]=o;let n=this.weights.reduce((r,A)=>r+A,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,o){let n=0;for(let r in t){let A=t[r],s=this.curls[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}for(let r in o){let A=o[r],s=this.directions[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:$0,index:fe,middle:me,ring:De,pinky:Ze}=E0,{none:ee,half:WA,full:te}=Se,{verticalUp:r2,verticalDown:os,horizontalLeft:S1,horizontalRight:FA,diagonalUpRight:GA,diagonalUpLeft:A2,diagonalDownRight:ns,diagonalDownLeft:rs}=n0,Ce=new ze("thumbs up");Ce.curl($0,ee,1);Ce.direction($0,r2,1);Ce.direction($0,A2,.25);Ce.direction($0,GA,.25);for(let e of[E0.index,E0.middle,E0.ring,E0.pinky])Ce.curl(e,te,1),Ce.direction(e,S1,1),Ce.direction(e,FA,1);var d0=new ze("victory");d0.curl($0,WA,.5);d0.curl($0,ee,.5);d0.direction($0,r2,1);d0.direction($0,A2,1);d0.curl(fe,ee,1);d0.direction(fe,r2,.75);d0.direction(fe,A2,1);d0.curl(me,ee,1);d0.direction(me,r2,1);d0.direction(me,A2,.75);d0.curl(De,te,1);d0.direction(De,r2,.2);d0.direction(De,A2,1);d0.direction(De,S1,.2);d0.curl(Ze,te,1);d0.direction(Ze,r2,.2);d0.direction(Ze,A2,1);d0.direction(Ze,S1,.2);d0.weight(fe,2);d0.weight(me,2);var Ie=new ze("point");Ie.curl($0,te,1);Ie.curl(fe,ee,.5);Ie.curl(me,te,.5);Ie.curl(De,te,.5);Ie.curl(Ze,te,.5);Ie.weight(fe,2);Ie.weight(me,2);var je=new ze("middle finger");je.curl($0,ee,1);je.curl(fe,te,.5);je.curl(me,te,.5);je.curl(De,te,.5);je.curl(Ze,te,.5);je.weight(fe,2);je.weight(me,2);var s2=new ze("open palm");s2.curl($0,ee,.75);s2.curl(fe,ee,.75);s2.curl(me,ee,.75);s2.curl(De,ee,.75);s2.curl(Ze,ee,.75);var mo=[Ce,d0,Ie,je,s2];var BA=.7,Xe={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function po(e,t,o,n){let r=(t-n)/(e-o),A=Math.atan(r)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function ho(e,t){if(!e||!t)return[0,0];let o=po(e[0],e[1],t[0],t[1]);if(e.length===2)return o;let n=po(e[1],e[2],t[1],t[2]);return[o,n]}function uo(e,t=1){let o=0,n=0,r=0;return e>=75&&e<=105?o=1*t:e>=25&&e<=155?n=1*t:r=1*t,[o,n,r]}function HA(e,t,o){let n=e[0]-t[0],r=e[0]-o[0],A=t[0]-o[0],s=e[1]-t[1],a=e[1]-o[1],l=t[1]-o[1],y=e[2]-t[2],x=e[2]-o[2],i=t[2]-o[2],d=Math.sqrt(n*n+s*s+y*y),c=Math.sqrt(r*r+a*a+x*x),h=Math.sqrt(A*A+l*l+i*i),m=(h*h+d*d-c*c)/(2*h*d);m>1?m=1:m<-1&&(m=-1);let P=Math.acos(m);P=57.2958*P%180;let M;return P>Xe.NO_CURL_START_LIMIT?M=Se.none:P>Xe.HALF_CURL_START_LIMIT?M=Se.half:M=Se.full,M}function bo(e,t,o,n){let r;return n===Math.abs(e)?e>0?r=n0.horizontalLeft:r=n0.horizontalRight:n===Math.abs(t)?t>0?r=n0.horizontalLeft:r=n0.horizontalRight:o>0?r=n0.horizontalLeft:r=n0.horizontalRight,r}function go(e,t,o,n){let r;return n===Math.abs(e)?e<0?r=n0.verticalDown:r=n0.verticalUp:n===Math.abs(t)?t<0?r=n0.verticalDown:r=n0.verticalUp:o<0?r=n0.verticalDown:r=n0.verticalUp,r}function VA(e,t,o,n,r,A,s,a){let l,y=go(e,t,o,n),x=bo(r,A,s,a);return y===n0.verticalUp?x===n0.horizontalLeft?l=n0.diagonalUpLeft:l=n0.diagonalUpRight:x===n0.horizontalLeft?l=n0.diagonalDownLeft:l=n0.diagonalDownRight,l}function DA(e,t,o,n){let r=e[0]-t[0],A=e[0]-o[0],s=t[0]-o[0],a=e[1]-t[1],l=e[1]-o[1],y=t[1]-o[1],x=Math.max(Math.abs(r),Math.abs(A),Math.abs(s)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(y)),d=0,c=0,h=0,m=i/(x+1e-5);m>1.5?d+=Xe.DISTANCE_VOTE_POWER:m>.66?c+=Xe.DISTANCE_VOTE_POWER:h+=Xe.DISTANCE_VOTE_POWER;let P=Math.sqrt(r*r+a*a),M=Math.sqrt(A*A+l*l),g=Math.sqrt(s*s+y*y),f=Math.max(P,M,g),u=e[0],S=e[1],N=o[0],w=o[1];f===P?(N=o[0],w=o[1]):f===g&&(u=t[0],S=t[1]);let X=ho([u,S],[N,w]),G=uo(X,Xe.TOTAL_ANGLE_VOTE_POWER);d+=G[0],c+=G[1],h+=G[2];for(let _ of n){let z=uo(_,Xe.SINGLE_ANGLE_VOTE_POWER);d+=z[0],c+=z[1],h+=z[2]}let o0;return d===Math.max(d,c,h)?o0=go(l,a,y,i):h===Math.max(c,h)?o0=bo(A,r,s,x):o0=VA(l,a,y,i,A,r,s,x),o0}function Mo(e){let t=[],o=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let A of E0.all){let s=E0.getPoints(A),a=[],l=[];for(let y of s){let x=e[y[0]],i=e[y[1]],d=ho(x,i),c=d[0],h=d[1];a.push(c),l.push(h)}t.push(a),o.push(l)}for(let A of E0.all){let s=A===E0.thumb?1:0,a=E0.getPoints(A),l=e[a[s][0]],y=e[a[s+1][1]],x=e[a[3][1]],i=HA(l,y,x),d=DA(l,y,x,t[A].slice(s));n[A]=i,r[A]=d}return{curls:n,directions:r}}function f5(e){if(!e||e.length===0)return null;let t=Mo(e),o={};for(let n of E0.all)o[E0.getName(n)]={curl:Se.getName(t.curls[n]),direction:n0.getName(t.directions[n])};return o}function Po(e){let t=[];if(!e||e.length===0)return t;let o=Mo(e);for(let n of mo){let r=n.matchAgainst(o.curls,o.directions);r>=BA&&t.push({name:n.name,confidence:r})}return t}var vo={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},a2,i2,Ro;async function I1(e,t){let o=await Ro.estimateHands(e,t);if(!o)return[];let n=[];for(let r=0;ro[r].landmarks[i]);let s=o[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(s&&s.length>0){for(let x of s)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=o[r].box?[Math.trunc(Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.max(0,o[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,o[r].box.bottomRight[0])-Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,o[r].box.bottomRight[1])-Math.max(0,o[r].box.topLeft[1]))]:[0,0,0,0],l=[o[r].box.topLeft[0]/(e.shape[2]||0),o[r].box.topLeft[1]/(e.shape[1]||0),(o[r].box.bottomRight[0]-o[r].box.topLeft[0])/(e.shape[2]||0),(o[r].box.bottomRight[1]-o[r].box.topLeft[1])/(e.shape[1]||0)];let y=f5(s);n.push({id:r,score:Math.round(100*o[r].confidence)/100,boxScore:Math.round(100*o[r].boxConfidence)/100,fingerScore:Math.round(100*o[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:s,annotations:A,landmarks:y})}return n}async function j1(e){var o,n;R.initial&&(a2=null,i2=null),!a2||!i2?[a2,i2]=await Promise.all([e.hand.enabled?W((o=e.hand.detector)==null?void 0:o.modelPath):null,e.hand.landmarks?W((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&p("cached model:",a2.modelUrl),e.debug&&p("cached model:",i2.modelUrl));let t=new x5(a2);return Ro=new d5(t,i2),[a2,i2]}var Q=Z(D());var i0=Z(D());var t0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ZA(){let e=t0.gl;!e||(t0.extensions=e.getSupportedExtensions())}async function wo(e){var t;if(e.config.backend==="humangl"&&(t0.name in i0.engine().registry&&(!t0.gl||!t0.gl.getParameter(t0.gl.VERSION))&&(p("error: humangl backend invalid context"),m5(e)),!i0.findBackend(t0.name))){try{t0.canvas=await T0(100,100)}catch(n){p("error: cannot create canvas:",n);return}try{if(t0.gl=(t=t0.canvas)==null?void 0:t.getContext("webgl2",t0.webGLattr),!t0.gl.getParameter(t0.gl.VERSION).includes("2.0")){p("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}t0.canvas&&(t0.canvas.addEventListener("webglcontextlost",async r=>{throw p("error: humangl:",r.type),p("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),t0.canvas.addEventListener("webglcontextrestored",r=>{p("error: humangl context restored:",r)}),t0.canvas.addEventListener("webglcontextcreationerror",r=>{p("error: humangl context create:",r)}))}catch(n){p("error: cannot get WebGL context:",n);return}try{i0.setWebGLContext(2,t0.gl)}catch(n){p("error: cannot set WebGL context:",n);return}try{let n=new i0.GPGPUContext(t0.gl);i0.registerBackend(t0.name,()=>new i0.MathBackendWebGL(n),t0.priority)}catch(n){p("error: cannot register WebGL backend:",n);return}try{i0.getKernelsForBackend("webgl").forEach(r=>{let A={...r,backendName:t0.name};i0.registerKernel(A)})}catch(n){p("error: cannot update WebGL backend registration:",n);return}let o=i0.backend().getGPGPUContext?i0.backend().getGPGPUContext().gl:null;if(o)p(`humangl webgl version:${o.getParameter(o.VERSION)} renderer:${o.getParameter(o.RENDERER)}`);else{p("error: no current gl context:",o,t0.gl);return}try{i0.env().flagRegistry.WEBGL_VERSION&&i0.env().set("WEBGL_VERSION",2)}catch(n){p("error: cannot set WebGL backend flags:",n);return}ZA(),p("backend registered:",t0.name)}}var I=Z(D());function XA(){if(!R.kernels.includes("mod")){let e={kernelName:"Mod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.sub(t.inputs.a,I.mul(I.div(t.inputs.a,t.inputs.b),t.inputs.b)))};I.registerKernel(e),R.kernels.push("mod")}if(!R.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.floorDiv(t.inputs.a/t.inputs.b)*t.inputs.b+I.mod(t.inputs.a,t.inputs.b))};I.registerKernel(e),R.kernels.push("floormod")}}async function u5(e,t=!1){if(e.state="backend",t||R.initial||e.config.backend&&e.config.backend.length>0&&I.getBackend()!==e.config.backend){let o=b();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&p("running inside web worker"),R.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&p("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),R.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&p(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")p("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&p("enumerated webgpu adapter:",r),!r)p("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let A="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;p("webgpu adapter info:",A)}}e.config.backend==="humangl"&&await wo(e);let n=Object.keys(I.engine().registryFactory);if(e.config.debug&&p("available backends:",n),n.includes(e.config.backend)||(p(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&p(`override: setting backend ${e.config.backend}`)),e.config.debug&&p("setting backend:",e.config.backend),e.config.backend==="wasm"){if(I.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&I.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&p("wasm path:",e.config.wasmPath),typeof(I==null?void 0:I.setWasmPaths)!="undefined")await I.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,A=!1;try{r=await I.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await I.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&p(`wasm execution: ${A?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&p("warning: wasm simd support is not enabled")}catch(s){p("wasm detection failed")}}try{await I.setBackend(e.config.backend),await I.ready(),Gt()}catch(r){return p("error: cannot set backend:",e.config.backend,r),!1}}if(I.getBackend()==="humangl"&&(I.env().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&I.env().set("CHECK_COMPUTATION_FOR_ERRORS",!1),I.env().flagRegistry.WEBGL_CPU_FORWARD&&I.env().set("WEBGL_CPU_FORWARD",!0),I.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&I.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),I.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&I.env().set("CPU_HANDOFF_SIZE_THRESHOLD",256),I.env().flagRegistry.WEBGL_EXP_CONV&&I.env().set("WEBGL_EXP_CONV",!0),I.env().flagRegistry.USE_SETTIMEOUTCUSTOM&&I.env().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(p("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),I.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),I.backend().getGPGPUContext)){let n=await I.backend().getGPGPUContext().gl;e.config.debug&&p(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}I.getBackend(),I.enableProdMode(),await I.ready(),e.performance.initBackend=Math.trunc(b()-o),e.config.backend=I.getBackend(),await R.updateBackend(),XA()}return!0}function h5(e,t){for(let o of e){let n={kernelName:o,backendName:t.backend,kernelFunc:()=>{t.debug&&p("kernelFunc",o,t.backend)}};I.registerKernel(n)}R.kernels=I.getKernelsForBackend(I.getBackend()).map(o=>o.kernelName.toLowerCase())}var p0=[null,null],UA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Oe=[[0,0],[0,0]],YA=["hand","fist","pinch","point","face","tip","pinchtip"],Eo=4,zo=1.6,KA=512,JA=1.4,b5=Number.MAX_SAFE_INTEGER,O1=0,pe=[0,0],l0={boxes:[],hands:[]},So={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Co(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&p("cached model:",p0[0].modelUrl);else{h5(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await W((t=e.hand.detector)==null?void 0:t.modelPath);let o=Object.values(p0[0].modelSignature.inputs);Oe[0][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[0][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[0]}async function Io(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&p("cached model:",p0[1].modelUrl);else{p0[1]=await W((t=e.hand.skeleton)==null?void 0:t.modelPath);let o=Object.values(p0[1].modelSignature.inputs);Oe[1][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[1][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[1]}async function QA(e,t){let o=[];if(!e||!p0[0])return o;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,KA),s=Math.round(A*r/8)*8;n.resize=Q.image.resizeBilinear(e,[A,s]),n.cast=Q.cast(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await p0[0].executeAsync(n.cast,UA),n.boxes=Q.squeeze(n.rawBoxes,[0,2]),n.scores=Q.squeeze(n.rawScores,[0]);let a=Q.unstack(n.scores,1);Q.dispose(a[Eo]),a.splice(Eo,1),n.filtered=Q.stack(a,1),Q.dispose(a),n.max=Q.max(n.filtered,1),n.argmax=Q.argMax(n.filtered,1);let l=0;n.nms=await Q.image.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let y=await n.nms.data(),x=await n.max.data(),i=await n.argmax.data();for(let d of Array.from(y)){let c=Q.slice(n.boxes,d,1),h=await c.data();Q.dispose(c);let m=[h[1],h[0],h[3]-h[1],h[2]-h[0]],P=e5(m,JA),M=[Math.trunc(m[0]*pe[0]),Math.trunc(m[1]*pe[1]),Math.trunc(m[2]*pe[0]),Math.trunc(m[3]*pe[1])],g=x[d],f=YA[i[d]],u={id:l++,score:g,box:M,boxRaw:P,label:f};o.push(u)}return Object.keys(n).forEach(d=>Q.dispose(n[d])),o.sort((d,c)=>c.score-d.score),o.length>(t.hand.maxDetected||1)&&(o.length=t.hand.maxDetected||1),o}async function N1(e,t,o){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&o.hand.landmarks&&t.score>(o.hand.minConfidence||0)){let r={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[A],[0],[Oe[1][0],Oe[1][1]],"bilinear"),r.div=Q.div(r.crop,B.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let s=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(s))))/100;if(a>=(o.hand.minConfidence||0)){n.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Oe[1][1],i[1]/Oe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);n.keypoints=x.map(i=>[pe[0]*(i[0]+t.boxRaw[0]),pe[1]*(i[1]+t.boxRaw[1]),i[2]||0]),n.landmarks=f5(n.keypoints);for(let i of Object.keys(So))n.annotations[i]=So[i].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return n}async function L1(e,t){var r,A;if(!p0[0]||!p0[1]||!((r=p0[0])!=null&&r.inputs[0].shape)||!((A=p0[1])!=null&&A.inputs[0].shape))return[];pe=[e.shape[2]||0,e.shape[1]||0],b5++;let o=(t.hand.skipTime||0)>b()-O1,n=b5<(t.hand.skipFrames||0);return t.skipAllowed&&o&&n?l0.hands:new Promise(async s=>{let a=3*(t.hand.skipTime||0)>b()-O1,l=b5<3*(t.hand.skipFrames||0);t.skipAllowed&&l0.hands.length===t.hand.maxDetected?l0.hands=await Promise.all(l0.boxes.map(x=>N1(e,x,t))):t.skipAllowed&&a&&l&&l0.hands.length>0?l0.hands=await Promise.all(l0.boxes.map(x=>N1(e,x,t))):(l0.boxes=await QA(e,t),O1=b(),l0.hands=await Promise.all(l0.boxes.map(x=>N1(e,x,t))),b5=0);let y=[...l0.boxes];if(l0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&l0.hands[x].fingerScore&&l0.hands[x].fingerScore>(t.hand.minConfidence||0)){let d=e5(i.box,zo),c=e5(i.boxRaw,zo);l0.boxes.push({...y[x],box:d,boxRaw:c})}}for(let x=0;xb()-No,A=W1<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&Oo===n&&g5[o]?(W1++,g5[o]):(W1=0,new Promise(async l=>{let y=M5.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),x=P0==null?void 0:P0.execute(y),i=(await x.data())[0];g5[o]=Math.round(100*i)/100,Oo=n,No=b(),M5.dispose([y,x]),l(g5[o])}))}var Vo=Z(D());var C2={};be(C2,{connected:()=>v5,horizontal:()=>G1,kpt:()=>P5,relative:()=>H1,vertical:()=>B1});var P5=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],G1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],B1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],H1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],v5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ne=Z(D()),Fo=.005,G0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function V1(e){for(let t of G1){let o=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[1]y&&y.part===t[0]),r=e.keypoints.findIndex(y=>y&&y.part===t[1]),A=e.keypoints.findIndex(y=>y&&y.part===o[0]),s=e.keypoints.findIndex(y=>y&&y.part===o[1]);if(!e.keypoints[A]||!e.keypoints[s])continue;let a=e.keypoints[n]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let y=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=y}}}function Go(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],o.pad=Ne.pad(e,G0.padding),o.resize=Ne.image.resizeBilinear(o.pad,[t,t]);let n=Ne.cast(o.resize,"int32");return Object.keys(o).forEach(r=>Ne.dispose(o[r])),n}function Ho(e,t){e.keypoints=e.keypoints.filter(n=>n&&n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+G0.padding[2][0]+G0.padding[2][1])/t[0]-G0.padding[2][0],n.position[1]*(t[1]+G0.padding[1][0]+G0.padding[1][1])/t[1]-G0.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let o=ce(e.keypoints.map(n=>n.position),t);return e.box=o.box,e.boxRaw=o.boxRaw,e}var B0,R5=0,D1=Number.MAX_SAFE_INTEGER,qe={boxes:[],bodies:[],last:0};async function Do(e){return R.initial&&(B0=null),B0?e.debug&&p("cached model:",B0.modelUrl):(h5(["size"],e),B0=await W(e.body.modelPath)),R5=B0.inputs[0].shape?B0.inputs[0].shape[2]:0,R5<64&&(R5=256),B0}async function $A(e,t,o){let n=e[0][0],r=[],A=0;for(let x=0;xt.body.minConfidence){let i=[n[x][1],n[x][0]];r.push({score:Math.round(100*A)/100,part:P5[x],positionRaw:i,position:[Math.round((o.shape[2]||0)*i[0]),Math.round((o.shape[1]||0)*i[1])]})}A=r.reduce((x,i)=>i.score>x?i.score:x,0);let s=[],a=ce(r.map(x=>x.position),[o.shape[2],o.shape[1]]),l={};for(let[x,i]of Object.entries(v5)){let d=[];for(let c=0;cP.part===i[c]),m=r.find(P=>P.part===i[c+1]);h&&m&&h.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([h.position,m.position])}l[x]=d}let y={id:0,score:A,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return V1(y),s.push(y),s}async function e7(e,t,o){let n=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let d=A[3*i+2];if(d>t.body.minConfidence){let c=[A[3*i+1],A[3*i+0]];a.push({part:P5[i],score:Math.round(100*d)/100,positionRaw:c,position:[Math.round((o.shape[2]||0)*c[0]),Math.round((o.shape[1]||0)*c[1])]})}}let l=ce(a.map(i=>i.position),[o.shape[2],o.shape[1]]),y={};for(let[i,d]of Object.entries(v5)){let c=[];for(let h=0;hM.part===d[h]),P=a.find(M=>M.part===d[h+1]);m&&P&&m.score>(t.body.minConfidence||0)&&P.score>(t.body.minConfidence||0)&&c.push([m.position,P.position])}y[i]=c}let x={id:r,score:s,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:y};V1(x),n.push(x)}}return n.sort((r,A)=>A.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function Z1(e,t){if(!B0||!(B0!=null&&B0.inputs[0].shape))return[];t.skipAllowed||(qe.boxes.length=0),D1++;let o=(t.body.skipTime||0)>b()-qe.last,n=D1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n?qe.bodies:new Promise(async r=>{let A={};D1=0,A.input=Bo(e,R5),A.res=B0==null?void 0:B0.execute(A.input),qe.last=b();let s=await A.res.array();qe.bodies=A.res.shape[2]===17?await $A(s,t,e):await e7(s,t,e);for(let a of qe.bodies)Ho(a,[e.shape[2]||1,e.shape[1]||1]),Go(a.keypoints);Object.keys(A).forEach(a=>Vo.dispose(A[a])),r(qe.bodies)})}var H0=Z(D());var l2,T5=[],Xo=0,X1=Number.MAX_SAFE_INTEGER,k5=0,w5=2.5;async function qo(e){if(!l2||R.initial){l2=await W(e.object.modelPath);let t=Object.values(l2.modelSignature.inputs);k5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&p("cached model:",l2.modelUrl);return l2}async function t7(e,t,o){let n=0,r=[];for(let l of[1,2,4]){let y=l*13,x=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)===t2.length)),i=await x.array(),d=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)(o.object.minConfidence||0)&&M!==61){let f=(.5+Math.trunc(P%y))/y,u=(.5+Math.trunc(P/y))/y,S=m[P].map(_=>_*(y/l/k5)),[N,w]=[f-w5/l*S[0],u-w5/l*S[1]],[E,H]=[f+w5/l*S[2]-N,u+w5/l*S[3]-w],X=[N,w,E,H];X=X.map(_=>Math.max(0,Math.min(_,1)));let G=[X[0]*t[0],X[1]*t[1],X[2]*t[0],X[3]*t[1]],o0={id:n++,score:Math.round(100*g)/100,class:M+1,label:t2[M].label,box:G.map(_=>Math.trunc(_)),boxRaw:X};r.push(o0)}}H0.dispose([x,d,c,h])}let A=r.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),s=r.map(l=>l.score),a=[];if(A&&A.length>0){let l=await H0.image.nonMaxSuppressionAsync(A,s,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence);a=await l.data(),H0.dispose(l)}return r=r.filter((l,y)=>a.includes(y)).sort((l,y)=>y.score-l.score),r}async function q1(e,t){let o=(t.object.skipTime||0)>b()-Xo,n=X1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&T5.length>0?(X1++,T5):(X1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?T5:new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=H0.image.resizeBilinear(e,[k5,k5],!1),a=H0.div(s,B.tf255),l=H0.transpose(a,[0,3,1,2]),y;t.object.enabled&&(y=l2.execute(l)),Xo=b();let x=await t7(y,A,t);T5=x,H0.dispose([s,a,l,...y]),r(x)}))}var z0=Z(D());var j2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],o7=j2.length,I2=j2.reduce((e,t,o)=>(e[t]=o,e),{}),n7=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Cs=n7.map(([e,t])=>[I2[e],I2[t]]),Yo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function Ko(e){let t=e.reduce(({maxX:o,maxY:n,minX:r,minY:A},{position:{x:s,y:a}})=>({maxX:Math.max(o,s),maxY:Math.max(n,a),minX:Math.min(r,s),minY:Math.min(A,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Jo(e,[t,o],[n,r]){let A=t/n,s=o/r,a=(y,x)=>({id:x,score:y.score,boxRaw:[y.box[0]/r,y.box[1]/n,y.box[2]/r,y.box[3]/n],box:[Math.trunc(y.box[0]*s),Math.trunc(y.box[1]*A),Math.trunc(y.box[2]*s),Math.trunc(y.box[3]*A)],keypoints:y.keypoints.map(({score:i,part:d,position:c})=>({score:i,part:d,position:[Math.trunc(c.x*s),Math.trunc(c.y*A)],positionRaw:[c.x/n,c.y/n]})),annotations:{}});return e.map((y,x)=>a(y,x))}var E5=class{constructor(t,o){T(this,"priorityQueue");T(this,"numberOfElements");T(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=o}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let o=2*t;if(oo?o:e}function Qo(e,t,o,n){let r=o-e,A=n-t;return r*r+A*A}function J1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var oe,A7=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],z5=1,y2=16,s7=50**2;function _o(e,t,o,n,r,A,s=2){let a=M=>({y:A.get(M.y,M.x,e),x:A.get(M.y,M.x,A.shape[2]/2+e)}),l=(M,g,f)=>({y:K1(Math.round(M.y/y2),0,g-1),x:K1(Math.round(M.x/y2),0,f-1)}),[y,x]=n.shape,i=l(t.position,y,x),d=a(i),h=J1(t.position,d);for(let M=0;M[I2[d],I2[c]]),s=A.map(([,d])=>d),a=A.map(([d])=>d),l=t.shape[2],y=s.length,x=new Array(l),i=Y1(e.part,y2,o);x[e.part.id]={score:e.score,part:j2[e.part.id],position:i};for(let d=y-1;d>=0;--d){let c=s[d],h=a[d];x[c]&&!x[h]&&(x[h]=_o(d,x[c],h,t,o,r))}for(let d=0;dt){a=!1;break}if(!a)break}return a}function l7(e,t){let[o,n,r]=t.shape,A=new E5(o*n*r,({score:s})=>s);for(let s=0;s{var s;let A=(s=r[n])==null?void 0:s.position;return A?Qo(o,t,A.y,A.x)<=s7:!1})}function y7(e,t){return t.reduce((n,{position:r,score:A},s)=>($o(e,r,s)||(n+=A),n),0)/t.length}function c7(e,t,o,n,r,A){let s=[],a=l7(A,t);for(;s.lengthc.score>A);let i=y7(s,x),d=Ko(x);i>A&&s.push({keypoints:x,box:d,score:Math.round(100*i)/100})}return s}async function Q1(e,t){let o=z0.tidy(()=>{if(!oe.inputs[0].shape)return[];let s=z0.image.resizeBilinear(e,[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]),a=z0.sub(z0.div(z0.cast(s,"float32"),127.5),1),y=oe.execute(a,A7).map(x=>z0.squeeze(x,[0]));return y[1]=z0.sigmoid(y[1]),y}),n=await Promise.all(o.map(s=>s.buffer()));for(let s of o)z0.dispose(s);let r=await c7(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return oe.inputs[0].shape?Jo(r,[e.shape[1],e.shape[2]],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]):[]}async function en(e){return!oe||R.initial?oe=await W(e.body.modelPath):e.debug&&p("cached model:",oe.modelUrl),oe}var r0=Z(D());var ae,_1=!1;async function $1(e){return!ae||R.initial?ae=await W(e.segmentation.modelPath):e.debug&&p("cached model:",ae.modelUrl),ae}async function on(e,t,o){var m,P;if(_1)return{data:[],canvas:null,alpha:null};_1=!0,ae||await $1(o);let n=await Je(e,o),r=((m=n.tensor)==null?void 0:m.shape[2])||0,A=((P=n.tensor)==null?void 0:P.shape[1])||0;if(!n.tensor)return{data:[],canvas:null,alpha:null};let s={};s.resize=r0.image.resizeBilinear(n.tensor,[ae.inputs[0].shape?ae.inputs[0].shape[1]:0,ae.inputs[0].shape?ae.inputs[0].shape[2]:0],!1),r0.dispose(n.tensor),s.norm=r0.div(s.resize,B.tf255),s.res=ae.execute(s.norm),s.squeeze=r0.squeeze(s.res,0),s.squeeze.shape[2]===2?(s.softmax=r0.softmax(s.squeeze),[s.bg,s.fg]=r0.unstack(s.softmax,2),s.expand=r0.expandDims(s.fg,2),s.pad=r0.expandDims(s.expand,0),s.crop=r0.image.cropAndResize(s.pad,[[0,0,.5,.5]],[0],[r,A]),s.data=r0.squeeze(s.crop,0)):s.data=r0.image.resizeBilinear(s.squeeze,[A,r]);let a=Array.from(await s.data.data());if(R.node&&!R.Canvas&&typeof ImageData=="undefined")return o.debug&&p("canvas support missing"),Object.keys(s).forEach(M=>r0.dispose(s[M])),{data:a,canvas:null,alpha:null};let l=T0(r,A);r0.browser&&await r0.browser.toPixels(s.data,l);let y=l.getContext("2d");o.segmentation.blur&&o.segmentation.blur>0&&(y.filter=`blur(${o.segmentation.blur}px)`);let x=y.getImageData(0,0,r,A),i=T0(r,A),d=i.getContext("2d");n.canvas&&d.drawImage(n.canvas,0,0),d.globalCompositeOperation="darken",o.segmentation.blur&&o.segmentation.blur>0&&(d.filter=`blur(${o.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let c=d.getImageData(0,0,r,A);for(let M=0;Mr0.dispose(s[M])),_1=!1,{data:a,canvas:i,alpha:l}}var O2=class{constructor(){T(this,"ssrnetage",null);T(this,"gear",null);T(this,"blazeposedetect",null);T(this,"blazepose",null);T(this,"centernet",null);T(this,"efficientpose",null);T(this,"mobilefacenet",null);T(this,"insightface",null);T(this,"emotion",null);T(this,"facedetect",null);T(this,"faceiris",null);T(this,"facemesh",null);T(this,"faceres",null);T(this,"ssrnetgender",null);T(this,"handpose",null);T(this,"handskeleton",null);T(this,"handtrack",null);T(this,"liveness",null);T(this,"movenet",null);T(this,"nanodet",null);T(this,"posenet",null);T(this,"segmentation",null);T(this,"antispoof",null)}},et=e=>{let t=0,o=0,n=0;for(let A of Object.values(ne))t+=A.sizeFromManifest,o+=A.sizeLoadedWeights,n+=A.sizeDesired;let r=n>0?o/n:0;return{numLoadedModels:Object.values(ne).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:o,totalSizeLoading:n,totalSizeEnabled:void 0,modelStats:Object.values(ne)}};function m5(e){for(let t of Object.keys(e.models))e.models[t]=null}async function tt(e){var t,o,n,r,A,s,a,l,y,x,i,d,c,h,m,P,M,g,f,u,S,N,w,E,H,X,G,o0,_,z,y0,V0;R.initial&&m5(e),e.config.hand.enabled&&(!e.models.handpose&&((o=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:o.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await j1(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(n=e.config.hand.detector)==null?void 0:n.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await j1(e.config))),e.config.body.enabled&&!e.models.blazepose&&((s=(A=e.config.body)==null?void 0:A.modelPath)==null?void 0:s.includes("blazepose"))&&(e.models.blazepose=b3(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=h3(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((l=(a=e.config.body)==null?void 0:a.modelPath)==null?void 0:l.includes("efficientpose"))&&(e.models.efficientpose=T3(e.config)),e.config.body.enabled&&!e.models.movenet&&((x=(y=e.config.body)==null?void 0:y.modelPath)==null?void 0:x.includes("movenet"))&&(e.models.movenet=Do(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=en(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=l3(e.config)),e.config.face.enabled&&((c=e.config.face.antispoof)==null?void 0:c.enabled)&&!e.models.antispoof&&(e.models.antispoof=Jt(e.config)),e.config.face.enabled&&((h=e.config.face.liveness)==null?void 0:h.enabled)&&!e.models.liveness&&(e.models.liveness=Lo(e.config)),e.config.face.enabled&&((m=e.config.face.description)==null?void 0:m.enabled)&&!e.models.faceres&&(e.models.faceres=to(e.config)),e.config.face.enabled&&((P=e.config.face.emotion)==null?void 0:P.enabled)&&!e.models.emotion&&(e.models.emotion=z3(e.config)),e.config.face.enabled&&((M=e.config.face.iris)==null?void 0:M.enabled)&&!((g=e.config.face.attention)!=null&&g.enabled)&&!e.models.faceiris&&(e.models.faceiris=Z3(e.config)),e.config.face.enabled&&((f=e.config.face.mesh)==null?void 0:f.enabled)&&!e.models.facemesh&&(e.models.facemesh=J3(e.config)),e.config.face.enabled&&((u=e.config.face.gear)==null?void 0:u.enabled)&&!e.models.gear&&(e.models.gear=Wt(e.config)),e.config.face.enabled&&((S=e.config.face.ssrnet)==null?void 0:S.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=Vt(e.config)),e.config.face.enabled&&((N=e.config.face.ssrnet)==null?void 0:N.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=qt(e.config)),e.config.face.enabled&&((w=e.config.face.mobilefacenet)==null?void 0:w.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=O3(e.config)),e.config.face.enabled&&((E=e.config.face.insightface)==null?void 0:E.enabled)&&!e.models.insightface&&(e.models.insightface=G3(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((X=(H=e.config.hand.detector)==null?void 0:H.modelPath)==null?void 0:X.includes("handtrack"))&&(e.models.handtrack=Co(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((o0=(G=e.config.hand.detector)==null?void 0:G.modelPath)==null?void 0:o0.includes("handtrack"))&&(e.models.handskeleton=Io(e.config)),e.config.object.enabled&&!e.models.centernet&&((z=(_=e.config.object)==null?void 0:_.modelPath)==null?void 0:z.includes("centernet"))&&(e.models.centernet=P3(e.config)),e.config.object.enabled&&!e.models.nanodet&&((V0=(y0=e.config.object)==null?void 0:y0.modelPath)==null?void 0:V0.includes("nanodet"))&&(e.models.nanodet=qo(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=$1(e.config));for await(let v of Object.keys(e.models))e.models[v]&&typeof e.models[v]!="undefined"&&(e.models[v]=await e.models[v])}var Z0;function c2(e,t,o){if(e&&(Z0=e),!t||(Z0||p("instance not registred"),!Z0.config.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],A=[],s=[],a=t.modelUrl,l=t.executor;if(l&&l.graph.nodes)for(let y of Object.values(l.graph.nodes)){let x=y.op.toLowerCase();A.includes(x)||A.push(x)}else!l&&Z0.config.debug&&p("model signature not determined:",o);for(let y of A)!n.includes(y)&&!r.includes(y)&&!Z0.env.kernels.includes(y)&&!Z0.env.kernels.includes(y.replace("_",""))&&!Z0.env.kernels.includes(y.replace("native",""))&&!Z0.env.kernels.includes(y.replace("v2",""))&&s.push(y);return Z0.config.debug&&s.length>0&&p("model validation failed:",o,s),s.length>0?{name:o,missing:s,ops:A,url:a}:null}function S5(e){Z0=e;let t=[];for(let o of Object.keys(Z0.models)){let n=Z0.models[o];if(!n)continue;let r=c2(Z0,n,o);r&&t.push(r)}return t}var S0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ne={};async function x7(e,t){return S0.debug&&p("load model fetch:",e,t),fetch(e,t)}function rn(e){S0.cacheModels=e.cacheModels,S0.verbose=e.debug,S0.modelBasePath=e.modelBasePath}async function W(e){var y,x,i;let t=vt(S0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let o=t.includes("/")?t.split("/"):t.split("\\"),n=o[o.length-1].replace(".json",""),r="indexeddb://"+n;ne[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:H5[n],inCache:!1},S0.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let A={};try{A=S0.cacheSupported&&S0.cacheModels?await C5.io.listModels():{}}catch(d){S0.cacheSupported=!1}ne[n].inCache=S0.cacheSupported&&S0.cacheModels&&Object.keys(A).includes(r);let s=typeof fetch=="undefined"?{}:{fetchFunc:(d,c)=>x7(d,c)},a=new C5.GraphModel(ne[n].inCache?r:t,s),l=!1;try{a.findIOHandler(),S0.debug&&p("model load handler:",a.handler);let d=await a.handler.load();ne[n].sizeFromManifest=((y=d==null?void 0:d.weightData)==null?void 0:y.byteLength)||0,a.loadSync(d),ne[n].sizeLoadedWeights=((i=(x=a==null?void 0:a.artifacts)==null?void 0:x.weightData)==null?void 0:i.byteLength)||0,S0.verbose&&p("load model:",a.modelUrl,{bytes:ne[n].sizeLoadedWeights},S0),l=!0}catch(d){p("error loading model:",t,d)}if(l&&S0.cacheModels&&S0.cacheSupported&&!ne[n].inCache)try{let d=await a.save(r);p("model saved:",r,d)}catch(d){p("error saving model:",t,d)}return c2(null,a,`${e}`),a}var re=Z(D());var ot="2.9.4";var lt={};be(lt,{all:()=>it,body:()=>d2,canvas:()=>at,face:()=>x2,gesture:()=>p2,hand:()=>f2,object:()=>m2,options:()=>v0,person:()=>st});var X0=e=>{if(!e)p("draw error: invalid canvas");else if(!e.getContext)p("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)p("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),ue=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let o=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${t.alpha})`};function he(e,t,o,n,r){e.fillStyle=ue(n,r),e.beginPath(),e.arc(t,o,r.pointSize,0,2*Math.PI),e.fill()}function ie(e,t,o,n,r,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let s=(t+t+n)/2,a=(o+o+r)/2;e.ellipse(s,a,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,o),e.lineTo(t+n-A.roundRect,o),e.quadraticCurveTo(t+n,o,t+n,o+A.roundRect),e.lineTo(t+n,o+r-A.roundRect),e.quadraticCurveTo(t+n,o+r,t+n-A.roundRect,o+r),e.lineTo(t+A.roundRect,o+r),e.quadraticCurveTo(t,o+r,t,o+r-A.roundRect),e.lineTo(t,o+A.roundRect),e.quadraticCurveTo(t,o,t+A.roundRect,o),e.closePath();e.stroke()}function nt(e,t,o){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=ue(n[2]||0,o),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),o.fillPolygons&&(e.closePath(),e.fill())}}function An(e,t,o){if(!(t.length<2)){if(e.lineWidth=o.lineWidth,!o.useCurves||t.length<=2){nt(e,t,o);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n0){let n=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);n.length>3&&(n.length=3),o.push(n.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&o.push(`roll: ${Ue(e.rotation.angle.roll)}\xB0 yaw:${Ue(e.rotation.angle.yaw)}\xB0 pitch:${Ue(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&o.push(`gaze: ${Ue(e.rotation.gaze.bearing)}\xB0`)),o.length===0&&o.push("face"),t.fillStyle=K.color;for(let n=o.length-1;n>=0;n--){let r=Math.max(e.box[0],0),A=n*K.lineHeight+e.box[1];K.shadowColor&&K.shadowColor!==""&&(t.fillStyle=K.shadowColor,t.fillText(o[n],r+5,A+16)),t.fillStyle=K.labelColor,t.fillText(o[n],r+4,A+15)}}}function p7(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,n=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,n=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function u7(e,t){var o;if(K.drawGaze&&((o=e.rotation)==null?void 0:o.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,A=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C ${n} ${e.box[1]}, diff --git a/dist/human.node.js b/dist/human.node.js index c1efa5fb..f837099c 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -96,7 +96,7 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var W5=(e,t,o)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,A)=>(o[A]=0,r))},F5=class{constructor(t,o,n){T(this,"uniform",{});T(this,"attribute",{});T(this,"gl");T(this,"id");T(this,"compile",(t,o)=>{let n=this.gl.createShader(o);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(p(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)}`),null)):(p("filter: could not create shader"),null)});this.gl=t;let r=this.compile(o,this.gl.VERTEX_SHADER),A=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!A)){if(!this.id){p("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){p(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),W5(o,"attribute",this.attribute);for(let s in this.attribute)this.attribute[s]=this.gl.getAttribLocation(this.id,s);W5(o,"uniform",this.uniform),W5(n,"uniform",this.uniform);for(let s in this.uniform)this.uniform[s]=this.gl.getUniformLocation(this.id,s)}}};function Ct(){let e=0,t=null,o=!1,n=-1,r=[null,null],A=[],s=null,a=null,l=T0(100,100),y={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){p("filter: cannot get webgl context");return}this.gl=i;function d(g,f){if(!(g===l.width&&f===l.height)){if(l.width=g,l.height=f,!s){let u=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);s=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,s),i.bufferData(i.ARRAY_BUFFER,u,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function c(g,f){let u=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,u);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let N=i.createTexture();return i.bindTexture(i.TEXTURE_2D,N),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,g,f,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,N,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:u,texture:N}}function h(g){return r[g]=r[g]||c(l.width,l.height),r[g]}function m(g=0){if(!a)return;let f=null,u=null,S=!1;e===0?f=t:f=h(n).texture||null,e++,o&&!(g&x.INTERMEDIATE)?(u=null,S=e%2===0):(n=(n+1)%2,u=h(n).fbo||null),i.bindTexture(i.TEXTURE_2D,f),i.bindFramebuffer(i.FRAMEBUFFER,u),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function P(g){if(y[g])return a=y[g],i.useProgram((a?a.id:null)||null),a;if(a=new F5(i,Tt,g),!a)return p("filter: could not get webgl program"),null;let f=Float32Array.BYTES_PER_ELEMENT,u=4*f;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,u,0*f),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,u,2*f),y[g]=a,a}let M={colorMatrix:g=>{let f=new Float32Array(g);f[4]/=255,f[9]/=255,f[14]/=255,f[19]/=255;let u=f[18]===1&&f[3]===0&&f[8]===0&&f[13]===0&&f[15]===0&&f[16]===0&&f[17]===0&&f[19]===0?kt:wt,S=P(u);!S||(i.uniform1fv(S.uniform.m,f),m())},brightness:g=>{let f=(g||0)+1;M.colorMatrix([f,0,0,0,0,0,f,0,0,0,0,0,f,0,0,0,0,0,1,0])},saturation:g=>{let f=(g||0)*2/3+1,u=(f-1)*-.5;M.colorMatrix([f,u,u,0,0,u,f,u,0,0,u,u,f,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:g=>{let f=(g||0)+1,u=-128*(f-1);M.colorMatrix([f,0,0,0,u,0,f,0,0,u,0,0,f,0,u,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let f=Math.cos(g),u=Math.sin(g),S=.213,N=.715,w=.072;M.colorMatrix([S+f*(1-S)+u*-S,N+f*-N+u*-N,w+f*-w+u*(1-w),0,0,S+f*-S+u*.143,N+f*(1-N)+u*.14,w+f*-w+u*-.283,0,0,S+f*-S+u*-(1-S),N+f*-N+u*N,w+f*(1-w)+u*w,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:g=>{let f=new Float32Array(g),u=1/l.width,S=1/l.height,N=P(St);!N||(i.uniform1fv(N.uniform.m,f),i.uniform2f(N.uniform.px,u,S),m())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:g=>{let f=g||1;M.convolution.call(this,[0,-1*f,0,-1*f,1+4*f,-1*f,0,-1*f,0])},emboss:g=>{let f=g||1;M.convolution.call(this,[-2*f,-1*f,0,-1*f,1,1*f,0,1*f,2*f])},blur:g=>{let f=g/7/l.width,u=g/7/l.height,S=P(zt);!S||(i.uniform2f(S.uniform.px,0,u),m(x.INTERMEDIATE),i.uniform2f(S.uniform.px,f,0),m())},pixelate:g=>{let f=g/l.width,u=g/l.height,S=P(Et);!S||(i.uniform2f(S.uniform.size,f,u),m())}};this.add=function(g){let f=Array.prototype.slice.call(arguments,1),u=M[g];A.push({func:u,args:f})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(g){d(g.width,g.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,g);for(let f=0;fc.data())),s=.99*Math.max(A[0][0],A[1][0],A[2][0]),a=[U.sub(o[0],n[0]),U.sub(o[1],n[1]),U.sub(o[2],n[2])],l=[U.sub(r[0],n[0]),U.sub(r[1],n[1]),U.sub(r[2],n[2])],y=[U.div(s,l[0]),U.div(s,l[1]),U.div(s,l[2])],x=[U.mul(a[0],y[0]),U.mul(a[1],y[1]),U.mul(a[2],y[2])],i=U.stack([x[0],x[1],x[2]],2),d=U.reshape(i,[1,t.shape[0],t.shape[1],3]);return U.dispose([...o,...n,...r,...a,...l,...y,...x,i,t]),d}var G2=3840,Y=null,c0=null,Ke=null,e0,le={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function T0(e,t){let o;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");o=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");o=document.createElement("canvas"),o.width=e,o.height=t}else typeof R.Canvas!="undefined"?o=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(o=new globalThis.Canvas(e,t));return o}function B2(e,t){let o=t||T0(e.width,e.height);return o.getContext("2d").drawImage(e,0,0),o}async function Je(e,t,o=!0){if(!e)return t.debug&&p("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof O.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof R.Canvas!="undefined"&&e instanceof R.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof O.Tensor){let n=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)n=O.expandDims(e,0);else if(e.shape[2]===4){let r=O.slice3d(e,[0,0,0],[-1,-1,3]);n=O.expandDims(r,0),O.dispose(r)}}else e.shape.length===4&&(e.shape[3]===3?n=O.clone(e):e.shape[3]===4&&(n=O.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(n==null||n.shape.length!==4||n.shape[0]!==1||n.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(n.dtype==="int32"){let r=O.cast(n,"float32");O.dispose(n),n=r}return{tensor:n,canvas:t.filter.return?c0:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&p("input stream is not ready"),{tensor:null,canvas:Y};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&p("cannot determine input dimensions"),{tensor:null,canvas:Y};let A=n,s=r;if(A>G2&&(A=G2,s=Math.trunc(A*r/n)),s>G2&&(s=G2,A=Math.trunc(s*n/r)),(t.filter.width||0)>0?A=t.filter.width:(t.filter.height||0)>0&&(A=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?s=t.filter.height:(t.filter.width||0)>0&&(s=r*((t.filter.width||0)/n)),!A||!s)throw new Error("input error: cannot determine dimension");(!Y||(Y==null?void 0:Y.width)!==A||(Y==null?void 0:Y.height)!==s)&&(Y=T0(A,s));let a=Y.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(n,0),a.scale(-1,1),a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),(!c0||Y.width!==c0.width||(Y==null?void 0:Y.height)!==(c0==null?void 0:c0.height))&&(c0=T0(Y.width,Y.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new Ct:null),R.filter=!!e0,!e0||!e0.add?(t.debug&&p("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,B2(Y,c0)):(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),e0.get()>0?c0=e0.apply(Y):c0=e0.draw(Y))):(B2(Y,c0),e0&&(e0=null),R.filter=!!e0),!o)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let l,y=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&O.browser)l=O.browser?O.browser.fromPixels(e):null;else{y=e.data.length/e.height/e.width;let d=new Uint8Array(e.data.buffer);l=O.tensor(d,[e.height,e.width,y],"int32")}else if((!Ke||c0.width!==Ke.width||c0.height!==Ke.height)&&(Ke=T0(c0.width,c0.height)),O.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=O.browser.fromPixels(c0):(Ke=B2(c0),l=O.browser.fromPixels(Ke));else{let h=B2(c0).getContext("2d").getImageData(0,0,A,s);y=h.data.length/A/s;let m=new Uint8Array(h.data.buffer);l=O.tensor(m,[A,s,y])}if(y===4){let d=O.slice3d(l,[0,0,0],[-1,-1,3]);O.dispose(l),l=d}if(!l)throw new Error("input error: cannot create tensor");let x=O.cast(l,"float32"),i=t.filter.equalization?await F2(x):O.expandDims(x,0);return O.dispose([l,x]),{tensor:i,canvas:t.filter.return?c0:null}}}async function It(e,t){let o=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return o;if(!le.inputTensor)le.inputTensor=O.clone(t);else if(le.inputTensor.shape[1]!==t.shape[1]||le.inputTensor.shape[2]!==t.shape[2])O.dispose(le.inputTensor),le.inputTensor=O.clone(t);else{let n={};n.diff=O.sub(t,le.inputTensor),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;O.dispose([le.inputTensor,n.diff,n.squared,n.sum]),le.inputTensor=O.clone(t),o=A<=(e.cacheSensitivity||0)}return o}async function jt(e,t,o){let n={};if(!t||!o||t.shape.length!==4||t.shape.length!==o.shape.length)return e.debug||p("invalid input tensor or tensor shapes do not match:",t.shape,o.shape),0;if(t.shape[0]!==1||o.shape[0]!==1||t.shape[3]!==3||o.shape[3]!==3)return e.debug||p("input tensors must be of shape [1, height, width, 3]:",t.shape,o.shape),0;n.input1=O.clone(t),n.input2=t.shape[1]!==o.shape[1]||t.shape[2]!==o.shape[2]?O.image.resizeBilinear(o,[t.shape[1],t.shape[2]]):O.clone(o),n.diff=O.sub(n.input1,n.input2),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return O.dispose([n.input1,n.input2,n.diff,n.squared,n.sum]),A}var G5=class{constructor(){T(this,"browser");T(this,"node");T(this,"worker");T(this,"platform","");T(this,"agent","");T(this,"backends",[]);T(this,"initial");T(this,"filter");T(this,"tfjs");T(this,"offscreen");T(this,"perfadd",!1);T(this,"tensorflow",{version:void 0,gpu:void 0});T(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});T(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});T(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});T(this,"cpu",{model:void 0,flags:[]});T(this,"kernels",[]);T(this,"Canvas");T(this,"Image");T(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:x0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let o=t[0].match(/\(([^()]+)\)/g);this.platform=o&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(x0.engine().registryFactory),this.tensorflow={version:x0.backend().binding?x0.backend().binding.TF_Version:void 0,gpu:x0.backend().binding?x0.backend().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&x0.getBackend()==="wasm"&&(this.wasm.simd=x0.env().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=x0.env().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=T0(100,100),o=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof o!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(x0.getBackend()==="webgl"||x0.getBackend()==="humangl")){let n=x0.backend().gpgpu!=="undefined"?await x0.backend().getGPGPUContext().gl:null;n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.renderer=n.getParameter(n.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(n){this.webgpu.supported=!1}try{this.kernels=x0.getKernelsForBackend(x0.getBackend()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},R=new G5;var S5=Z(D());var B5={};be(B5,{age:()=>qn,"anti-spoofing":()=>vr,antispoof:()=>jn,blazeface:()=>On,"blazeface-back":()=>Un,"blazeface-front":()=>Yn,"blazepose-detect":()=>Pr,"blazepose-detector2d":()=>Kn,"blazepose-detector3d":()=>Jn,"blazepose-full":()=>Qn,"blazepose-heavy":()=>_n,"blazepose-lite":()=>$n,default:()=>Lr,efficientpose:()=>er,"efficientpose-i-lite":()=>Rr,"efficientpose-ii-lite":()=>Tr,"efficientpose-iv":()=>wr,emotion:()=>Nn,faceboxes:()=>tr,facemesh:()=>Ln,"facemesh-attention":()=>nr,"facemesh-attention-alt":()=>or,"facemesh-detection-full":()=>rr,"facemesh-detection-short":()=>Ar,"facemesh-orig":()=>sr,faceres:()=>Wn,"faceres-deep":()=>ar,gear:()=>ir,gender:()=>yr,"gender-ssrnet-imdb":()=>lr,handdetect:()=>cr,"handlandmark-full":()=>Fn,"handlandmark-lite":()=>xr,"handlandmark-sparse":()=>dr,handskeleton:()=>fr,handtrack:()=>Gn,"insightface-efficientnet-b0":()=>kr,"insightface-ghostnet-strides1":()=>Er,"insightface-ghostnet-strides2":()=>zr,"insightface-mobilenet-emore":()=>Sr,"insightface-mobilenet-swish":()=>Cr,iris:()=>Bn,liveness:()=>Hn,"mb3-centernet":()=>Vn,meet:()=>mr,mobileface:()=>pr,mobilefacenet:()=>ur,models:()=>Dn,"movenet-lightning":()=>Zn,"movenet-multipose":()=>hr,"movenet-thunder":()=>br,nanodet:()=>gr,"nanodet-e":()=>Ir,"nanodet-g":()=>jr,"nanodet-m":()=>Or,"nanodet-t":()=>Nr,posenet:()=>Mr,selfie:()=>Xn});var jn=853098,On=538928,Nn=820516,Ln=1477958,Wn=6978814,Fn=5431368,Gn=2964837,Bn=2599092,Hn=592976,Vn=4030290,Dn=0,Zn=4650216,Xn=212886,qn=161240,Un=538928,Yn=402048,Kn=7499400,Jn=5928856,Qn=6338290,_n=27501554,$n=2725490,er=5651240,tr=2013002,or=2387598,nr=2382414,rr=1026192,Ar=201268,sr=2955780,ar=13957620,ir=1498916,lr=161236,yr=201808,cr=3515612,xr=2023432,dr=5286322,fr=5502280,mr=372228,pr=2183192,ur=5171976,hr=9448838,br=12477112,gr=7574558,Mr=5032780,Pr=5928804,vr=853098,Rr=2269064,Tr=5651240,wr=25643252,kr=13013224,Er=8093408,zr=8049584,Sr=6938536,Cr=12168584,Ir=12319156,jr=7574558,Or=1887474,Nr=5294216,Lr={antispoof:jn,blazeface:On,emotion:Nn,facemesh:Ln,faceres:Wn,"handlandmark-full":Fn,handtrack:Gn,iris:Bn,liveness:Hn,"mb3-centernet":Vn,models:Dn,"movenet-lightning":Zn,selfie:Xn,age:qn,"blazeface-back":Un,"blazeface-front":Yn,"blazepose-detector2d":Kn,"blazepose-detector3d":Jn,"blazepose-full":Qn,"blazepose-heavy":_n,"blazepose-lite":$n,efficientpose:er,faceboxes:tr,"facemesh-attention-alt":or,"facemesh-attention":nr,"facemesh-detection-full":rr,"facemesh-detection-short":Ar,"facemesh-orig":sr,"faceres-deep":ar,gear:ir,"gender-ssrnet-imdb":lr,gender:yr,handdetect:cr,"handlandmark-lite":xr,"handlandmark-sparse":dr,handskeleton:fr,meet:mr,mobileface:pr,mobilefacenet:ur,"movenet-multipose":hr,"movenet-thunder":br,nanodet:gr,posenet:Mr,"blazepose-detect":Pr,"anti-spoofing":vr,"efficientpose-i-lite":Rr,"efficientpose-ii-lite":Tr,"efficientpose-iv":wr,"insightface-efficientnet-b0":kr,"insightface-ghostnet-strides1":Er,"insightface-ghostnet-strides2":zr,"insightface-mobilenet-emore":Sr,"insightface-mobilenet-swish":Cr,"nanodet-e":Ir,"nanodet-g":jr,"nanodet-m":Or,"nanodet-t":Nr};var m5={};be(m5,{Models:()=>O2,getModelStats:()=>$1,load:()=>et,reset:()=>f5,validate:()=>z5,validateModel:()=>c2});var H2=Z(D());var q0,H5=[],Wr=["white","black","asian","indian","other"],Fr=[15,23,28,35.5,45.5,55.5,65],Ot=0,Nt=0,V5=Number.MAX_SAFE_INTEGER;async function Lt(e){var t;return R.initial&&(q0=null),q0?e.debug&&p("cached model:",q0.modelUrl):q0=await W((t=e.face.gear)==null?void 0:t.modelPath),q0}async function D5(e,t,o,n){var s,a;if(!q0)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=V5<(((s=t.face.gear)==null?void 0:s.skipFrames)||0),A=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>b()-Nt;return t.skipAllowed&&A&&r&&Ot===n&&H5[o]?(V5++,H5[o]):(V5=0,new Promise(async l=>{var M,g;if(!(q0!=null&&q0.inputs[0].shape))return;let y={},x=[[0,.1,.9,.9]];y.resize=H2.image.cropAndResize(e,x,[0],[q0.inputs[0].shape[2],q0.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([y.age,y.gender,y.race]=q0.execute(y.resize,["age_output","gender_output","race_output"]));let d=await y.gender.data();i.gender=d[0]>d[1]?"male":"female",i.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let c=await y.race.data();for(let f=0;f(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&i.race.push({score:Math.round(100*c[f])/100,race:Wr[f]});i.race.sort((f,u)=>u.score-f.score);let m=Array.from(await y.age.data()).map((f,u)=>[Fr[u],f]).sort((f,u)=>u[1]-f[1]),P=m[0][0];for(let f=1;fH2.dispose(y[f])),H5[o]=i,Ot=n,Nt=b(),l(i)}))}var Qe=Z(D());var Me=Z(D()),B={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Ft(){B.tf255=Me.scalar(255,"float32"),B.tf1=Me.scalar(1,"float32"),B.tf2=Me.scalar(2,"float32"),B.tf05=Me.scalar(.5,"float32"),B.tf127=Me.scalar(127.5,"float32"),B.rgb=Me.tensor1d([.2989,.587,.114],"float32")}var C0,V2=[],Gt=0,Bt=0,Z5=Number.MAX_SAFE_INTEGER;async function Ht(e){return R.initial&&(C0=null),C0?e.debug&&p("cached model:",C0.modelUrl):C0=await W(e.face.ssrnet.modelPathAge),C0}async function X5(e,t,o,n){var s,a,l,y;if(!C0)return{age:0};let r=Z5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Bt;return t.skipAllowed&&r&&A&&Gt===n&&((l=V2[o])==null?void 0:l.age)&&((y=V2[o])==null?void 0:y.age)>0?(Z5++,V2[o]):(Z5=0,new Promise(async x=>{if(!(C0!=null&&C0.inputs)||!C0.inputs[0]||!C0.inputs[0].shape)return;let i={};i.resize=Qe.image.resizeBilinear(e,[C0.inputs[0].shape[2],C0.inputs[0].shape[1]],!1),i.enhance=Qe.mul(i.resize,B.tf255);let d={age:0};if(t.face.ssrnet.enabled&&(i.age=C0.execute(i.enhance)),i.age){let c=await i.age.data();d.age=Math.trunc(10*c[0])/10}Object.keys(i).forEach(c=>Qe.dispose(i[c])),V2[o]=d,Gt=n,Bt=b(),x(d)}))}var h0=Z(D());var U0,D2=[],Dt=0,Zt=0,q5=Number.MAX_SAFE_INTEGER,U5=[.2989,.587,.114];async function Xt(e){return R.initial&&(U0=null),U0?e.debug&&p("cached model:",U0.modelUrl):U0=await W(e.face.ssrnet.modelPathGender),U0}async function Y5(e,t,o,n){var s,a,l,y;if(!U0)return{gender:"unknown",genderScore:0};let r=q5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Zt;return t.skipAllowed&&r&&A&&Dt===n&&((l=D2[o])==null?void 0:l.gender)&&((y=D2[o])==null?void 0:y.genderScore)>0?(q5++,D2[o]):(q5=0,new Promise(async x=>{if(!(U0!=null&&U0.inputs[0].shape))return;let i={};i.resize=h0.image.resizeBilinear(e,[U0.inputs[0].shape[2],U0.inputs[0].shape[1]],!1),i.enhance=h0.tidy(()=>{let[h,m,P]=h0.split(i.resize,3,3),M=h0.mul(h,U5[0]),g=h0.mul(m,U5[1]),f=h0.mul(P,U5[2]),u=h0.addN([M,g,f]);return h0.mul(h0.sub(u,B.tf05),2)});let d={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(i.gender=U0.execute(i.enhance));let c=await i.gender.data();d.gender=c[0]>c[1]?"female":"male",d.genderScore=c[0]>c[1]?Math.trunc(100*c[0])/100:Math.trunc(100*c[1])/100,Object.keys(i).forEach(h=>h0.dispose(i[h])),D2[o]=d,Dt=n,Zt=b(),x(d)}))}var X2=Z(D());var b0,Z2=[],K5=Number.MAX_SAFE_INTEGER,Ut=0,Yt=0;async function Kt(e){var t;return R.initial&&(b0=null),b0?e.debug&&p("cached model:",b0.modelUrl):b0=await W((t=e.face.antispoof)==null?void 0:t.modelPath),b0}async function J5(e,t,o,n){var s,a;if(!b0)return 0;let r=(((s=t.face.antispoof)==null?void 0:s.skipTime)||0)>b()-Yt,A=K5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&Ut===n&&Z2[o]?(K5++,Z2[o]):(K5=0,new Promise(async l=>{let y=X2.image.resizeBilinear(e,[b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[2]:0,b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[1]:0],!1),x=b0==null?void 0:b0.execute(y),i=(await x.data())[0];Z2[o]=Math.round(100*i)/100,Ut=n,Yt=b(),X2.dispose([y,x]),l(Z2[o])}))}var L=Z(D());var ye=Z(D());var Y0={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},Q5={count:468,mouth:13,symmetryLine:[13,Y0.midwayBetweenEyes[0]]},Le={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},_5=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],w2=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],We=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var Br=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],Hr=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],Vr=[33,133,362,263,1,78,308],s4=Br.map(e=>w2[e]),a4=Hr.map(e=>w2[e]),i4=Vr.map(e=>w2[e]);function Pe(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var Dr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Zr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Xr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],qr=[[474,475],[475,476],[476,477],[477,474]],Ur=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Yr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Kr=[[469,470],[470,471],[471,472],[472,469]],Jr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],l4={lips:Pe(Dr),leftEye:Pe(Zr),leftEyebrow:Pe(Xr),leftIris:Pe(qr),rightEye:Pe(Ur),rightEyebrow:Pe(Yr),rightIris:Pe(Kr),faceOval:Pe(Jr)};var _e=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],q2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],U2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],Y2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],$t=(e,t)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:o,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},e1=(e,t,o)=>{let n=t.shape[1],r=t.shape[2],A=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],s=ye.image.cropAndResize(t,[A],[0],o),a=ye.div(s,B.tf255);return ye.dispose(s),a},K2=(e,t)=>{let o=q2(e),n=_e(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[o[0]-r[0],o[1]-r[1]],endPoint:[o[0]+r[0],o[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},J2=e=>{let t=q2(e),o=_e(e),n=Math.max(...o)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},e3=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...o)],endPoint:[Math.max(...t),Math.max(...o)],landmarks:e}},t1=[[1,0,0],[0,1,0],[0,0,1]],Qr=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),_r=(e,t)=>Qr(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var Qt=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Fe=(e,t)=>{let o=0;for(let n=0;n{let o=[];for(let n=0;n{let o=[],n=e.length;for(let r=0;r{let o=Math.cos(e),n=Math.sin(e),r=[[o,-n,0],[n,o,0],[0,0,1]],A=Qt(t[0],t[1]),s=_t(A,r),a=Qt(-t[0],-t[1]);return _t(s,a)},eA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],o=[e[0][2],e[1][2]],n=[-Fe(t[0],o),-Fe(t[1],o)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},tA=(e,t)=>[Fe(e,t[0]),Fe(e,t[1])];function o3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},o=[];for(let n=0;n[A[0]/r*(c[0]-r/2),A[1]/r*(c[1]-r/2),c[2]||0]),a=o&&o!==0&&Math.abs(o)>.2,l=a?t3(o,[0,0]):t1,y=a?s.map(c=>[...tA(c,l),c[2]]):s,x=a?eA(n):t1,i=q2(t),d=[Fe(i,x[0]),Fe(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2]||0)])}function r3(e,t,o,n){let r=t.landmarks.length>=Q5.count?Q5.symmetryLine:Le.symmetryLine,A=0,s=t1,a;if(e&&R.kernels.includes("rotatewithoffset"))if(A=_r(t.landmarks[r[0]],t.landmarks[r[1]]),A&&A!==0&&Math.abs(A)>.2){let y=q2(t),x=[y[0]/o.shape[2],y[1]/o.shape[1]],i=ye.image.rotateWithOffset(o,A,0,x);s=t3(-A,y),a=e1(t,i,[n,n]),ye.dispose(i)}else a=e1(t,o,[n,n]);else a=e1(t,o,[n,n]);return[A,s,a]}var oA=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...o)+(Math.max(...o)-Math.min(...o))/2]},A3=(e,t)=>{let o=oA(e),n=_e(t);return{startPoint:[o[0]-n[0]/2,o[1]-n[1]/2],endPoint:[o[0]+n[0]/2,o[1]+n[1]/2]}};var s3=6,nA=1.4,Ae,a3=null,ve=0,k2=null,$e=()=>ve;async function i3(e){var t;return R.initial&&(Ae=null),Ae?e.debug&&p("cached model:",Ae.modelUrl):Ae=await W((t=e.face.detector)==null?void 0:t.modelPath),ve=Ae.inputs[0].shape?Ae.inputs[0].shape[2]:0,k2=L.scalar(ve,"int32"),a3=L.tensor2d(o3(ve)),Ae}function rA(e){let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,a3),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,k2),t.centersNormalized=L.div(t.centers,k2),t.halfBoxSize=L.div(t.boxSizesNormalized,B.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,k2),t.endNormalized=L.mul(t.ends,k2);let o=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>L.dispose(t[n])),o}async function l3(e,t){var a,l,y,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let o={};o.resized=L.image.resizeBilinear(e,[ve,ve]),o.div=L.div(o.resized,B.tf127),o.normalized=L.sub(o.div,B.tf05);let n=Ae==null?void 0:Ae.execute(o.normalized);if(Array.isArray(n)&&n.length>2){let i=n.sort((d,c)=>d.size-c.size);o.concat384=L.concat([i[0],i[2]],2),o.concat512=L.concat([i[1],i[3]],2),o.concat=L.concat([o.concat512,o.concat384],1),o.batch=L.squeeze(o.concat,0)}else Array.isArray(n)?o.batch=L.squeeze(n[0]):o.batch=L.squeeze(n);L.dispose(n),o.boxes=rA(o.batch),o.logits=L.slice(o.batch,[0,0],[-1,1]),o.sigmoid=L.sigmoid(o.logits),o.scores=L.squeeze(o.sigmoid),o.nms=await L.image.nonMaxSuppressionAsync(o.boxes,o.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((y=t.face.detector)==null?void 0:y.minConfidence)||0);let r=await o.nms.array(),A=[],s=await o.scores.data();for(let i=0;i(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let c={};c.bbox=L.slice(o.boxes,[r[i],0],[1,-1]),c.slice=L.slice(o.batch,[r[i],s3-1],[1,-1]),c.squeeze=L.squeeze(c.slice),c.landmarks=L.reshape(c.squeeze,[s3,-1]);let h=await c.bbox.data(),m={startPoint:[h[0],h[1]],endPoint:[h[2],h[3]],landmarks:await c.landmarks.array(),confidence:d},P=$t(m,[(e.shape[2]||0)/ve,(e.shape[1]||0)/ve]),M=K2(P,t.face.scale||nA),g=J2(M);A.push(g),Object.keys(c).forEach(f=>L.dispose(c[f]))}}return Object.keys(o).forEach(i=>L.dispose(o[i])),A}var O0=Z(D());var Q2={};be(Q2,{connected:()=>r1,kpt:()=>n1});var n1=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],r1={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var I0=Z(D()),c3=224,AA,sA=5,_2=[8,16,32,32,32];async function x3(){let e=[],t=0;for(;to.x)),y:I0.tensor1d(e.map(o=>o.y))}}function ce(e,t=[1,1]){let o=[e.map(a=>a[0]),e.map(a=>a[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[n[0],n[1],r[0]-n[0],r[1]-n[1]],s=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:s}}function d3(e,t=[1,1]){let o=[e.map(y=>y[0]),e.map(y=>y[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[(n[0]+r[0])/2,(n[1]+r[1])/2],s=Math.max(A[0]-n[0],A[1]-n[1],-A[0]+r[0],-A[1]+r[1]),a=[Math.trunc(A[0]-s),Math.trunc(A[1]-s),Math.trunc(2*s),Math.trunc(2*s)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function $2(e,t){let o=[e[2]*t,e[3]*t];return[e[0]-(o[0]-e[2])/2,e[1]-(o[1]-e[3])/2,o[0],o[1]]}var p3={initial:!0},j0={detector:null,landmarks:null},e2={detector:[224,224],landmarks:[256,256]},A1=Number.MAX_SAFE_INTEGER,iA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},t5=null,E2,Re=[[0,0],[0,0],[0,0],[0,0]],f3=0,m3=e=>1-1/(1+Math.exp(e));async function u3(e){if(p3.initial&&(j0.detector=null),!j0.detector&&e.body.detector&&e.body.detector.modelPath){j0.detector=await W(e.body.detector.modelPath);let t=Object.values(j0.detector.modelSignature.inputs);e2.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&j0.detector&&p("cached model:",j0.detector.modelUrl);return await x3(),j0.detector}async function h3(e){if(p3.initial&&(j0.landmarks=null),j0.landmarks)e.debug&&p("cached model:",j0.landmarks.modelUrl);else{j0.landmarks=await W(e.body.modelPath);let t=Object.values(j0.landmarks.modelSignature.inputs);e2.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return j0.landmarks}async function lA(e,t){let o={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let n;if(E2&&(o.cropped=O0.image.cropAndResize(e,[E2],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],A=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Re=[[0,0],r,A,[0,0]],o.pad=O0.pad(o.cropped||e,Re),o.resize=O0.image.resizeBilinear(o.pad,[t,t]),n=O0.div(o.resize,B.tf255)}else e.shape[1]!==t?(o.resize=O0.image.resizeBilinear(o.cropped||e,[t,t]),n=O0.div(o.resize,B.tf255)):n=O0.div(o.cropped||e,B.tf255);return Object.keys(o).forEach(r=>O0.dispose(o[r])),n}function yA(e,t){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Re[2][0]+Re[2][1])/t[0]-Re[2][0]),Math.trunc(o.position[1]*(t[1]+Re[1][0]+Re[1][1])/t[1]-Re[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(E2)for(let o of e)o.positionRaw=[o.positionRaw[0]+E2[1],o.positionRaw[1]+E2[0],o.positionRaw[2]],o.position=[Math.trunc(o.positionRaw[0]*t[0]),Math.trunc(o.positionRaw[1]*t[1]),o.positionRaw[2]];return e}async function cA(e){let t=e.find(a=>a.part==="leftPalm"),o=e.find(a=>a.part==="leftWrist"),n=e.find(a=>a.part==="leftIndex");t.position[2]=((o.position[2]||0)+(n.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),A=e.find(a=>a.part==="rightWrist"),s=e.find(a=>a.part==="rightIndex");r.position[2]=((A.position[2]||0)+(s.position[2]||0))/2}async function xA(e,t,o){var h;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=(h=j0.landmarks)==null?void 0:h.execute(e,iA.landmarks);let r=(await n.poseflag.data())[0],A=await n.ld.data(),s=await n.world.data();Object.keys(n).forEach(m=>O0.dispose(n[m]));let a=[],l=5;for(let m=0;mm.position),i=ce(x,[o[0],o[1]]),d={};for(let[m,P]of Object.entries(r1)){let M=[];for(let g=0;gS.part===P[g]),u=y.find(S=>S.part===P[g+1]);f&&u&&M.push([f.position,u.position])}d[m]=M}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:y,annotations:d}}async function s1(e,t){let o=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>b()-f3,r=A1<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&t5!==null)A1++;else{let A={};A.landmarks=await lA(e,256),t5=await xA(A.landmarks,t,o),Object.keys(A).forEach(s=>O0.dispose(A[s])),f3=b(),A1=0}return t5?[t5]:[]}var w0=Z(D());var t2=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var xe,Ge=0,a1=[],g3=0,i1=Number.MAX_SAFE_INTEGER;async function M3(e){if(R.initial&&(xe=null),xe)e.debug&&p("cached model:",xe.modelUrl);else{xe=await W(e.object.modelPath);let t=Object.values(xe.modelSignature.inputs);Ge=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return xe}async function dA(e,t,o){if(!e)return[];let n={},r=[],A=await e.array();n.squeeze=w0.squeeze(e);let s=w0.split(n.squeeze,6,1);n.stack=w0.stack([s[1],s[0],s[3],s[2]],1),n.boxes=w0.squeeze(n.stack),n.scores=w0.squeeze(s[4]),n.classes=w0.squeeze(s[5]),w0.dispose([e,...s]),n.nms=await w0.image.nonMaxSuppressionAsync(n.boxes,n.scores,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence||0);let a=await n.nms.data(),l=0;for(let y of Array.from(a)){let x=Math.trunc(100*A[0][y][4])/100,i=A[0][y][5],d=t2[i].label,[c,h]=[A[0][y][0]/Ge,A[0][y][1]/Ge],m=[c,h,A[0][y][2]/Ge-c,A[0][y][3]/Ge-h],P=[Math.trunc(m[0]*t[0]),Math.trunc(m[1]*t[1]),Math.trunc(m[2]*t[0]),Math.trunc(m[3]*t[1])];r.push({id:l++,score:x,class:i,label:d,box:P,boxRaw:m})}return Object.keys(n).forEach(y=>w0.dispose(n[y])),r}async function l1(e,t){let o=(t.object.skipTime||0)>b()-g3,n=i1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&a1.length>0?(i1++,a1):(i1=0,new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=w0.image.resizeBilinear(e,[Ge,Ge]),a=t.object.enabled?xe==null?void 0:xe.execute(s,["tower_0/detections"]):null;g3=b(),w0.dispose(s);let l=await dA(a,A,t);a1=l,r(l)}))}var J=Z(D());var o5={};be(o5,{connected:()=>c1,kpt:()=>y1});var y1=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],c1={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var g0,v3=0,k0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},x1=Number.MAX_SAFE_INTEGER;async function R3(e){return R.initial&&(g0=null),g0?e.debug&&p("cached model:",g0.modelUrl):g0=await W(e.body.modelPath),g0}async function fA(e,t){let[o,n]=e.shape,r=J.reshape(e,[n*o]),A=J.max(r,0),s=(await A.data())[0];if(s>t){let a=J.argMax(r,0),l=J.mod(a,o),y=(await l.data())[0],x=J.div(a,o),i=(await x.data())[0];return J.dispose([r,A,a,l,x]),[y,i,s]}else return J.dispose([r,A]),[0,0,s]}async function d1(e,t){let o=(t.body.skipTime||0)>b()-v3,n=x1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n&&Object.keys(k0.keypoints).length>0?(x1++,[k0]):(x1=0,new Promise(async r=>{var i;let A=J.tidy(()=>{if(!(g0!=null&&g0.inputs[0].shape))return null;let d=J.image.resizeBilinear(e,[g0.inputs[0].shape[2],g0.inputs[0].shape[1]],!1),c=J.mul(d,B.tf2);return J.sub(c,B.tf1)}),s;if(t.body.enabled&&(s=g0==null?void 0:g0.execute(A)),v3=b(),J.dispose(A),s){k0.keypoints.length=0;let d=J.squeeze(s);J.dispose(s);let c=J.unstack(d,2);J.dispose(d);for(let h=0;h(((i=t.body)==null?void 0:i.minConfidence)||0)&&k0.keypoints.push({score:Math.round(100*M)/100,part:y1[h],positionRaw:[m/g0.inputs[0].shape[2],P/g0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/g0.inputs[0].shape[2]),Math.round(e.shape[1]*P/g0.inputs[0].shape[1])]})}c.forEach(h=>J.dispose(h))}k0.score=k0.keypoints.reduce((d,c)=>c.score>d?c.score:d,0);let a=k0.keypoints.map(d=>d.position[0]),l=k0.keypoints.map(d=>d.position[1]);k0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let y=k0.keypoints.map(d=>d.positionRaw[0]),x=k0.keypoints.map(d=>d.positionRaw[1]);k0.boxRaw=[Math.min(...y),Math.min(...x),Math.max(...y)-Math.min(...y),Math.max(...x)-Math.min(...x)];for(let[d,c]of Object.entries(c1)){let h=[];for(let m=0;mg.part===c[m]),M=k0.keypoints.find(g=>g.part===c[m+1]);P&&M&&P.score>(t.body.minConfidence||0)&&M.score>(t.body.minConfidence||0)&&h.push([P.position,M.position])}k0.annotations[d]=h}r([k0])}))}var J0=Z(D());var mA=["angry","disgust","fear","happy","sad","surprise","neutral"],D0,n5=[],w3=0,k3=0,f1=Number.MAX_SAFE_INTEGER;async function E3(e){var t;return R.initial&&(D0=null),D0?e.debug&&p("cached model:",D0.modelUrl):D0=await W((t=e.face.emotion)==null?void 0:t.modelPath),D0}async function m1(e,t,o,n){var s,a;if(!D0)return[];let r=f1<(((s=t.face.emotion)==null?void 0:s.skipFrames)||0),A=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>b()-k3;return t.skipAllowed&&A&&r&&w3===n&&n5[o]&&n5[o].length>0?(f1++,n5[o]):(f1=0,new Promise(async l=>{var x,i;let y=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},c=D0!=null&&D0.inputs[0].shape?D0.inputs[0].shape[2]:0;d.resize=J0.image.resizeBilinear(e,[c,c],!1),d.channels=J0.mul(d.resize,B.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,B.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,B.tf2),d.emotion=D0==null?void 0:D0.execute(d.grayscaleMul),k3=b();let h=await d.emotion.data();for(let m=0;m(((i=t.face.emotion)==null?void 0:i.minConfidence)||0)&&y.push({score:Math.min(.99,Math.trunc(100*h[m])/100),emotion:mA[m]});y.sort((m,P)=>P.score-m.score),Object.keys(d).forEach(m=>J0.dispose(d[m]))}n5[o]=y,w3=n,l(y)}))}var r5=Z(D());var N0,p1=[],S3=0,C3=0,I3=Number.MAX_SAFE_INTEGER;async function j3(e){return R.initial&&(N0=null),N0?e.debug&&p("cached model:",N0.modelUrl):N0=await W(e.face.mobilefacenet.modelPath),N0}async function u1(e,t,o,n){var s,a;if(!N0)return[];let r=I3<(((s=t.face.mobilefacenet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>b()-C3;return t.skipAllowed&&A&&r&&S3===n&&p1[o]?(I3++,p1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.mobilefacenet)==null?void 0:x.enabled)&&(N0==null?void 0:N0.inputs[0].shape)){let i={};i.crop=r5.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1),i.data=N0==null?void 0:N0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>r5.dispose(i[c]))}p1[o]=y,S3=n,C3=b(),l(y)})}var A5=Z(D());var L0,h1=[],N3=0,L3=0,W3=Number.MAX_SAFE_INTEGER;async function F3(e){return R.initial&&(L0=null),L0?e.debug&&p("cached model:",L0.modelUrl):L0=await W(e.face.insightface.modelPath),L0}async function b1(e,t,o,n){var s,a;if(!L0)return[];let r=W3<(((s=t.face.insightface)==null?void 0:s.skipFrames)||0),A=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>b()-L3;return t.skipAllowed&&A&&r&&N3===n&&h1[o]?(W3++,h1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.insightface)==null?void 0:x.enabled)&&(L0==null?void 0:L0.inputs[0].shape)){let i={};i.crop=A5.image.resizeBilinear(e,[L0.inputs[0].shape[2],L0.inputs[0].shape[1]],!1),i.data=L0==null?void 0:L0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>A5.dispose(i[c]))}h1[o]=y,N3=n,L3=b(),l(y)})}var ke=Z(D());var Q0=Z(D());var de,Te=0,pA=2.3,g1=Y0.leftEyeLower0,M1=Y0.rightEyeLower0,o2={leftBounds:[g1[0],g1[g1.length-1]],rightBounds:[M1[0],M1[M1.length-1]]},n2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function D3(e){var t;return R.initial&&(de=null),de?e.debug&&p("cached model:",de.modelUrl):de=await W((t=e.face.iris)==null?void 0:t.modelPath),Te=de.inputs[0].shape?de.inputs[0].shape[2]:0,Te===-1&&(Te=64),de}function s5(e,t,o,n){for(let r=0;r<_5.length;r++){let{key:A,indices:s}=_5[r],a=Y0[`${o}${A}`];if(!n||n.includes(A))for(let l=0;l{let t=e[o2.leftBounds[0]][2],o=e[o2.rightBounds[0]][2];return t-o},B3=(e,t,o,n,r,A=!1)=>{let s=J2(K2(e3([e[o],e[n]]),pA)),a=_e(s),l=Q0.image.cropAndResize(t,[[s.startPoint[1]/r,s.startPoint[0]/r,s.endPoint[1]/r,s.endPoint[0]/r]],[0],[Te,Te]);if(A&&R.kernels.includes("flipleftright")){let y=Q0.image.flipLeftRight(l);Q0.dispose(l),l=y}return{box:s,boxSize:a,crop:l}},H3=(e,t,o,n=!1)=>{let r=[];for(let A=0;A{let n=e[Y0[`${o}EyeUpper0`][n2.upperCenter]][2],r=e[Y0[`${o}EyeLower0`][n2.lowerCenter]][2],A=(n+r)/2;return t.map((s,a)=>{let l=A;return a===2?l=n:a===4&&(l=r),[s[0],s[1],l]})};async function Z3(e,t,o,n){if(!de)return o.debug&&p("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:A,crop:s}=B3(e,t,o2.leftBounds[0],o2.leftBounds[1],n,!0),{box:a,boxSize:l,crop:y}=B3(e,t,o2.rightBounds[0],o2.rightBounds[1],n,!0),x=Q0.concat([s,y]);Q0.dispose(s),Q0.dispose(y);let i=de.execute(x);Q0.dispose(x);let d=await i.data();Q0.dispose(i);let c=d.slice(0,n2.numCoordinates*3),{rawCoords:h,iris:m}=H3(c,r,A,!0),P=d.slice(n2.numCoordinates*3),{rawCoords:M,iris:g}=H3(P,a,l,!1),f=uA(e);Math.abs(f)<30?(s5(e,h,"left",null),s5(e,M,"right",null)):f<1?s5(e,h,"left",["EyeUpper0","EyeLower0"]):s5(e,M,"right",["EyeUpper0","EyeLower0"]);let u=V3(e,m,"left"),S=V3(e,g,"right");return e.concat(u).concat(S)}var hA=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],bA=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],gA=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],MA=[[474,475],[475,476],[476,477],[477,474]],PA=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],vA=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],RA=[[469,470],[470,471],[471,472],[472,469]],TA=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function we(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var wA={lips:we(hA),leftEye:we(bA),leftEyebrow:we(gA),leftIris:we(MA),rightEye:we(PA),rightEyebrow:we(vA),rightIris:we(RA),faceOval:we(TA)},kA=Object.entries(wA).map(([e,t])=>t.map(o=>[o,e])).flat(),H4=new Map(kA),z2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Be=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],He=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function U3(e,t){let o={lips:await t.filter(A=>A.size===160)[0].data(),irisL:await t.filter(A=>A.size===10)[0].data(),eyeL:await t.filter(A=>A.size===142)[0].data(),irisR:await t.filter(A=>A.size===10)[1].data(),eyeR:await t.filter(A=>A.size===142)[1].data()},n=Be.reduce((A,s)=>A+=e[s][2],0)/Be.length;for(let A=0;AA+=e[s][2],0)/He.length;for(let A=0;Ab()-se.timestamp,n=se.skipped<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);!t.skipAllowed||!o||!n||se.boxes.length===0?(se.boxes=await l3(e,t),se.timestamp=b(),se.skipped=0):se.skipped++;let r=[],A=[],s=0;for(let f=0;fG.shape[G.shape.length-1]===1).data();if(w.faceScore=Math.round(100*X[0])/100,w.faceScore<(((h=t.face.detector)==null?void 0:h.minConfidence)||1)){if(u.confidence=w.faceScore,(m=t.face.mesh)!=null&&m.keepInvalid){w.box=U2(u,e),w.boxRaw=Y2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(G=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*G[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*G[1]/$e()]),w.meshRaw=w.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/Ve]);for(let G of Object.keys(Le))w.annotations[G]=[w.mesh[Le[G]]]}}else{let G=E.find(y0=>y0.shape[y0.shape.length-1]===1404),o0=ke.reshape(G,[-1,3]),_=await o0.array();ke.dispose(o0),(P=t.face.attention)!=null&&P.enabled?_=await U3(_,E):(M=t.face.iris)!=null&&M.enabled&&(_=await Z3(_,w.tensor,t,Ve)),w.mesh=n3(_,u,S,N,Ve),w.meshRaw=w.mesh.map(y0=>[y0[0]/(e.shape[2]||0),y0[1]/(e.shape[1]||0),(y0[2]||0)/Ve]);for(let y0 of Object.keys(Y0))w.annotations[y0]=Y0[y0].map(V0=>w.mesh[V0]);w.score=w.faceScore;let z={...A3(w.mesh,u),confidence:u.confidence,landmarks:u.landmarks};w.box=U2(z,e),w.boxRaw=Y2(z,e),A.push(z)}ke.dispose(E)}else{w.box=U2(u,e),w.boxRaw=Y2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(E=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*E[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*E[1]/$e()]),w.meshRaw=w.mesh.map(E=>[E[0]/(e.shape[2]||0),E[1]/(e.shape[1]||0),(E[2]||0)/Ve]);for(let E of Object.keys(Le))w.annotations[E]=[w.mesh[Le[E]]]}w.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(w):ke.dispose(w.tensor)}return se.boxes=A,r}async function K3(e){var t,o,n,r,A,s;return R.initial&&(M0=null),((o=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:o.enabled)&&(M0==null?void 0:M0.signature)&&Object.keys(((n=M0==null?void 0:M0.signature)==null?void 0:n.outputs)||{}).length<6&&(M0=null),M0?e.debug&&p("cached model:",M0.modelUrl):(r=e.face.attention)!=null&&r.enabled?M0=await W((A=e.face.attention)==null?void 0:A.modelPath):M0=await W((s=e.face.mesh)==null?void 0:s.modelPath),Ve=M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0}var J3=We,Q3=w2;var _0=Z(D());var W0,a5=[],_3=0,$3=0,v1=Number.MAX_SAFE_INTEGER;async function eo(e){var t;return R.initial&&(W0=null),W0?e.debug&&p("cached model:",W0.modelUrl):W0=await W((t=e.face.description)==null?void 0:t.modelPath),W0}function R1(e){let t=e.image||e.tensor||e;if(!(W0!=null&&W0.inputs[0].shape))return t;let o=_0.image.resizeBilinear(t,[W0.inputs[0].shape[2],W0.inputs[0].shape[1]],!1),n=_0.mul(o,B.tf255);return _0.dispose(o),n}async function T1(e,t,o,n){var s,a,l,y;if(!W0)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=v1<(((s=t.face.description)==null?void 0:s.skipFrames)||0),A=(((a=t.face.description)==null?void 0:a.skipTime)||0)>b()-_3;return t.skipAllowed&&r&&A&&$3===n&&((l=a5[o])==null?void 0:l.age)&&((y=a5[o])==null?void 0:y.age)>0?(v1++,a5[o]):(v1=0,new Promise(async x=>{var d,c;let i={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((d=t.face.description)!=null&&d.enabled){let h=R1(e),m=W0==null?void 0:W0.execute(h);_3=b(),_0.dispose(h);let M=await(await m.find(H=>H.shape[1]===1)).data(),g=Math.trunc(200*Math.abs(M[0]-.5))/100;g>(((c=t.face.description)==null?void 0:c.minConfidence)||0)&&(i.gender=M[0]<=.5?"female":"male",i.genderScore=Math.min(.99,g));let f=_0.argMax(m.find(H=>H.shape[1]===100),1),u=(await f.data())[0];_0.dispose(f);let N=await m.find(H=>H.shape[1]===100).data();i.age=Math.round(N[u-1]>N[u+1]?10*u-100*N[u-1]:10*u+100*N[u+1])/10;let w=m.find(H=>H.shape[1]===1024),E=w?await w.data():[];i.descriptor=Array.from(E),m.forEach(H=>_0.dispose(H))}a5[o]=i,$3=n,x(i)}))}var F=Z(D());var no=Z(D());function i5(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function S2(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function ro(e,t,o){let n=t.shape[1],r=t.shape[2],A=[[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r]];return no.image.cropAndResize(t,A,[0],o)}function Ao(e,t){let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(A=>[A[0]*t[0],A[1]*t[1]]);return{startPoint:o,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function l5(e,t=1.5){let o=S2(e),n=i5(e),r=[t*n[0]/2,t*n[1]/2],A=[o[0]-r[0],o[1]-r[1]],s=[o[0]+r[0],o[1]+r[1]];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function y5(e){let t=S2(e),o=i5(e),r=Math.max(...o)/2,A=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function zA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function so(e,t){let o=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return zA(o)}var to=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ee(e,t){let o=0;for(let n=0;n[o.x,o.y]),this.anchorsTensor=F.tensor2d(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=F.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=F.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let o={};o.boxOffsets=F.slice(t,[0,0],[-1,2]),o.boxSizes=F.slice(t,[0,2],[-1,2]),o.div=F.div(o.boxOffsets,this.inputSizeTensor),o.boxCenterPoints=F.add(o.div,this.anchorsTensor),o.halfBoxSizes=F.div(o.boxSizes,this.doubleInputSizeTensor),o.sub=F.sub(o.boxCenterPoints,o.halfBoxSizes),o.startPoints=F.mul(o.sub,this.inputSizeTensor),o.add=F.add(o.boxCenterPoints,o.halfBoxSizes),o.endPoints=F.mul(o.add,this.inputSizeTensor);let n=F.concat2d([o.startPoints,o.endPoints],1);return Object.keys(o).forEach(r=>F.dispose(o[r])),n}normalizeLandmarks(t,o){let n={};n.reshape=F.reshape(t,[-1,7,2]),n.div=F.div(n.reshape,this.inputSizeTensor),n.landmarks=F.add(n.div,this.anchors[o]);let r=F.mul(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(A=>F.dispose(n[A])),r}async predict(t,o){let n={};n.resize=F.image.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=F.div(n.resize,B.tf127),n.image=F.sub(n.div,B.tf1),n.batched=this.model.execute(n.image),n.predictions=F.squeeze(n.batched),n.slice=F.slice(n.predictions,[0,0],[-1,1]),n.sigmoid=F.sigmoid(n.slice),n.scores=F.squeeze(n.sigmoid);let r=await n.scores.data();n.boxes=F.slice(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await F.image.nonMaxSuppressionAsync(n.norm,n.scores,3*o.hand.maxDetected,o.hand.iouThreshold,o.hand.minConfidence);let A=await n.nms.array(),s=[];for(let a of A){let l={};l.box=F.slice(n.norm,[a,0],[1,-1]),l.slice=F.slice(n.predictions,[a,5],[1,14]),l.norm=this.normalizeLandmarks(l.slice,a),l.palmLandmarks=F.reshape(l.norm,[-1,2]);let y=await l.box.data(),x=y.slice(0,2),i=y.slice(2,4),d=await l.palmLandmarks.array(),c={startPoint:x,endPoint:i,palmLandmarks:d,confidence:r[a]},h=Ao(c,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);s.push(h),Object.keys(l).forEach(m=>F.dispose(l[m]))}return Object.keys(n).forEach(a=>F.dispose(n[a])),s}};var F0=Z(D());var jA=5,yo=1.65,co=[0,5,9,13,17,1,2],OA=0,NA=2,xo=0,x5=class{constructor(t,o){T(this,"handDetector");T(this,"handPoseModel");T(this,"inputSize");T(this,"storedBoxes");T(this,"skipped");T(this,"detectedHands");this.handDetector=t,this.handPoseModel=o,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let o=t.map(s=>s[0]),n=t.map(s=>s[1]),r=[Math.min(...o),Math.min(...n)],A=[Math.max(...o),Math.max(...n)];return{startPoint:r,endPoint:A}}getBoxForPalmLandmarks(t,o){let n=t.map(A=>E1([...A,1],o)),r=this.calculateLandmarksBoundingBox(n);return l5(y5(r),jA)}getBoxForHandLandmarks(t){let o=this.calculateLandmarksBoundingBox(t),n=l5(y5(o),yo);n.palmLandmarks=[];for(let r=0;r[s[0]*(c[0]-this.inputSize/2),s[1]*(c[1]-this.inputSize/2),s[2]*c[2]]),l=k1(n,[0,0]),y=a.map(c=>[...E1(c,l),c[2]]),x=ao(r),i=[...S2(o),1],d=[Ee(i,x[0]),Ee(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2])])}async estimateHands(t,o){let n=!1,r,A=(o.hand.skipTime||0)>b()-xo,s=this.skipped<(o.hand.skipFrames||0);o.skipAllowed&&A&&s&&(r=await this.handDetector.predict(t,o),this.skipped=0),o.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==o.hand.maxDetected||!o.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let a=[];for(let l=0;l=o.hand.minConfidence/4){let S=F0.reshape(f,[-1,3]),N=await S.array();F0.dispose(f),F0.dispose(S);let w=this.transformRawCoords(N,m,x,h),E=this.getBoxForHandLandmarks(w);this.storedBoxes[l]={...E,confidence:u};let H={landmarks:w,confidence:u,boxConfidence:y.confidence,fingerConfidence:u,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};a.push(H)}else this.storedBoxes[l]=null;F0.dispose(f)}else{let x=l5(y5(y),yo),i={confidence:y.confidence,boxConfidence:y.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>o.hand.maxDetected&&(a.length=o.hand.maxDetected),a}};var E0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>E0.nameMapping[e],getPoints:e=>E0.pointsMapping[e]},Se={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Se.nameMapping[e]},n0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>n0.nameMapping[e]},ze=class{constructor(t){T(this,"name");T(this,"curls");T(this,"directions");T(this,"weights");T(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,o,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([o,n])}direction(t,o,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([o,n])}weight(t,o){this.weights[t]=o;let n=this.weights.reduce((r,A)=>r+A,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,o){let n=0;for(let r in t){let A=t[r],s=this.curls[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}for(let r in o){let A=o[r],s=this.directions[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:$0,index:fe,middle:me,ring:De,pinky:Ze}=E0,{none:ee,half:WA,full:te}=Se,{verticalUp:r2,verticalDown:os,horizontalLeft:z1,horizontalRight:FA,diagonalUpRight:GA,diagonalUpLeft:A2,diagonalDownRight:ns,diagonalDownLeft:rs}=n0,Ce=new ze("thumbs up");Ce.curl($0,ee,1);Ce.direction($0,r2,1);Ce.direction($0,A2,.25);Ce.direction($0,GA,.25);for(let e of[E0.index,E0.middle,E0.ring,E0.pinky])Ce.curl(e,te,1),Ce.direction(e,z1,1),Ce.direction(e,FA,1);var d0=new ze("victory");d0.curl($0,WA,.5);d0.curl($0,ee,.5);d0.direction($0,r2,1);d0.direction($0,A2,1);d0.curl(fe,ee,1);d0.direction(fe,r2,.75);d0.direction(fe,A2,1);d0.curl(me,ee,1);d0.direction(me,r2,1);d0.direction(me,A2,.75);d0.curl(De,te,1);d0.direction(De,r2,.2);d0.direction(De,A2,1);d0.direction(De,z1,.2);d0.curl(Ze,te,1);d0.direction(Ze,r2,.2);d0.direction(Ze,A2,1);d0.direction(Ze,z1,.2);d0.weight(fe,2);d0.weight(me,2);var Ie=new ze("point");Ie.curl($0,te,1);Ie.curl(fe,ee,.5);Ie.curl(me,te,.5);Ie.curl(De,te,.5);Ie.curl(Ze,te,.5);Ie.weight(fe,2);Ie.weight(me,2);var je=new ze("middle finger");je.curl($0,ee,1);je.curl(fe,te,.5);je.curl(me,te,.5);je.curl(De,te,.5);je.curl(Ze,te,.5);je.weight(fe,2);je.weight(me,2);var s2=new ze("open palm");s2.curl($0,ee,.75);s2.curl(fe,ee,.75);s2.curl(me,ee,.75);s2.curl(De,ee,.75);s2.curl(Ze,ee,.75);var fo=[Ce,d0,Ie,je,s2];var BA=.7,Xe={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function mo(e,t,o,n){let r=(t-n)/(e-o),A=Math.atan(r)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function uo(e,t){if(!e||!t)return[0,0];let o=mo(e[0],e[1],t[0],t[1]);if(e.length===2)return o;let n=mo(e[1],e[2],t[1],t[2]);return[o,n]}function po(e,t=1){let o=0,n=0,r=0;return e>=75&&e<=105?o=1*t:e>=25&&e<=155?n=1*t:r=1*t,[o,n,r]}function HA(e,t,o){let n=e[0]-t[0],r=e[0]-o[0],A=t[0]-o[0],s=e[1]-t[1],a=e[1]-o[1],l=t[1]-o[1],y=e[2]-t[2],x=e[2]-o[2],i=t[2]-o[2],d=Math.sqrt(n*n+s*s+y*y),c=Math.sqrt(r*r+a*a+x*x),h=Math.sqrt(A*A+l*l+i*i),m=(h*h+d*d-c*c)/(2*h*d);m>1?m=1:m<-1&&(m=-1);let P=Math.acos(m);P=57.2958*P%180;let M;return P>Xe.NO_CURL_START_LIMIT?M=Se.none:P>Xe.HALF_CURL_START_LIMIT?M=Se.half:M=Se.full,M}function ho(e,t,o,n){let r;return n===Math.abs(e)?e>0?r=n0.horizontalLeft:r=n0.horizontalRight:n===Math.abs(t)?t>0?r=n0.horizontalLeft:r=n0.horizontalRight:o>0?r=n0.horizontalLeft:r=n0.horizontalRight,r}function bo(e,t,o,n){let r;return n===Math.abs(e)?e<0?r=n0.verticalDown:r=n0.verticalUp:n===Math.abs(t)?t<0?r=n0.verticalDown:r=n0.verticalUp:o<0?r=n0.verticalDown:r=n0.verticalUp,r}function VA(e,t,o,n,r,A,s,a){let l,y=bo(e,t,o,n),x=ho(r,A,s,a);return y===n0.verticalUp?x===n0.horizontalLeft?l=n0.diagonalUpLeft:l=n0.diagonalUpRight:x===n0.horizontalLeft?l=n0.diagonalDownLeft:l=n0.diagonalDownRight,l}function DA(e,t,o,n){let r=e[0]-t[0],A=e[0]-o[0],s=t[0]-o[0],a=e[1]-t[1],l=e[1]-o[1],y=t[1]-o[1],x=Math.max(Math.abs(r),Math.abs(A),Math.abs(s)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(y)),d=0,c=0,h=0,m=i/(x+1e-5);m>1.5?d+=Xe.DISTANCE_VOTE_POWER:m>.66?c+=Xe.DISTANCE_VOTE_POWER:h+=Xe.DISTANCE_VOTE_POWER;let P=Math.sqrt(r*r+a*a),M=Math.sqrt(A*A+l*l),g=Math.sqrt(s*s+y*y),f=Math.max(P,M,g),u=e[0],S=e[1],N=o[0],w=o[1];f===P?(N=o[0],w=o[1]):f===g&&(u=t[0],S=t[1]);let X=uo([u,S],[N,w]),G=po(X,Xe.TOTAL_ANGLE_VOTE_POWER);d+=G[0],c+=G[1],h+=G[2];for(let _ of n){let z=po(_,Xe.SINGLE_ANGLE_VOTE_POWER);d+=z[0],c+=z[1],h+=z[2]}let o0;return d===Math.max(d,c,h)?o0=bo(l,a,y,i):h===Math.max(c,h)?o0=ho(A,r,s,x):o0=VA(l,a,y,i,A,r,s,x),o0}function go(e){let t=[],o=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let A of E0.all){let s=E0.getPoints(A),a=[],l=[];for(let y of s){let x=e[y[0]],i=e[y[1]],d=uo(x,i),c=d[0],h=d[1];a.push(c),l.push(h)}t.push(a),o.push(l)}for(let A of E0.all){let s=A===E0.thumb?1:0,a=E0.getPoints(A),l=e[a[s][0]],y=e[a[s+1][1]],x=e[a[3][1]],i=HA(l,y,x),d=DA(l,y,x,t[A].slice(s));n[A]=i,r[A]=d}return{curls:n,directions:r}}function d5(e){if(!e||e.length===0)return null;let t=go(e),o={};for(let n of E0.all)o[E0.getName(n)]={curl:Se.getName(t.curls[n]),direction:n0.getName(t.directions[n])};return o}function Mo(e){let t=[];if(!e||e.length===0)return t;let o=go(e);for(let n of fo){let r=n.matchAgainst(o.curls,o.directions);r>=BA&&t.push({name:n.name,confidence:r})}return t}var Po={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},a2,i2,vo;async function C1(e,t){let o=await vo.estimateHands(e,t);if(!o)return[];let n=[];for(let r=0;ro[r].landmarks[i]);let s=o[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(s&&s.length>0){for(let x of s)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=o[r].box?[Math.trunc(Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.max(0,o[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,o[r].box.bottomRight[0])-Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,o[r].box.bottomRight[1])-Math.max(0,o[r].box.topLeft[1]))]:[0,0,0,0],l=[o[r].box.topLeft[0]/(e.shape[2]||0),o[r].box.topLeft[1]/(e.shape[1]||0),(o[r].box.bottomRight[0]-o[r].box.topLeft[0])/(e.shape[2]||0),(o[r].box.bottomRight[1]-o[r].box.topLeft[1])/(e.shape[1]||0)];let y=d5(s);n.push({id:r,score:Math.round(100*o[r].confidence)/100,boxScore:Math.round(100*o[r].boxConfidence)/100,fingerScore:Math.round(100*o[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:s,annotations:A,landmarks:y})}return n}async function I1(e){var o,n;R.initial&&(a2=null,i2=null),!a2||!i2?[a2,i2]=await Promise.all([e.hand.enabled?W((o=e.hand.detector)==null?void 0:o.modelPath):null,e.hand.landmarks?W((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&p("cached model:",a2.modelUrl),e.debug&&p("cached model:",i2.modelUrl));let t=new c5(a2);return vo=new x5(t,i2),[a2,i2]}var Q=Z(D());var i0=Z(D());var t0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ZA(){let e=t0.gl;!e||(t0.extensions=e.getSupportedExtensions())}async function To(e){var t;if(e.config.backend==="humangl"&&(t0.name in i0.engine().registry&&(!t0.gl||!t0.gl.getParameter(t0.gl.VERSION))&&(p("error: humangl backend invalid context"),f5(e)),!i0.findBackend(t0.name))){try{t0.canvas=await T0(100,100)}catch(n){p("error: cannot create canvas:",n);return}try{if(t0.gl=(t=t0.canvas)==null?void 0:t.getContext("webgl2",t0.webGLattr),!t0.gl.getParameter(t0.gl.VERSION).includes("2.0")){p("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}t0.canvas&&(t0.canvas.addEventListener("webglcontextlost",async r=>{throw p("error: humangl:",r.type),p("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),t0.canvas.addEventListener("webglcontextrestored",r=>{p("error: humangl context restored:",r)}),t0.canvas.addEventListener("webglcontextcreationerror",r=>{p("error: humangl context create:",r)}))}catch(n){p("error: cannot get WebGL context:",n);return}try{i0.setWebGLContext(2,t0.gl)}catch(n){p("error: cannot set WebGL context:",n);return}try{let n=new i0.GPGPUContext(t0.gl);i0.registerBackend(t0.name,()=>new i0.MathBackendWebGL(n),t0.priority)}catch(n){p("error: cannot register WebGL backend:",n);return}try{i0.getKernelsForBackend("webgl").forEach(r=>{let A={...r,backendName:t0.name};i0.registerKernel(A)})}catch(n){p("error: cannot update WebGL backend registration:",n);return}let o=i0.backend().getGPGPUContext?i0.backend().getGPGPUContext().gl:null;if(o)p(`humangl webgl version:${o.getParameter(o.VERSION)} renderer:${o.getParameter(o.RENDERER)}`);else{p("error: no current gl context:",o,t0.gl);return}try{i0.env().flagRegistry.WEBGL_VERSION&&i0.env().set("WEBGL_VERSION",2)}catch(n){p("error: cannot set WebGL backend flags:",n);return}ZA(),p("backend registered:",t0.name)}}var I=Z(D());function XA(){if(!R.kernels.includes("mod")){let e={kernelName:"Mod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.sub(t.inputs.a,I.mul(I.div(t.inputs.a,t.inputs.b),t.inputs.b)))};I.registerKernel(e),R.kernels.push("mod")}if(!R.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.floorDiv(t.inputs.a/t.inputs.b)*t.inputs.b+I.mod(t.inputs.a,t.inputs.b))};I.registerKernel(e),R.kernels.push("floormod")}}async function p5(e,t=!1){if(e.state="backend",t||R.initial||e.config.backend&&e.config.backend.length>0&&I.getBackend()!==e.config.backend){let o=b();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&p("running inside web worker"),R.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&p("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),R.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&p(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")p("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&p("enumerated webgpu adapter:",r),!r)p("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let A="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;p("webgpu adapter info:",A)}}e.config.backend==="humangl"&&await To(e);let n=Object.keys(I.engine().registryFactory);if(e.config.debug&&p("available backends:",n),n.includes(e.config.backend)||(p(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&p(`override: setting backend ${e.config.backend}`)),e.config.debug&&p("setting backend:",e.config.backend),e.config.backend==="wasm"){if(I.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&I.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&p("wasm path:",e.config.wasmPath),typeof(I==null?void 0:I.setWasmPaths)!="undefined")await I.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,A=!1;try{r=await I.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await I.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&p(`wasm execution: ${A?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&p("warning: wasm simd support is not enabled")}catch(s){p("wasm detection failed")}}try{await I.setBackend(e.config.backend),await I.ready(),Ft()}catch(r){return p("error: cannot set backend:",e.config.backend,r),!1}}if(I.getBackend()==="humangl"&&(I.env().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&I.env().set("CHECK_COMPUTATION_FOR_ERRORS",!1),I.env().flagRegistry.WEBGL_CPU_FORWARD&&I.env().set("WEBGL_CPU_FORWARD",!0),I.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&I.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),I.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&I.env().set("CPU_HANDOFF_SIZE_THRESHOLD",256),I.env().flagRegistry.WEBGL_EXP_CONV&&I.env().set("WEBGL_EXP_CONV",!0),I.env().flagRegistry.USE_SETTIMEOUTCUSTOM&&I.env().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(p("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),I.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),I.backend().getGPGPUContext)){let n=await I.backend().getGPGPUContext().gl;e.config.debug&&p(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}I.getBackend(),I.enableProdMode(),await I.ready(),e.performance.initBackend=Math.trunc(b()-o),e.config.backend=I.getBackend(),await R.updateBackend(),XA()}return!0}function u5(e,t){for(let o of e){let n={kernelName:o,backendName:t.backend,kernelFunc:()=>{t.debug&&p("kernelFunc",o,t.backend)}};I.registerKernel(n)}R.kernels=I.getKernelsForBackend(I.getBackend()).map(o=>o.kernelName.toLowerCase())}var p0=[null,null],UA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Oe=[[0,0],[0,0]],YA=["hand","fist","pinch","point","face","tip","pinchtip"],ko=4,Eo=1.6,KA=512,JA=1.4,h5=Number.MAX_SAFE_INTEGER,j1=0,pe=[0,0],l0={boxes:[],hands:[]},zo={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function So(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&p("cached model:",p0[0].modelUrl);else{u5(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await W((t=e.hand.detector)==null?void 0:t.modelPath);let o=Object.values(p0[0].modelSignature.inputs);Oe[0][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[0][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[0]}async function Co(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&p("cached model:",p0[1].modelUrl);else{p0[1]=await W((t=e.hand.skeleton)==null?void 0:t.modelPath);let o=Object.values(p0[1].modelSignature.inputs);Oe[1][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[1][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[1]}async function QA(e,t){let o=[];if(!e||!p0[0])return o;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,KA),s=Math.round(A*r/8)*8;n.resize=Q.image.resizeBilinear(e,[A,s]),n.cast=Q.cast(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await p0[0].executeAsync(n.cast,UA),n.boxes=Q.squeeze(n.rawBoxes,[0,2]),n.scores=Q.squeeze(n.rawScores,[0]);let a=Q.unstack(n.scores,1);Q.dispose(a[ko]),a.splice(ko,1),n.filtered=Q.stack(a,1),Q.dispose(a),n.max=Q.max(n.filtered,1),n.argmax=Q.argMax(n.filtered,1);let l=0;n.nms=await Q.image.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let y=await n.nms.data(),x=await n.max.data(),i=await n.argmax.data();for(let d of Array.from(y)){let c=Q.slice(n.boxes,d,1),h=await c.data();Q.dispose(c);let m=[h[1],h[0],h[3]-h[1],h[2]-h[0]],P=$2(m,JA),M=[Math.trunc(m[0]*pe[0]),Math.trunc(m[1]*pe[1]),Math.trunc(m[2]*pe[0]),Math.trunc(m[3]*pe[1])],g=x[d],f=YA[i[d]],u={id:l++,score:g,box:M,boxRaw:P,label:f};o.push(u)}return Object.keys(n).forEach(d=>Q.dispose(n[d])),o.sort((d,c)=>c.score-d.score),o.length>(t.hand.maxDetected||1)&&(o.length=t.hand.maxDetected||1),o}async function O1(e,t,o){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&o.hand.landmarks&&t.score>(o.hand.minConfidence||0)){let r={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[A],[0],[Oe[1][0],Oe[1][1]],"bilinear"),r.div=Q.div(r.crop,B.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let s=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(s))))/100;if(a>=(o.hand.minConfidence||0)){n.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Oe[1][1],i[1]/Oe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);n.keypoints=x.map(i=>[pe[0]*(i[0]+t.boxRaw[0]),pe[1]*(i[1]+t.boxRaw[1]),i[2]||0]),n.landmarks=d5(n.keypoints);for(let i of Object.keys(zo))n.annotations[i]=zo[i].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return n}async function N1(e,t){var r,A;if(!p0[0]||!p0[1]||!((r=p0[0])!=null&&r.inputs[0].shape)||!((A=p0[1])!=null&&A.inputs[0].shape))return[];pe=[e.shape[2]||0,e.shape[1]||0],h5++;let o=(t.hand.skipTime||0)>b()-j1,n=h5<(t.hand.skipFrames||0);return t.skipAllowed&&o&&n?l0.hands:new Promise(async s=>{let a=3*(t.hand.skipTime||0)>b()-j1,l=h5<3*(t.hand.skipFrames||0);t.skipAllowed&&l0.hands.length===t.hand.maxDetected?l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))):t.skipAllowed&&a&&l&&l0.hands.length>0?l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))):(l0.boxes=await QA(e,t),j1=b(),l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))),h5=0);let y=[...l0.boxes];if(l0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&l0.hands[x].fingerScore&&l0.hands[x].fingerScore>(t.hand.minConfidence||0)){let d=$2(i.box,Eo),c=$2(i.boxRaw,Eo);l0.boxes.push({...y[x],box:d,boxRaw:c})}}for(let x=0;xb()-Oo,A=L1<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&jo===n&&b5[o]?(L1++,b5[o]):(L1=0,new Promise(async l=>{let y=g5.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),x=P0==null?void 0:P0.execute(y),i=(await x.data())[0];b5[o]=Math.round(100*i)/100,jo=n,Oo=b(),g5.dispose([y,x]),l(b5[o])}))}var Ho=Z(D());var C2={};be(C2,{connected:()=>P5,horizontal:()=>F1,kpt:()=>M5,relative:()=>B1,vertical:()=>G1});var M5=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],F1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],G1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],B1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],P5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ne=Z(D()),Wo=.005,G0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function H1(e){for(let t of F1){let o=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[1]y&&y.part===t[0]),r=e.keypoints.findIndex(y=>y&&y.part===t[1]),A=e.keypoints.findIndex(y=>y&&y.part===o[0]),s=e.keypoints.findIndex(y=>y&&y.part===o[1]);if(!e.keypoints[A]||!e.keypoints[s])continue;let a=e.keypoints[n]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let y=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=y}}}function Fo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],o.pad=Ne.pad(e,G0.padding),o.resize=Ne.image.resizeBilinear(o.pad,[t,t]);let n=Ne.cast(o.resize,"int32");return Object.keys(o).forEach(r=>Ne.dispose(o[r])),n}function Bo(e,t){e.keypoints=e.keypoints.filter(n=>n&&n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+G0.padding[2][0]+G0.padding[2][1])/t[0]-G0.padding[2][0],n.position[1]*(t[1]+G0.padding[1][0]+G0.padding[1][1])/t[1]-G0.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let o=ce(e.keypoints.map(n=>n.position),t);return e.box=o.box,e.boxRaw=o.boxRaw,e}var B0,v5=0,V1=Number.MAX_SAFE_INTEGER,qe={boxes:[],bodies:[],last:0};async function Vo(e){return R.initial&&(B0=null),B0?e.debug&&p("cached model:",B0.modelUrl):(u5(["size"],e),B0=await W(e.body.modelPath)),v5=B0.inputs[0].shape?B0.inputs[0].shape[2]:0,v5<64&&(v5=256),B0}async function $A(e,t,o){let n=e[0][0],r=[],A=0;for(let x=0;xt.body.minConfidence){let i=[n[x][1],n[x][0]];r.push({score:Math.round(100*A)/100,part:M5[x],positionRaw:i,position:[Math.round((o.shape[2]||0)*i[0]),Math.round((o.shape[1]||0)*i[1])]})}A=r.reduce((x,i)=>i.score>x?i.score:x,0);let s=[],a=ce(r.map(x=>x.position),[o.shape[2],o.shape[1]]),l={};for(let[x,i]of Object.entries(P5)){let d=[];for(let c=0;cP.part===i[c]),m=r.find(P=>P.part===i[c+1]);h&&m&&h.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([h.position,m.position])}l[x]=d}let y={id:0,score:A,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return H1(y),s.push(y),s}async function e7(e,t,o){let n=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let d=A[3*i+2];if(d>t.body.minConfidence){let c=[A[3*i+1],A[3*i+0]];a.push({part:M5[i],score:Math.round(100*d)/100,positionRaw:c,position:[Math.round((o.shape[2]||0)*c[0]),Math.round((o.shape[1]||0)*c[1])]})}}let l=ce(a.map(i=>i.position),[o.shape[2],o.shape[1]]),y={};for(let[i,d]of Object.entries(P5)){let c=[];for(let h=0;hM.part===d[h]),P=a.find(M=>M.part===d[h+1]);m&&P&&m.score>(t.body.minConfidence||0)&&P.score>(t.body.minConfidence||0)&&c.push([m.position,P.position])}y[i]=c}let x={id:r,score:s,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:y};H1(x),n.push(x)}}return n.sort((r,A)=>A.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function D1(e,t){if(!B0||!(B0!=null&&B0.inputs[0].shape))return[];t.skipAllowed||(qe.boxes.length=0),V1++;let o=(t.body.skipTime||0)>b()-qe.last,n=V1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n?qe.bodies:new Promise(async r=>{let A={};V1=0,A.input=Go(e,v5),A.res=B0==null?void 0:B0.execute(A.input),qe.last=b();let s=await A.res.array();qe.bodies=A.res.shape[2]===17?await $A(s,t,e):await e7(s,t,e);for(let a of qe.bodies)Bo(a,[e.shape[2]||1,e.shape[1]||1]),Fo(a.keypoints);Object.keys(A).forEach(a=>Ho.dispose(A[a])),r(qe.bodies)})}var H0=Z(D());var l2,R5=[],Zo=0,Z1=Number.MAX_SAFE_INTEGER,w5=0,T5=2.5;async function Xo(e){if(!l2||R.initial){l2=await W(e.object.modelPath);let t=Object.values(l2.modelSignature.inputs);w5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&p("cached model:",l2.modelUrl);return l2}async function t7(e,t,o){let n=0,r=[];for(let l of[1,2,4]){let y=l*13,x=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)===t2.length)),i=await x.array(),d=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)(o.object.minConfidence||0)&&M!==61){let f=(.5+Math.trunc(P%y))/y,u=(.5+Math.trunc(P/y))/y,S=m[P].map(_=>_*(y/l/w5)),[N,w]=[f-T5/l*S[0],u-T5/l*S[1]],[E,H]=[f+T5/l*S[2]-N,u+T5/l*S[3]-w],X=[N,w,E,H];X=X.map(_=>Math.max(0,Math.min(_,1)));let G=[X[0]*t[0],X[1]*t[1],X[2]*t[0],X[3]*t[1]],o0={id:n++,score:Math.round(100*g)/100,class:M+1,label:t2[M].label,box:G.map(_=>Math.trunc(_)),boxRaw:X};r.push(o0)}}H0.dispose([x,d,c,h])}let A=r.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),s=r.map(l=>l.score),a=[];if(A&&A.length>0){let l=await H0.image.nonMaxSuppressionAsync(A,s,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence);a=await l.data(),H0.dispose(l)}return r=r.filter((l,y)=>a.includes(y)).sort((l,y)=>y.score-l.score),r}async function X1(e,t){let o=(t.object.skipTime||0)>b()-Zo,n=Z1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&R5.length>0?(Z1++,R5):(Z1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?R5:new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=H0.image.resizeBilinear(e,[w5,w5],!1),a=H0.div(s,B.tf255),l=H0.transpose(a,[0,3,1,2]),y;t.object.enabled&&(y=l2.execute(l)),Zo=b();let x=await t7(y,A,t);R5=x,H0.dispose([s,a,l,...y]),r(x)}))}var z0=Z(D());var j2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],o7=j2.length,I2=j2.reduce((e,t,o)=>(e[t]=o,e),{}),n7=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Cs=n7.map(([e,t])=>[I2[e],I2[t]]),Uo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function Yo(e){let t=e.reduce(({maxX:o,maxY:n,minX:r,minY:A},{position:{x:s,y:a}})=>({maxX:Math.max(o,s),maxY:Math.max(n,a),minX:Math.min(r,s),minY:Math.min(A,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Ko(e,[t,o],[n,r]){let A=t/n,s=o/r,a=(y,x)=>({id:x,score:y.score,boxRaw:[y.box[0]/r,y.box[1]/n,y.box[2]/r,y.box[3]/n],box:[Math.trunc(y.box[0]*s),Math.trunc(y.box[1]*A),Math.trunc(y.box[2]*s),Math.trunc(y.box[3]*A)],keypoints:y.keypoints.map(({score:i,part:d,position:c})=>({score:i,part:d,position:[Math.trunc(c.x*s),Math.trunc(c.y*A)],positionRaw:[c.x/n,c.y/n]})),annotations:{}});return e.map((y,x)=>a(y,x))}var k5=class{constructor(t,o){T(this,"priorityQueue");T(this,"numberOfElements");T(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=o}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let o=2*t;if(oo?o:e}function Jo(e,t,o,n){let r=o-e,A=n-t;return r*r+A*A}function K1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var oe,A7=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],E5=1,y2=16,s7=50**2;function Qo(e,t,o,n,r,A,s=2){let a=M=>({y:A.get(M.y,M.x,e),x:A.get(M.y,M.x,A.shape[2]/2+e)}),l=(M,g,f)=>({y:Y1(Math.round(M.y/y2),0,g-1),x:Y1(Math.round(M.x/y2),0,f-1)}),[y,x]=n.shape,i=l(t.position,y,x),d=a(i),h=K1(t.position,d);for(let M=0;M[I2[d],I2[c]]),s=A.map(([,d])=>d),a=A.map(([d])=>d),l=t.shape[2],y=s.length,x=new Array(l),i=U1(e.part,y2,o);x[e.part.id]={score:e.score,part:j2[e.part.id],position:i};for(let d=y-1;d>=0;--d){let c=s[d],h=a[d];x[c]&&!x[h]&&(x[h]=Qo(d,x[c],h,t,o,r))}for(let d=0;dt){a=!1;break}if(!a)break}return a}function l7(e,t){let[o,n,r]=t.shape,A=new k5(o*n*r,({score:s})=>s);for(let s=0;s{var s;let A=(s=r[n])==null?void 0:s.position;return A?Jo(o,t,A.y,A.x)<=s7:!1})}function y7(e,t){return t.reduce((n,{position:r,score:A},s)=>(_o(e,r,s)||(n+=A),n),0)/t.length}function c7(e,t,o,n,r,A){let s=[],a=l7(A,t);for(;s.lengthc.score>A);let i=y7(s,x),d=Yo(x);i>A&&s.push({keypoints:x,box:d,score:Math.round(100*i)/100})}return s}async function J1(e,t){let o=z0.tidy(()=>{if(!oe.inputs[0].shape)return[];let s=z0.image.resizeBilinear(e,[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]),a=z0.sub(z0.div(z0.cast(s,"float32"),127.5),1),y=oe.execute(a,A7).map(x=>z0.squeeze(x,[0]));return y[1]=z0.sigmoid(y[1]),y}),n=await Promise.all(o.map(s=>s.buffer()));for(let s of o)z0.dispose(s);let r=await c7(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return oe.inputs[0].shape?Ko(r,[e.shape[1],e.shape[2]],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]):[]}async function $o(e){return!oe||R.initial?oe=await W(e.body.modelPath):e.debug&&p("cached model:",oe.modelUrl),oe}var r0=Z(D());var ae,Q1=!1;async function _1(e){return!ae||R.initial?ae=await W(e.segmentation.modelPath):e.debug&&p("cached model:",ae.modelUrl),ae}async function tn(e,t,o){var m,P;if(Q1)return{data:[],canvas:null,alpha:null};Q1=!0,ae||await _1(o);let n=await Je(e,o),r=((m=n.tensor)==null?void 0:m.shape[2])||0,A=((P=n.tensor)==null?void 0:P.shape[1])||0;if(!n.tensor)return{data:[],canvas:null,alpha:null};let s={};s.resize=r0.image.resizeBilinear(n.tensor,[ae.inputs[0].shape?ae.inputs[0].shape[1]:0,ae.inputs[0].shape?ae.inputs[0].shape[2]:0],!1),r0.dispose(n.tensor),s.norm=r0.div(s.resize,B.tf255),s.res=ae.execute(s.norm),s.squeeze=r0.squeeze(s.res,0),s.squeeze.shape[2]===2?(s.softmax=r0.softmax(s.squeeze),[s.bg,s.fg]=r0.unstack(s.softmax,2),s.expand=r0.expandDims(s.fg,2),s.pad=r0.expandDims(s.expand,0),s.crop=r0.image.cropAndResize(s.pad,[[0,0,.5,.5]],[0],[r,A]),s.data=r0.squeeze(s.crop,0)):s.data=r0.image.resizeBilinear(s.squeeze,[A,r]);let a=Array.from(await s.data.data());if(R.node&&!R.Canvas&&typeof ImageData=="undefined")return o.debug&&p("canvas support missing"),Object.keys(s).forEach(M=>r0.dispose(s[M])),{data:a,canvas:null,alpha:null};let l=T0(r,A);r0.browser&&await r0.browser.toPixels(s.data,l);let y=l.getContext("2d");o.segmentation.blur&&o.segmentation.blur>0&&(y.filter=`blur(${o.segmentation.blur}px)`);let x=y.getImageData(0,0,r,A),i=T0(r,A),d=i.getContext("2d");n.canvas&&d.drawImage(n.canvas,0,0),d.globalCompositeOperation="darken",o.segmentation.blur&&o.segmentation.blur>0&&(d.filter=`blur(${o.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let c=d.getImageData(0,0,r,A);for(let M=0;Mr0.dispose(s[M])),Q1=!1,{data:a,canvas:i,alpha:l}}var O2=class{constructor(){T(this,"ssrnetage",null);T(this,"gear",null);T(this,"blazeposedetect",null);T(this,"blazepose",null);T(this,"centernet",null);T(this,"efficientpose",null);T(this,"mobilefacenet",null);T(this,"insightface",null);T(this,"emotion",null);T(this,"facedetect",null);T(this,"faceiris",null);T(this,"facemesh",null);T(this,"faceres",null);T(this,"ssrnetgender",null);T(this,"handpose",null);T(this,"handskeleton",null);T(this,"handtrack",null);T(this,"liveness",null);T(this,"movenet",null);T(this,"nanodet",null);T(this,"posenet",null);T(this,"segmentation",null);T(this,"antispoof",null)}},$1=e=>{let t=0,o=0,n=0;for(let A of Object.values(ne))t+=A.sizeFromManifest,o+=A.sizeLoadedWeights,n+=A.sizeDesired;let r=n>0?o/n:0;return{numLoadedModels:Object.values(ne).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:o,totalSizeLoading:n,totalSizeEnabled:void 0,modelStats:Object.values(ne)}};function f5(e){for(let t of Object.keys(e.models))e.models[t]=null}async function et(e){var t,o,n,r,A,s,a,l,y,x,i,d,c,h,m,P,M,g,f,u,S,N,w,E,H,X,G,o0,_,z,y0,V0;R.initial&&f5(e),e.config.hand.enabled&&(!e.models.handpose&&((o=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:o.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await I1(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(n=e.config.hand.detector)==null?void 0:n.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await I1(e.config))),e.config.body.enabled&&!e.models.blazepose&&((s=(A=e.config.body)==null?void 0:A.modelPath)==null?void 0:s.includes("blazepose"))&&(e.models.blazepose=h3(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=u3(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((l=(a=e.config.body)==null?void 0:a.modelPath)==null?void 0:l.includes("efficientpose"))&&(e.models.efficientpose=R3(e.config)),e.config.body.enabled&&!e.models.movenet&&((x=(y=e.config.body)==null?void 0:y.modelPath)==null?void 0:x.includes("movenet"))&&(e.models.movenet=Vo(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=$o(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=i3(e.config)),e.config.face.enabled&&((c=e.config.face.antispoof)==null?void 0:c.enabled)&&!e.models.antispoof&&(e.models.antispoof=Kt(e.config)),e.config.face.enabled&&((h=e.config.face.liveness)==null?void 0:h.enabled)&&!e.models.liveness&&(e.models.liveness=No(e.config)),e.config.face.enabled&&((m=e.config.face.description)==null?void 0:m.enabled)&&!e.models.faceres&&(e.models.faceres=eo(e.config)),e.config.face.enabled&&((P=e.config.face.emotion)==null?void 0:P.enabled)&&!e.models.emotion&&(e.models.emotion=E3(e.config)),e.config.face.enabled&&((M=e.config.face.iris)==null?void 0:M.enabled)&&!((g=e.config.face.attention)!=null&&g.enabled)&&!e.models.faceiris&&(e.models.faceiris=D3(e.config)),e.config.face.enabled&&((f=e.config.face.mesh)==null?void 0:f.enabled)&&!e.models.facemesh&&(e.models.facemesh=K3(e.config)),e.config.face.enabled&&((u=e.config.face.gear)==null?void 0:u.enabled)&&!e.models.gear&&(e.models.gear=Lt(e.config)),e.config.face.enabled&&((S=e.config.face.ssrnet)==null?void 0:S.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=Ht(e.config)),e.config.face.enabled&&((N=e.config.face.ssrnet)==null?void 0:N.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=Xt(e.config)),e.config.face.enabled&&((w=e.config.face.mobilefacenet)==null?void 0:w.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=j3(e.config)),e.config.face.enabled&&((E=e.config.face.insightface)==null?void 0:E.enabled)&&!e.models.insightface&&(e.models.insightface=F3(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((X=(H=e.config.hand.detector)==null?void 0:H.modelPath)==null?void 0:X.includes("handtrack"))&&(e.models.handtrack=So(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((o0=(G=e.config.hand.detector)==null?void 0:G.modelPath)==null?void 0:o0.includes("handtrack"))&&(e.models.handskeleton=Co(e.config)),e.config.object.enabled&&!e.models.centernet&&((z=(_=e.config.object)==null?void 0:_.modelPath)==null?void 0:z.includes("centernet"))&&(e.models.centernet=M3(e.config)),e.config.object.enabled&&!e.models.nanodet&&((V0=(y0=e.config.object)==null?void 0:y0.modelPath)==null?void 0:V0.includes("nanodet"))&&(e.models.nanodet=Xo(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=_1(e.config));for await(let v of Object.keys(e.models))e.models[v]&&typeof e.models[v]!="undefined"&&(e.models[v]=await e.models[v])}var Z0;function c2(e,t,o){if(e&&(Z0=e),!t||(Z0||p("instance not registred"),!Z0.config.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],A=[],s=[],a=t.modelUrl,l=t.executor;if(l&&l.graph.nodes)for(let y of Object.values(l.graph.nodes)){let x=y.op.toLowerCase();A.includes(x)||A.push(x)}else!l&&Z0.config.debug&&p("model signature not determined:",o);for(let y of A)!n.includes(y)&&!r.includes(y)&&!Z0.env.kernels.includes(y)&&!Z0.env.kernels.includes(y.replace("_",""))&&!Z0.env.kernels.includes(y.replace("native",""))&&!Z0.env.kernels.includes(y.replace("v2",""))&&s.push(y);return Z0.config.debug&&s.length>0&&p("model validation failed:",o,s),s.length>0?{name:o,missing:s,ops:A,url:a}:null}function z5(e){Z0=e;let t=[];for(let o of Object.keys(Z0.models)){let n=Z0.models[o];if(!n)continue;let r=c2(Z0,n,o);r&&t.push(r)}return t}var S0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ne={};async function x7(e,t){return S0.debug&&p("load model fetch:",e,t),fetch(e,t)}function nn(e){S0.cacheModels=e.cacheModels,S0.verbose=e.debug,S0.modelBasePath=e.modelBasePath}async function W(e){var y,x,i;let t=Pt(S0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let o=t.includes("/")?t.split("/"):t.split("\\"),n=o[o.length-1].replace(".json",""),r="indexeddb://"+n;ne[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:B5[n],inCache:!1},S0.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let A={};try{A=S0.cacheSupported&&S0.cacheModels?await S5.io.listModels():{}}catch(d){S0.cacheSupported=!1}ne[n].inCache=S0.cacheSupported&&S0.cacheModels&&Object.keys(A).includes(r);let s=typeof fetch=="undefined"?{}:{fetchFunc:(d,c)=>x7(d,c)},a=new S5.GraphModel(ne[n].inCache?r:t,s),l=!1;try{a.findIOHandler(),S0.debug&&p("model load handler:",a.handler);let d=await a.handler.load();ne[n].sizeFromManifest=((y=d==null?void 0:d.weightData)==null?void 0:y.byteLength)||0,a.loadSync(d),ne[n].sizeLoadedWeights=((i=(x=a==null?void 0:a.artifacts)==null?void 0:x.weightData)==null?void 0:i.byteLength)||0,S0.verbose&&p("load model:",a.modelUrl,{bytes:ne[n].sizeLoadedWeights},S0),l=!0}catch(d){p("error loading model:",t,d)}if(l&&S0.cacheModels&&S0.cacheSupported&&!ne[n].inCache)try{let d=await a.save(r);p("model saved:",r,d)}catch(d){p("error saving model:",t,d)}return c2(null,a,`${e}`),a}var re=Z(D());var tt="2.9.3";var it={};be(it,{all:()=>at,body:()=>d2,canvas:()=>st,face:()=>x2,gesture:()=>p2,hand:()=>f2,object:()=>m2,options:()=>v0,person:()=>At});var X0=e=>{if(!e)p("draw error: invalid canvas");else if(!e.getContext)p("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)p("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),ue=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let o=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${t.alpha})`};function he(e,t,o,n,r){e.fillStyle=ue(n,r),e.beginPath(),e.arc(t,o,r.pointSize,0,2*Math.PI),e.fill()}function ie(e,t,o,n,r,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let s=(t+t+n)/2,a=(o+o+r)/2;e.ellipse(s,a,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,o),e.lineTo(t+n-A.roundRect,o),e.quadraticCurveTo(t+n,o,t+n,o+A.roundRect),e.lineTo(t+n,o+r-A.roundRect),e.quadraticCurveTo(t+n,o+r,t+n-A.roundRect,o+r),e.lineTo(t+A.roundRect,o+r),e.quadraticCurveTo(t,o+r,t,o+r-A.roundRect),e.lineTo(t,o+A.roundRect),e.quadraticCurveTo(t,o,t+A.roundRect,o),e.closePath();e.stroke()}function ot(e,t,o){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=ue(n[2]||0,o),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),o.fillPolygons&&(e.closePath(),e.fill())}}function rn(e,t,o){if(!(t.length<2)){if(e.lineWidth=o.lineWidth,!o.useCurves||t.length<=2){ot(e,t,o);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n0){let n=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);n.length>3&&(n.length=3),o.push(n.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&o.push(`roll: ${Ue(e.rotation.angle.roll)}\xB0 yaw:${Ue(e.rotation.angle.yaw)}\xB0 pitch:${Ue(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&o.push(`gaze: ${Ue(e.rotation.gaze.bearing)}\xB0`)),o.length===0&&o.push("face"),t.fillStyle=K.color;for(let n=o.length-1;n>=0;n--){let r=Math.max(e.box[0],0),A=n*K.lineHeight+e.box[1];K.shadowColor&&K.shadowColor!==""&&(t.fillStyle=K.shadowColor,t.fillText(o[n],r+5,A+16)),t.fillStyle=K.labelColor,t.fillText(o[n],r+4,A+15)}}}function p7(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,n=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,n=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function u7(e,t){var o;if(K.drawGaze&&((o=e.rotation)==null?void 0:o.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,A=new Path2D(` +`;var W5=(e,t,o)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,A)=>(o[A]=0,r))},F5=class{constructor(t,o,n){T(this,"uniform",{});T(this,"attribute",{});T(this,"gl");T(this,"id");T(this,"compile",(t,o)=>{let n=this.gl.createShader(o);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(p(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)}`),null)):(p("filter: could not create shader"),null)});this.gl=t;let r=this.compile(o,this.gl.VERTEX_SHADER),A=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!A)){if(!this.id){p("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){p(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);return}this.gl.useProgram(this.id),W5(o,"attribute",this.attribute);for(let s in this.attribute)this.attribute[s]=this.gl.getAttribLocation(this.id,s);W5(o,"uniform",this.uniform),W5(n,"uniform",this.uniform);for(let s in this.uniform)this.uniform[s]=this.gl.getUniformLocation(this.id,s)}}};function Ct(){let e=0,t=null,o=!1,n=-1,r=[null,null],A=[],s=null,a=null,l=T0(100,100),y={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){p("filter: cannot get webgl context");return}this.gl=i;function d(g,f){if(!(g===l.width&&f===l.height)){if(l.width=g,l.height=f,!s){let u=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);s=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,s),i.bufferData(i.ARRAY_BUFFER,u,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function c(g,f){let u=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,u);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let N=i.createTexture();return i.bindTexture(i.TEXTURE_2D,N),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,g,f,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,N,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:u,texture:N}}function h(g){return r[g]=r[g]||c(l.width,l.height),r[g]}function m(g=0){if(!a)return;let f=null,u=null,S=!1;e===0?f=t:f=h(n).texture||null,e++,o&&!(g&x.INTERMEDIATE)?(u=null,S=e%2===0):(n=(n+1)%2,u=h(n).fbo||null),i.bindTexture(i.TEXTURE_2D,f),i.bindFramebuffer(i.FRAMEBUFFER,u),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function P(g){if(y[g])return a=y[g],i.useProgram((a?a.id:null)||null),a;if(a=new F5(i,Tt,g),!a)return p("filter: could not get webgl program"),null;let f=Float32Array.BYTES_PER_ELEMENT,u=4*f;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,u,0*f),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,u,2*f),y[g]=a,a}let M={colorMatrix:g=>{let f=new Float32Array(g);f[4]/=255,f[9]/=255,f[14]/=255,f[19]/=255;let u=f[18]===1&&f[3]===0&&f[8]===0&&f[13]===0&&f[15]===0&&f[16]===0&&f[17]===0&&f[19]===0?kt:wt,S=P(u);!S||(i.uniform1fv(S.uniform.m,f),m())},brightness:g=>{let f=(g||0)+1;M.colorMatrix([f,0,0,0,0,0,f,0,0,0,0,0,f,0,0,0,0,0,1,0])},saturation:g=>{let f=(g||0)*2/3+1,u=(f-1)*-.5;M.colorMatrix([f,u,u,0,0,u,f,u,0,0,u,u,f,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:g=>{let f=(g||0)+1,u=-128*(f-1);M.colorMatrix([f,0,0,0,u,0,f,0,0,u,0,0,f,0,u,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let f=Math.cos(g),u=Math.sin(g),S=.213,N=.715,w=.072;M.colorMatrix([S+f*(1-S)+u*-S,N+f*-N+u*-N,w+f*-w+u*(1-w),0,0,S+f*-S+u*.143,N+f*(1-N)+u*.14,w+f*-w+u*-.283,0,0,S+f*-S+u*-(1-S),N+f*-N+u*N,w+f*(1-w)+u*w,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:g=>{let f=new Float32Array(g),u=1/l.width,S=1/l.height,N=P(St);!N||(i.uniform1fv(N.uniform.m,f),i.uniform2f(N.uniform.px,u,S),m())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:g=>{let f=g||1;M.convolution.call(this,[0,-1*f,0,-1*f,1+4*f,-1*f,0,-1*f,0])},emboss:g=>{let f=g||1;M.convolution.call(this,[-2*f,-1*f,0,-1*f,1,1*f,0,1*f,2*f])},blur:g=>{let f=g/7/l.width,u=g/7/l.height,S=P(zt);!S||(i.uniform2f(S.uniform.px,0,u),m(x.INTERMEDIATE),i.uniform2f(S.uniform.px,f,0),m())},pixelate:g=>{let f=g/l.width,u=g/l.height,S=P(Et);!S||(i.uniform2f(S.uniform.size,f,u),m())}};this.add=function(g){let f=Array.prototype.slice.call(arguments,1),u=M[g];A.push({func:u,args:f})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(g){d(g.width,g.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,g);for(let f=0;fc.data())),s=.99*Math.max(A[0][0],A[1][0],A[2][0]),a=[U.sub(o[0],n[0]),U.sub(o[1],n[1]),U.sub(o[2],n[2])],l=[U.sub(r[0],n[0]),U.sub(r[1],n[1]),U.sub(r[2],n[2])],y=[U.div(s,l[0]),U.div(s,l[1]),U.div(s,l[2])],x=[U.mul(a[0],y[0]),U.mul(a[1],y[1]),U.mul(a[2],y[2])],i=U.stack([x[0],x[1],x[2]],2),d=U.reshape(i,[1,t.shape[0],t.shape[1],3]);return U.dispose([...o,...n,...r,...a,...l,...y,...x,i,t]),d}var G2=3840,Y=null,c0=null,Ke=null,e0,le={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function T0(e,t){let o;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");o=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");o=document.createElement("canvas"),o.width=e,o.height=t}else typeof R.Canvas!="undefined"?o=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(o=new globalThis.Canvas(e,t));return o}function B2(e,t){let o=t||T0(e.width,e.height);return o.getContext("2d").drawImage(e,0,0),o}async function Je(e,t,o=!0){if(!e)return t.debug&&p("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof O.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof R.Canvas!="undefined"&&e instanceof R.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof O.Tensor){let n=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)n=O.expandDims(e,0);else if(e.shape[2]===4){let r=O.slice3d(e,[0,0,0],[-1,-1,3]);n=O.expandDims(r,0),O.dispose(r)}}else e.shape.length===4&&(e.shape[3]===3?n=O.clone(e):e.shape[3]===4&&(n=O.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(n==null||n.shape.length!==4||n.shape[0]!==1||n.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape}`);if(n.dtype==="int32"){let r=O.cast(n,"float32");O.dispose(n),n=r}return{tensor:n,canvas:t.filter.return?c0:null}}else{if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&p("input stream is not ready"),{tensor:null,canvas:Y};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&p("cannot determine input dimensions"),{tensor:null,canvas:Y};let A=n,s=r;if(A>G2&&(A=G2,s=Math.trunc(A*r/n)),s>G2&&(s=G2,A=Math.trunc(s*n/r)),(t.filter.width||0)>0?A=t.filter.width:(t.filter.height||0)>0&&(A=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?s=t.filter.height:(t.filter.width||0)>0&&(s=r*((t.filter.width||0)/n)),!A||!s)throw new Error("input error: cannot determine dimension");(!Y||(Y==null?void 0:Y.width)!==A||(Y==null?void 0:Y.height)!==s)&&(Y=T0(A,s));let a=Y.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(n,0),a.scale(-1,1),a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,n,r,0,0,Y==null?void 0:Y.width,Y==null?void 0:Y.height),(!c0||Y.width!==c0.width||(Y==null?void 0:Y.height)!==(c0==null?void 0:c0.height))&&(c0=T0(Y.width,Y.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new Ct:null),R.filter=!!e0,!e0||!e0.add?(t.debug&&p("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,B2(Y,c0)):(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),e0.get()>0?c0=e0.apply(Y):c0=e0.draw(Y))):(B2(Y,c0),e0&&(e0=null),R.filter=!!e0),!o)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let l,y=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&O.browser)l=O.browser?O.browser.fromPixels(e):null;else{y=e.data.length/e.height/e.width;let d=new Uint8Array(e.data.buffer);l=O.tensor(d,[e.height,e.width,y],"int32")}else if((!Ke||c0.width!==Ke.width||c0.height!==Ke.height)&&(Ke=T0(c0.width,c0.height)),O.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=O.browser.fromPixels(c0):(Ke=B2(c0),l=O.browser.fromPixels(Ke));else{let h=B2(c0).getContext("2d").getImageData(0,0,A,s);y=h.data.length/A/s;let m=new Uint8Array(h.data.buffer);l=O.tensor(m,[A,s,y])}if(y===4){let d=O.slice3d(l,[0,0,0],[-1,-1,3]);O.dispose(l),l=d}if(!l)throw new Error("input error: cannot create tensor");let x=O.cast(l,"float32"),i=t.filter.equalization?await F2(x):O.expandDims(x,0);return O.dispose([l,x]),{tensor:i,canvas:t.filter.return?c0:null}}}async function It(e,t){let o=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>2048||t.shape[2]>2048)return o;if(!le.inputTensor)le.inputTensor=O.clone(t);else if(le.inputTensor.shape[1]!==t.shape[1]||le.inputTensor.shape[2]!==t.shape[2])O.dispose(le.inputTensor),le.inputTensor=O.clone(t);else{let n={};n.diff=O.sub(t,le.inputTensor),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;O.dispose([le.inputTensor,n.diff,n.squared,n.sum]),le.inputTensor=O.clone(t),o=A<=(e.cacheSensitivity||0)}return o}async function jt(e,t,o){let n={};if(!t||!o||t.shape.length!==4||t.shape.length!==o.shape.length)return e.debug||p("invalid input tensor or tensor shapes do not match:",t.shape,o.shape),0;if(t.shape[0]!==1||o.shape[0]!==1||t.shape[3]!==3||o.shape[3]!==3)return e.debug||p("input tensors must be of shape [1, height, width, 3]:",t.shape,o.shape),0;n.input1=O.clone(t),n.input2=t.shape[1]!==o.shape[1]||t.shape[2]!==o.shape[2]?O.image.resizeBilinear(o,[t.shape[1],t.shape[2]]):O.clone(o),n.diff=O.sub(n.input1,n.input2),n.squared=O.mul(n.diff,n.diff),n.sum=O.sum(n.squared);let A=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return O.dispose([n.input1,n.input2,n.diff,n.squared,n.sum]),A}var G5=class{constructor(){T(this,"browser");T(this,"node");T(this,"worker");T(this,"platform","");T(this,"agent","");T(this,"backends",[]);T(this,"initial");T(this,"filter");T(this,"tfjs");T(this,"offscreen");T(this,"perfadd",!1);T(this,"tensorflow",{version:void 0,gpu:void 0});T(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});T(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});T(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});T(this,"cpu",{model:void 0,flags:[]});T(this,"kernels",[]);T(this,"Canvas");T(this,"Image");T(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:x0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t&&t[0]){let o=t[0].match(/\(([^()]+)\)/g);this.platform=o&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(x0.engine().registryFactory),this.tensorflow={version:x0.backend().binding?x0.backend().binding.TF_Version:void 0,gpu:x0.backend().binding?x0.backend().binding.isUsingGpuDevice():void 0},this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&x0.getBackend()==="wasm"&&(this.wasm.simd=x0.env().get("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=x0.env().get("WASM_HAS_MULTITHREAD_SUPPORT"));let t=T0(100,100),o=t?t.getContext("webgl2"):void 0;if(this.webgl.supported=typeof o!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&(x0.getBackend()==="webgl"||x0.getBackend()==="humangl")){let n=x0.backend().gpgpu!=="undefined"?await x0.backend().getGPGPUContext().gl:null;n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.renderer=n.getParameter(n.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{this.webgpu.supported&&(this.webgpu.adapter=(await navigator.gpu.requestAdapter()).name)}catch(n){this.webgpu.supported=!1}try{this.kernels=x0.getKernelsForBackend(x0.getBackend()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},R=new G5;var S5=Z(D());var B5={};be(B5,{age:()=>qn,"anti-spoofing":()=>vr,antispoof:()=>jn,blazeface:()=>On,"blazeface-back":()=>Un,"blazeface-front":()=>Yn,"blazepose-detect":()=>Pr,"blazepose-detector2d":()=>Kn,"blazepose-detector3d":()=>Jn,"blazepose-full":()=>Qn,"blazepose-heavy":()=>_n,"blazepose-lite":()=>$n,default:()=>Lr,efficientpose:()=>er,"efficientpose-i-lite":()=>Rr,"efficientpose-ii-lite":()=>Tr,"efficientpose-iv":()=>wr,emotion:()=>Nn,faceboxes:()=>tr,facemesh:()=>Ln,"facemesh-attention":()=>nr,"facemesh-attention-alt":()=>or,"facemesh-detection-full":()=>rr,"facemesh-detection-short":()=>Ar,"facemesh-orig":()=>sr,faceres:()=>Wn,"faceres-deep":()=>ar,gear:()=>ir,gender:()=>yr,"gender-ssrnet-imdb":()=>lr,handdetect:()=>cr,"handlandmark-full":()=>Fn,"handlandmark-lite":()=>xr,"handlandmark-sparse":()=>dr,handskeleton:()=>fr,handtrack:()=>Gn,"insightface-efficientnet-b0":()=>kr,"insightface-ghostnet-strides1":()=>Er,"insightface-ghostnet-strides2":()=>zr,"insightface-mobilenet-emore":()=>Sr,"insightface-mobilenet-swish":()=>Cr,iris:()=>Bn,liveness:()=>Hn,"mb3-centernet":()=>Vn,meet:()=>mr,mobileface:()=>pr,mobilefacenet:()=>ur,models:()=>Dn,"movenet-lightning":()=>Zn,"movenet-multipose":()=>hr,"movenet-thunder":()=>br,nanodet:()=>gr,"nanodet-e":()=>Ir,"nanodet-g":()=>jr,"nanodet-m":()=>Or,"nanodet-t":()=>Nr,posenet:()=>Mr,selfie:()=>Xn});var jn=853098,On=538928,Nn=820516,Ln=1477958,Wn=6978814,Fn=5431368,Gn=2964837,Bn=2599092,Hn=592976,Vn=4030290,Dn=0,Zn=4650216,Xn=212886,qn=161240,Un=538928,Yn=402048,Kn=7499400,Jn=5928856,Qn=6338290,_n=27501554,$n=2725490,er=5651240,tr=2013002,or=2387598,nr=2382414,rr=1026192,Ar=201268,sr=2955780,ar=13957620,ir=1498916,lr=161236,yr=201808,cr=3515612,xr=2023432,dr=5286322,fr=5502280,mr=372228,pr=2183192,ur=5171976,hr=9448838,br=12477112,gr=7574558,Mr=5032780,Pr=5928804,vr=853098,Rr=2269064,Tr=5651240,wr=25643252,kr=13013224,Er=8093408,zr=8049584,Sr=6938536,Cr=12168584,Ir=12319156,jr=7574558,Or=1887474,Nr=5294216,Lr={antispoof:jn,blazeface:On,emotion:Nn,facemesh:Ln,faceres:Wn,"handlandmark-full":Fn,handtrack:Gn,iris:Bn,liveness:Hn,"mb3-centernet":Vn,models:Dn,"movenet-lightning":Zn,selfie:Xn,age:qn,"blazeface-back":Un,"blazeface-front":Yn,"blazepose-detector2d":Kn,"blazepose-detector3d":Jn,"blazepose-full":Qn,"blazepose-heavy":_n,"blazepose-lite":$n,efficientpose:er,faceboxes:tr,"facemesh-attention-alt":or,"facemesh-attention":nr,"facemesh-detection-full":rr,"facemesh-detection-short":Ar,"facemesh-orig":sr,"faceres-deep":ar,gear:ir,"gender-ssrnet-imdb":lr,gender:yr,handdetect:cr,"handlandmark-lite":xr,"handlandmark-sparse":dr,handskeleton:fr,meet:mr,mobileface:pr,mobilefacenet:ur,"movenet-multipose":hr,"movenet-thunder":br,nanodet:gr,posenet:Mr,"blazepose-detect":Pr,"anti-spoofing":vr,"efficientpose-i-lite":Rr,"efficientpose-ii-lite":Tr,"efficientpose-iv":wr,"insightface-efficientnet-b0":kr,"insightface-ghostnet-strides1":Er,"insightface-ghostnet-strides2":zr,"insightface-mobilenet-emore":Sr,"insightface-mobilenet-swish":Cr,"nanodet-e":Ir,"nanodet-g":jr,"nanodet-m":Or,"nanodet-t":Nr};var m5={};be(m5,{Models:()=>O2,getModelStats:()=>$1,load:()=>et,reset:()=>f5,validate:()=>z5,validateModel:()=>c2});var H2=Z(D());var q0,H5=[],Wr=["white","black","asian","indian","other"],Fr=[15,23,28,35.5,45.5,55.5,65],Ot=0,Nt=0,V5=Number.MAX_SAFE_INTEGER;async function Lt(e){var t;return R.initial&&(q0=null),q0?e.debug&&p("cached model:",q0.modelUrl):q0=await W((t=e.face.gear)==null?void 0:t.modelPath),q0}async function D5(e,t,o,n){var s,a;if(!q0)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=V5<(((s=t.face.gear)==null?void 0:s.skipFrames)||0),A=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>b()-Nt;return t.skipAllowed&&A&&r&&Ot===n&&H5[o]?(V5++,H5[o]):(V5=0,new Promise(async l=>{var M,g;if(!(q0!=null&&q0.inputs[0].shape))return;let y={},x=[[0,.1,.9,.9]];y.resize=H2.image.cropAndResize(e,x,[0],[q0.inputs[0].shape[2],q0.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([y.age,y.gender,y.race]=q0.execute(y.resize,["age_output","gender_output","race_output"]));let d=await y.gender.data();i.gender=d[0]>d[1]?"male":"female",i.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let c=await y.race.data();for(let f=0;f(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&i.race.push({score:Math.round(100*c[f])/100,race:Wr[f]});i.race.sort((f,u)=>u.score-f.score);let m=Array.from(await y.age.data()).map((f,u)=>[Fr[u],f]).sort((f,u)=>u[1]-f[1]),P=m[0][0];for(let f=1;fH2.dispose(y[f])),H5[o]=i,Ot=n,Nt=b(),l(i)}))}var Qe=Z(D());var Me=Z(D()),B={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Ft(){B.tf255=Me.scalar(255,"float32"),B.tf1=Me.scalar(1,"float32"),B.tf2=Me.scalar(2,"float32"),B.tf05=Me.scalar(.5,"float32"),B.tf127=Me.scalar(127.5,"float32"),B.rgb=Me.tensor1d([.2989,.587,.114],"float32")}var C0,V2=[],Gt=0,Bt=0,Z5=Number.MAX_SAFE_INTEGER;async function Ht(e){return R.initial&&(C0=null),C0?e.debug&&p("cached model:",C0.modelUrl):C0=await W(e.face.ssrnet.modelPathAge),C0}async function X5(e,t,o,n){var s,a,l,y;if(!C0)return{age:0};let r=Z5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Bt;return t.skipAllowed&&r&&A&&Gt===n&&((l=V2[o])==null?void 0:l.age)&&((y=V2[o])==null?void 0:y.age)>0?(Z5++,V2[o]):(Z5=0,new Promise(async x=>{if(!(C0!=null&&C0.inputs)||!C0.inputs[0]||!C0.inputs[0].shape)return;let i={};i.resize=Qe.image.resizeBilinear(e,[C0.inputs[0].shape[2],C0.inputs[0].shape[1]],!1),i.enhance=Qe.mul(i.resize,B.tf255);let d={age:0};if(t.face.ssrnet.enabled&&(i.age=C0.execute(i.enhance)),i.age){let c=await i.age.data();d.age=Math.trunc(10*c[0])/10}Object.keys(i).forEach(c=>Qe.dispose(i[c])),V2[o]=d,Gt=n,Bt=b(),x(d)}))}var h0=Z(D());var U0,D2=[],Dt=0,Zt=0,q5=Number.MAX_SAFE_INTEGER,U5=[.2989,.587,.114];async function Xt(e){return R.initial&&(U0=null),U0?e.debug&&p("cached model:",U0.modelUrl):U0=await W(e.face.ssrnet.modelPathGender),U0}async function Y5(e,t,o,n){var s,a,l,y;if(!U0)return{gender:"unknown",genderScore:0};let r=q5<(((s=t.face.ssrnet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>b()-Zt;return t.skipAllowed&&r&&A&&Dt===n&&((l=D2[o])==null?void 0:l.gender)&&((y=D2[o])==null?void 0:y.genderScore)>0?(q5++,D2[o]):(q5=0,new Promise(async x=>{if(!(U0!=null&&U0.inputs[0].shape))return;let i={};i.resize=h0.image.resizeBilinear(e,[U0.inputs[0].shape[2],U0.inputs[0].shape[1]],!1),i.enhance=h0.tidy(()=>{let[h,m,P]=h0.split(i.resize,3,3),M=h0.mul(h,U5[0]),g=h0.mul(m,U5[1]),f=h0.mul(P,U5[2]),u=h0.addN([M,g,f]);return h0.mul(h0.sub(u,B.tf05),2)});let d={gender:"unknown",genderScore:0};t.face.ssrnet.enabled&&(i.gender=U0.execute(i.enhance));let c=await i.gender.data();d.gender=c[0]>c[1]?"female":"male",d.genderScore=c[0]>c[1]?Math.trunc(100*c[0])/100:Math.trunc(100*c[1])/100,Object.keys(i).forEach(h=>h0.dispose(i[h])),D2[o]=d,Dt=n,Zt=b(),x(d)}))}var X2=Z(D());var b0,Z2=[],K5=Number.MAX_SAFE_INTEGER,Ut=0,Yt=0;async function Kt(e){var t;return R.initial&&(b0=null),b0?e.debug&&p("cached model:",b0.modelUrl):b0=await W((t=e.face.antispoof)==null?void 0:t.modelPath),b0}async function J5(e,t,o,n){var s,a;if(!b0)return 0;let r=(((s=t.face.antispoof)==null?void 0:s.skipTime)||0)>b()-Yt,A=K5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&Ut===n&&Z2[o]?(K5++,Z2[o]):(K5=0,new Promise(async l=>{let y=X2.image.resizeBilinear(e,[b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[2]:0,b0!=null&&b0.inputs[0].shape?b0.inputs[0].shape[1]:0],!1),x=b0==null?void 0:b0.execute(y),i=(await x.data())[0];Z2[o]=Math.round(100*i)/100,Ut=n,Yt=b(),X2.dispose([y,x]),l(Z2[o])}))}var L=Z(D());var ye=Z(D());var Y0={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[185,40,39,37,0,267,269,270,409],lipsLowerOuter:[61,146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[191,80,81,82,13,312,311,310,415],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],lipsLowerSemiOuter:[76,77,90,180,85,16,315,404,320,307,306],lipsUpperSemiOuter:[184,74,73,72,11,302,303,304,408],lipsLowerSemiInner:[62,96,89,179,86,15,316,403,319,325,292],lipsUpperSemiInner:[183,42,41,38,12,268,271,272,407],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},Q5={count:468,mouth:13,symmetryLine:[13,Y0.midwayBetweenEyes[0]]},Le={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},_5=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]},{key:"EyebrowUpper",indices:[63,64,65,66,67,68,69,70]},{key:"EyebrowLower",indices:[48,49,50,51,52,53]}],w2=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],We=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255];var Br=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],Hr=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],Vr=[33,133,362,263,1,78,308],s4=Br.map(e=>w2[e]),a4=Hr.map(e=>w2[e]),i4=Vr.map(e=>w2[e]);function Pe(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var Dr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Zr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Xr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],qr=[[474,475],[475,476],[476,477],[477,474]],Ur=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Yr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Kr=[[469,470],[470,471],[471,472],[472,469]],Jr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],l4={lips:Pe(Dr),leftEye:Pe(Zr),leftEyebrow:Pe(Xr),leftIris:Pe(qr),rightEye:Pe(Ur),rightEyebrow:Pe(Yr),rightIris:Pe(Kr),faceOval:Pe(Jr)};var _e=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],q2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],U2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],Y2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],$t=(e,t)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:o,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},e1=(e,t,o)=>{let n=t.shape[1],r=t.shape[2],A=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],s=ye.image.cropAndResize(t,[A],[0],o),a=ye.div(s,B.tf255);return ye.dispose(s),a},K2=(e,t)=>{let o=q2(e),n=_e(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[o[0]-r[0],o[1]-r[1]],endPoint:[o[0]+r[0],o[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},J2=e=>{let t=q2(e),o=_e(e),n=Math.max(...o)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},e3=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...o)],endPoint:[Math.max(...t),Math.max(...o)],landmarks:e}},t1=[[1,0,0],[0,1,0],[0,0,1]],Qr=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),_r=(e,t)=>Qr(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var Qt=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Fe=(e,t)=>{let o=0;for(let n=0;n{let o=[];for(let n=0;n{let o=[],n=e.length;for(let r=0;r{let o=Math.cos(e),n=Math.sin(e),r=[[o,-n,0],[n,o,0],[0,0,1]],A=Qt(t[0],t[1]),s=_t(A,r),a=Qt(-t[0],-t[1]);return _t(s,a)},eA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],o=[e[0][2],e[1][2]],n=[-Fe(t[0],o),-Fe(t[1],o)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},tA=(e,t)=>[Fe(e,t[0]),Fe(e,t[1])];function o3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},o=[];for(let n=0;n[A[0]/r*(c[0]-r/2),A[1]/r*(c[1]-r/2),c[2]||0]),a=o&&o!==0&&Math.abs(o)>.2,l=a?t3(o,[0,0]):t1,y=a?s.map(c=>[...tA(c,l),c[2]]):s,x=a?eA(n):t1,i=q2(t),d=[Fe(i,x[0]),Fe(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2]||0)])}function r3(e,t,o,n){let r=t.landmarks.length>=Q5.count?Q5.symmetryLine:Le.symmetryLine,A=0,s=t1,a;if(e&&R.kernels.includes("rotatewithoffset"))if(A=_r(t.landmarks[r[0]],t.landmarks[r[1]]),A&&A!==0&&Math.abs(A)>.2){let y=q2(t),x=[y[0]/o.shape[2],y[1]/o.shape[1]],i=ye.image.rotateWithOffset(o,A,0,x);s=t3(-A,y),a=e1(t,i,[n,n]),ye.dispose(i)}else a=e1(t,o,[n,n]);else a=e1(t,o,[n,n]);return[A,s,a]}var oA=e=>{let t=e.map(n=>n[0]),o=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...o)+(Math.max(...o)-Math.min(...o))/2]},A3=(e,t)=>{let o=oA(e),n=_e(t);return{startPoint:[o[0]-n[0]/2,o[1]-n[1]/2],endPoint:[o[0]+n[0]/2,o[1]+n[1]/2]}};var s3=6,nA=1.4,Ae,a3=null,ve=0,k2=null,$e=()=>ve;async function i3(e){var t;return R.initial&&(Ae=null),Ae?e.debug&&p("cached model:",Ae.modelUrl):Ae=await W((t=e.face.detector)==null?void 0:t.modelPath),ve=Ae.inputs[0].shape?Ae.inputs[0].shape[2]:0,k2=L.scalar(ve,"int32"),a3=L.tensor2d(o3(ve)),Ae}function rA(e){let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,a3),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,k2),t.centersNormalized=L.div(t.centers,k2),t.halfBoxSize=L.div(t.boxSizesNormalized,B.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,k2),t.endNormalized=L.mul(t.ends,k2);let o=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>L.dispose(t[n])),o}async function l3(e,t){var a,l,y,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let o={};o.resized=L.image.resizeBilinear(e,[ve,ve]),o.div=L.div(o.resized,B.tf127),o.normalized=L.sub(o.div,B.tf05);let n=Ae==null?void 0:Ae.execute(o.normalized);if(Array.isArray(n)&&n.length>2){let i=n.sort((d,c)=>d.size-c.size);o.concat384=L.concat([i[0],i[2]],2),o.concat512=L.concat([i[1],i[3]],2),o.concat=L.concat([o.concat512,o.concat384],1),o.batch=L.squeeze(o.concat,0)}else Array.isArray(n)?o.batch=L.squeeze(n[0]):o.batch=L.squeeze(n);L.dispose(n),o.boxes=rA(o.batch),o.logits=L.slice(o.batch,[0,0],[-1,1]),o.sigmoid=L.sigmoid(o.logits),o.scores=L.squeeze(o.sigmoid),o.nms=await L.image.nonMaxSuppressionAsync(o.boxes,o.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((y=t.face.detector)==null?void 0:y.minConfidence)||0);let r=await o.nms.array(),A=[],s=await o.scores.data();for(let i=0;i(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let c={};c.bbox=L.slice(o.boxes,[r[i],0],[1,-1]),c.slice=L.slice(o.batch,[r[i],s3-1],[1,-1]),c.squeeze=L.squeeze(c.slice),c.landmarks=L.reshape(c.squeeze,[s3,-1]);let h=await c.bbox.data(),m={startPoint:[h[0],h[1]],endPoint:[h[2],h[3]],landmarks:await c.landmarks.array(),confidence:d},P=$t(m,[(e.shape[2]||0)/ve,(e.shape[1]||0)/ve]),M=K2(P,t.face.scale||nA),g=J2(M);A.push(g),Object.keys(c).forEach(f=>L.dispose(c[f]))}}return Object.keys(o).forEach(i=>L.dispose(o[i])),A}var O0=Z(D());var Q2={};be(Q2,{connected:()=>r1,kpt:()=>n1});var n1=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],r1={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var I0=Z(D()),c3=224,AA,sA=5,_2=[8,16,32,32,32];async function x3(){let e=[],t=0;for(;to.x)),y:I0.tensor1d(e.map(o=>o.y))}}function ce(e,t=[1,1]){let o=[e.map(a=>a[0]),e.map(a=>a[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[n[0],n[1],r[0]-n[0],r[1]-n[1]],s=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:s}}function d3(e,t=[1,1]){let o=[e.map(y=>y[0]),e.map(y=>y[1])],n=[Math.min(...o[0]),Math.min(...o[1])],r=[Math.max(...o[0]),Math.max(...o[1])],A=[(n[0]+r[0])/2,(n[1]+r[1])/2],s=Math.max(A[0]-n[0],A[1]-n[1],-A[0]+r[0],-A[1]+r[1]),a=[Math.trunc(A[0]-s),Math.trunc(A[1]-s),Math.trunc(2*s),Math.trunc(2*s)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function $2(e,t){let o=[e[2]*t,e[3]*t];return[e[0]-(o[0]-e[2])/2,e[1]-(o[1]-e[3])/2,o[0],o[1]]}var p3={initial:!0},j0={detector:null,landmarks:null},e2={detector:[224,224],landmarks:[256,256]},A1=Number.MAX_SAFE_INTEGER,iA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},t5=null,E2,Re=[[0,0],[0,0],[0,0],[0,0]],f3=0,m3=e=>1-1/(1+Math.exp(e));async function u3(e){if(p3.initial&&(j0.detector=null),!j0.detector&&e.body.detector&&e.body.detector.modelPath){j0.detector=await W(e.body.detector.modelPath);let t=Object.values(j0.detector.modelSignature.inputs);e2.detector[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.detector[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&j0.detector&&p("cached model:",j0.detector.modelUrl);return await x3(),j0.detector}async function h3(e){if(p3.initial&&(j0.landmarks=null),j0.landmarks)e.debug&&p("cached model:",j0.landmarks.modelUrl);else{j0.landmarks=await W(e.body.modelPath);let t=Object.values(j0.landmarks.modelSignature.inputs);e2.landmarks[0]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0,e2.landmarks[1]=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return j0.landmarks}async function lA(e,t){let o={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;let n;if(E2&&(o.cropped=O0.image.cropAndResize(e,[E2],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let r=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],A=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Re=[[0,0],r,A,[0,0]],o.pad=O0.pad(o.cropped||e,Re),o.resize=O0.image.resizeBilinear(o.pad,[t,t]),n=O0.div(o.resize,B.tf255)}else e.shape[1]!==t?(o.resize=O0.image.resizeBilinear(o.cropped||e,[t,t]),n=O0.div(o.resize,B.tf255)):n=O0.div(o.cropped||e,B.tf255);return Object.keys(o).forEach(r=>O0.dispose(o[r])),n}function yA(e,t){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Re[2][0]+Re[2][1])/t[0]-Re[2][0]),Math.trunc(o.position[1]*(t[1]+Re[1][0]+Re[1][1])/t[1]-Re[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(E2)for(let o of e)o.positionRaw=[o.positionRaw[0]+E2[1],o.positionRaw[1]+E2[0],o.positionRaw[2]],o.position=[Math.trunc(o.positionRaw[0]*t[0]),Math.trunc(o.positionRaw[1]*t[1]),o.positionRaw[2]];return e}async function cA(e){let t=e.find(a=>a.part==="leftPalm"),o=e.find(a=>a.part==="leftWrist"),n=e.find(a=>a.part==="leftIndex");t.position[2]=((o.position[2]||0)+(n.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),A=e.find(a=>a.part==="rightWrist"),s=e.find(a=>a.part==="rightIndex");r.position[2]=((A.position[2]||0)+(s.position[2]||0))/2}async function xA(e,t,o){var h;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=(h=j0.landmarks)==null?void 0:h.execute(e,iA.landmarks);let r=(await n.poseflag.data())[0],A=await n.ld.data(),s=await n.world.data();Object.keys(n).forEach(m=>O0.dispose(n[m]));let a=[],l=5;for(let m=0;mm.position),i=ce(x,[o[0],o[1]]),d={};for(let[m,P]of Object.entries(r1)){let M=[];for(let g=0;gS.part===P[g]),u=y.find(S=>S.part===P[g+1]);f&&u&&M.push([f.position,u.position])}d[m]=M}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:y,annotations:d}}async function s1(e,t){let o=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>b()-f3,r=A1<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&t5!==null)A1++;else{let A={};A.landmarks=await lA(e,256),t5=await xA(A.landmarks,t,o),Object.keys(A).forEach(s=>O0.dispose(A[s])),f3=b(),A1=0}return t5?[t5]:[]}var w0=Z(D());var t2=[{class:1,label:"person"},{class:2,label:"bicycle"},{class:3,label:"car"},{class:4,label:"motorcycle"},{class:5,label:"airplane"},{class:6,label:"bus"},{class:7,label:"train"},{class:8,label:"truck"},{class:9,label:"boat"},{class:10,label:"traffic light"},{class:11,label:"fire hydrant"},{class:12,label:"stop sign"},{class:13,label:"parking meter"},{class:14,label:"bench"},{class:15,label:"bird"},{class:16,label:"cat"},{class:17,label:"dog"},{class:18,label:"horse"},{class:19,label:"sheep"},{class:20,label:"cow"},{class:21,label:"elephant"},{class:22,label:"bear"},{class:23,label:"zebra"},{class:24,label:"giraffe"},{class:25,label:"backpack"},{class:26,label:"umbrella"},{class:27,label:"handbag"},{class:28,label:"tie"},{class:29,label:"suitcase"},{class:30,label:"frisbee"},{class:31,label:"skis"},{class:32,label:"snowboard"},{class:33,label:"sports ball"},{class:34,label:"kite"},{class:35,label:"baseball bat"},{class:36,label:"baseball glove"},{class:37,label:"skateboard"},{class:38,label:"surfboard"},{class:39,label:"tennis racket"},{class:40,label:"bottle"},{class:41,label:"wine glass"},{class:42,label:"cup"},{class:43,label:"fork"},{class:44,label:"knife"},{class:45,label:"spoon"},{class:46,label:"bowl"},{class:47,label:"banana"},{class:48,label:"apple"},{class:49,label:"sandwich"},{class:50,label:"orange"},{class:51,label:"broccoli"},{class:52,label:"carrot"},{class:53,label:"hot dog"},{class:54,label:"pizza"},{class:55,label:"donut"},{class:56,label:"cake"},{class:57,label:"chair"},{class:58,label:"couch"},{class:59,label:"potted plant"},{class:60,label:"bed"},{class:61,label:"dining table"},{class:62,label:"toilet"},{class:63,label:"tv"},{class:64,label:"laptop"},{class:65,label:"mouse"},{class:66,label:"remote"},{class:67,label:"keyboard"},{class:68,label:"cell phone"},{class:69,label:"microwave"},{class:70,label:"oven"},{class:71,label:"toaster"},{class:72,label:"sink"},{class:73,label:"refrigerator"},{class:74,label:"book"},{class:75,label:"clock"},{class:76,label:"vase"},{class:77,label:"scissors"},{class:78,label:"teddy bear"},{class:79,label:"hair drier"},{class:80,label:"toothbrush"}];var xe,Ge=0,a1=[],g3=0,i1=Number.MAX_SAFE_INTEGER;async function M3(e){if(R.initial&&(xe=null),xe)e.debug&&p("cached model:",xe.modelUrl);else{xe=await W(e.object.modelPath);let t=Object.values(xe.modelSignature.inputs);Ge=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}return xe}async function dA(e,t,o){if(!e)return[];let n={},r=[],A=await e.array();n.squeeze=w0.squeeze(e);let s=w0.split(n.squeeze,6,1);n.stack=w0.stack([s[1],s[0],s[3],s[2]],1),n.boxes=w0.squeeze(n.stack),n.scores=w0.squeeze(s[4]),n.classes=w0.squeeze(s[5]),w0.dispose([e,...s]),n.nms=await w0.image.nonMaxSuppressionAsync(n.boxes,n.scores,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence||0);let a=await n.nms.data(),l=0;for(let y of Array.from(a)){let x=Math.trunc(100*A[0][y][4])/100,i=A[0][y][5],d=t2[i].label,[c,h]=[A[0][y][0]/Ge,A[0][y][1]/Ge],m=[c,h,A[0][y][2]/Ge-c,A[0][y][3]/Ge-h],P=[Math.trunc(m[0]*t[0]),Math.trunc(m[1]*t[1]),Math.trunc(m[2]*t[0]),Math.trunc(m[3]*t[1])];r.push({id:l++,score:x,class:i,label:d,box:P,boxRaw:m})}return Object.keys(n).forEach(y=>w0.dispose(n[y])),r}async function l1(e,t){let o=(t.object.skipTime||0)>b()-g3,n=i1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&a1.length>0?(i1++,a1):(i1=0,new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=w0.image.resizeBilinear(e,[Ge,Ge]),a=t.object.enabled?xe==null?void 0:xe.execute(s,["tower_0/detections"]):null;g3=b(),w0.dispose(s);let l=await dA(a,A,t);a1=l,r(l)}))}var J=Z(D());var o5={};be(o5,{connected:()=>c1,kpt:()=>y1});var y1=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],c1={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var g0,v3=0,k0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},x1=Number.MAX_SAFE_INTEGER;async function R3(e){return R.initial&&(g0=null),g0?e.debug&&p("cached model:",g0.modelUrl):g0=await W(e.body.modelPath),g0}async function fA(e,t){let[o,n]=e.shape,r=J.reshape(e,[n*o]),A=J.max(r,0),s=(await A.data())[0];if(s>t){let a=J.argMax(r,0),l=J.mod(a,o),y=(await l.data())[0],x=J.div(a,o),i=(await x.data())[0];return J.dispose([r,A,a,l,x]),[y,i,s]}else return J.dispose([r,A]),[0,0,s]}async function d1(e,t){let o=(t.body.skipTime||0)>b()-v3,n=x1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n&&Object.keys(k0.keypoints).length>0?(x1++,[k0]):(x1=0,new Promise(async r=>{var i;let A=J.tidy(()=>{if(!(g0!=null&&g0.inputs[0].shape))return null;let d=J.image.resizeBilinear(e,[g0.inputs[0].shape[2],g0.inputs[0].shape[1]],!1),c=J.mul(d,B.tf2);return J.sub(c,B.tf1)}),s;if(t.body.enabled&&(s=g0==null?void 0:g0.execute(A)),v3=b(),J.dispose(A),s){k0.keypoints.length=0;let d=J.squeeze(s);J.dispose(s);let c=J.unstack(d,2);J.dispose(d);for(let h=0;h(((i=t.body)==null?void 0:i.minConfidence)||0)&&k0.keypoints.push({score:Math.round(100*M)/100,part:y1[h],positionRaw:[m/g0.inputs[0].shape[2],P/g0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/g0.inputs[0].shape[2]),Math.round(e.shape[1]*P/g0.inputs[0].shape[1])]})}c.forEach(h=>J.dispose(h))}k0.score=k0.keypoints.reduce((d,c)=>c.score>d?c.score:d,0);let a=k0.keypoints.map(d=>d.position[0]),l=k0.keypoints.map(d=>d.position[1]);k0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let y=k0.keypoints.map(d=>d.positionRaw[0]),x=k0.keypoints.map(d=>d.positionRaw[1]);k0.boxRaw=[Math.min(...y),Math.min(...x),Math.max(...y)-Math.min(...y),Math.max(...x)-Math.min(...x)];for(let[d,c]of Object.entries(c1)){let h=[];for(let m=0;mg.part===c[m]),M=k0.keypoints.find(g=>g.part===c[m+1]);P&&M&&P.score>(t.body.minConfidence||0)&&M.score>(t.body.minConfidence||0)&&h.push([P.position,M.position])}k0.annotations[d]=h}r([k0])}))}var J0=Z(D());var mA=["angry","disgust","fear","happy","sad","surprise","neutral"],D0,n5=[],w3=0,k3=0,f1=Number.MAX_SAFE_INTEGER;async function E3(e){var t;return R.initial&&(D0=null),D0?e.debug&&p("cached model:",D0.modelUrl):D0=await W((t=e.face.emotion)==null?void 0:t.modelPath),D0}async function m1(e,t,o,n){var s,a;if(!D0)return[];let r=f1<(((s=t.face.emotion)==null?void 0:s.skipFrames)||0),A=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>b()-k3;return t.skipAllowed&&A&&r&&w3===n&&n5[o]&&n5[o].length>0?(f1++,n5[o]):(f1=0,new Promise(async l=>{var x,i;let y=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},c=D0!=null&&D0.inputs[0].shape?D0.inputs[0].shape[2]:0;d.resize=J0.image.resizeBilinear(e,[c,c],!1),d.channels=J0.mul(d.resize,B.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,B.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,B.tf2),d.emotion=D0==null?void 0:D0.execute(d.grayscaleMul),k3=b();let h=await d.emotion.data();for(let m=0;m(((i=t.face.emotion)==null?void 0:i.minConfidence)||0)&&y.push({score:Math.min(.99,Math.trunc(100*h[m])/100),emotion:mA[m]});y.sort((m,P)=>P.score-m.score),Object.keys(d).forEach(m=>J0.dispose(d[m]))}n5[o]=y,w3=n,l(y)}))}var r5=Z(D());var N0,p1=[],S3=0,C3=0,I3=Number.MAX_SAFE_INTEGER;async function j3(e){return R.initial&&(N0=null),N0?e.debug&&p("cached model:",N0.modelUrl):N0=await W(e.face.mobilefacenet.modelPath),N0}async function u1(e,t,o,n){var s,a;if(!N0)return[];let r=I3<(((s=t.face.mobilefacenet)==null?void 0:s.skipFrames)||0),A=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>b()-C3;return t.skipAllowed&&A&&r&&S3===n&&p1[o]?(I3++,p1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.mobilefacenet)==null?void 0:x.enabled)&&(N0==null?void 0:N0.inputs[0].shape)){let i={};i.crop=r5.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1),i.data=N0==null?void 0:N0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>r5.dispose(i[c]))}p1[o]=y,S3=n,C3=b(),l(y)})}var A5=Z(D());var L0,h1=[],N3=0,L3=0,W3=Number.MAX_SAFE_INTEGER;async function F3(e){return R.initial&&(L0=null),L0?e.debug&&p("cached model:",L0.modelUrl):L0=await W(e.face.insightface.modelPath),L0}async function b1(e,t,o,n){var s,a;if(!L0)return[];let r=W3<(((s=t.face.insightface)==null?void 0:s.skipFrames)||0),A=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>b()-L3;return t.skipAllowed&&A&&r&&N3===n&&h1[o]?(W3++,h1[o]):new Promise(async l=>{var x;let y=[];if(((x=t.face.insightface)==null?void 0:x.enabled)&&(L0==null?void 0:L0.inputs[0].shape)){let i={};i.crop=A5.image.resizeBilinear(e,[L0.inputs[0].shape[2],L0.inputs[0].shape[1]],!1),i.data=L0==null?void 0:L0.execute(i.crop);let d=await i.data.data();y=Array.from(d),Object.keys(i).forEach(c=>A5.dispose(i[c]))}h1[o]=y,N3=n,L3=b(),l(y)})}var ke=Z(D());var Q0=Z(D());var de,Te=0,pA=2.3,g1=Y0.leftEyeLower0,M1=Y0.rightEyeLower0,o2={leftBounds:[g1[0],g1[g1.length-1]],rightBounds:[M1[0],M1[M1.length-1]]},n2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function D3(e){var t;return R.initial&&(de=null),de?e.debug&&p("cached model:",de.modelUrl):de=await W((t=e.face.iris)==null?void 0:t.modelPath),Te=de.inputs[0].shape?de.inputs[0].shape[2]:0,Te===-1&&(Te=64),de}function s5(e,t,o,n){for(let r=0;r<_5.length;r++){let{key:A,indices:s}=_5[r],a=Y0[`${o}${A}`];if(!n||n.includes(A))for(let l=0;l{let t=e[o2.leftBounds[0]][2],o=e[o2.rightBounds[0]][2];return t-o},B3=(e,t,o,n,r,A=!1)=>{let s=J2(K2(e3([e[o],e[n]]),pA)),a=_e(s),l=Q0.image.cropAndResize(t,[[s.startPoint[1]/r,s.startPoint[0]/r,s.endPoint[1]/r,s.endPoint[0]/r]],[0],[Te,Te]);if(A&&R.kernels.includes("flipleftright")){let y=Q0.image.flipLeftRight(l);Q0.dispose(l),l=y}return{box:s,boxSize:a,crop:l}},H3=(e,t,o,n=!1)=>{let r=[];for(let A=0;A{let n=e[Y0[`${o}EyeUpper0`][n2.upperCenter]][2],r=e[Y0[`${o}EyeLower0`][n2.lowerCenter]][2],A=(n+r)/2;return t.map((s,a)=>{let l=A;return a===2?l=n:a===4&&(l=r),[s[0],s[1],l]})};async function Z3(e,t,o,n){if(!de)return o.debug&&p("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:A,crop:s}=B3(e,t,o2.leftBounds[0],o2.leftBounds[1],n,!0),{box:a,boxSize:l,crop:y}=B3(e,t,o2.rightBounds[0],o2.rightBounds[1],n,!0),x=Q0.concat([s,y]);Q0.dispose(s),Q0.dispose(y);let i=de.execute(x);Q0.dispose(x);let d=await i.data();Q0.dispose(i);let c=d.slice(0,n2.numCoordinates*3),{rawCoords:h,iris:m}=H3(c,r,A,!0),P=d.slice(n2.numCoordinates*3),{rawCoords:M,iris:g}=H3(P,a,l,!1),f=uA(e);Math.abs(f)<30?(s5(e,h,"left",null),s5(e,M,"right",null)):f<1?s5(e,h,"left",["EyeUpper0","EyeLower0"]):s5(e,M,"right",["EyeUpper0","EyeLower0"]);let u=V3(e,m,"left"),S=V3(e,g,"right");return e.concat(u).concat(S)}var hA=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],bA=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],gA=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],MA=[[474,475],[475,476],[476,477],[477,474]],PA=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],vA=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],RA=[[469,470],[470,471],[471,472],[472,469]],TA=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function we(e){let t=e.map(o=>o[0]);return t.push(e[e.length-1][1]),t}var wA={lips:we(hA),leftEye:we(bA),leftEyebrow:we(gA),leftIris:we(MA),rightEye:we(PA),rightEyebrow:we(vA),rightIris:we(RA),faceOval:we(TA)},kA=Object.entries(wA).map(([e,t])=>t.map(o=>[o,e])).flat(),H4=new Map(kA),z2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Be=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],He=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];async function U3(e,t){let o={lips:await t.filter(A=>A.size===160)[0].data(),irisL:await t.filter(A=>A.size===10)[0].data(),eyeL:await t.filter(A=>A.size===142)[0].data(),irisR:await t.filter(A=>A.size===10)[1].data(),eyeR:await t.filter(A=>A.size===142)[1].data()},n=Be.reduce((A,s)=>A+=e[s][2],0)/Be.length;for(let A=0;AA+=e[s][2],0)/He.length;for(let A=0;Ab()-se.timestamp,n=se.skipped<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);!t.skipAllowed||!o||!n||se.boxes.length===0?(se.boxes=await l3(e,t),se.timestamp=b(),se.skipped=0):se.skipped++;let r=[],A=[],s=0;for(let f=0;fG.shape[G.shape.length-1]===1).data();if(w.faceScore=Math.round(100*X[0])/100,w.faceScore<(((h=t.face.detector)==null?void 0:h.minConfidence)||1)){if(u.confidence=w.faceScore,(m=t.face.mesh)!=null&&m.keepInvalid){w.box=U2(u,e),w.boxRaw=Y2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(G=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*G[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*G[1]/$e()]),w.meshRaw=w.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/Ve]);for(let G of Object.keys(Le))w.annotations[G]=[w.mesh[Le[G]]]}}else{let G=E.find(y0=>y0.shape[y0.shape.length-1]===1404),o0=ke.reshape(G,[-1,3]),_=await o0.array();ke.dispose(o0),(P=t.face.attention)!=null&&P.enabled?_=await U3(_,E):(M=t.face.iris)!=null&&M.enabled&&(_=await Z3(_,w.tensor,t,Ve)),w.mesh=n3(_,u,S,N,Ve),w.meshRaw=w.mesh.map(y0=>[y0[0]/(e.shape[2]||0),y0[1]/(e.shape[1]||0),(y0[2]||0)/Ve]);for(let y0 of Object.keys(Y0))w.annotations[y0]=Y0[y0].map(V0=>w.mesh[V0]);w.score=w.faceScore;let z={...A3(w.mesh,u),confidence:u.confidence,landmarks:u.landmarks};w.box=U2(z,e),w.boxRaw=Y2(z,e),A.push(z)}ke.dispose(E)}else{w.box=U2(u,e),w.boxRaw=Y2(u,e),w.score=w.boxScore,w.mesh=u.landmarks.map(E=>[(u.startPoint[0]+u.endPoint[0])/2+(u.endPoint[0]+u.startPoint[0])*E[0]/$e(),(u.startPoint[1]+u.endPoint[1])/2+(u.endPoint[1]+u.startPoint[1])*E[1]/$e()]),w.meshRaw=w.mesh.map(E=>[E[0]/(e.shape[2]||0),E[1]/(e.shape[1]||0),(E[2]||0)/Ve]);for(let E of Object.keys(Le))w.annotations[E]=[w.mesh[Le[E]]]}w.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(w):ke.dispose(w.tensor)}return se.boxes=A,r}async function K3(e){var t,o,n,r,A,s;return R.initial&&(M0=null),((o=(t=e==null?void 0:e.face)==null?void 0:t.attention)==null?void 0:o.enabled)&&(M0==null?void 0:M0.signature)&&Object.keys(((n=M0==null?void 0:M0.signature)==null?void 0:n.outputs)||{}).length<6&&(M0=null),M0?e.debug&&p("cached model:",M0.modelUrl):(r=e.face.attention)!=null&&r.enabled?M0=await W((A=e.face.attention)==null?void 0:A.modelPath):M0=await W((s=e.face.mesh)==null?void 0:s.modelPath),Ve=M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0}var J3=We,Q3=w2;var _0=Z(D());var W0,a5=[],_3=0,$3=0,v1=Number.MAX_SAFE_INTEGER;async function eo(e){var t;return R.initial&&(W0=null),W0?e.debug&&p("cached model:",W0.modelUrl):W0=await W((t=e.face.description)==null?void 0:t.modelPath),W0}function R1(e){let t=e.image||e.tensor||e;if(!(W0!=null&&W0.inputs[0].shape))return t;let o=_0.image.resizeBilinear(t,[W0.inputs[0].shape[2],W0.inputs[0].shape[1]],!1),n=_0.mul(o,B.tf255);return _0.dispose(o),n}async function T1(e,t,o,n){var s,a,l,y;if(!W0)return{age:0,gender:"unknown",genderScore:0,descriptor:[]};let r=v1<(((s=t.face.description)==null?void 0:s.skipFrames)||0),A=(((a=t.face.description)==null?void 0:a.skipTime)||0)>b()-_3;return t.skipAllowed&&r&&A&&$3===n&&((l=a5[o])==null?void 0:l.age)&&((y=a5[o])==null?void 0:y.age)>0?(v1++,a5[o]):(v1=0,new Promise(async x=>{var d,c;let i={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((d=t.face.description)!=null&&d.enabled){let h=R1(e),m=W0==null?void 0:W0.execute(h);_3=b(),_0.dispose(h);let M=await(await m.find(H=>H.shape[1]===1)).data(),g=Math.trunc(200*Math.abs(M[0]-.5))/100;g>(((c=t.face.description)==null?void 0:c.minConfidence)||0)&&(i.gender=M[0]<=.5?"female":"male",i.genderScore=Math.min(.99,g));let f=_0.argMax(m.find(H=>H.shape[1]===100),1),u=(await f.data())[0];_0.dispose(f);let N=await m.find(H=>H.shape[1]===100).data();i.age=Math.round(N[u-1]>N[u+1]?10*u-100*N[u-1]:10*u+100*N[u+1])/10;let w=m.find(H=>H.shape[1]===1024),E=w?await w.data():[];i.descriptor=Array.from(E),m.forEach(H=>_0.dispose(H))}a5[o]=i,$3=n,x(i)}))}var F=Z(D());var no=Z(D());function i5(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function S2(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function ro(e,t,o){let n=t.shape[1],r=t.shape[2],A=[[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r]];return no.image.cropAndResize(t,A,[0],o)}function Ao(e,t){let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],r=e.palmLandmarks.map(A=>[A[0]*t[0],A[1]*t[1]]);return{startPoint:o,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function l5(e,t=1.5){let o=S2(e),n=i5(e),r=[t*n[0]/2,t*n[1]/2],A=[o[0]-r[0],o[1]-r[1]],s=[o[0]+r[0],o[1]+r[1]];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function y5(e){let t=S2(e),o=i5(e),r=Math.max(...o)/2,A=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:A,endPoint:s,palmLandmarks:e.palmLandmarks}}function zA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function so(e,t){let o=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return zA(o)}var to=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ee(e,t){let o=0;for(let n=0;n[o.x,o.y]),this.anchorsTensor=F.tensor2d(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=F.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=F.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let o={};o.boxOffsets=F.slice(t,[0,0],[-1,2]),o.boxSizes=F.slice(t,[0,2],[-1,2]),o.div=F.div(o.boxOffsets,this.inputSizeTensor),o.boxCenterPoints=F.add(o.div,this.anchorsTensor),o.halfBoxSizes=F.div(o.boxSizes,this.doubleInputSizeTensor),o.sub=F.sub(o.boxCenterPoints,o.halfBoxSizes),o.startPoints=F.mul(o.sub,this.inputSizeTensor),o.add=F.add(o.boxCenterPoints,o.halfBoxSizes),o.endPoints=F.mul(o.add,this.inputSizeTensor);let n=F.concat2d([o.startPoints,o.endPoints],1);return Object.keys(o).forEach(r=>F.dispose(o[r])),n}normalizeLandmarks(t,o){let n={};n.reshape=F.reshape(t,[-1,7,2]),n.div=F.div(n.reshape,this.inputSizeTensor),n.landmarks=F.add(n.div,this.anchors[o]);let r=F.mul(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(A=>F.dispose(n[A])),r}async predict(t,o){let n={};n.resize=F.image.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=F.div(n.resize,B.tf127),n.image=F.sub(n.div,B.tf1),n.batched=this.model.execute(n.image),n.predictions=F.squeeze(n.batched),n.slice=F.slice(n.predictions,[0,0],[-1,1]),n.sigmoid=F.sigmoid(n.slice),n.scores=F.squeeze(n.sigmoid);let r=await n.scores.data();n.boxes=F.slice(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await F.image.nonMaxSuppressionAsync(n.norm,n.scores,3*o.hand.maxDetected,o.hand.iouThreshold,o.hand.minConfidence);let A=await n.nms.array(),s=[];for(let a of A){let l={};l.box=F.slice(n.norm,[a,0],[1,-1]),l.slice=F.slice(n.predictions,[a,5],[1,14]),l.norm=this.normalizeLandmarks(l.slice,a),l.palmLandmarks=F.reshape(l.norm,[-1,2]);let y=await l.box.data(),x=y.slice(0,2),i=y.slice(2,4),d=await l.palmLandmarks.array(),c={startPoint:x,endPoint:i,palmLandmarks:d,confidence:r[a]},h=Ao(c,[t.shape[2]/this.inputSize,t.shape[1]/this.inputSize]);s.push(h),Object.keys(l).forEach(m=>F.dispose(l[m]))}return Object.keys(n).forEach(a=>F.dispose(n[a])),s}};var F0=Z(D());var jA=5,yo=1.65,co=[0,5,9,13,17,1,2],OA=0,NA=2,xo=0,x5=class{constructor(t,o){T(this,"handDetector");T(this,"handPoseModel");T(this,"inputSize");T(this,"storedBoxes");T(this,"skipped");T(this,"detectedHands");this.handDetector=t,this.handPoseModel=o,this.inputSize=this.handPoseModel&&this.handPoseModel.inputs[0].shape?this.handPoseModel.inputs[0].shape[2]:0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let o=t.map(s=>s[0]),n=t.map(s=>s[1]),r=[Math.min(...o),Math.min(...n)],A=[Math.max(...o),Math.max(...n)];return{startPoint:r,endPoint:A}}getBoxForPalmLandmarks(t,o){let n=t.map(A=>E1([...A,1],o)),r=this.calculateLandmarksBoundingBox(n);return l5(y5(r),jA)}getBoxForHandLandmarks(t){let o=this.calculateLandmarksBoundingBox(t),n=l5(y5(o),yo);n.palmLandmarks=[];for(let r=0;r[s[0]*(c[0]-this.inputSize/2),s[1]*(c[1]-this.inputSize/2),s[2]*c[2]]),l=k1(n,[0,0]),y=a.map(c=>[...E1(c,l),c[2]]),x=ao(r),i=[...S2(o),1],d=[Ee(i,x[0]),Ee(i,x[1])];return y.map(c=>[Math.trunc(c[0]+d[0]),Math.trunc(c[1]+d[1]),Math.trunc(c[2])])}async estimateHands(t,o){let n=!1,r,A=(o.hand.skipTime||0)>b()-xo,s=this.skipped<(o.hand.skipFrames||0);o.skipAllowed&&A&&s&&(r=await this.handDetector.predict(t,o),this.skipped=0),o.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==o.hand.maxDetected||!o.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let a=[];for(let l=0;l=o.hand.minConfidence/4){let S=F0.reshape(f,[-1,3]),N=await S.array();F0.dispose(f),F0.dispose(S);let w=this.transformRawCoords(N,m,x,h),E=this.getBoxForHandLandmarks(w);this.storedBoxes[l]={...E,confidence:u};let H={landmarks:w,confidence:u,boxConfidence:y.confidence,fingerConfidence:u,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};a.push(H)}else this.storedBoxes[l]=null;F0.dispose(f)}else{let x=l5(y5(y),yo),i={confidence:y.confidence,boxConfidence:y.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>o.hand.maxDetected&&(a.length=o.hand.maxDetected),a}};var E0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>E0.nameMapping[e],getPoints:e=>E0.pointsMapping[e]},Se={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Se.nameMapping[e]},n0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>n0.nameMapping[e]},ze=class{constructor(t){T(this,"name");T(this,"curls");T(this,"directions");T(this,"weights");T(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,o,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([o,n])}direction(t,o,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([o,n])}weight(t,o){this.weights[t]=o;let n=this.weights.reduce((r,A)=>r+A,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,o){let n=0;for(let r in t){let A=t[r],s=this.curls[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}for(let r in o){let A=o[r],s=this.directions[r];if(typeof s=="undefined"){n+=this.weightsRelative[r];continue}for(let[a,l]of s)if(A===a){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:$0,index:fe,middle:me,ring:De,pinky:Ze}=E0,{none:ee,half:WA,full:te}=Se,{verticalUp:r2,verticalDown:os,horizontalLeft:z1,horizontalRight:FA,diagonalUpRight:GA,diagonalUpLeft:A2,diagonalDownRight:ns,diagonalDownLeft:rs}=n0,Ce=new ze("thumbs up");Ce.curl($0,ee,1);Ce.direction($0,r2,1);Ce.direction($0,A2,.25);Ce.direction($0,GA,.25);for(let e of[E0.index,E0.middle,E0.ring,E0.pinky])Ce.curl(e,te,1),Ce.direction(e,z1,1),Ce.direction(e,FA,1);var d0=new ze("victory");d0.curl($0,WA,.5);d0.curl($0,ee,.5);d0.direction($0,r2,1);d0.direction($0,A2,1);d0.curl(fe,ee,1);d0.direction(fe,r2,.75);d0.direction(fe,A2,1);d0.curl(me,ee,1);d0.direction(me,r2,1);d0.direction(me,A2,.75);d0.curl(De,te,1);d0.direction(De,r2,.2);d0.direction(De,A2,1);d0.direction(De,z1,.2);d0.curl(Ze,te,1);d0.direction(Ze,r2,.2);d0.direction(Ze,A2,1);d0.direction(Ze,z1,.2);d0.weight(fe,2);d0.weight(me,2);var Ie=new ze("point");Ie.curl($0,te,1);Ie.curl(fe,ee,.5);Ie.curl(me,te,.5);Ie.curl(De,te,.5);Ie.curl(Ze,te,.5);Ie.weight(fe,2);Ie.weight(me,2);var je=new ze("middle finger");je.curl($0,ee,1);je.curl(fe,te,.5);je.curl(me,te,.5);je.curl(De,te,.5);je.curl(Ze,te,.5);je.weight(fe,2);je.weight(me,2);var s2=new ze("open palm");s2.curl($0,ee,.75);s2.curl(fe,ee,.75);s2.curl(me,ee,.75);s2.curl(De,ee,.75);s2.curl(Ze,ee,.75);var fo=[Ce,d0,Ie,je,s2];var BA=.7,Xe={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function mo(e,t,o,n){let r=(t-n)/(e-o),A=Math.atan(r)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function uo(e,t){if(!e||!t)return[0,0];let o=mo(e[0],e[1],t[0],t[1]);if(e.length===2)return o;let n=mo(e[1],e[2],t[1],t[2]);return[o,n]}function po(e,t=1){let o=0,n=0,r=0;return e>=75&&e<=105?o=1*t:e>=25&&e<=155?n=1*t:r=1*t,[o,n,r]}function HA(e,t,o){let n=e[0]-t[0],r=e[0]-o[0],A=t[0]-o[0],s=e[1]-t[1],a=e[1]-o[1],l=t[1]-o[1],y=e[2]-t[2],x=e[2]-o[2],i=t[2]-o[2],d=Math.sqrt(n*n+s*s+y*y),c=Math.sqrt(r*r+a*a+x*x),h=Math.sqrt(A*A+l*l+i*i),m=(h*h+d*d-c*c)/(2*h*d);m>1?m=1:m<-1&&(m=-1);let P=Math.acos(m);P=57.2958*P%180;let M;return P>Xe.NO_CURL_START_LIMIT?M=Se.none:P>Xe.HALF_CURL_START_LIMIT?M=Se.half:M=Se.full,M}function ho(e,t,o,n){let r;return n===Math.abs(e)?e>0?r=n0.horizontalLeft:r=n0.horizontalRight:n===Math.abs(t)?t>0?r=n0.horizontalLeft:r=n0.horizontalRight:o>0?r=n0.horizontalLeft:r=n0.horizontalRight,r}function bo(e,t,o,n){let r;return n===Math.abs(e)?e<0?r=n0.verticalDown:r=n0.verticalUp:n===Math.abs(t)?t<0?r=n0.verticalDown:r=n0.verticalUp:o<0?r=n0.verticalDown:r=n0.verticalUp,r}function VA(e,t,o,n,r,A,s,a){let l,y=bo(e,t,o,n),x=ho(r,A,s,a);return y===n0.verticalUp?x===n0.horizontalLeft?l=n0.diagonalUpLeft:l=n0.diagonalUpRight:x===n0.horizontalLeft?l=n0.diagonalDownLeft:l=n0.diagonalDownRight,l}function DA(e,t,o,n){let r=e[0]-t[0],A=e[0]-o[0],s=t[0]-o[0],a=e[1]-t[1],l=e[1]-o[1],y=t[1]-o[1],x=Math.max(Math.abs(r),Math.abs(A),Math.abs(s)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(y)),d=0,c=0,h=0,m=i/(x+1e-5);m>1.5?d+=Xe.DISTANCE_VOTE_POWER:m>.66?c+=Xe.DISTANCE_VOTE_POWER:h+=Xe.DISTANCE_VOTE_POWER;let P=Math.sqrt(r*r+a*a),M=Math.sqrt(A*A+l*l),g=Math.sqrt(s*s+y*y),f=Math.max(P,M,g),u=e[0],S=e[1],N=o[0],w=o[1];f===P?(N=o[0],w=o[1]):f===g&&(u=t[0],S=t[1]);let X=uo([u,S],[N,w]),G=po(X,Xe.TOTAL_ANGLE_VOTE_POWER);d+=G[0],c+=G[1],h+=G[2];for(let _ of n){let z=po(_,Xe.SINGLE_ANGLE_VOTE_POWER);d+=z[0],c+=z[1],h+=z[2]}let o0;return d===Math.max(d,c,h)?o0=bo(l,a,y,i):h===Math.max(c,h)?o0=ho(A,r,s,x):o0=VA(l,a,y,i,A,r,s,x),o0}function go(e){let t=[],o=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let A of E0.all){let s=E0.getPoints(A),a=[],l=[];for(let y of s){let x=e[y[0]],i=e[y[1]],d=uo(x,i),c=d[0],h=d[1];a.push(c),l.push(h)}t.push(a),o.push(l)}for(let A of E0.all){let s=A===E0.thumb?1:0,a=E0.getPoints(A),l=e[a[s][0]],y=e[a[s+1][1]],x=e[a[3][1]],i=HA(l,y,x),d=DA(l,y,x,t[A].slice(s));n[A]=i,r[A]=d}return{curls:n,directions:r}}function d5(e){if(!e||e.length===0)return null;let t=go(e),o={};for(let n of E0.all)o[E0.getName(n)]={curl:Se.getName(t.curls[n]),direction:n0.getName(t.directions[n])};return o}function Mo(e){let t=[];if(!e||e.length===0)return t;let o=go(e);for(let n of fo){let r=n.matchAgainst(o.curls,o.directions);r>=BA&&t.push({name:n.name,confidence:r})}return t}var Po={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},a2,i2,vo;async function C1(e,t){let o=await vo.estimateHands(e,t);if(!o)return[];let n=[];for(let r=0;ro[r].landmarks[i]);let s=o[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(s&&s.length>0){for(let x of s)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=o[r].box?[Math.trunc(Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.max(0,o[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,o[r].box.bottomRight[0])-Math.max(0,o[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,o[r].box.bottomRight[1])-Math.max(0,o[r].box.topLeft[1]))]:[0,0,0,0],l=[o[r].box.topLeft[0]/(e.shape[2]||0),o[r].box.topLeft[1]/(e.shape[1]||0),(o[r].box.bottomRight[0]-o[r].box.topLeft[0])/(e.shape[2]||0),(o[r].box.bottomRight[1]-o[r].box.topLeft[1])/(e.shape[1]||0)];let y=d5(s);n.push({id:r,score:Math.round(100*o[r].confidence)/100,boxScore:Math.round(100*o[r].boxConfidence)/100,fingerScore:Math.round(100*o[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:s,annotations:A,landmarks:y})}return n}async function I1(e){var o,n;R.initial&&(a2=null,i2=null),!a2||!i2?[a2,i2]=await Promise.all([e.hand.enabled?W((o=e.hand.detector)==null?void 0:o.modelPath):null,e.hand.landmarks?W((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&p("cached model:",a2.modelUrl),e.debug&&p("cached model:",i2.modelUrl));let t=new c5(a2);return vo=new x5(t,i2),[a2,i2]}var Q=Z(D());var i0=Z(D());var t0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ZA(){let e=t0.gl;!e||(t0.extensions=e.getSupportedExtensions())}async function To(e){var t;if(e.config.backend==="humangl"&&(t0.name in i0.engine().registry&&(!t0.gl||!t0.gl.getParameter(t0.gl.VERSION))&&(p("error: humangl backend invalid context"),f5(e)),!i0.findBackend(t0.name))){try{t0.canvas=await T0(100,100)}catch(n){p("error: cannot create canvas:",n);return}try{if(t0.gl=(t=t0.canvas)==null?void 0:t.getContext("webgl2",t0.webGLattr),!t0.gl.getParameter(t0.gl.VERSION).includes("2.0")){p("override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}t0.canvas&&(t0.canvas.addEventListener("webglcontextlost",async r=>{throw p("error: humangl:",r.type),p("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),t0.canvas.addEventListener("webglcontextrestored",r=>{p("error: humangl context restored:",r)}),t0.canvas.addEventListener("webglcontextcreationerror",r=>{p("error: humangl context create:",r)}))}catch(n){p("error: cannot get WebGL context:",n);return}try{i0.setWebGLContext(2,t0.gl)}catch(n){p("error: cannot set WebGL context:",n);return}try{let n=new i0.GPGPUContext(t0.gl);i0.registerBackend(t0.name,()=>new i0.MathBackendWebGL(n),t0.priority)}catch(n){p("error: cannot register WebGL backend:",n);return}try{i0.getKernelsForBackend("webgl").forEach(r=>{let A={...r,backendName:t0.name};i0.registerKernel(A)})}catch(n){p("error: cannot update WebGL backend registration:",n);return}let o=i0.backend().getGPGPUContext?i0.backend().getGPGPUContext().gl:null;if(o)p(`humangl webgl version:${o.getParameter(o.VERSION)} renderer:${o.getParameter(o.RENDERER)}`);else{p("error: no current gl context:",o,t0.gl);return}try{i0.env().flagRegistry.WEBGL_VERSION&&i0.env().set("WEBGL_VERSION",2)}catch(n){p("error: cannot set WebGL backend flags:",n);return}ZA(),p("backend registered:",t0.name)}}var I=Z(D());function XA(){if(!R.kernels.includes("mod")){let e={kernelName:"Mod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.sub(t.inputs.a,I.mul(I.div(t.inputs.a,t.inputs.b),t.inputs.b)))};I.registerKernel(e),R.kernels.push("mod")}if(!R.kernels.includes("floormod")){let e={kernelName:"FloorMod",backendName:I.getBackend(),kernelFunc:t=>I.tidy(()=>I.floorDiv(t.inputs.a/t.inputs.b)*t.inputs.b+I.mod(t.inputs.a,t.inputs.b))};I.registerKernel(e),R.kernels.push("floormod")}}async function p5(e,t=!1){if(e.state="backend",t||R.initial||e.config.backend&&e.config.backend.length>0&&I.getBackend()!==e.config.backend){let o=b();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&p("running inside web worker"),R.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&p("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),R.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&p(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")p("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();if(e.config.debug&&p("enumerated webgpu adapter:",r),!r)p("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="humangl";else{let A="requestAdapterInfo"in r?await r.requestAdapterInfo():void 0;p("webgpu adapter info:",A)}}e.config.backend==="humangl"&&await To(e);let n=Object.keys(I.engine().registryFactory);if(e.config.debug&&p("available backends:",n),n.includes(e.config.backend)||(p(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&p(`override: setting backend ${e.config.backend}`)),e.config.debug&&p("setting backend:",e.config.backend),e.config.backend==="wasm"){if(I.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&I.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&p("wasm path:",e.config.wasmPath),typeof(I==null?void 0:I.setWasmPaths)!="undefined")await I.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let r=!1,A=!1;try{r=await I.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await I.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&p(`wasm execution: ${A?"simd":"no simd"} ${r?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&p("warning: wasm simd support is not enabled")}catch(s){p("wasm detection failed")}}try{await I.setBackend(e.config.backend),await I.ready(),Ft()}catch(r){return p("error: cannot set backend:",e.config.backend,r),!1}}if(I.getBackend()==="humangl"&&(I.env().flagRegistry.CHECK_COMPUTATION_FOR_ERRORS&&I.env().set("CHECK_COMPUTATION_FOR_ERRORS",!1),I.env().flagRegistry.WEBGL_CPU_FORWARD&&I.env().set("WEBGL_CPU_FORWARD",!0),I.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&I.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),I.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD&&I.env().set("CPU_HANDOFF_SIZE_THRESHOLD",256),I.env().flagRegistry.WEBGL_EXP_CONV&&I.env().set("WEBGL_EXP_CONV",!0),I.env().flagRegistry.USE_SETTIMEOUTCUSTOM&&I.env().set("USE_SETTIMEOUTCUSTOM",!0),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(p("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),I.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),I.backend().getGPGPUContext)){let n=await I.backend().getGPGPUContext().gl;e.config.debug&&p(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}I.getBackend(),I.enableProdMode(),await I.ready(),e.performance.initBackend=Math.trunc(b()-o),e.config.backend=I.getBackend(),await R.updateBackend(),XA()}return!0}function u5(e,t){for(let o of e){let n={kernelName:o,backendName:t.backend,kernelFunc:()=>{t.debug&&p("kernelFunc",o,t.backend)}};I.registerKernel(n)}R.kernels=I.getKernelsForBackend(I.getBackend()).map(o=>o.kernelName.toLowerCase())}var p0=[null,null],UA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Oe=[[0,0],[0,0]],YA=["hand","fist","pinch","point","face","tip","pinchtip"],ko=4,Eo=1.6,KA=512,JA=1.4,h5=Number.MAX_SAFE_INTEGER,j1=0,pe=[0,0],l0={boxes:[],hands:[]},zo={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function So(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&p("cached model:",p0[0].modelUrl);else{u5(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await W((t=e.hand.detector)==null?void 0:t.modelPath);let o=Object.values(p0[0].modelSignature.inputs);Oe[0][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[0][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[0]}async function Co(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&p("cached model:",p0[1].modelUrl);else{p0[1]=await W((t=e.hand.skeleton)==null?void 0:t.modelPath);let o=Object.values(p0[1].modelSignature.inputs);Oe[1][0]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[1].size):0,Oe[1][1]=Array.isArray(o)?parseInt(o[0].tensorShape.dim[2].size):0}return p0[1]}async function QA(e,t){let o=[];if(!e||!p0[0])return o;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,KA),s=Math.round(A*r/8)*8;n.resize=Q.image.resizeBilinear(e,[A,s]),n.cast=Q.cast(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await p0[0].executeAsync(n.cast,UA),n.boxes=Q.squeeze(n.rawBoxes,[0,2]),n.scores=Q.squeeze(n.rawScores,[0]);let a=Q.unstack(n.scores,1);Q.dispose(a[ko]),a.splice(ko,1),n.filtered=Q.stack(a,1),Q.dispose(a),n.max=Q.max(n.filtered,1),n.argmax=Q.argMax(n.filtered,1);let l=0;n.nms=await Q.image.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let y=await n.nms.data(),x=await n.max.data(),i=await n.argmax.data();for(let d of Array.from(y)){let c=Q.slice(n.boxes,d,1),h=await c.data();Q.dispose(c);let m=[h[1],h[0],h[3]-h[1],h[2]-h[0]],P=$2(m,JA),M=[Math.trunc(m[0]*pe[0]),Math.trunc(m[1]*pe[1]),Math.trunc(m[2]*pe[0]),Math.trunc(m[3]*pe[1])],g=x[d],f=YA[i[d]],u={id:l++,score:g,box:M,boxRaw:P,label:f};o.push(u)}return Object.keys(n).forEach(d=>Q.dispose(n[d])),o.sort((d,c)=>c.score-d.score),o.length>(t.hand.maxDetected||1)&&(o.length=t.hand.maxDetected||1),o}async function O1(e,t,o){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&o.hand.landmarks&&t.score>(o.hand.minConfidence||0)){let r={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[A],[0],[Oe[1][0],Oe[1][1]],"bilinear"),r.div=Q.div(r.crop,B.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let s=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(s))))/100;if(a>=(o.hand.minConfidence||0)){n.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Oe[1][1],i[1]/Oe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);n.keypoints=x.map(i=>[pe[0]*(i[0]+t.boxRaw[0]),pe[1]*(i[1]+t.boxRaw[1]),i[2]||0]),n.landmarks=d5(n.keypoints);for(let i of Object.keys(zo))n.annotations[i]=zo[i].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return n}async function N1(e,t){var r,A;if(!p0[0]||!p0[1]||!((r=p0[0])!=null&&r.inputs[0].shape)||!((A=p0[1])!=null&&A.inputs[0].shape))return[];pe=[e.shape[2]||0,e.shape[1]||0],h5++;let o=(t.hand.skipTime||0)>b()-j1,n=h5<(t.hand.skipFrames||0);return t.skipAllowed&&o&&n?l0.hands:new Promise(async s=>{let a=3*(t.hand.skipTime||0)>b()-j1,l=h5<3*(t.hand.skipFrames||0);t.skipAllowed&&l0.hands.length===t.hand.maxDetected?l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))):t.skipAllowed&&a&&l&&l0.hands.length>0?l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))):(l0.boxes=await QA(e,t),j1=b(),l0.hands=await Promise.all(l0.boxes.map(x=>O1(e,x,t))),h5=0);let y=[...l0.boxes];if(l0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&l0.hands[x].fingerScore&&l0.hands[x].fingerScore>(t.hand.minConfidence||0)){let d=$2(i.box,Eo),c=$2(i.boxRaw,Eo);l0.boxes.push({...y[x],box:d,boxRaw:c})}}for(let x=0;xb()-Oo,A=L1<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&A&&jo===n&&b5[o]?(L1++,b5[o]):(L1=0,new Promise(async l=>{let y=g5.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),x=P0==null?void 0:P0.execute(y),i=(await x.data())[0];b5[o]=Math.round(100*i)/100,jo=n,Oo=b(),g5.dispose([y,x]),l(b5[o])}))}var Ho=Z(D());var C2={};be(C2,{connected:()=>P5,horizontal:()=>F1,kpt:()=>M5,relative:()=>B1,vertical:()=>G1});var M5=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],F1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],G1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],B1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],P5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ne=Z(D()),Wo=.005,G0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function H1(e){for(let t of F1){let o=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[o]&&e.keypoints[n]&&e.keypoints[o].position[1]y&&y.part===t[0]),r=e.keypoints.findIndex(y=>y&&y.part===t[1]),A=e.keypoints.findIndex(y=>y&&y.part===o[0]),s=e.keypoints.findIndex(y=>y&&y.part===o[1]);if(!e.keypoints[A]||!e.keypoints[s])continue;let a=e.keypoints[n]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let y=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=y}}}function Fo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],o.pad=Ne.pad(e,G0.padding),o.resize=Ne.image.resizeBilinear(o.pad,[t,t]);let n=Ne.cast(o.resize,"int32");return Object.keys(o).forEach(r=>Ne.dispose(o[r])),n}function Bo(e,t){e.keypoints=e.keypoints.filter(n=>n&&n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+G0.padding[2][0]+G0.padding[2][1])/t[0]-G0.padding[2][0],n.position[1]*(t[1]+G0.padding[1][0]+G0.padding[1][1])/t[1]-G0.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let o=ce(e.keypoints.map(n=>n.position),t);return e.box=o.box,e.boxRaw=o.boxRaw,e}var B0,v5=0,V1=Number.MAX_SAFE_INTEGER,qe={boxes:[],bodies:[],last:0};async function Vo(e){return R.initial&&(B0=null),B0?e.debug&&p("cached model:",B0.modelUrl):(u5(["size"],e),B0=await W(e.body.modelPath)),v5=B0.inputs[0].shape?B0.inputs[0].shape[2]:0,v5<64&&(v5=256),B0}async function $A(e,t,o){let n=e[0][0],r=[],A=0;for(let x=0;xt.body.minConfidence){let i=[n[x][1],n[x][0]];r.push({score:Math.round(100*A)/100,part:M5[x],positionRaw:i,position:[Math.round((o.shape[2]||0)*i[0]),Math.round((o.shape[1]||0)*i[1])]})}A=r.reduce((x,i)=>i.score>x?i.score:x,0);let s=[],a=ce(r.map(x=>x.position),[o.shape[2],o.shape[1]]),l={};for(let[x,i]of Object.entries(P5)){let d=[];for(let c=0;cP.part===i[c]),m=r.find(P=>P.part===i[c+1]);h&&m&&h.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([h.position,m.position])}l[x]=d}let y={id:0,score:A,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return H1(y),s.push(y),s}async function e7(e,t,o){let n=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let d=A[3*i+2];if(d>t.body.minConfidence){let c=[A[3*i+1],A[3*i+0]];a.push({part:M5[i],score:Math.round(100*d)/100,positionRaw:c,position:[Math.round((o.shape[2]||0)*c[0]),Math.round((o.shape[1]||0)*c[1])]})}}let l=ce(a.map(i=>i.position),[o.shape[2],o.shape[1]]),y={};for(let[i,d]of Object.entries(P5)){let c=[];for(let h=0;hM.part===d[h]),P=a.find(M=>M.part===d[h+1]);m&&P&&m.score>(t.body.minConfidence||0)&&P.score>(t.body.minConfidence||0)&&c.push([m.position,P.position])}y[i]=c}let x={id:r,score:s,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:y};H1(x),n.push(x)}}return n.sort((r,A)=>A.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function D1(e,t){if(!B0||!(B0!=null&&B0.inputs[0].shape))return[];t.skipAllowed||(qe.boxes.length=0),V1++;let o=(t.body.skipTime||0)>b()-qe.last,n=V1<(t.body.skipFrames||0);return t.skipAllowed&&o&&n?qe.bodies:new Promise(async r=>{let A={};V1=0,A.input=Go(e,v5),A.res=B0==null?void 0:B0.execute(A.input),qe.last=b();let s=await A.res.array();qe.bodies=A.res.shape[2]===17?await $A(s,t,e):await e7(s,t,e);for(let a of qe.bodies)Bo(a,[e.shape[2]||1,e.shape[1]||1]),Fo(a.keypoints);Object.keys(A).forEach(a=>Ho.dispose(A[a])),r(qe.bodies)})}var H0=Z(D());var l2,R5=[],Zo=0,Z1=Number.MAX_SAFE_INTEGER,w5=0,T5=2.5;async function Xo(e){if(!l2||R.initial){l2=await W(e.object.modelPath);let t=Object.values(l2.modelSignature.inputs);w5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0}else e.debug&&p("cached model:",l2.modelUrl);return l2}async function t7(e,t,o){let n=0,r=[];for(let l of[1,2,4]){let y=l*13,x=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)===t2.length)),i=await x.array(),d=H0.squeeze(e.find(P=>P.shape[1]===y**2&&(P.shape[2]||0)(o.object.minConfidence||0)&&M!==61){let f=(.5+Math.trunc(P%y))/y,u=(.5+Math.trunc(P/y))/y,S=m[P].map(_=>_*(y/l/w5)),[N,w]=[f-T5/l*S[0],u-T5/l*S[1]],[E,H]=[f+T5/l*S[2]-N,u+T5/l*S[3]-w],X=[N,w,E,H];X=X.map(_=>Math.max(0,Math.min(_,1)));let G=[X[0]*t[0],X[1]*t[1],X[2]*t[0],X[3]*t[1]],o0={id:n++,score:Math.round(100*g)/100,class:M+1,label:t2[M].label,box:G.map(_=>Math.trunc(_)),boxRaw:X};r.push(o0)}}H0.dispose([x,d,c,h])}let A=r.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),s=r.map(l=>l.score),a=[];if(A&&A.length>0){let l=await H0.image.nonMaxSuppressionAsync(A,s,o.object.maxDetected,o.object.iouThreshold,o.object.minConfidence);a=await l.data(),H0.dispose(l)}return r=r.filter((l,y)=>a.includes(y)).sort((l,y)=>y.score-l.score),r}async function X1(e,t){let o=(t.object.skipTime||0)>b()-Zo,n=Z1<(t.object.skipFrames||0);return t.skipAllowed&&o&&n&&R5.length>0?(Z1++,R5):(Z1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?R5:new Promise(async r=>{let A=[e.shape[2]||0,e.shape[1]||0],s=H0.image.resizeBilinear(e,[w5,w5],!1),a=H0.div(s,B.tf255),l=H0.transpose(a,[0,3,1,2]),y;t.object.enabled&&(y=l2.execute(l)),Zo=b();let x=await t7(y,A,t);R5=x,H0.dispose([s,a,l,...y]),r(x)}))}var z0=Z(D());var j2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],o7=j2.length,I2=j2.reduce((e,t,o)=>(e[t]=o,e),{}),n7=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Cs=n7.map(([e,t])=>[I2[e],I2[t]]),Uo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function Yo(e){let t=e.reduce(({maxX:o,maxY:n,minX:r,minY:A},{position:{x:s,y:a}})=>({maxX:Math.max(o,s),maxY:Math.max(n,a),minX:Math.min(r,s),minY:Math.min(A,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Ko(e,[t,o],[n,r]){let A=t/n,s=o/r,a=(y,x)=>({id:x,score:y.score,boxRaw:[y.box[0]/r,y.box[1]/n,y.box[2]/r,y.box[3]/n],box:[Math.trunc(y.box[0]*s),Math.trunc(y.box[1]*A),Math.trunc(y.box[2]*s),Math.trunc(y.box[3]*A)],keypoints:y.keypoints.map(({score:i,part:d,position:c})=>({score:i,part:d,position:[Math.trunc(c.x*s),Math.trunc(c.y*A)],positionRaw:[c.x/n,c.y/n]})),annotations:{}});return e.map((y,x)=>a(y,x))}var k5=class{constructor(t,o){T(this,"priorityQueue");T(this,"numberOfElements");T(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=o}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let o=2*t;if(oo?o:e}function Jo(e,t,o,n){let r=o-e,A=n-t;return r*r+A*A}function K1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var oe,A7=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],E5=1,y2=16,s7=50**2;function Qo(e,t,o,n,r,A,s=2){let a=M=>({y:A.get(M.y,M.x,e),x:A.get(M.y,M.x,A.shape[2]/2+e)}),l=(M,g,f)=>({y:Y1(Math.round(M.y/y2),0,g-1),x:Y1(Math.round(M.x/y2),0,f-1)}),[y,x]=n.shape,i=l(t.position,y,x),d=a(i),h=K1(t.position,d);for(let M=0;M[I2[d],I2[c]]),s=A.map(([,d])=>d),a=A.map(([d])=>d),l=t.shape[2],y=s.length,x=new Array(l),i=U1(e.part,y2,o);x[e.part.id]={score:e.score,part:j2[e.part.id],position:i};for(let d=y-1;d>=0;--d){let c=s[d],h=a[d];x[c]&&!x[h]&&(x[h]=Qo(d,x[c],h,t,o,r))}for(let d=0;dt){a=!1;break}if(!a)break}return a}function l7(e,t){let[o,n,r]=t.shape,A=new k5(o*n*r,({score:s})=>s);for(let s=0;s{var s;let A=(s=r[n])==null?void 0:s.position;return A?Jo(o,t,A.y,A.x)<=s7:!1})}function y7(e,t){return t.reduce((n,{position:r,score:A},s)=>(_o(e,r,s)||(n+=A),n),0)/t.length}function c7(e,t,o,n,r,A){let s=[],a=l7(A,t);for(;s.lengthc.score>A);let i=y7(s,x),d=Yo(x);i>A&&s.push({keypoints:x,box:d,score:Math.round(100*i)/100})}return s}async function J1(e,t){let o=z0.tidy(()=>{if(!oe.inputs[0].shape)return[];let s=z0.image.resizeBilinear(e,[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]),a=z0.sub(z0.div(z0.cast(s,"float32"),127.5),1),y=oe.execute(a,A7).map(x=>z0.squeeze(x,[0]));return y[1]=z0.sigmoid(y[1]),y}),n=await Promise.all(o.map(s=>s.buffer()));for(let s of o)z0.dispose(s);let r=await c7(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return oe.inputs[0].shape?Ko(r,[e.shape[1],e.shape[2]],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]):[]}async function $o(e){return!oe||R.initial?oe=await W(e.body.modelPath):e.debug&&p("cached model:",oe.modelUrl),oe}var r0=Z(D());var ae,Q1=!1;async function _1(e){return!ae||R.initial?ae=await W(e.segmentation.modelPath):e.debug&&p("cached model:",ae.modelUrl),ae}async function tn(e,t,o){var m,P;if(Q1)return{data:[],canvas:null,alpha:null};Q1=!0,ae||await _1(o);let n=await Je(e,o),r=((m=n.tensor)==null?void 0:m.shape[2])||0,A=((P=n.tensor)==null?void 0:P.shape[1])||0;if(!n.tensor)return{data:[],canvas:null,alpha:null};let s={};s.resize=r0.image.resizeBilinear(n.tensor,[ae.inputs[0].shape?ae.inputs[0].shape[1]:0,ae.inputs[0].shape?ae.inputs[0].shape[2]:0],!1),r0.dispose(n.tensor),s.norm=r0.div(s.resize,B.tf255),s.res=ae.execute(s.norm),s.squeeze=r0.squeeze(s.res,0),s.squeeze.shape[2]===2?(s.softmax=r0.softmax(s.squeeze),[s.bg,s.fg]=r0.unstack(s.softmax,2),s.expand=r0.expandDims(s.fg,2),s.pad=r0.expandDims(s.expand,0),s.crop=r0.image.cropAndResize(s.pad,[[0,0,.5,.5]],[0],[r,A]),s.data=r0.squeeze(s.crop,0)):s.data=r0.image.resizeBilinear(s.squeeze,[A,r]);let a=Array.from(await s.data.data());if(R.node&&!R.Canvas&&typeof ImageData=="undefined")return o.debug&&p("canvas support missing"),Object.keys(s).forEach(M=>r0.dispose(s[M])),{data:a,canvas:null,alpha:null};let l=T0(r,A);r0.browser&&await r0.browser.toPixels(s.data,l);let y=l.getContext("2d");o.segmentation.blur&&o.segmentation.blur>0&&(y.filter=`blur(${o.segmentation.blur}px)`);let x=y.getImageData(0,0,r,A),i=T0(r,A),d=i.getContext("2d");n.canvas&&d.drawImage(n.canvas,0,0),d.globalCompositeOperation="darken",o.segmentation.blur&&o.segmentation.blur>0&&(d.filter=`blur(${o.segmentation.blur}px)`),d.drawImage(l,0,0),d.globalCompositeOperation="source-over",d.filter="none";let c=d.getImageData(0,0,r,A);for(let M=0;Mr0.dispose(s[M])),Q1=!1,{data:a,canvas:i,alpha:l}}var O2=class{constructor(){T(this,"ssrnetage",null);T(this,"gear",null);T(this,"blazeposedetect",null);T(this,"blazepose",null);T(this,"centernet",null);T(this,"efficientpose",null);T(this,"mobilefacenet",null);T(this,"insightface",null);T(this,"emotion",null);T(this,"facedetect",null);T(this,"faceiris",null);T(this,"facemesh",null);T(this,"faceres",null);T(this,"ssrnetgender",null);T(this,"handpose",null);T(this,"handskeleton",null);T(this,"handtrack",null);T(this,"liveness",null);T(this,"movenet",null);T(this,"nanodet",null);T(this,"posenet",null);T(this,"segmentation",null);T(this,"antispoof",null)}},$1=e=>{let t=0,o=0,n=0;for(let A of Object.values(ne))t+=A.sizeFromManifest,o+=A.sizeLoadedWeights,n+=A.sizeDesired;let r=n>0?o/n:0;return{numLoadedModels:Object.values(ne).length,numEnabledModels:void 0,numDefinedModels:Object.keys(e.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:o,totalSizeLoading:n,totalSizeEnabled:void 0,modelStats:Object.values(ne)}};function f5(e){for(let t of Object.keys(e.models))e.models[t]=null}async function et(e){var t,o,n,r,A,s,a,l,y,x,i,d,c,h,m,P,M,g,f,u,S,N,w,E,H,X,G,o0,_,z,y0,V0;R.initial&&f5(e),e.config.hand.enabled&&(!e.models.handpose&&((o=(t=e.config.hand.detector)==null?void 0:t.modelPath)==null?void 0:o.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await I1(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(n=e.config.hand.detector)==null?void 0:n.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await I1(e.config))),e.config.body.enabled&&!e.models.blazepose&&((s=(A=e.config.body)==null?void 0:A.modelPath)==null?void 0:s.includes("blazepose"))&&(e.models.blazepose=h3(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&e.config.body.detector&&e.config.body.detector.modelPath&&(e.models.blazeposedetect=u3(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((l=(a=e.config.body)==null?void 0:a.modelPath)==null?void 0:l.includes("efficientpose"))&&(e.models.efficientpose=R3(e.config)),e.config.body.enabled&&!e.models.movenet&&((x=(y=e.config.body)==null?void 0:y.modelPath)==null?void 0:x.includes("movenet"))&&(e.models.movenet=Vo(e.config)),e.config.body.enabled&&!e.models.posenet&&((d=(i=e.config.body)==null?void 0:i.modelPath)==null?void 0:d.includes("posenet"))&&(e.models.posenet=$o(e.config)),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=i3(e.config)),e.config.face.enabled&&((c=e.config.face.antispoof)==null?void 0:c.enabled)&&!e.models.antispoof&&(e.models.antispoof=Kt(e.config)),e.config.face.enabled&&((h=e.config.face.liveness)==null?void 0:h.enabled)&&!e.models.liveness&&(e.models.liveness=No(e.config)),e.config.face.enabled&&((m=e.config.face.description)==null?void 0:m.enabled)&&!e.models.faceres&&(e.models.faceres=eo(e.config)),e.config.face.enabled&&((P=e.config.face.emotion)==null?void 0:P.enabled)&&!e.models.emotion&&(e.models.emotion=E3(e.config)),e.config.face.enabled&&((M=e.config.face.iris)==null?void 0:M.enabled)&&!((g=e.config.face.attention)!=null&&g.enabled)&&!e.models.faceiris&&(e.models.faceiris=D3(e.config)),e.config.face.enabled&&((f=e.config.face.mesh)==null?void 0:f.enabled)&&!e.models.facemesh&&(e.models.facemesh=K3(e.config)),e.config.face.enabled&&((u=e.config.face.gear)==null?void 0:u.enabled)&&!e.models.gear&&(e.models.gear=Lt(e.config)),e.config.face.enabled&&((S=e.config.face.ssrnet)==null?void 0:S.enabled)&&!e.models.ssrnetage&&(e.models.ssrnetage=Ht(e.config)),e.config.face.enabled&&((N=e.config.face.ssrnet)==null?void 0:N.enabled)&&!e.models.ssrnetgender&&(e.models.ssrnetgender=Xt(e.config)),e.config.face.enabled&&((w=e.config.face.mobilefacenet)==null?void 0:w.enabled)&&!e.models.mobilefacenet&&(e.models.mobilefacenet=j3(e.config)),e.config.face.enabled&&((E=e.config.face.insightface)==null?void 0:E.enabled)&&!e.models.insightface&&(e.models.insightface=F3(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((X=(H=e.config.hand.detector)==null?void 0:H.modelPath)==null?void 0:X.includes("handtrack"))&&(e.models.handtrack=So(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((o0=(G=e.config.hand.detector)==null?void 0:G.modelPath)==null?void 0:o0.includes("handtrack"))&&(e.models.handskeleton=Co(e.config)),e.config.object.enabled&&!e.models.centernet&&((z=(_=e.config.object)==null?void 0:_.modelPath)==null?void 0:z.includes("centernet"))&&(e.models.centernet=M3(e.config)),e.config.object.enabled&&!e.models.nanodet&&((V0=(y0=e.config.object)==null?void 0:y0.modelPath)==null?void 0:V0.includes("nanodet"))&&(e.models.nanodet=Xo(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=_1(e.config));for await(let v of Object.keys(e.models))e.models[v]&&typeof e.models[v]!="undefined"&&(e.models[v]=await e.models[v])}var Z0;function c2(e,t,o){if(e&&(Z0=e),!t||(Z0||p("instance not registred"),!Z0.config.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul"],A=[],s=[],a=t.modelUrl,l=t.executor;if(l&&l.graph.nodes)for(let y of Object.values(l.graph.nodes)){let x=y.op.toLowerCase();A.includes(x)||A.push(x)}else!l&&Z0.config.debug&&p("model signature not determined:",o);for(let y of A)!n.includes(y)&&!r.includes(y)&&!Z0.env.kernels.includes(y)&&!Z0.env.kernels.includes(y.replace("_",""))&&!Z0.env.kernels.includes(y.replace("native",""))&&!Z0.env.kernels.includes(y.replace("v2",""))&&s.push(y);return Z0.config.debug&&s.length>0&&p("model validation failed:",o,s),s.length>0?{name:o,missing:s,ops:A,url:a}:null}function z5(e){Z0=e;let t=[];for(let o of Object.keys(Z0.models)){let n=Z0.models[o];if(!n)continue;let r=c2(Z0,n,o);r&&t.push(r)}return t}var S0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ne={};async function x7(e,t){return S0.debug&&p("load model fetch:",e,t),fetch(e,t)}function nn(e){S0.cacheModels=e.cacheModels,S0.verbose=e.debug,S0.modelBasePath=e.modelBasePath}async function W(e){var y,x,i;let t=Pt(S0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let o=t.includes("/")?t.split("/"):t.split("\\"),n=o[o.length-1].replace(".json",""),r="indexeddb://"+n;ne[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:B5[n],inCache:!1},S0.cacheSupported=typeof window!="undefined"&&typeof window.localStorage!="undefined"&&typeof window.indexedDB!="undefined";let A={};try{A=S0.cacheSupported&&S0.cacheModels?await S5.io.listModels():{}}catch(d){S0.cacheSupported=!1}ne[n].inCache=S0.cacheSupported&&S0.cacheModels&&Object.keys(A).includes(r);let s=typeof fetch=="undefined"?{}:{fetchFunc:(d,c)=>x7(d,c)},a=new S5.GraphModel(ne[n].inCache?r:t,s),l=!1;try{a.findIOHandler(),S0.debug&&p("model load handler:",a.handler);let d=await a.handler.load();ne[n].sizeFromManifest=((y=d==null?void 0:d.weightData)==null?void 0:y.byteLength)||0,a.loadSync(d),ne[n].sizeLoadedWeights=((i=(x=a==null?void 0:a.artifacts)==null?void 0:x.weightData)==null?void 0:i.byteLength)||0,S0.verbose&&p("load model:",a.modelUrl,{bytes:ne[n].sizeLoadedWeights},S0),l=!0}catch(d){p("error loading model:",t,d)}if(l&&S0.cacheModels&&S0.cacheSupported&&!ne[n].inCache)try{let d=await a.save(r);p("model saved:",r,d)}catch(d){p("error saving model:",t,d)}return c2(null,a,`${e}`),a}var re=Z(D());var tt="2.9.4";var it={};be(it,{all:()=>at,body:()=>d2,canvas:()=>st,face:()=>x2,gesture:()=>p2,hand:()=>f2,object:()=>m2,options:()=>v0,person:()=>At});var X0=e=>{if(!e)p("draw error: invalid canvas");else if(!e.getContext)p("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)p("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),ue=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let o=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${t.alpha})`};function he(e,t,o,n,r){e.fillStyle=ue(n,r),e.beginPath(),e.arc(t,o,r.pointSize,0,2*Math.PI),e.fill()}function ie(e,t,o,n,r,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let s=(t+t+n)/2,a=(o+o+r)/2;e.ellipse(s,a,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,o),e.lineTo(t+n-A.roundRect,o),e.quadraticCurveTo(t+n,o,t+n,o+A.roundRect),e.lineTo(t+n,o+r-A.roundRect),e.quadraticCurveTo(t+n,o+r,t+n-A.roundRect,o+r),e.lineTo(t+A.roundRect,o+r),e.quadraticCurveTo(t,o+r,t,o+r-A.roundRect),e.lineTo(t,o+A.roundRect),e.quadraticCurveTo(t,o,t+A.roundRect,o),e.closePath();e.stroke()}function ot(e,t,o){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=ue(n[2]||0,o),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),o.fillPolygons&&(e.closePath(),e.fill())}}function rn(e,t,o){if(!(t.length<2)){if(e.lineWidth=o.lineWidth,!o.useCurves||t.length<=2){ot(e,t,o);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;n0){let n=e.emotion.map(r=>`${Math.trunc(100*r.score)}% ${r.emotion}`);n.length>3&&(n.length=3),o.push(n.join(" "))}e.rotation&&e.rotation.angle&&e.rotation.gaze&&(e.rotation.angle.roll&&o.push(`roll: ${Ue(e.rotation.angle.roll)}\xB0 yaw:${Ue(e.rotation.angle.yaw)}\xB0 pitch:${Ue(e.rotation.angle.pitch)}\xB0`),e.rotation.gaze.bearing&&o.push(`gaze: ${Ue(e.rotation.gaze.bearing)}\xB0`)),o.length===0&&o.push("face"),t.fillStyle=K.color;for(let n=o.length-1;n>=0;n--){let r=Math.max(e.box[0],0),A=n*K.lineHeight+e.box[1];K.shadowColor&&K.shadowColor!==""&&(t.fillStyle=K.shadowColor,t.fillText(o[n],r+5,A+16)),t.fillStyle=K.labelColor,t.fillText(o[n],r+4,A+15)}}}function p7(e,t){if(e.annotations&&e.annotations.leftEyeIris&&e.annotations.leftEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,n=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(e.annotations&&e.annotations.rightEyeIris&&e.annotations.rightEyeIris[0]){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let o=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,n=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],o,n,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function u7(e,t){var o;if(K.drawGaze&&((o=e.rotation)==null?void 0:o.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,A=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C ${n} ${e.box[1]}, diff --git a/test/build.log b/test/build.log index 86090847..93a90119 100644 --- a/test/build.log +++ b/test/build.log @@ -1,39 +1,39 @@ -2022-08-19 09:12:22 DATA:  Build {"name":"@vladmandic/human","version":"2.9.3"} -2022-08-19 09:12:22 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.3"} -2022-08-19 09:12:22 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-08-19 09:12:22 INFO:  Toolchain: {"build":"0.7.10","esbuild":"0.15.5","typescript":"4.7.4","typedoc":"0.23.10","eslint":"8.22.0"} -2022-08-19 09:12:22 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-08-19 09:12:22 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} -2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":608} -2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655452,"outputBytes":307474} -2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":612} -2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655456,"outputBytes":307478} -2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":664} -2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655508,"outputBytes":307528} -2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1069,"outputBytes":358} -2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1032,"outputBytes":583} -2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655427,"outputBytes":306323} -2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1271,"outputBytes":2787569} -2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3442413,"outputBytes":1669183} -2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3442413,"outputBytes":3073108} -2022-08-19 09:12:27 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} -2022-08-19 09:12:29 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} -2022-08-19 09:12:29 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6716,"outputBytes":3141} -2022-08-19 09:12:29 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15629,"outputBytes":7798} -2022-08-19 09:12:37 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":109,"errors":0,"warnings":0} -2022-08-19 09:12:37 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-08-19 09:12:37 STATE: Copy: {"input":"tfjs/tfjs.esm.d.ts"} -2022-08-19 09:12:37 INFO:  Done... -2022-08-19 09:12:37 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":198} -2022-08-19 09:12:37 STATE: Copy: {"input":"types/human.d.ts"} -2022-08-19 09:12:37 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2022-08-19 09:12:37 STATE: Models {"folder":"./models","models":13} -2022-08-19 09:12:37 STATE: Models {"folder":"../human-models/models","models":42} -2022-08-19 09:12:37 STATE: Models {"folder":"../blazepose/model/","models":4} -2022-08-19 09:12:37 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2022-08-19 09:12:37 STATE: Models {"folder":"../efficientpose/models","models":3} -2022-08-19 09:12:37 STATE: Models {"folder":"../insightface/models","models":5} -2022-08-19 09:12:37 STATE: Models {"folder":"../movenet/models","models":3} -2022-08-19 09:12:37 STATE: Models {"folder":"../nanodet/models","models":4} -2022-08-19 09:12:38 STATE: Models: {"count":57,"totalSize":383017442} -2022-08-19 09:12:38 INFO:  Human Build complete... {"logFile":"test/build.log"} +2022-08-20 09:29:24 DATA:  Build {"name":"@vladmandic/human","version":"2.9.4"} +2022-08-20 09:29:24 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.4"} +2022-08-20 09:29:24 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-08-20 09:29:24 INFO:  Toolchain: {"build":"0.7.10","esbuild":"0.15.5","typescript":"4.7.4","typedoc":"0.23.10","eslint":"8.22.0"} +2022-08-20 09:29:24 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-08-20 09:29:24 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} +2022-08-20 09:29:24 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":608} +2022-08-20 09:29:24 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655391,"outputBytes":307474} +2022-08-20 09:29:24 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":612} +2022-08-20 09:29:24 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655395,"outputBytes":307478} +2022-08-20 09:29:24 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":664} +2022-08-20 09:29:24 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655447,"outputBytes":307528} +2022-08-20 09:29:24 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1069,"outputBytes":358} +2022-08-20 09:29:24 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1032,"outputBytes":583} +2022-08-20 09:29:24 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655366,"outputBytes":306323} +2022-08-20 09:29:25 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1271,"outputBytes":2787569} +2022-08-20 09:29:25 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3442352,"outputBytes":1669183} +2022-08-20 09:29:25 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3442352,"outputBytes":3073108} +2022-08-20 09:29:29 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} +2022-08-20 09:29:31 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} +2022-08-20 09:29:31 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6716,"outputBytes":3141} +2022-08-20 09:29:31 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15629,"outputBytes":7798} +2022-08-20 09:29:39 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":109,"errors":0,"warnings":0} +2022-08-20 09:29:39 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-08-20 09:29:39 STATE: Copy: {"input":"tfjs/tfjs.esm.d.ts"} +2022-08-20 09:29:39 INFO:  Done... +2022-08-20 09:29:39 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":198} +2022-08-20 09:29:39 STATE: Copy: {"input":"types/human.d.ts"} +2022-08-20 09:29:39 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2022-08-20 09:29:39 STATE: Models {"folder":"./models","models":13} +2022-08-20 09:29:39 STATE: Models {"folder":"../human-models/models","models":42} +2022-08-20 09:29:39 STATE: Models {"folder":"../blazepose/model/","models":4} +2022-08-20 09:29:39 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2022-08-20 09:29:39 STATE: Models {"folder":"../efficientpose/models","models":3} +2022-08-20 09:29:39 STATE: Models {"folder":"../insightface/models","models":5} +2022-08-20 09:29:39 STATE: Models {"folder":"../movenet/models","models":3} +2022-08-20 09:29:39 STATE: Models {"folder":"../nanodet/models","models":4} +2022-08-20 09:29:40 STATE: Models: {"count":57,"totalSize":383017442} +2022-08-20 09:29:40 INFO:  Human Build complete... {"logFile":"test/build.log"} diff --git a/test/node.js b/test/node.js index afe1f11e..a5613454 100644 --- a/test/node.js +++ b/test/node.js @@ -22,6 +22,7 @@ const demos = [ { cmd: '../demo/nodejs/node-similarity.js', args: ['samples/in/ai-face.jpg', 'samples/in/ai-upper.jpg'] }, { cmd: '../demo/nodejs/node-canvas.js', args: ['samples/in/ai-body.jpg', 'samples/out/ai-body.jpg'] }, { cmd: '../demo/multithread/node-multiprocess.js', args: [] }, + { cmd: '../demo/facematch/node-match.js', args: [] }, // { cmd: '../demo/nodejs/node-video.js', args: [] }, // { cmd: '../demo/nodejs/node-webcam.js', args: [] }, ]; @@ -91,7 +92,7 @@ async function runTest(test) { // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars async function runDemo(demo) { - log.info(); + // log.info(); log.info(demo, 'start'); status[demo.cmd] = { passed: 0, failed: 0 }; return new Promise((resolve) => { diff --git a/test/test-main.js b/test/test-main.js index 3de97404..32d066f8 100644 --- a/test/test-main.js +++ b/test/test-main.js @@ -1,6 +1,6 @@ const fs = require('fs'); const process = require('process'); -const canvasJS = require('canvas'); +const canvasJS = require('canvas'); // eslint-disable-line node/no-extraneous-require, node/no-missing-require let fetch; // fetch is dynamically imported later let config; @@ -262,7 +262,7 @@ async function verifyCompare(human) { async function test(Human, inputConfig) { lastOp = `test ${inputConfig}`; config = inputConfig; - fetch = (await import('node-fetch')).default; + fetch = (await import('node-fetch')).default; // eslint-disable-line node/no-extraneous-require, node/no-missing-import const ok = await testHTTP(); if (!ok) { log('error', 'aborting test'); diff --git a/test/test-node-wasm.js b/test/test-node-wasm.js index ed491d9d..9a8596fc 100644 --- a/test/test-node-wasm.js +++ b/test/test-node-wasm.js @@ -1,7 +1,7 @@ const log = require('@vladmandic/pilogger'); const tf = require('@tensorflow/tfjs'); // wasm backend requires tfjs to be loaded first const wasm = require('@tensorflow/tfjs-backend-wasm'); // wasm backend does not get auto-loaded in nodejs -const { Canvas, Image } = require('canvas'); +const { Canvas, Image } = require('canvas'); // eslint-disable-line node/no-extraneous-require, node/no-missing-require const H = require('../dist/human.node-wasm.js'); const test = require('./test-main.js').test; diff --git a/test/test.log b/test/test.log index fc1e3ca8..48c8e65e 100644 --- a/test/test.log +++ b/test/test.log @@ -1,975 +1,970 @@ -2022-08-19 09:13:23 INFO:  @vladmandic/human version 2.9.3 -2022-08-19 09:13:23 INFO:  User: vlado Platform: linux Arch: x64 Node: v18.1.0 -2022-08-19 09:13:23 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-fetch.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]}] -2022-08-19 09:13:23 INFO:  -2022-08-19 09:13:23 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start -2022-08-19 09:13:24 INFO:  -2022-08-19 09:13:24 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start -2022-08-19 09:13:25 INFO:  -2022-08-19 09:13:25 INFO:  {"cmd":"../demo/nodejs/node-fetch.js","args":[]} start -2022-08-19 09:13:27 INFO:  -2022-08-19 09:13:27 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start -2022-08-19 09:13:28 INFO:  -2022-08-19 09:13:28 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start -2022-08-19 09:13:28 INFO:  -2022-08-19 09:13:28 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start -2022-08-19 09:13:29 INFO:  -2022-08-19 09:13:29 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start -2022-08-19 09:13:30 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2022-08-19 09:13:30 INFO:  -2022-08-19 09:13:30 INFO:  test-node.js start -2022-08-19 09:13:30 INFO:  test-node.js test: configuration validation -2022-08-19 09:13:30 STATE: test-node.js passed: configuration default validation [] -2022-08-19 09:13:30 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-08-19 09:13:30 INFO:  test-node.js test: model load -2022-08-19 09:13:30 STATE: test-node.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] -2022-08-19 09:13:30 INFO:  test-node.js test: warmup -2022-08-19 09:13:30 STATE: test-node.js passed: create human -2022-08-19 09:13:30 INFO:  test-node.js human version: 2.9.3 -2022-08-19 09:13:30 INFO:  test-node.js platform: linux x64 agent: NodeJS v18.1.0 -2022-08-19 09:13:30 INFO:  test-node.js tfjs version: 3.19.0 -2022-08-19 09:13:30 INFO:  test-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.7.3-dev20220521","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} -2022-08-19 09:13:30 STATE: test-node.js passed: set backend: tensorflow -2022-08-19 09:13:30 STATE: test-node.js tensors 1921 -2022-08-19 09:13:30 STATE: test-node.js passed: load models -2022-08-19 09:13:30 STATE: test-node.js result: defined models: 23 loaded models: 12 -2022-08-19 09:13:30 STATE: test-node.js passed: warmup: none default -2022-08-19 09:13:30 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-08-19 09:13:30 DATA:  test-node.js result: performance: load: null total: null -2022-08-19 09:13:30 STATE: test-node.js passed: warmup none result match -2022-08-19 09:13:30 STATE: test-node.js event: image -2022-08-19 09:13:31 STATE: test-node.js event: detect -2022-08-19 09:13:31 STATE: test-node.js event: warmup -2022-08-19 09:13:31 STATE: test-node.js passed: warmup: face default -2022-08-19 09:13:31 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-08-19 09:13:31 DATA:  test-node.js result: performance: load: null total: 410 -2022-08-19 09:13:31 STATE: test-node.js passed: warmup face result match -2022-08-19 09:13:31 STATE: test-node.js event: image -2022-08-19 09:13:31 STATE: test-node.js event: detect -2022-08-19 09:13:31 STATE: test-node.js event: warmup -2022-08-19 09:13:31 STATE: test-node.js passed: warmup: body default -2022-08-19 09:13:31 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:31 DATA:  test-node.js result: performance: load: null total: 305 -2022-08-19 09:13:31 STATE: test-node.js passed: warmup body result match -2022-08-19 09:13:31 STATE: test-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-08-19 09:13:31 INFO:  test-node.js test: details verification -2022-08-19 09:13:31 STATE: test-node.js start default -2022-08-19 09:13:31 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:31 STATE: test-node.js event: image -2022-08-19 09:13:31 STATE: test-node.js event: detect -2022-08-19 09:13:31 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-08-19 09:13:31 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:31 DATA:  test-node.js result: performance: load: null total: 245 -2022-08-19 09:13:31 STATE: test-node.js passed: details face length 1 -2022-08-19 09:13:31 STATE: test-node.js passed: details face score 1 0.93 1 -2022-08-19 09:13:31 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-08-19 09:13:31 STATE: test-node.js passed: details face arrays 4 478 1024 -2022-08-19 09:13:31 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-08-19 09:13:31 STATE: test-node.js passed: details face anti-spoofing 0.79 -2022-08-19 09:13:31 STATE: test-node.js passed: details face liveness 0.83 -2022-08-19 09:13:31 STATE: test-node.js passed: details body length 1 -2022-08-19 09:13:31 STATE: test-node.js passed: details body 0.92 17 6 -2022-08-19 09:13:31 STATE: test-node.js passed: details hand length 1 -2022-08-19 09:13:31 STATE: test-node.js passed: details hand 0.51 0.73 point -2022-08-19 09:13:31 STATE: test-node.js passed: details hand arrays 21 5 7 -2022-08-19 09:13:31 STATE: test-node.js passed: details gesture length 7 -2022-08-19 09:13:31 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-08-19 09:13:31 STATE: test-node.js passed: details object length 1 -2022-08-19 09:13:31 STATE: test-node.js passed: details object 0.72 person -2022-08-19 09:13:32 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-08-19 09:13:32 STATE: test-node.js event: image -2022-08-19 09:13:32 STATE: test-node.js event: detect -2022-08-19 09:13:32 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-08-19 09:13:32 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-08-19 09:13:32 STATE: test-node.js event: image -2022-08-19 09:13:32 STATE: test-node.js event: detect -2022-08-19 09:13:32 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-08-19 09:13:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:33 STATE: test-node.js event: image -2022-08-19 09:13:33 STATE: test-node.js event: detect -2022-08-19 09:13:33 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-08-19 09:13:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:33 STATE: test-node.js event: image -2022-08-19 09:13:33 STATE: test-node.js event: detect -2022-08-19 09:13:33 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-08-19 09:13:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-08-19 09:13:33 STATE: test-node.js event: image -2022-08-19 09:13:34 STATE: test-node.js event: detect -2022-08-19 09:13:34 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-08-19 09:13:34 INFO:  test-node.js test default -2022-08-19 09:13:34 STATE: test-node.js start async -2022-08-19 09:13:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:34 STATE: test-node.js event: image -2022-08-19 09:13:34 STATE: test-node.js event: detect -2022-08-19 09:13:34 STATE: test-node.js passed: detect: samples/in/ai-body.jpg async -2022-08-19 09:13:34 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:34 DATA:  test-node.js result: performance: load: null total: 212 -2022-08-19 09:13:34 STATE: test-node.js passed: default result face match 1 female 0.97 -2022-08-19 09:13:34 INFO:  test-node.js test sync -2022-08-19 09:13:34 STATE: test-node.js start sync -2022-08-19 09:13:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:34 STATE: test-node.js event: image -2022-08-19 09:13:34 STATE: test-node.js event: detect -2022-08-19 09:13:34 STATE: test-node.js passed: detect: samples/in/ai-body.jpg sync -2022-08-19 09:13:34 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:34 DATA:  test-node.js result: performance: load: null total: 217 -2022-08-19 09:13:34 STATE: test-node.js passed: default sync 1 female 0.97 -2022-08-19 09:13:34 INFO:  test-node.js test: image process -2022-08-19 09:13:34 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:34 STATE: test-node.js passed: image input null [1,256,256,3] -2022-08-19 09:13:34 INFO:  test-node.js test: image null -2022-08-19 09:13:34 STATE: test-node.js passed: invalid input could not convert input to tensor -2022-08-19 09:13:34 INFO:  test-node.js test face similarity -2022-08-19 09:13:34 STATE: test-node.js start face similarity -2022-08-19 09:13:34 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:34 STATE: test-node.js event: image -2022-08-19 09:13:35 STATE: test-node.js event: detect -2022-08-19 09:13:35 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face similarity -2022-08-19 09:13:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-08-19 09:13:35 DATA:  test-node.js result: performance: load: null total: 214 -2022-08-19 09:13:35 STATE: test-node.js start face similarity -2022-08-19 09:13:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:35 STATE: test-node.js event: image -2022-08-19 09:13:35 STATE: test-node.js event: detect -2022-08-19 09:13:35 STATE: test-node.js passed: detect: samples/in/ai-body.jpg face similarity -2022-08-19 09:13:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:35 DATA:  test-node.js result: performance: load: null total: 229 -2022-08-19 09:13:35 STATE: test-node.js start face similarity -2022-08-19 09:13:35 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-19 09:13:35 STATE: test-node.js event: image -2022-08-19 09:13:35 STATE: test-node.js event: detect -2022-08-19 09:13:35 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-08-19 09:13:35 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-08-19 09:13:35 DATA:  test-node.js result: performance: load: null total: 191 -2022-08-19 09:13:35 STATE: test-node.js passed: face descriptor -2022-08-19 09:13:35 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} -2022-08-19 09:13:35 INFO:  test-node.js test object -2022-08-19 09:13:35 STATE: test-node.js start object -2022-08-19 09:13:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:35 STATE: test-node.js event: image -2022-08-19 09:13:36 STATE: test-node.js event: detect -2022-08-19 09:13:36 STATE: test-node.js passed: detect: samples/in/ai-body.jpg object -2022-08-19 09:13:36 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:36 DATA:  test-node.js result: performance: load: null total: 205 -2022-08-19 09:13:36 STATE: test-node.js passed: centernet -2022-08-19 09:13:36 STATE: test-node.js start object -2022-08-19 09:13:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:37 STATE: test-node.js event: image -2022-08-19 09:13:37 STATE: test-node.js event: detect -2022-08-19 09:13:37 STATE: test-node.js passed: detect: samples/in/ai-body.jpg object -2022-08-19 09:13:37 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:37 DATA:  test-node.js result: performance: load: null total: 223 -2022-08-19 09:13:37 STATE: test-node.js passed: nanodet -2022-08-19 09:13:37 INFO:  test-node.js test sensitive -2022-08-19 09:13:37 STATE: test-node.js start sensitive -2022-08-19 09:13:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:37 STATE: test-node.js event: image -2022-08-19 09:13:37 STATE: test-node.js event: detect -2022-08-19 09:13:37 STATE: test-node.js passed: detect: samples/in/ai-body.jpg sensitive -2022-08-19 09:13:37 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:13:37 DATA:  test-node.js result: performance: load: null total: 171 -2022-08-19 09:13:37 STATE: test-node.js passed: sensitive result match -2022-08-19 09:13:37 STATE: test-node.js passed: sensitive face result match -2022-08-19 09:13:37 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-08-19 09:13:37 STATE: test-node.js passed: sensitive body result match -2022-08-19 09:13:37 STATE: test-node.js passed: sensitive hand result match -2022-08-19 09:13:37 INFO:  test-node.js test body -2022-08-19 09:13:37 STATE: test-node.js start blazepose -2022-08-19 09:13:39 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:39 STATE: test-node.js event: image -2022-08-19 09:13:39 STATE: test-node.js event: detect -2022-08-19 09:13:39 STATE: test-node.js passed: detect: samples/in/ai-body.jpg blazepose -2022-08-19 09:13:39 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-08-19 09:13:39 DATA:  test-node.js result: performance: load: null total: 268 -2022-08-19 09:13:39 STATE: test-node.js passed: blazepose -2022-08-19 09:13:39 STATE: test-node.js start efficientpose -2022-08-19 09:13:40 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:40 STATE: test-node.js event: image -2022-08-19 09:13:41 STATE: test-node.js event: detect -2022-08-19 09:13:41 STATE: test-node.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-08-19 09:13:41 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-08-19 09:13:41 DATA:  test-node.js result: performance: load: null total: 274 -2022-08-19 09:13:41 STATE: test-node.js passed: efficientpose -2022-08-19 09:13:41 STATE: test-node.js start posenet -2022-08-19 09:13:41 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:41 STATE: test-node.js event: image -2022-08-19 09:13:42 STATE: test-node.js event: detect -2022-08-19 09:13:42 STATE: test-node.js passed: detect: samples/in/ai-body.jpg posenet -2022-08-19 09:13:42 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-08-19 09:13:42 DATA:  test-node.js result: performance: load: null total: 194 -2022-08-19 09:13:42 STATE: test-node.js passed: posenet -2022-08-19 09:13:42 STATE: test-node.js start movenet -2022-08-19 09:13:42 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:42 STATE: test-node.js event: image -2022-08-19 09:13:42 STATE: test-node.js event: detect -2022-08-19 09:13:42 STATE: test-node.js passed: detect: samples/in/ai-body.jpg movenet -2022-08-19 09:13:42 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:13:42 DATA:  test-node.js result: performance: load: null total: 188 -2022-08-19 09:13:42 STATE: test-node.js passed: movenet -2022-08-19 09:13:42 INFO:  test-node.js test face matching -2022-08-19 09:13:42 STATE: test-node.js passed: face database 40 -2022-08-19 09:13:42 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.7827852615252829}} {"second":{"index":4,"similarity":0.5002052633015844}} {"third":{"index":4,"similarity":0.5401587887998899}} -2022-08-19 09:13:42 INFO:  test-node.js test face similarity alternative -2022-08-19 09:13:42 STATE: test-node.js start face embeddings -2022-08-19 09:13:42 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:42 STATE: test-node.js event: image -2022-08-19 09:13:43 STATE: test-node.js event: detect -2022-08-19 09:13:43 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-19 09:13:43 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:13:43 DATA:  test-node.js result: performance: load: null total: 188 -2022-08-19 09:13:43 STATE: test-node.js passed: mobilefacenet {"embedding":192} -2022-08-19 09:13:43 STATE: test-node.js start face embeddings -2022-08-19 09:13:43 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:43 STATE: test-node.js event: image -2022-08-19 09:13:43 STATE: test-node.js event: detect -2022-08-19 09:13:43 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-19 09:13:43 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:13:43 DATA:  test-node.js result: performance: load: null total: 213 -2022-08-19 09:13:43 STATE: test-node.js passed: insightface {"embedding":512} -2022-08-19 09:13:43 INFO:  test-node.js test face attention -2022-08-19 09:13:43 STATE: test-node.js start face attention -2022-08-19 09:13:44 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:44 STATE: test-node.js event: image -2022-08-19 09:13:44 STATE: test-node.js event: detect -2022-08-19 09:13:44 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face attention -2022-08-19 09:13:44 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:13:44 DATA:  test-node.js result: performance: load: null total: 180 -2022-08-19 09:13:44 STATE: test-node.js passed: face attention -2022-08-19 09:13:44 INFO:  test-node.js test detectors -2022-08-19 09:13:44 STATE: test-node.js start detectors -2022-08-19 09:13:44 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:44 STATE: test-node.js event: image -2022-08-19 09:13:44 STATE: test-node.js event: detect -2022-08-19 09:13:44 STATE: test-node.js passed: detect: samples/in/ai-body.jpg detectors -2022-08-19 09:13:44 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:13:44 DATA:  test-node.js result: performance: load: null total: 89 -2022-08-19 09:13:44 STATE: test-node.js passed: detector result face match -2022-08-19 09:13:44 STATE: test-node.js passed: detector result hand match -2022-08-19 09:13:44 INFO:  test-node.js test: multi-instance -2022-08-19 09:13:44 STATE: test-node.js start multi instance -2022-08-19 09:13:44 STATE: test-node.js event: image -2022-08-19 09:13:44 STATE: test-node.js event: detect -2022-08-19 09:13:44 STATE: test-node.js passed: detect: random multi instance -2022-08-19 09:13:44 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} -2022-08-19 09:13:44 DATA:  test-node.js result: performance: load: null total: 85 -2022-08-19 09:13:44 INFO:  test-node.js test: first instance -2022-08-19 09:13:44 STATE: test-node.js start multi instance -2022-08-19 09:13:44 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-19 09:13:44 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-19 09:13:44 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:13:44 DATA:  test-node.js result: performance: load: null total: 89 -2022-08-19 09:13:44 INFO:  test-node.js test: second instance -2022-08-19 09:13:44 STATE: test-node.js start multi instance -2022-08-19 09:13:44 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-19 09:13:45 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-19 09:13:45 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:13:45 DATA:  test-node.js result: performance: load: null total: 82 -2022-08-19 09:13:45 INFO:  test-node.js test: concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js start concurrent -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-19 09:13:45 STATE: test-node.js event: image -2022-08-19 09:13:45 STATE: test-node.js event: image -2022-08-19 09:13:45 STATE: test-node.js event: image -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 992 -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 992 -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 993 -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 993 -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 993 -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 993 -2022-08-19 09:13:46 STATE: test-node.js event: detect -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 719 -2022-08-19 09:13:46 STATE: test-node.js event: detect -2022-08-19 09:13:46 STATE: test-node.js event: detect -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 719 -2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 719 -2022-08-19 09:13:46 INFO:  test-node.js test: monkey-patch -2022-08-19 09:13:46 STATE: test-node.js event: image -2022-08-19 09:13:46 STATE: test-node.js event: detect -2022-08-19 09:13:46 STATE: test-node.js passed: monkey patch -2022-08-19 09:13:46 STATE: test-node.js passed: segmentation [65536] -2022-08-19 09:13:46 STATE: test-node.js passeed: equal usage -2022-08-19 09:13:46 INFO:  test-node.js test: input compare -2022-08-19 09:13:46 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:46 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-19 09:13:46 STATE: test-node.js passed: image compare 0 23.275441687091504 -2022-08-19 09:13:46 INFO:  test-node.js events: {"image":29,"detect":29,"warmup":2} -2022-08-19 09:13:46 INFO:  test-node.js tensors 4105 -2022-08-19 09:13:46 INFO:  test-node.js test complete: 16274 ms -2022-08-19 09:13:46 INFO:  -2022-08-19 09:13:46 INFO:  test-node-gpu.js start -2022-08-19 09:13:48 INFO:  test-node-gpu.js test: configuration validation -2022-08-19 09:13:48 STATE: test-node-gpu.js passed: configuration default validation [] -2022-08-19 09:13:48 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-08-19 09:13:48 INFO:  test-node-gpu.js test: model load -2022-08-19 09:13:48 STATE: test-node-gpu.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] -2022-08-19 09:13:48 INFO:  test-node-gpu.js test: warmup -2022-08-19 09:13:48 STATE: test-node-gpu.js passed: create human -2022-08-19 09:13:48 INFO:  test-node-gpu.js human version: 2.9.3 -2022-08-19 09:13:48 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v18.1.0 -2022-08-19 09:13:48 INFO:  test-node-gpu.js tfjs version: 3.19.0 -2022-08-19 09:13:48 INFO:  test-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.7.3-dev20220521","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} -2022-08-19 09:13:48 STATE: test-node-gpu.js passed: set backend: tensorflow -2022-08-19 09:13:48 STATE: test-node-gpu.js tensors 1921 -2022-08-19 09:13:48 STATE: test-node-gpu.js passed: load models -2022-08-19 09:13:48 STATE: test-node-gpu.js result: defined models: 23 loaded models: 12 -2022-08-19 09:13:48 STATE: test-node-gpu.js passed: warmup: none default -2022-08-19 09:13:48 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-08-19 09:13:48 DATA:  test-node-gpu.js result: performance: load: null total: null -2022-08-19 09:13:48 STATE: test-node-gpu.js passed: warmup none result match -2022-08-19 09:13:49 STATE: test-node-gpu.js event: image -2022-08-19 09:13:54 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:54 STATE: test-node-gpu.js event: warmup -2022-08-19 09:13:54 STATE: test-node-gpu.js passed: warmup: face default -2022-08-19 09:13:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-08-19 09:13:54 DATA:  test-node-gpu.js result: performance: load: null total: 5301 -2022-08-19 09:13:54 STATE: test-node-gpu.js passed: warmup face result match -2022-08-19 09:13:54 STATE: test-node-gpu.js event: image -2022-08-19 09:13:54 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:54 STATE: test-node-gpu.js event: warmup -2022-08-19 09:13:54 STATE: test-node-gpu.js passed: warmup: body default -2022-08-19 09:13:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:54 DATA:  test-node-gpu.js result: performance: load: null total: 150 -2022-08-19 09:13:54 STATE: test-node-gpu.js passed: warmup body result match -2022-08-19 09:13:54 STATE: test-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-08-19 09:13:54 INFO:  test-node-gpu.js test: details verification -2022-08-19 09:13:54 STATE: test-node-gpu.js start default -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:13:55 STATE: test-node-gpu.js event: image -2022-08-19 09:13:55 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-08-19 09:13:55 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:55 DATA:  test-node-gpu.js result: performance: load: null total: 134 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face length 1 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face score 1 0.93 1 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face liveness 0.83 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details body length 1 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details body 0.92 17 6 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details hand length 1 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details gesture length 7 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details object length 1 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details object 0.72 person -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-08-19 09:13:55 STATE: test-node-gpu.js event: image -2022-08-19 09:13:55 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-08-19 09:13:55 STATE: test-node-gpu.js event: image -2022-08-19 09:13:55 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:55 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-08-19 09:13:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:13:56 STATE: test-node-gpu.js event: image -2022-08-19 09:13:56 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:56 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-08-19 09:13:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} -2022-08-19 09:13:56 STATE: test-node-gpu.js event: image -2022-08-19 09:13:56 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:56 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-08-19 09:13:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-08-19 09:13:56 STATE: test-node-gpu.js event: image -2022-08-19 09:13:56 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:56 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-08-19 09:13:56 INFO:  test-node-gpu.js test default -2022-08-19 09:13:56 STATE: test-node-gpu.js start async -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:13:57 STATE: test-node-gpu.js event: image -2022-08-19 09:13:57 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg async -2022-08-19 09:13:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:57 DATA:  test-node-gpu.js result: performance: load: null total: 148 -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 -2022-08-19 09:13:57 INFO:  test-node-gpu.js test sync -2022-08-19 09:13:57 STATE: test-node-gpu.js start sync -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:13:57 STATE: test-node-gpu.js event: image -2022-08-19 09:13:57 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg sync -2022-08-19 09:13:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:57 DATA:  test-node-gpu.js result: performance: load: null total: 142 -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: default sync 1 female 0.97 -2022-08-19 09:13:57 INFO:  test-node-gpu.js test: image process -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2022-08-19 09:13:57 INFO:  test-node-gpu.js test: image null -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor -2022-08-19 09:13:57 INFO:  test-node-gpu.js test face similarity -2022-08-19 09:13:57 STATE: test-node-gpu.js start face similarity -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:13:57 STATE: test-node-gpu.js event: image -2022-08-19 09:13:57 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity -2022-08-19 09:13:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-08-19 09:13:57 DATA:  test-node-gpu.js result: performance: load: null total: 163 -2022-08-19 09:13:57 STATE: test-node-gpu.js start face similarity -2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:13:57 STATE: test-node-gpu.js event: image -2022-08-19 09:13:58 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity -2022-08-19 09:13:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:58 DATA:  test-node-gpu.js result: performance: load: null total: 171 -2022-08-19 09:13:58 STATE: test-node-gpu.js start face similarity -2022-08-19 09:13:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-19 09:13:58 STATE: test-node-gpu.js event: image -2022-08-19 09:13:58 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-08-19 09:13:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-08-19 09:13:58 DATA:  test-node-gpu.js result: performance: load: null total: 168 -2022-08-19 09:13:58 STATE: test-node-gpu.js passed: face descriptor -2022-08-19 09:13:58 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} -2022-08-19 09:13:58 INFO:  test-node-gpu.js test object -2022-08-19 09:13:58 STATE: test-node-gpu.js start object -2022-08-19 09:13:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:13:58 STATE: test-node-gpu.js event: image -2022-08-19 09:13:58 STATE: test-node-gpu.js event: detect -2022-08-19 09:13:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2022-08-19 09:13:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:13:58 DATA:  test-node-gpu.js result: performance: load: null total: 187 -2022-08-19 09:13:58 STATE: test-node-gpu.js passed: centernet -2022-08-19 09:13:58 STATE: test-node-gpu.js start object -2022-08-19 09:13:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:13:59 STATE: test-node-gpu.js event: image -2022-08-19 09:14:00 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2022-08-19 09:14:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:14:00 DATA:  test-node-gpu.js result: performance: load: null total: 469 -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: nanodet -2022-08-19 09:14:00 INFO:  test-node-gpu.js test sensitive -2022-08-19 09:14:00 STATE: test-node-gpu.js start sensitive -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:00 STATE: test-node-gpu.js event: image -2022-08-19 09:14:00 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive -2022-08-19 09:14:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:00 DATA:  test-node-gpu.js result: performance: load: null total: 125 -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive result match -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive face result match -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive body result match -2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive hand result match -2022-08-19 09:14:00 INFO:  test-node-gpu.js test body -2022-08-19 09:14:00 STATE: test-node-gpu.js start blazepose -2022-08-19 09:14:01 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:01 STATE: test-node-gpu.js event: image -2022-08-19 09:14:02 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:02 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose -2022-08-19 09:14:02 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-08-19 09:14:02 DATA:  test-node-gpu.js result: performance: load: null total: 253 -2022-08-19 09:14:02 STATE: test-node-gpu.js passed: blazepose -2022-08-19 09:14:02 STATE: test-node-gpu.js start efficientpose -2022-08-19 09:14:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:02 STATE: test-node-gpu.js event: image -2022-08-19 09:14:03 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:03 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-08-19 09:14:03 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-08-19 09:14:03 DATA:  test-node-gpu.js result: performance: load: null total: 841 -2022-08-19 09:14:03 STATE: test-node-gpu.js passed: efficientpose -2022-08-19 09:14:03 STATE: test-node-gpu.js start posenet -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:04 STATE: test-node-gpu.js event: image -2022-08-19 09:14:04 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet -2022-08-19 09:14:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-08-19 09:14:04 DATA:  test-node-gpu.js result: performance: load: null total: 134 -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: posenet -2022-08-19 09:14:04 STATE: test-node-gpu.js start movenet -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:04 STATE: test-node-gpu.js event: image -2022-08-19 09:14:04 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet -2022-08-19 09:14:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:04 DATA:  test-node-gpu.js result: performance: load: null total: 107 -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: movenet -2022-08-19 09:14:04 INFO:  test-node-gpu.js test face matching -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: face database 40 -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7828184453007331}} {"second":{"index":4,"similarity":0.5001334216773398}} {"third":{"index":4,"similarity":0.5403054967489764}} -2022-08-19 09:14:04 INFO:  test-node-gpu.js test face similarity alternative -2022-08-19 09:14:04 STATE: test-node-gpu.js start face embeddings -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:14:04 STATE: test-node-gpu.js event: image -2022-08-19 09:14:04 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-19 09:14:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:04 DATA:  test-node-gpu.js result: performance: load: null total: 155 -2022-08-19 09:14:04 STATE: test-node-gpu.js passed: mobilefacenet {"embedding":192} -2022-08-19 09:14:04 STATE: test-node-gpu.js start face embeddings -2022-08-19 09:14:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:14:05 STATE: test-node-gpu.js event: image -2022-08-19 09:14:05 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:05 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-19 09:14:05 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:05 DATA:  test-node-gpu.js result: performance: load: null total: 181 -2022-08-19 09:14:05 STATE: test-node-gpu.js passed: insightface {"embedding":512} -2022-08-19 09:14:05 INFO:  test-node-gpu.js test face attention -2022-08-19 09:14:05 STATE: test-node-gpu.js start face attention -2022-08-19 09:14:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:14:05 STATE: test-node-gpu.js event: image -2022-08-19 09:14:06 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face attention -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 224 -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: face attention -2022-08-19 09:14:06 INFO:  test-node-gpu.js test detectors -2022-08-19 09:14:06 STATE: test-node-gpu.js start detectors -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:06 STATE: test-node-gpu.js event: image -2022-08-19 09:14:06 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg detectors -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 59 -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detector result face match -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detector result hand match -2022-08-19 09:14:06 INFO:  test-node-gpu.js test: multi-instance -2022-08-19 09:14:06 STATE: test-node-gpu.js start multi instance -2022-08-19 09:14:06 STATE: test-node-gpu.js event: image -2022-08-19 09:14:06 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: random multi instance -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 53 -2022-08-19 09:14:06 INFO:  test-node-gpu.js test: first instance -2022-08-19 09:14:06 STATE: test-node-gpu.js start multi instance -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 45 -2022-08-19 09:14:06 INFO:  test-node-gpu.js test: second instance -2022-08-19 09:14:06 STATE: test-node-gpu.js start multi instance -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 49 -2022-08-19 09:14:06 INFO:  test-node-gpu.js test: concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-19 09:14:07 STATE: test-node-gpu.js event: image -2022-08-19 09:14:07 STATE: test-node-gpu.js event: image -2022-08-19 09:14:07 STATE: test-node-gpu.js event: image -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 -2022-08-19 09:14:07 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 427 -2022-08-19 09:14:07 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:07 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 427 -2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 427 -2022-08-19 09:14:07 INFO:  test-node-gpu.js test: monkey-patch -2022-08-19 09:14:07 STATE: test-node-gpu.js event: image -2022-08-19 09:14:08 STATE: test-node-gpu.js event: detect -2022-08-19 09:14:08 STATE: test-node-gpu.js passed: monkey patch -2022-08-19 09:14:08 STATE: test-node-gpu.js passed: segmentation [65536] -2022-08-19 09:14:08 STATE: test-node-gpu.js passeed: equal usage -2022-08-19 09:14:08 INFO:  test-node-gpu.js test: input compare -2022-08-19 09:14:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-19 09:14:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-19 09:14:08 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 -2022-08-19 09:14:08 INFO:  test-node-gpu.js events: {"image":29,"detect":29,"warmup":2} -2022-08-19 09:14:08 INFO:  test-node-gpu.js tensors 4105 -2022-08-19 09:14:08 INFO:  test-node-gpu.js test complete: 19548 ms -2022-08-19 09:14:09 INFO:  -2022-08-19 09:14:09 INFO:  test-node-wasm.js start -2022-08-19 09:14:11 DATA:  test-node-wasm.js stdout: 2022-08-19 09:14:11 INFO:  { supported: true, backend: true, simd: true, multithread: false } -2022-08-19 09:14:11 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2022-08-19 09:14:11 INFO:  test-node-wasm.js test: configuration validation -2022-08-19 09:14:11 STATE: test-node-wasm.js passed: configuration default validation [] -2022-08-19 09:14:11 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-08-19 09:14:11 INFO:  test-node-wasm.js test: model load -2022-08-19 09:14:12 STATE: test-node-wasm.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"https://vladmandic.github.io/human/models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"https://vladmandic.github.io/human/models/emotion.json"},{"name":"facedetect","loaded":true,"url":"https://vladmandic.github.io/human/models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"https://vladmandic.github.io/human/models/iris.json"},{"name":"facemesh","loaded":true,"url":"https://vladmandic.github.io/human/models/facemesh.json"},{"name":"faceres","loaded":true,"url":"https://vladmandic.github.io/human/models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"https://vladmandic.github.io/human/models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"https://vladmandic.github.io/human/models/handtrack.json"},{"name":"liveness","loaded":true,"url":"https://vladmandic.github.io/human/models/liveness.json"},{"name":"movenet","loaded":true,"url":"https://vladmandic.github.io/human/models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"https://vladmandic.github.io/human/models/selfie.json"},{"name":"antispoof","loaded":true,"url":"https://vladmandic.github.io/human/models/antispoof.json"}] -2022-08-19 09:14:12 INFO:  test-node-wasm.js test: warmup -2022-08-19 09:14:12 STATE: test-node-wasm.js passed: create human -2022-08-19 09:14:12 INFO:  test-node-wasm.js human version: 2.9.3 -2022-08-19 09:14:12 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v18.1.0 -2022-08-19 09:14:12 INFO:  test-node-wasm.js tfjs version: 3.19.0 -2022-08-19 09:14:12 INFO:  test-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","wasm"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":126} -2022-08-19 09:14:12 STATE: test-node-wasm.js passed: set backend: wasm -2022-08-19 09:14:12 STATE: test-node-wasm.js tensors 1921 -2022-08-19 09:14:12 STATE: test-node-wasm.js passed: load models -2022-08-19 09:14:12 STATE: test-node-wasm.js result: defined models: 23 loaded models: 12 -2022-08-19 09:14:12 STATE: test-node-wasm.js passed: warmup: none default -2022-08-19 09:14:12 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-08-19 09:14:12 DATA:  test-node-wasm.js result: performance: load: null total: null -2022-08-19 09:14:12 STATE: test-node-wasm.js passed: warmup none result match -2022-08-19 09:14:12 STATE: test-node-wasm.js event: image -2022-08-19 09:14:13 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:13 STATE: test-node-wasm.js event: warmup -2022-08-19 09:14:13 STATE: test-node-wasm.js passed: warmup: face default -2022-08-19 09:14:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-08-19 09:14:13 DATA:  test-node-wasm.js result: performance: load: null total: 502 -2022-08-19 09:14:13 STATE: test-node-wasm.js passed: warmup face result match -2022-08-19 09:14:13 STATE: test-node-wasm.js event: image -2022-08-19 09:14:13 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:13 STATE: test-node-wasm.js event: warmup -2022-08-19 09:14:13 STATE: test-node-wasm.js passed: warmup: body default -2022-08-19 09:14:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:14:13 DATA:  test-node-wasm.js result: performance: load: null total: 357 -2022-08-19 09:14:13 STATE: test-node-wasm.js passed: warmup body result match -2022-08-19 09:14:13 STATE: test-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-08-19 09:14:13 INFO:  test-node-wasm.js test: details verification -2022-08-19 09:14:13 STATE: test-node-wasm.js start default -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:14 STATE: test-node-wasm.js event: image -2022-08-19 09:14:14 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-08-19 09:14:14 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:14:14 DATA:  test-node-wasm.js result: performance: load: null total: 336 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face length 1 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face score 1 0.93 1 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face liveness 0.83 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details body length 1 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details body 0.92 17 6 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details hand length 1 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details gesture length 7 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details object length 1 -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details object 0.72 person -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2022-08-19 09:14:14 STATE: test-node-wasm.js event: image -2022-08-19 09:14:14 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:14 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-08-19 09:14:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2022-08-19 09:14:15 STATE: test-node-wasm.js event: image -2022-08-19 09:14:15 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:15 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-08-19 09:14:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:15 STATE: test-node-wasm.js event: image -2022-08-19 09:14:16 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:16 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-08-19 09:14:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:16 STATE: test-node-wasm.js event: image -2022-08-19 09:14:16 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:16 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-08-19 09:14:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-08-19 09:14:16 STATE: test-node-wasm.js event: image -2022-08-19 09:14:17 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:17 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-08-19 09:14:17 INFO:  test-node-wasm.js test default -2022-08-19 09:14:17 STATE: test-node-wasm.js start async -2022-08-19 09:14:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:17 STATE: test-node-wasm.js event: image -2022-08-19 09:14:17 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:17 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg async -2022-08-19 09:14:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:14:17 DATA:  test-node-wasm.js result: performance: load: null total: 356 -2022-08-19 09:14:17 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 -2022-08-19 09:14:17 INFO:  test-node-wasm.js test sync -2022-08-19 09:14:17 STATE: test-node-wasm.js start sync -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:18 STATE: test-node-wasm.js event: image -2022-08-19 09:14:18 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg sync -2022-08-19 09:14:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:14:18 DATA:  test-node-wasm.js result: performance: load: null total: 323 -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: default sync 1 female 0.97 -2022-08-19 09:14:18 INFO:  test-node-wasm.js test: image process -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2022-08-19 09:14:18 INFO:  test-node-wasm.js test: image null -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor -2022-08-19 09:14:18 INFO:  test-node-wasm.js test face similarity -2022-08-19 09:14:18 STATE: test-node-wasm.js start face similarity -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:18 STATE: test-node-wasm.js event: image -2022-08-19 09:14:18 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity -2022-08-19 09:14:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-08-19 09:14:18 DATA:  test-node-wasm.js result: performance: load: null total: 310 -2022-08-19 09:14:18 STATE: test-node-wasm.js start face similarity -2022-08-19 09:14:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:18 STATE: test-node-wasm.js event: image -2022-08-19 09:14:19 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity -2022-08-19 09:14:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:14:19 DATA:  test-node-wasm.js result: performance: load: null total: 360 -2022-08-19 09:14:19 STATE: test-node-wasm.js start face similarity -2022-08-19 09:14:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-19 09:14:19 STATE: test-node-wasm.js event: image -2022-08-19 09:14:19 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-08-19 09:14:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-08-19 09:14:19 DATA:  test-node-wasm.js result: performance: load: null total: 337 -2022-08-19 09:14:19 STATE: test-node-wasm.js passed: face descriptor -2022-08-19 09:14:19 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} -2022-08-19 09:14:19 INFO:  test-node-wasm.js test object -2022-08-19 09:14:19 STATE: test-node-wasm.js start object -2022-08-19 09:14:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:19 STATE: test-node-wasm.js event: image -2022-08-19 09:14:20 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:20 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2022-08-19 09:14:20 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-19 09:14:20 DATA:  test-node-wasm.js result: performance: load: null total: 371 -2022-08-19 09:14:20 STATE: test-node-wasm.js passed: centernet -2022-08-19 09:14:20 STATE: test-node-wasm.js start object -2022-08-19 09:14:20 WARN:  test-node-wasm.js missing kernel ops {"title":"object","model":"nanodet","url":"https://vladmandic.github.io/human-models/models/nanodet.json","missing":["sparsetodense"],"backkend":"wasm"} -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:21 STATE: test-node-wasm.js event: image -2022-08-19 09:14:21 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2022-08-19 09:14:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:21 DATA:  test-node-wasm.js result: performance: load: null total: 266 -2022-08-19 09:14:21 ERROR: test-node-wasm.js failed: nanodet [] -2022-08-19 09:14:21 INFO:  test-node-wasm.js test sensitive -2022-08-19 09:14:21 STATE: test-node-wasm.js start sensitive -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:21 STATE: test-node-wasm.js event: image -2022-08-19 09:14:21 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive -2022-08-19 09:14:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:21 DATA:  test-node-wasm.js result: performance: load: null total: 288 -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive result match -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive face result match -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive body result match -2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive hand result match -2022-08-19 09:14:21 INFO:  test-node-wasm.js test body -2022-08-19 09:14:21 STATE: test-node-wasm.js start blazepose -2022-08-19 09:14:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:23 STATE: test-node-wasm.js event: image -2022-08-19 09:14:23 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose -2022-08-19 09:14:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-08-19 09:14:23 DATA:  test-node-wasm.js result: performance: load: null total: 410 -2022-08-19 09:14:23 STATE: test-node-wasm.js passed: blazepose -2022-08-19 09:14:23 STATE: test-node-wasm.js start efficientpose -2022-08-19 09:14:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:24 STATE: test-node-wasm.js event: image -2022-08-19 09:14:25 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:25 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-08-19 09:14:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-08-19 09:14:25 DATA:  test-node-wasm.js result: performance: load: null total: 643 -2022-08-19 09:14:25 STATE: test-node-wasm.js passed: efficientpose -2022-08-19 09:14:25 STATE: test-node-wasm.js start posenet -2022-08-19 09:14:25 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:25 STATE: test-node-wasm.js event: image -2022-08-19 09:14:25 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:25 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet -2022-08-19 09:14:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-08-19 09:14:25 DATA:  test-node-wasm.js result: performance: load: null total: 291 -2022-08-19 09:14:25 STATE: test-node-wasm.js passed: posenet -2022-08-19 09:14:25 STATE: test-node-wasm.js start movenet -2022-08-19 09:14:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:26 STATE: test-node-wasm.js event: image -2022-08-19 09:14:26 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet -2022-08-19 09:14:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:26 DATA:  test-node-wasm.js result: performance: load: null total: 236 -2022-08-19 09:14:26 STATE: test-node-wasm.js passed: movenet -2022-08-19 09:14:26 INFO:  test-node-wasm.js test face matching -2022-08-19 09:14:26 STATE: test-node-wasm.js passed: face database 40 -2022-08-19 09:14:26 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} -2022-08-19 09:14:26 INFO:  test-node-wasm.js test face similarity alternative -2022-08-19 09:14:26 STATE: test-node-wasm.js start face embeddings -2022-08-19 09:14:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:26 STATE: test-node-wasm.js event: image -2022-08-19 09:14:27 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-19 09:14:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:27 DATA:  test-node-wasm.js result: performance: load: null total: 245 -2022-08-19 09:14:27 STATE: test-node-wasm.js passed: mobilefacenet {"embedding":192} -2022-08-19 09:14:27 STATE: test-node-wasm.js start face embeddings -2022-08-19 09:14:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:27 STATE: test-node-wasm.js event: image -2022-08-19 09:14:28 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-19 09:14:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:28 DATA:  test-node-wasm.js result: performance: load: null total: 291 -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: insightface {"embedding":512} -2022-08-19 09:14:28 INFO:  test-node-wasm.js test face attention -2022-08-19 09:14:28 STATE: test-node-wasm.js start face attention -2022-08-19 09:14:28 WARN:  test-node-wasm.js missing kernel ops {"title":"face attention","model":"facemesh","url":"https://vladmandic.github.io/human-models/models/facemesh-attention.json","missing":["atan2"],"backkend":"wasm"} -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:28 STATE: test-node-wasm.js event: image -2022-08-19 09:14:28 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face attention -2022-08-19 09:14:28 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 1 gesture: 2 object: 0 person: 0 {} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:28 DATA:  test-node-wasm.js result: performance: load: null total: 124 -2022-08-19 09:14:28 ERROR: test-node-wasm.js failed: face attention {"annotations":0} -2022-08-19 09:14:28 INFO:  test-node-wasm.js test detectors -2022-08-19 09:14:28 STATE: test-node-wasm.js start detectors -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:28 STATE: test-node-wasm.js event: image -2022-08-19 09:14:28 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg detectors -2022-08-19 09:14:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:28 DATA:  test-node-wasm.js result: performance: load: null total: 130 -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detector result face match -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detector result hand match -2022-08-19 09:14:28 INFO:  test-node-wasm.js test: multi-instance -2022-08-19 09:14:28 STATE: test-node-wasm.js start multi instance -2022-08-19 09:14:28 STATE: test-node-wasm.js event: image -2022-08-19 09:14:28 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detect: random multi instance -2022-08-19 09:14:28 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} -2022-08-19 09:14:28 DATA:  test-node-wasm.js result: performance: load: null total: 109 -2022-08-19 09:14:28 INFO:  test-node-wasm.js test: first instance -2022-08-19 09:14:28 STATE: test-node-wasm.js start multi instance -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-19 09:14:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:29 DATA:  test-node-wasm.js result: performance: load: null total: 112 -2022-08-19 09:14:29 INFO:  test-node-wasm.js test: second instance -2022-08-19 09:14:29 STATE: test-node-wasm.js start multi instance -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-19 09:14:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:29 DATA:  test-node-wasm.js result: performance: load: null total: 113 -2022-08-19 09:14:29 INFO:  test-node-wasm.js test: concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-19 09:14:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-19 09:14:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-19 09:14:30 STATE: test-node-wasm.js event: image -2022-08-19 09:14:30 STATE: test-node-wasm.js event: image -2022-08-19 09:14:30 STATE: test-node-wasm.js event: image -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1334 -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1334 -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1335 -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1335 -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1335 -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1335 -2022-08-19 09:14:31 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1014 -2022-08-19 09:14:31 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:31 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1014 -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1014 -2022-08-19 09:14:31 INFO:  test-node-wasm.js test: monkey-patch -2022-08-19 09:14:31 STATE: test-node-wasm.js event: image -2022-08-19 09:14:31 STATE: test-node-wasm.js event: detect -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: monkey patch -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: segmentation [65536] -2022-08-19 09:14:31 STATE: test-node-wasm.js passeed: equal usage -2022-08-19 09:14:31 INFO:  test-node-wasm.js test: input compare -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-19 09:14:31 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 -2022-08-19 09:14:31 INFO:  test-node-wasm.js events: {"image":29,"detect":29,"warmup":2} -2022-08-19 09:14:31 INFO:  test-node-wasm.js tensors 4107 -2022-08-19 09:14:31 INFO:  test-node-wasm.js test complete: 20364 ms -2022-08-19 09:14:31 STATE: all tests complete -2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-fetch.js","passed":1,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"test-node.js","passed":125,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"test-node-gpu.js","passed":125,"failed":0} -2022-08-19 09:14:31 INFO:  status {"test":"test-node-wasm.js","passed":124,"failed":2} -2022-08-19 09:14:31 INFO:  failures {"count":2} -2022-08-19 09:14:31 WARN:  failed {"test":"test-node-wasm.js","message":["error",["failed: nanodet",[]]]} -2022-08-19 09:14:31 WARN:  failed {"test":"test-node-wasm.js","message":["error",["failed: face attention",{"annotations":0}]]} +2022-08-20 09:36:24 INFO:  @vladmandic/human version 2.9.4 +2022-08-20 09:36:24 INFO:  User: vlado Platform: linux Arch: x64 Node: v18.1.0 +2022-08-20 09:36:24 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-fetch.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]}] +2022-08-20 09:36:24 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start +2022-08-20 09:36:25 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start +2022-08-20 09:36:26 INFO:  {"cmd":"../demo/nodejs/node-fetch.js","args":[]} start +2022-08-20 09:36:30 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start +2022-08-20 09:36:31 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start +2022-08-20 09:36:31 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start +2022-08-20 09:36:32 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start +2022-08-20 09:36:33 INFO:  {"cmd":"../demo/facematch/node-match.js","args":[]} start +2022-08-20 09:36:35 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2022-08-20 09:36:35 INFO:  +2022-08-20 09:36:35 INFO:  test-node.js start +2022-08-20 09:36:35 INFO:  test-node.js test: configuration validation +2022-08-20 09:36:35 STATE: test-node.js passed: configuration default validation [] +2022-08-20 09:36:35 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-20 09:36:35 INFO:  test-node.js test: model load +2022-08-20 09:36:35 STATE: test-node.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] +2022-08-20 09:36:35 INFO:  test-node.js test: warmup +2022-08-20 09:36:35 STATE: test-node.js passed: create human +2022-08-20 09:36:35 INFO:  test-node.js human version: 2.9.4 +2022-08-20 09:36:35 INFO:  test-node.js platform: linux x64 agent: NodeJS v18.1.0 +2022-08-20 09:36:35 INFO:  test-node.js tfjs version: 3.19.0 +2022-08-20 09:36:35 INFO:  test-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.7.3-dev20220521","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} +2022-08-20 09:36:35 STATE: test-node.js passed: set backend: tensorflow +2022-08-20 09:36:35 STATE: test-node.js tensors 1921 +2022-08-20 09:36:35 STATE: test-node.js passed: load models +2022-08-20 09:36:35 STATE: test-node.js result: defined models: 23 loaded models: 12 +2022-08-20 09:36:35 STATE: test-node.js passed: warmup: none default +2022-08-20 09:36:35 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-20 09:36:35 DATA:  test-node.js result: performance: load: null total: null +2022-08-20 09:36:35 STATE: test-node.js passed: warmup none result match +2022-08-20 09:36:35 STATE: test-node.js event: image +2022-08-20 09:36:35 STATE: test-node.js event: detect +2022-08-20 09:36:35 STATE: test-node.js event: warmup +2022-08-20 09:36:35 STATE: test-node.js passed: warmup: face default +2022-08-20 09:36:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-08-20 09:36:35 DATA:  test-node.js result: performance: load: null total: 329 +2022-08-20 09:36:35 STATE: test-node.js passed: warmup face result match +2022-08-20 09:36:35 STATE: test-node.js event: image +2022-08-20 09:36:36 STATE: test-node.js event: detect +2022-08-20 09:36:36 STATE: test-node.js event: warmup +2022-08-20 09:36:36 STATE: test-node.js passed: warmup: body default +2022-08-20 09:36:36 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:36 DATA:  test-node.js result: performance: load: null total: 241 +2022-08-20 09:36:36 STATE: test-node.js passed: warmup body result match +2022-08-20 09:36:36 STATE: test-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-08-20 09:36:36 INFO:  test-node.js test: details verification +2022-08-20 09:36:36 STATE: test-node.js start default +2022-08-20 09:36:36 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:36 STATE: test-node.js event: image +2022-08-20 09:36:36 STATE: test-node.js event: detect +2022-08-20 09:36:36 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-20 09:36:36 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:36 DATA:  test-node.js result: performance: load: null total: 222 +2022-08-20 09:36:36 STATE: test-node.js passed: details face length 1 +2022-08-20 09:36:36 STATE: test-node.js passed: details face score 1 0.93 1 +2022-08-20 09:36:36 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-20 09:36:36 STATE: test-node.js passed: details face arrays 4 478 1024 +2022-08-20 09:36:36 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-20 09:36:36 STATE: test-node.js passed: details face anti-spoofing 0.79 +2022-08-20 09:36:36 STATE: test-node.js passed: details face liveness 0.83 +2022-08-20 09:36:36 STATE: test-node.js passed: details body length 1 +2022-08-20 09:36:36 STATE: test-node.js passed: details body 0.92 17 6 +2022-08-20 09:36:36 STATE: test-node.js passed: details hand length 1 +2022-08-20 09:36:36 STATE: test-node.js passed: details hand 0.51 0.73 point +2022-08-20 09:36:36 STATE: test-node.js passed: details hand arrays 21 5 7 +2022-08-20 09:36:36 STATE: test-node.js passed: details gesture length 7 +2022-08-20 09:36:36 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-20 09:36:36 STATE: test-node.js passed: details object length 1 +2022-08-20 09:36:36 STATE: test-node.js passed: details object 0.72 person +2022-08-20 09:36:36 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-08-20 09:36:36 STATE: test-node.js event: image +2022-08-20 09:36:36 STATE: test-node.js event: detect +2022-08-20 09:36:36 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-20 09:36:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-08-20 09:36:37 STATE: test-node.js event: image +2022-08-20 09:36:37 STATE: test-node.js event: detect +2022-08-20 09:36:37 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-20 09:36:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:37 STATE: test-node.js event: image +2022-08-20 09:36:37 STATE: test-node.js event: detect +2022-08-20 09:36:37 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-20 09:36:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:37 STATE: test-node.js event: image +2022-08-20 09:36:38 STATE: test-node.js event: detect +2022-08-20 09:36:38 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-20 09:36:38 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-20 09:36:38 STATE: test-node.js event: image +2022-08-20 09:36:38 STATE: test-node.js event: detect +2022-08-20 09:36:38 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-20 09:36:38 INFO:  test-node.js test default +2022-08-20 09:36:38 STATE: test-node.js start async +2022-08-20 09:36:38 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:38 STATE: test-node.js event: image +2022-08-20 09:36:38 STATE: test-node.js event: detect +2022-08-20 09:36:38 STATE: test-node.js passed: detect: samples/in/ai-body.jpg async +2022-08-20 09:36:38 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:38 DATA:  test-node.js result: performance: load: null total: 212 +2022-08-20 09:36:38 STATE: test-node.js passed: default result face match 1 female 0.97 +2022-08-20 09:36:38 INFO:  test-node.js test sync +2022-08-20 09:36:38 STATE: test-node.js start sync +2022-08-20 09:36:39 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:39 STATE: test-node.js event: image +2022-08-20 09:36:39 STATE: test-node.js event: detect +2022-08-20 09:36:39 STATE: test-node.js passed: detect: samples/in/ai-body.jpg sync +2022-08-20 09:36:39 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:39 DATA:  test-node.js result: performance: load: null total: 207 +2022-08-20 09:36:39 STATE: test-node.js passed: default sync 1 female 0.97 +2022-08-20 09:36:39 INFO:  test-node.js test: image process +2022-08-20 09:36:39 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:39 STATE: test-node.js passed: image input null [1,256,256,3] +2022-08-20 09:36:39 INFO:  test-node.js test: image null +2022-08-20 09:36:39 STATE: test-node.js passed: invalid input could not convert input to tensor +2022-08-20 09:36:39 INFO:  test-node.js test face similarity +2022-08-20 09:36:39 STATE: test-node.js start face similarity +2022-08-20 09:36:39 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:39 STATE: test-node.js event: image +2022-08-20 09:36:39 STATE: test-node.js event: detect +2022-08-20 09:36:39 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face similarity +2022-08-20 09:36:39 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-08-20 09:36:39 DATA:  test-node.js result: performance: load: null total: 202 +2022-08-20 09:36:39 STATE: test-node.js start face similarity +2022-08-20 09:36:39 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:39 STATE: test-node.js event: image +2022-08-20 09:36:39 STATE: test-node.js event: detect +2022-08-20 09:36:39 STATE: test-node.js passed: detect: samples/in/ai-body.jpg face similarity +2022-08-20 09:36:39 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:39 DATA:  test-node.js result: performance: load: null total: 205 +2022-08-20 09:36:39 STATE: test-node.js start face similarity +2022-08-20 09:36:39 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-20 09:36:39 STATE: test-node.js event: image +2022-08-20 09:36:40 STATE: test-node.js event: detect +2022-08-20 09:36:40 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-08-20 09:36:40 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-08-20 09:36:40 DATA:  test-node.js result: performance: load: null total: 186 +2022-08-20 09:36:40 STATE: test-node.js passed: face descriptor +2022-08-20 09:36:40 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} +2022-08-20 09:36:40 INFO:  test-node.js test object +2022-08-20 09:36:40 STATE: test-node.js start object +2022-08-20 09:36:40 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:40 STATE: test-node.js event: image +2022-08-20 09:36:40 STATE: test-node.js event: detect +2022-08-20 09:36:40 STATE: test-node.js passed: detect: samples/in/ai-body.jpg object +2022-08-20 09:36:40 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:40 DATA:  test-node.js result: performance: load: null total: 215 +2022-08-20 09:36:40 STATE: test-node.js passed: centernet +2022-08-20 09:36:40 STATE: test-node.js start object +2022-08-20 09:36:41 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:41 STATE: test-node.js event: image +2022-08-20 09:36:41 STATE: test-node.js event: detect +2022-08-20 09:36:41 STATE: test-node.js passed: detect: samples/in/ai-body.jpg object +2022-08-20 09:36:41 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:41 DATA:  test-node.js result: performance: load: null total: 218 +2022-08-20 09:36:41 STATE: test-node.js passed: nanodet +2022-08-20 09:36:41 INFO:  test-node.js test sensitive +2022-08-20 09:36:41 STATE: test-node.js start sensitive +2022-08-20 09:36:41 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:41 STATE: test-node.js event: image +2022-08-20 09:36:41 STATE: test-node.js event: detect +2022-08-20 09:36:41 STATE: test-node.js passed: detect: samples/in/ai-body.jpg sensitive +2022-08-20 09:36:41 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:36:41 DATA:  test-node.js result: performance: load: null total: 167 +2022-08-20 09:36:41 STATE: test-node.js passed: sensitive result match +2022-08-20 09:36:41 STATE: test-node.js passed: sensitive face result match +2022-08-20 09:36:41 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-08-20 09:36:41 STATE: test-node.js passed: sensitive body result match +2022-08-20 09:36:41 STATE: test-node.js passed: sensitive hand result match +2022-08-20 09:36:41 INFO:  test-node.js test body +2022-08-20 09:36:41 STATE: test-node.js start blazepose +2022-08-20 09:36:43 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:43 STATE: test-node.js event: image +2022-08-20 09:36:43 STATE: test-node.js event: detect +2022-08-20 09:36:43 STATE: test-node.js passed: detect: samples/in/ai-body.jpg blazepose +2022-08-20 09:36:43 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-08-20 09:36:43 DATA:  test-node.js result: performance: load: null total: 227 +2022-08-20 09:36:43 STATE: test-node.js passed: blazepose +2022-08-20 09:36:43 STATE: test-node.js start efficientpose +2022-08-20 09:36:44 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:44 STATE: test-node.js event: image +2022-08-20 09:36:44 STATE: test-node.js event: detect +2022-08-20 09:36:44 STATE: test-node.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-08-20 09:36:44 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-08-20 09:36:44 DATA:  test-node.js result: performance: load: null total: 246 +2022-08-20 09:36:44 STATE: test-node.js passed: efficientpose +2022-08-20 09:36:44 STATE: test-node.js start posenet +2022-08-20 09:36:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:45 STATE: test-node.js event: image +2022-08-20 09:36:45 STATE: test-node.js event: detect +2022-08-20 09:36:45 STATE: test-node.js passed: detect: samples/in/ai-body.jpg posenet +2022-08-20 09:36:45 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-08-20 09:36:45 DATA:  test-node.js result: performance: load: null total: 187 +2022-08-20 09:36:45 STATE: test-node.js passed: posenet +2022-08-20 09:36:45 STATE: test-node.js start movenet +2022-08-20 09:36:46 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:46 STATE: test-node.js event: image +2022-08-20 09:36:46 STATE: test-node.js event: detect +2022-08-20 09:36:46 STATE: test-node.js passed: detect: samples/in/ai-body.jpg movenet +2022-08-20 09:36:46 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:36:46 DATA:  test-node.js result: performance: load: null total: 179 +2022-08-20 09:36:46 STATE: test-node.js passed: movenet +2022-08-20 09:36:46 INFO:  test-node.js test face matching +2022-08-20 09:36:46 STATE: test-node.js passed: face database 40 +2022-08-20 09:36:46 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.7827852615252829}} {"second":{"index":4,"similarity":0.5002052633015844}} {"third":{"index":4,"similarity":0.5401587887998899}} +2022-08-20 09:36:46 INFO:  test-node.js test face similarity alternative +2022-08-20 09:36:46 STATE: test-node.js start face embeddings +2022-08-20 09:36:46 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:46 STATE: test-node.js event: image +2022-08-20 09:36:46 STATE: test-node.js event: detect +2022-08-20 09:36:46 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-20 09:36:46 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:36:46 DATA:  test-node.js result: performance: load: null total: 189 +2022-08-20 09:36:46 STATE: test-node.js passed: mobilefacenet {"embedding":192} +2022-08-20 09:36:46 STATE: test-node.js start face embeddings +2022-08-20 09:36:47 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:47 STATE: test-node.js event: image +2022-08-20 09:36:47 STATE: test-node.js event: detect +2022-08-20 09:36:47 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-20 09:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:36:47 DATA:  test-node.js result: performance: load: null total: 189 +2022-08-20 09:36:47 STATE: test-node.js passed: insightface {"embedding":512} +2022-08-20 09:36:47 INFO:  test-node.js test face attention +2022-08-20 09:36:47 STATE: test-node.js start face attention +2022-08-20 09:36:48 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:48 STATE: test-node.js event: image +2022-08-20 09:36:48 STATE: test-node.js event: detect +2022-08-20 09:36:48 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face attention +2022-08-20 09:36:48 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:36:48 DATA:  test-node.js result: performance: load: null total: 175 +2022-08-20 09:36:48 STATE: test-node.js passed: face attention +2022-08-20 09:36:48 INFO:  test-node.js test detectors +2022-08-20 09:36:48 STATE: test-node.js start detectors +2022-08-20 09:36:48 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:48 STATE: test-node.js event: image +2022-08-20 09:36:48 STATE: test-node.js event: detect +2022-08-20 09:36:48 STATE: test-node.js passed: detect: samples/in/ai-body.jpg detectors +2022-08-20 09:36:48 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:36:48 DATA:  test-node.js result: performance: load: null total: 82 +2022-08-20 09:36:48 STATE: test-node.js passed: detector result face match +2022-08-20 09:36:48 STATE: test-node.js passed: detector result hand match +2022-08-20 09:36:48 INFO:  test-node.js test: multi-instance +2022-08-20 09:36:48 STATE: test-node.js start multi instance +2022-08-20 09:36:48 STATE: test-node.js event: image +2022-08-20 09:36:48 STATE: test-node.js event: detect +2022-08-20 09:36:48 STATE: test-node.js passed: detect: random multi instance +2022-08-20 09:36:48 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-08-20 09:36:48 DATA:  test-node.js result: performance: load: null total: 83 +2022-08-20 09:36:48 INFO:  test-node.js test: first instance +2022-08-20 09:36:48 STATE: test-node.js start multi instance +2022-08-20 09:36:48 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-20 09:36:48 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-20 09:36:48 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:36:48 DATA:  test-node.js result: performance: load: null total: 79 +2022-08-20 09:36:48 INFO:  test-node.js test: second instance +2022-08-20 09:36:48 STATE: test-node.js start multi instance +2022-08-20 09:36:48 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-20 09:36:49 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-20 09:36:49 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:36:49 DATA:  test-node.js result: performance: load: null total: 85 +2022-08-20 09:36:49 INFO:  test-node.js test: concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js start concurrent +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-20 09:36:49 STATE: test-node.js event: image +2022-08-20 09:36:49 STATE: test-node.js event: image +2022-08-20 09:36:49 STATE: test-node.js event: image +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 947 +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 947 +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 947 +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 947 +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 947 +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 947 +2022-08-20 09:36:50 STATE: test-node.js event: detect +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 693 +2022-08-20 09:36:50 STATE: test-node.js event: detect +2022-08-20 09:36:50 STATE: test-node.js event: detect +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 694 +2022-08-20 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:36:50 DATA:  test-node.js result: performance: load: null total: 694 +2022-08-20 09:36:50 INFO:  test-node.js test: monkey-patch +2022-08-20 09:36:50 STATE: test-node.js event: image +2022-08-20 09:36:50 STATE: test-node.js event: detect +2022-08-20 09:36:50 STATE: test-node.js passed: monkey patch +2022-08-20 09:36:50 STATE: test-node.js passed: segmentation [65536] +2022-08-20 09:36:50 STATE: test-node.js passeed: equal usage +2022-08-20 09:36:50 INFO:  test-node.js test: input compare +2022-08-20 09:36:50 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:50 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-20 09:36:50 STATE: test-node.js passed: image compare 0 23.275441687091504 +2022-08-20 09:36:50 INFO:  test-node.js events: {"image":29,"detect":29,"warmup":2} +2022-08-20 09:36:50 INFO:  test-node.js tensors 4105 +2022-08-20 09:36:50 INFO:  test-node.js test complete: 15407 ms +2022-08-20 09:36:50 INFO:  +2022-08-20 09:36:50 INFO:  test-node-gpu.js start +2022-08-20 09:36:51 INFO:  test-node-gpu.js test: configuration validation +2022-08-20 09:36:51 STATE: test-node-gpu.js passed: configuration default validation [] +2022-08-20 09:36:51 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-20 09:36:51 INFO:  test-node-gpu.js test: model load +2022-08-20 09:36:51 STATE: test-node-gpu.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] +2022-08-20 09:36:51 INFO:  test-node-gpu.js test: warmup +2022-08-20 09:36:51 STATE: test-node-gpu.js passed: create human +2022-08-20 09:36:51 INFO:  test-node-gpu.js human version: 2.9.4 +2022-08-20 09:36:51 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v18.1.0 +2022-08-20 09:36:51 INFO:  test-node-gpu.js tfjs version: 3.19.0 +2022-08-20 09:36:51 INFO:  test-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.7.3-dev20220521","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} +2022-08-20 09:36:51 STATE: test-node-gpu.js passed: set backend: tensorflow +2022-08-20 09:36:51 STATE: test-node-gpu.js tensors 1921 +2022-08-20 09:36:51 STATE: test-node-gpu.js passed: load models +2022-08-20 09:36:51 STATE: test-node-gpu.js result: defined models: 23 loaded models: 12 +2022-08-20 09:36:51 STATE: test-node-gpu.js passed: warmup: none default +2022-08-20 09:36:51 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-20 09:36:51 DATA:  test-node-gpu.js result: performance: load: null total: null +2022-08-20 09:36:51 STATE: test-node-gpu.js passed: warmup none result match +2022-08-20 09:36:52 STATE: test-node-gpu.js event: image +2022-08-20 09:36:56 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:56 STATE: test-node-gpu.js event: warmup +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: warmup: face default +2022-08-20 09:36:56 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-08-20 09:36:56 DATA:  test-node-gpu.js result: performance: load: null total: 4057 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: warmup face result match +2022-08-20 09:36:56 STATE: test-node-gpu.js event: image +2022-08-20 09:36:56 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:56 STATE: test-node-gpu.js event: warmup +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: warmup: body default +2022-08-20 09:36:56 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:56 DATA:  test-node-gpu.js result: performance: load: null total: 151 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: warmup body result match +2022-08-20 09:36:56 STATE: test-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-08-20 09:36:56 INFO:  test-node-gpu.js test: details verification +2022-08-20 09:36:56 STATE: test-node-gpu.js start default +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:36:56 STATE: test-node-gpu.js event: image +2022-08-20 09:36:56 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-20 09:36:56 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:56 DATA:  test-node-gpu.js result: performance: load: null total: 151 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details face length 1 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details face score 1 0.93 1 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details face liveness 0.83 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details body length 1 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details body 0.92 17 6 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details hand length 1 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details gesture length 7 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details object length 1 +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: details object 0.72 person +2022-08-20 09:36:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-08-20 09:36:56 STATE: test-node-gpu.js event: image +2022-08-20 09:36:57 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:57 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-20 09:36:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-08-20 09:36:57 STATE: test-node-gpu.js event: image +2022-08-20 09:36:57 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:57 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-20 09:36:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:36:57 STATE: test-node-gpu.js event: image +2022-08-20 09:36:57 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:57 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-20 09:36:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} +2022-08-20 09:36:57 STATE: test-node-gpu.js event: image +2022-08-20 09:36:58 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:58 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-20 09:36:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-20 09:36:58 STATE: test-node-gpu.js event: image +2022-08-20 09:36:58 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:58 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-20 09:36:58 INFO:  test-node-gpu.js test default +2022-08-20 09:36:58 STATE: test-node-gpu.js start async +2022-08-20 09:36:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:36:58 STATE: test-node-gpu.js event: image +2022-08-20 09:36:58 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg async +2022-08-20 09:36:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:58 DATA:  test-node-gpu.js result: performance: load: null total: 146 +2022-08-20 09:36:58 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 +2022-08-20 09:36:58 INFO:  test-node-gpu.js test sync +2022-08-20 09:36:58 STATE: test-node-gpu.js start sync +2022-08-20 09:36:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:36:58 STATE: test-node-gpu.js event: image +2022-08-20 09:36:59 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg sync +2022-08-20 09:36:59 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:59 DATA:  test-node-gpu.js result: performance: load: null total: 136 +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: default sync 1 female 0.97 +2022-08-20 09:36:59 INFO:  test-node-gpu.js test: image process +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2022-08-20 09:36:59 INFO:  test-node-gpu.js test: image null +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor +2022-08-20 09:36:59 INFO:  test-node-gpu.js test face similarity +2022-08-20 09:36:59 STATE: test-node-gpu.js start face similarity +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:36:59 STATE: test-node-gpu.js event: image +2022-08-20 09:36:59 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity +2022-08-20 09:36:59 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-08-20 09:36:59 DATA:  test-node-gpu.js result: performance: load: null total: 127 +2022-08-20 09:36:59 STATE: test-node-gpu.js start face similarity +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:36:59 STATE: test-node-gpu.js event: image +2022-08-20 09:36:59 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity +2022-08-20 09:36:59 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:36:59 DATA:  test-node-gpu.js result: performance: load: null total: 144 +2022-08-20 09:36:59 STATE: test-node-gpu.js start face similarity +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-20 09:36:59 STATE: test-node-gpu.js event: image +2022-08-20 09:36:59 STATE: test-node-gpu.js event: detect +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-08-20 09:36:59 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-08-20 09:36:59 DATA:  test-node-gpu.js result: performance: load: null total: 131 +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: face descriptor +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} +2022-08-20 09:36:59 INFO:  test-node-gpu.js test object +2022-08-20 09:36:59 STATE: test-node-gpu.js start object +2022-08-20 09:36:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:36:59 STATE: test-node-gpu.js event: image +2022-08-20 09:37:00 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2022-08-20 09:37:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:37:00 DATA:  test-node-gpu.js result: performance: load: null total: 149 +2022-08-20 09:37:00 STATE: test-node-gpu.js passed: centernet +2022-08-20 09:37:00 STATE: test-node-gpu.js start object +2022-08-20 09:37:00 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:00 STATE: test-node-gpu.js event: image +2022-08-20 09:37:01 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2022-08-20 09:37:01 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:37:01 DATA:  test-node-gpu.js result: performance: load: null total: 543 +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: nanodet +2022-08-20 09:37:01 INFO:  test-node-gpu.js test sensitive +2022-08-20 09:37:01 STATE: test-node-gpu.js start sensitive +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:01 STATE: test-node-gpu.js event: image +2022-08-20 09:37:01 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive +2022-08-20 09:37:01 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:01 DATA:  test-node-gpu.js result: performance: load: null total: 135 +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: sensitive result match +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: sensitive face result match +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: sensitive body result match +2022-08-20 09:37:01 STATE: test-node-gpu.js passed: sensitive hand result match +2022-08-20 09:37:01 INFO:  test-node-gpu.js test body +2022-08-20 09:37:01 STATE: test-node-gpu.js start blazepose +2022-08-20 09:37:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:03 STATE: test-node-gpu.js event: image +2022-08-20 09:37:03 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:03 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose +2022-08-20 09:37:03 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-08-20 09:37:03 DATA:  test-node-gpu.js result: performance: load: null total: 270 +2022-08-20 09:37:03 STATE: test-node-gpu.js passed: blazepose +2022-08-20 09:37:03 STATE: test-node-gpu.js start efficientpose +2022-08-20 09:37:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:04 STATE: test-node-gpu.js event: image +2022-08-20 09:37:04 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-08-20 09:37:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-08-20 09:37:04 DATA:  test-node-gpu.js result: performance: load: null total: 880 +2022-08-20 09:37:04 STATE: test-node-gpu.js passed: efficientpose +2022-08-20 09:37:04 STATE: test-node-gpu.js start posenet +2022-08-20 09:37:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:05 STATE: test-node-gpu.js event: image +2022-08-20 09:37:05 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:05 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet +2022-08-20 09:37:05 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-08-20 09:37:05 DATA:  test-node-gpu.js result: performance: load: null total: 132 +2022-08-20 09:37:05 STATE: test-node-gpu.js passed: posenet +2022-08-20 09:37:05 STATE: test-node-gpu.js start movenet +2022-08-20 09:37:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:05 STATE: test-node-gpu.js event: image +2022-08-20 09:37:05 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:05 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet +2022-08-20 09:37:05 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:05 DATA:  test-node-gpu.js result: performance: load: null total: 122 +2022-08-20 09:37:05 STATE: test-node-gpu.js passed: movenet +2022-08-20 09:37:05 INFO:  test-node-gpu.js test face matching +2022-08-20 09:37:05 STATE: test-node-gpu.js passed: face database 40 +2022-08-20 09:37:05 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7828184453007331}} {"second":{"index":4,"similarity":0.5001334216773398}} {"third":{"index":4,"similarity":0.5403054967489764}} +2022-08-20 09:37:05 INFO:  test-node-gpu.js test face similarity alternative +2022-08-20 09:37:05 STATE: test-node-gpu.js start face embeddings +2022-08-20 09:37:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:37:06 STATE: test-node-gpu.js event: image +2022-08-20 09:37:06 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-20 09:37:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:06 DATA:  test-node-gpu.js result: performance: load: null total: 151 +2022-08-20 09:37:06 STATE: test-node-gpu.js passed: mobilefacenet {"embedding":192} +2022-08-20 09:37:06 STATE: test-node-gpu.js start face embeddings +2022-08-20 09:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:37:07 STATE: test-node-gpu.js event: image +2022-08-20 09:37:07 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-20 09:37:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:07 DATA:  test-node-gpu.js result: performance: load: null total: 169 +2022-08-20 09:37:07 STATE: test-node-gpu.js passed: insightface {"embedding":512} +2022-08-20 09:37:07 INFO:  test-node-gpu.js test face attention +2022-08-20 09:37:07 STATE: test-node-gpu.js start face attention +2022-08-20 09:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:37:07 STATE: test-node-gpu.js event: image +2022-08-20 09:37:07 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face attention +2022-08-20 09:37:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:07 DATA:  test-node-gpu.js result: performance: load: null total: 227 +2022-08-20 09:37:07 STATE: test-node-gpu.js passed: face attention +2022-08-20 09:37:07 INFO:  test-node-gpu.js test detectors +2022-08-20 09:37:07 STATE: test-node-gpu.js start detectors +2022-08-20 09:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:07 STATE: test-node-gpu.js event: image +2022-08-20 09:37:08 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg detectors +2022-08-20 09:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 197 +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: detector result face match +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: detector result hand match +2022-08-20 09:37:08 INFO:  test-node-gpu.js test: multi-instance +2022-08-20 09:37:08 STATE: test-node-gpu.js start multi instance +2022-08-20 09:37:08 STATE: test-node-gpu.js event: image +2022-08-20 09:37:08 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: detect: random multi instance +2022-08-20 09:37:08 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-08-20 09:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 38 +2022-08-20 09:37:08 INFO:  test-node-gpu.js test: first instance +2022-08-20 09:37:08 STATE: test-node-gpu.js start multi instance +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-20 09:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 35 +2022-08-20 09:37:08 INFO:  test-node-gpu.js test: second instance +2022-08-20 09:37:08 STATE: test-node-gpu.js start multi instance +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-20 09:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 39 +2022-08-20 09:37:08 INFO:  test-node-gpu.js test: concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js start concurrent +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-20 09:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-20 09:37:09 STATE: test-node-gpu.js event: image +2022-08-20 09:37:09 STATE: test-node-gpu.js event: image +2022-08-20 09:37:09 STATE: test-node-gpu.js event: image +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 579 +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 579 +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 579 +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 580 +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 579 +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 580 +2022-08-20 09:37:09 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 315 +2022-08-20 09:37:09 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:09 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 315 +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:09 DATA:  test-node-gpu.js result: performance: load: null total: 315 +2022-08-20 09:37:09 INFO:  test-node-gpu.js test: monkey-patch +2022-08-20 09:37:09 STATE: test-node-gpu.js event: image +2022-08-20 09:37:09 STATE: test-node-gpu.js event: detect +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: monkey patch +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: segmentation [65536] +2022-08-20 09:37:09 STATE: test-node-gpu.js passeed: equal usage +2022-08-20 09:37:09 INFO:  test-node-gpu.js test: input compare +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-20 09:37:09 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 +2022-08-20 09:37:09 INFO:  test-node-gpu.js events: {"image":29,"detect":29,"warmup":2} +2022-08-20 09:37:09 INFO:  test-node-gpu.js tensors 4105 +2022-08-20 09:37:09 INFO:  test-node-gpu.js test complete: 17997 ms +2022-08-20 09:37:10 INFO:  +2022-08-20 09:37:10 INFO:  test-node-wasm.js start +2022-08-20 09:37:11 DATA:  test-node-wasm.js stdout: 2022-08-20 09:37:11 INFO:  { supported: true, backend: true, simd: true, multithread: false } +2022-08-20 09:37:11 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2022-08-20 09:37:11 INFO:  test-node-wasm.js test: configuration validation +2022-08-20 09:37:11 STATE: test-node-wasm.js passed: configuration default validation [] +2022-08-20 09:37:11 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-20 09:37:11 INFO:  test-node-wasm.js test: model load +2022-08-20 09:37:13 STATE: test-node-wasm.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"https://vladmandic.github.io/human/models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"https://vladmandic.github.io/human/models/emotion.json"},{"name":"facedetect","loaded":true,"url":"https://vladmandic.github.io/human/models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"https://vladmandic.github.io/human/models/iris.json"},{"name":"facemesh","loaded":true,"url":"https://vladmandic.github.io/human/models/facemesh.json"},{"name":"faceres","loaded":true,"url":"https://vladmandic.github.io/human/models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"https://vladmandic.github.io/human/models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"https://vladmandic.github.io/human/models/handtrack.json"},{"name":"liveness","loaded":true,"url":"https://vladmandic.github.io/human/models/liveness.json"},{"name":"movenet","loaded":true,"url":"https://vladmandic.github.io/human/models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"https://vladmandic.github.io/human/models/selfie.json"},{"name":"antispoof","loaded":true,"url":"https://vladmandic.github.io/human/models/antispoof.json"}] +2022-08-20 09:37:13 INFO:  test-node-wasm.js test: warmup +2022-08-20 09:37:13 STATE: test-node-wasm.js passed: create human +2022-08-20 09:37:13 INFO:  test-node-wasm.js human version: 2.9.4 +2022-08-20 09:37:13 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v18.1.0 +2022-08-20 09:37:13 INFO:  test-node-wasm.js tfjs version: 3.19.0 +2022-08-20 09:37:13 INFO:  test-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","wasm"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":126} +2022-08-20 09:37:13 STATE: test-node-wasm.js passed: set backend: wasm +2022-08-20 09:37:13 STATE: test-node-wasm.js tensors 1921 +2022-08-20 09:37:13 STATE: test-node-wasm.js passed: load models +2022-08-20 09:37:13 STATE: test-node-wasm.js result: defined models: 23 loaded models: 12 +2022-08-20 09:37:13 STATE: test-node-wasm.js passed: warmup: none default +2022-08-20 09:37:13 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-20 09:37:13 DATA:  test-node-wasm.js result: performance: load: null total: null +2022-08-20 09:37:13 STATE: test-node-wasm.js passed: warmup none result match +2022-08-20 09:37:13 STATE: test-node-wasm.js event: image +2022-08-20 09:37:13 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:13 STATE: test-node-wasm.js event: warmup +2022-08-20 09:37:13 STATE: test-node-wasm.js passed: warmup: face default +2022-08-20 09:37:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-08-20 09:37:13 DATA:  test-node-wasm.js result: performance: load: null total: 561 +2022-08-20 09:37:13 STATE: test-node-wasm.js passed: warmup face result match +2022-08-20 09:37:13 STATE: test-node-wasm.js event: image +2022-08-20 09:37:14 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:14 STATE: test-node-wasm.js event: warmup +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: warmup: body default +2022-08-20 09:37:14 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:37:14 DATA:  test-node-wasm.js result: performance: load: null total: 396 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: warmup body result match +2022-08-20 09:37:14 STATE: test-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-08-20 09:37:14 INFO:  test-node-wasm.js test: details verification +2022-08-20 09:37:14 STATE: test-node-wasm.js start default +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:14 STATE: test-node-wasm.js event: image +2022-08-20 09:37:14 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-20 09:37:14 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:37:14 DATA:  test-node-wasm.js result: performance: load: null total: 342 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details face length 1 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details face score 1 0.93 1 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details face liveness 0.83 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details body length 1 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details body 0.92 17 6 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details hand length 1 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details gesture length 7 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details object length 1 +2022-08-20 09:37:14 STATE: test-node-wasm.js passed: details object 0.72 person +2022-08-20 09:37:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2022-08-20 09:37:15 STATE: test-node-wasm.js event: image +2022-08-20 09:37:15 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:15 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-20 09:37:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2022-08-20 09:37:15 STATE: test-node-wasm.js event: image +2022-08-20 09:37:15 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:15 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-20 09:37:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:16 STATE: test-node-wasm.js event: image +2022-08-20 09:37:16 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:16 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-20 09:37:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:16 STATE: test-node-wasm.js event: image +2022-08-20 09:37:17 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:17 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-20 09:37:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-20 09:37:17 STATE: test-node-wasm.js event: image +2022-08-20 09:37:17 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:17 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-20 09:37:17 INFO:  test-node-wasm.js test default +2022-08-20 09:37:17 STATE: test-node-wasm.js start async +2022-08-20 09:37:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:17 STATE: test-node-wasm.js event: image +2022-08-20 09:37:18 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg async +2022-08-20 09:37:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:37:18 DATA:  test-node-wasm.js result: performance: load: null total: 334 +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 +2022-08-20 09:37:18 INFO:  test-node-wasm.js test sync +2022-08-20 09:37:18 STATE: test-node-wasm.js start sync +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:18 STATE: test-node-wasm.js event: image +2022-08-20 09:37:18 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg sync +2022-08-20 09:37:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:37:18 DATA:  test-node-wasm.js result: performance: load: null total: 327 +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: default sync 1 female 0.97 +2022-08-20 09:37:18 INFO:  test-node-wasm.js test: image process +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2022-08-20 09:37:18 INFO:  test-node-wasm.js test: image null +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor +2022-08-20 09:37:18 INFO:  test-node-wasm.js test face similarity +2022-08-20 09:37:18 STATE: test-node-wasm.js start face similarity +2022-08-20 09:37:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:18 STATE: test-node-wasm.js event: image +2022-08-20 09:37:19 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity +2022-08-20 09:37:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-08-20 09:37:19 DATA:  test-node-wasm.js result: performance: load: null total: 304 +2022-08-20 09:37:19 STATE: test-node-wasm.js start face similarity +2022-08-20 09:37:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:19 STATE: test-node-wasm.js event: image +2022-08-20 09:37:19 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity +2022-08-20 09:37:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:37:19 DATA:  test-node-wasm.js result: performance: load: null total: 325 +2022-08-20 09:37:19 STATE: test-node-wasm.js start face similarity +2022-08-20 09:37:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-20 09:37:19 STATE: test-node-wasm.js event: image +2022-08-20 09:37:19 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-08-20 09:37:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-08-20 09:37:19 DATA:  test-node-wasm.js result: performance: load: null total: 293 +2022-08-20 09:37:19 STATE: test-node-wasm.js passed: face descriptor +2022-08-20 09:37:19 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} +2022-08-20 09:37:19 INFO:  test-node-wasm.js test object +2022-08-20 09:37:19 STATE: test-node-wasm.js start object +2022-08-20 09:37:20 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:20 STATE: test-node-wasm.js event: image +2022-08-20 09:37:20 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:20 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2022-08-20 09:37:20 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-20 09:37:20 DATA:  test-node-wasm.js result: performance: load: null total: 321 +2022-08-20 09:37:20 STATE: test-node-wasm.js passed: centernet +2022-08-20 09:37:20 STATE: test-node-wasm.js start object +2022-08-20 09:37:21 WARN:  test-node-wasm.js missing kernel ops {"title":"object","model":"nanodet","url":"https://vladmandic.github.io/human-models/models/nanodet.json","missing":["sparsetodense"],"backkend":"wasm"} +2022-08-20 09:37:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:21 STATE: test-node-wasm.js event: image +2022-08-20 09:37:21 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2022-08-20 09:37:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:21 DATA:  test-node-wasm.js result: performance: load: null total: 213 +2022-08-20 09:37:21 ERROR: test-node-wasm.js failed: nanodet [] +2022-08-20 09:37:21 INFO:  test-node-wasm.js test sensitive +2022-08-20 09:37:21 STATE: test-node-wasm.js start sensitive +2022-08-20 09:37:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:21 STATE: test-node-wasm.js event: image +2022-08-20 09:37:22 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:22 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive +2022-08-20 09:37:22 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:22 DATA:  test-node-wasm.js result: performance: load: null total: 235 +2022-08-20 09:37:22 STATE: test-node-wasm.js passed: sensitive result match +2022-08-20 09:37:22 STATE: test-node-wasm.js passed: sensitive face result match +2022-08-20 09:37:22 STATE: test-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] +2022-08-20 09:37:22 STATE: test-node-wasm.js passed: sensitive body result match +2022-08-20 09:37:22 STATE: test-node-wasm.js passed: sensitive hand result match +2022-08-20 09:37:22 INFO:  test-node-wasm.js test body +2022-08-20 09:37:22 STATE: test-node-wasm.js start blazepose +2022-08-20 09:37:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:23 STATE: test-node-wasm.js event: image +2022-08-20 09:37:24 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:24 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose +2022-08-20 09:37:24 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-08-20 09:37:24 DATA:  test-node-wasm.js result: performance: load: null total: 389 +2022-08-20 09:37:24 STATE: test-node-wasm.js passed: blazepose +2022-08-20 09:37:24 STATE: test-node-wasm.js start efficientpose +2022-08-20 09:37:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:24 STATE: test-node-wasm.js event: image +2022-08-20 09:37:25 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:25 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-08-20 09:37:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-08-20 09:37:25 DATA:  test-node-wasm.js result: performance: load: null total: 636 +2022-08-20 09:37:25 STATE: test-node-wasm.js passed: efficientpose +2022-08-20 09:37:25 STATE: test-node-wasm.js start posenet +2022-08-20 09:37:25 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:25 STATE: test-node-wasm.js event: image +2022-08-20 09:37:26 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet +2022-08-20 09:37:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-08-20 09:37:26 DATA:  test-node-wasm.js result: performance: load: null total: 281 +2022-08-20 09:37:26 STATE: test-node-wasm.js passed: posenet +2022-08-20 09:37:26 STATE: test-node-wasm.js start movenet +2022-08-20 09:37:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:26 STATE: test-node-wasm.js event: image +2022-08-20 09:37:26 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet +2022-08-20 09:37:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:26 DATA:  test-node-wasm.js result: performance: load: null total: 235 +2022-08-20 09:37:26 STATE: test-node-wasm.js passed: movenet +2022-08-20 09:37:26 INFO:  test-node-wasm.js test face matching +2022-08-20 09:37:26 STATE: test-node-wasm.js passed: face database 40 +2022-08-20 09:37:26 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} +2022-08-20 09:37:26 INFO:  test-node-wasm.js test face similarity alternative +2022-08-20 09:37:26 STATE: test-node-wasm.js start face embeddings +2022-08-20 09:37:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:26 STATE: test-node-wasm.js event: image +2022-08-20 09:37:27 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-20 09:37:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:27 DATA:  test-node-wasm.js result: performance: load: null total: 235 +2022-08-20 09:37:27 STATE: test-node-wasm.js passed: mobilefacenet {"embedding":192} +2022-08-20 09:37:27 STATE: test-node-wasm.js start face embeddings +2022-08-20 09:37:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:27 STATE: test-node-wasm.js event: image +2022-08-20 09:37:27 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-20 09:37:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:27 DATA:  test-node-wasm.js result: performance: load: null total: 278 +2022-08-20 09:37:27 STATE: test-node-wasm.js passed: insightface {"embedding":512} +2022-08-20 09:37:27 INFO:  test-node-wasm.js test face attention +2022-08-20 09:37:27 STATE: test-node-wasm.js start face attention +2022-08-20 09:37:28 WARN:  test-node-wasm.js missing kernel ops {"title":"face attention","model":"facemesh","url":"https://vladmandic.github.io/human-models/models/facemesh-attention.json","missing":["atan2"],"backkend":"wasm"} +2022-08-20 09:37:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:28 STATE: test-node-wasm.js event: image +2022-08-20 09:37:28 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face attention +2022-08-20 09:37:28 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 1 gesture: 2 object: 0 person: 0 {} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:28 DATA:  test-node-wasm.js result: performance: load: null total: 119 +2022-08-20 09:37:28 ERROR: test-node-wasm.js failed: face attention {"annotations":0} +2022-08-20 09:37:28 INFO:  test-node-wasm.js test detectors +2022-08-20 09:37:28 STATE: test-node-wasm.js start detectors +2022-08-20 09:37:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:28 STATE: test-node-wasm.js event: image +2022-08-20 09:37:28 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg detectors +2022-08-20 09:37:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:28 DATA:  test-node-wasm.js result: performance: load: null total: 114 +2022-08-20 09:37:28 STATE: test-node-wasm.js passed: detector result face match +2022-08-20 09:37:28 STATE: test-node-wasm.js passed: detector result hand match +2022-08-20 09:37:28 INFO:  test-node-wasm.js test: multi-instance +2022-08-20 09:37:28 STATE: test-node-wasm.js start multi instance +2022-08-20 09:37:28 STATE: test-node-wasm.js event: image +2022-08-20 09:37:28 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:28 STATE: test-node-wasm.js passed: detect: random multi instance +2022-08-20 09:37:28 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-08-20 09:37:28 DATA:  test-node-wasm.js result: performance: load: null total: 97 +2022-08-20 09:37:28 INFO:  test-node-wasm.js test: first instance +2022-08-20 09:37:28 STATE: test-node-wasm.js start multi instance +2022-08-20 09:37:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-20 09:37:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:29 DATA:  test-node-wasm.js result: performance: load: null total: 110 +2022-08-20 09:37:29 INFO:  test-node-wasm.js test: second instance +2022-08-20 09:37:29 STATE: test-node-wasm.js start multi instance +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-20 09:37:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:29 DATA:  test-node-wasm.js result: performance: load: null total: 106 +2022-08-20 09:37:29 INFO:  test-node-wasm.js test: concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js start concurrent +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-20 09:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-20 09:37:30 STATE: test-node-wasm.js event: image +2022-08-20 09:37:30 STATE: test-node-wasm.js event: image +2022-08-20 09:37:30 STATE: test-node-wasm.js event: image +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1283 +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1283 +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1284 +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1284 +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1284 +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1284 +2022-08-20 09:37:31 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 972 +2022-08-20 09:37:31 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:31 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 972 +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-20 09:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 972 +2022-08-20 09:37:31 INFO:  test-node-wasm.js test: monkey-patch +2022-08-20 09:37:31 STATE: test-node-wasm.js event: image +2022-08-20 09:37:31 STATE: test-node-wasm.js event: detect +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: monkey patch +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: segmentation [65536] +2022-08-20 09:37:31 STATE: test-node-wasm.js passeed: equal usage +2022-08-20 09:37:31 INFO:  test-node-wasm.js test: input compare +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-20 09:37:31 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 +2022-08-20 09:37:31 INFO:  test-node-wasm.js events: {"image":29,"detect":29,"warmup":2} +2022-08-20 09:37:31 INFO:  test-node-wasm.js tensors 4107 +2022-08-20 09:37:31 INFO:  test-node-wasm.js test complete: 19995 ms +2022-08-20 09:37:31 STATE: all tests complete +2022-08-20 09:37:31 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"../demo/nodejs/node-fetch.js","passed":1,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"../demo/facematch/node-match.js","passed":1,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"test-node.js","passed":125,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"test-node-gpu.js","passed":125,"failed":0} +2022-08-20 09:37:31 INFO:  status {"test":"test-node-wasm.js","passed":124,"failed":2} +2022-08-20 09:37:31 INFO:  failures {"count":2} +2022-08-20 09:37:31 WARN:  failed {"test":"test-node-wasm.js","message":["error",["failed: nanodet",[]]]} +2022-08-20 09:37:31 WARN:  failed {"test":"test-node-wasm.js","message":["error",["failed: face attention",{"annotations":0}]]} diff --git a/typedoc/classes/Env.html b/typedoc/classes/Env.html index 89256e7d..0cb6e0ba 100644 --- a/typedoc/classes/Env.html +++ b/typedoc/classes/Env.html @@ -1,16 +1,16 @@ -Env | @vladmandic/human - v2.9.3
+Env | @vladmandic/human - v2.9.4
+
  • The search index is not available
  • @vladmandic/human - v2.9.4
    @@ -299,7 +299,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/classes/GraphModel.html b/typedoc/classes/GraphModel.html index 275fab32..cee4be3e 100644 --- a/typedoc/classes/GraphModel.html +++ b/typedoc/classes/GraphModel.html @@ -1,16 +1,16 @@ -GraphModel | @vladmandic/human - v2.9.3
        +GraphModel | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -383,7 +383,7 @@ scheme-based string shortcut for IOHandler.

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/classes/Human.html b/typedoc/classes/Human.html index 153d3211..cb48871e 100644 --- a/typedoc/classes/Human.html +++ b/typedoc/classes/Human.html @@ -1,16 +1,16 @@ -Human | @vladmandic/human - v2.9.3
        +Human | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -820,7 +820,7 @@ Interpolation is based on time since last known result so can be called independ

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/classes/Tensor-1.html b/typedoc/classes/Tensor-1.html index 79e7963a..38e7e717 100644 --- a/typedoc/classes/Tensor-1.html +++ b/typedoc/classes/Tensor-1.html @@ -1,16 +1,16 @@ -Tensor | @vladmandic/human - v2.9.3
        +Tensor | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -421,7 +421,7 @@ parameter, so can not use an user defined size to create the buffer.

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/classes/models-1.Models.html b/typedoc/classes/models-1.Models.html index 4931e92b..a1f297ab 100644 --- a/typedoc/classes/models-1.Models.html +++ b/typedoc/classes/models-1.Models.html @@ -1,16 +1,16 @@ -Models | @vladmandic/human - v2.9.3
        +Models | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -205,7 +205,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/enums/Rank.html b/typedoc/enums/Rank.html index c8cd5d82..d35cb13d 100644 --- a/typedoc/enums/Rank.html +++ b/typedoc/enums/Rank.html @@ -1,16 +1,16 @@ -Rank | @vladmandic/human - v2.9.3
        +Rank | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -48,7 +48,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/draw.canvas.html b/typedoc/functions/draw.canvas.html index b89e5c85..201c2ae9 100644 --- a/typedoc/functions/draw.canvas.html +++ b/typedoc/functions/draw.canvas.html @@ -1,16 +1,16 @@ -canvas | @vladmandic/human - v2.9.3
        +canvas | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -46,7 +46,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/draw.person.html b/typedoc/functions/draw.person.html index 35f22931..afab5d6a 100644 --- a/typedoc/functions/draw.person.html +++ b/typedoc/functions/draw.person.html @@ -1,16 +1,16 @@ -person | @vladmandic/human - v2.9.3
        +person | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -48,7 +48,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/match.distance.html b/typedoc/functions/match.distance.html index f8bf6abe..7fa645ba 100644 --- a/typedoc/functions/match.distance.html +++ b/typedoc/functions/match.distance.html @@ -1,16 +1,16 @@ -distance | @vladmandic/human - v2.9.3
        +distance | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -56,7 +56,7 @@ default is 20 which normalizes results to similarity above 0.5 can be considered

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/match.match.html b/typedoc/functions/match.match.html index 3b408269..9d4f61ae 100644 --- a/typedoc/functions/match.match.html +++ b/typedoc/functions/match.match.html @@ -1,16 +1,16 @@ -match | @vladmandic/human - v2.9.3
        +match | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -67,7 +67,7 @@ Returns

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/match.similarity.html b/typedoc/functions/match.similarity.html index a47578bc..0381d42a 100644 --- a/typedoc/functions/match.similarity.html +++ b/typedoc/functions/match.similarity.html @@ -1,16 +1,16 @@ -similarity | @vladmandic/human - v2.9.3
        +similarity | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -60,7 +60,7 @@ Returns similarity between two face descriptors normalized to 0..1 range where 0

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/models-1.getModelStats.html b/typedoc/functions/models-1.getModelStats.html index 7d321892..30db59bc 100644 --- a/typedoc/functions/models-1.getModelStats.html +++ b/typedoc/functions/models-1.getModelStats.html @@ -1,16 +1,16 @@ -getModelStats | @vladmandic/human - v2.9.3
        +getModelStats | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -42,7 +42,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/models-1.load.html b/typedoc/functions/models-1.load.html index 93b79a10..994ff085 100644 --- a/typedoc/functions/models-1.load.html +++ b/typedoc/functions/models-1.load.html @@ -1,16 +1,16 @@ -load | @vladmandic/human - v2.9.3
        +load | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -44,7 +44,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/models-1.reset.html b/typedoc/functions/models-1.reset.html index 8277f0bb..8538940c 100644 --- a/typedoc/functions/models-1.reset.html +++ b/typedoc/functions/models-1.reset.html @@ -1,16 +1,16 @@ -reset | @vladmandic/human - v2.9.3
        +reset | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -42,7 +42,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/models-1.validate.html b/typedoc/functions/models-1.validate.html index 8365fba9..6970d982 100644 --- a/typedoc/functions/models-1.validate.html +++ b/typedoc/functions/models-1.validate.html @@ -1,16 +1,16 @@ -validate | @vladmandic/human - v2.9.3
        +validate | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -42,7 +42,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/functions/models-1.validateModel.html b/typedoc/functions/models-1.validateModel.html index fc6a1a77..c35b4f1c 100644 --- a/typedoc/functions/models-1.validateModel.html +++ b/typedoc/functions/models-1.validateModel.html @@ -1,16 +1,16 @@ -validateModel | @vladmandic/human - v2.9.3
        +validateModel | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -46,7 +46,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/index.html b/typedoc/index.html index f2f1c884..7667c8ca 100644 --- a/typedoc/index.html +++ b/typedoc/index.html @@ -1,15 +1,15 @@ -@vladmandic/human - v2.9.3
        +@vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    -

    @vladmandic/human - v2.9.3

    +

    @vladmandic/human - v2.9.4

    @@ -141,7 +141,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/BodyConfig.html b/typedoc/interfaces/BodyConfig.html index 554cf634..da179ede 100644 --- a/typedoc/interfaces/BodyConfig.html +++ b/typedoc/interfaces/BodyConfig.html @@ -1,16 +1,16 @@ -BodyConfig | @vladmandic/human - v2.9.3
        +BodyConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -104,7 +104,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/BodyKeypoint.html b/typedoc/interfaces/BodyKeypoint.html index 6fd2b52e..207720c0 100644 --- a/typedoc/interfaces/BodyKeypoint.html +++ b/typedoc/interfaces/BodyKeypoint.html @@ -1,16 +1,16 @@ -BodyKeypoint | @vladmandic/human - v2.9.3
        +BodyKeypoint | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -88,7 +88,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/BodyResult.html b/typedoc/interfaces/BodyResult.html index 4c6ef1f1..b60c05d6 100644 --- a/typedoc/interfaces/BodyResult.html +++ b/typedoc/interfaces/BodyResult.html @@ -1,16 +1,16 @@ -BodyResult | @vladmandic/human - v2.9.3
        +BodyResult | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -96,7 +96,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/Config.html b/typedoc/interfaces/Config.html index 0b700c13..4ae47db1 100644 --- a/typedoc/interfaces/Config.html +++ b/typedoc/interfaces/Config.html @@ -1,16 +1,16 @@ -Config | @vladmandic/human - v2.9.3
        +Config | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -229,7 +229,7 @@ any errors will be printed on console but will be treated as non-fatal

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceAntiSpoofConfig.html b/typedoc/interfaces/FaceAntiSpoofConfig.html index 73c40756..1c864e26 100644 --- a/typedoc/interfaces/FaceAntiSpoofConfig.html +++ b/typedoc/interfaces/FaceAntiSpoofConfig.html @@ -1,16 +1,16 @@ -FaceAntiSpoofConfig | @vladmandic/human - v2.9.3
        +FaceAntiSpoofConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -88,7 +88,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceAttentionConfig.html b/typedoc/interfaces/FaceAttentionConfig.html index 6b9124da..8bdc6c81 100644 --- a/typedoc/interfaces/FaceAttentionConfig.html +++ b/typedoc/interfaces/FaceAttentionConfig.html @@ -1,16 +1,16 @@ -FaceAttentionConfig | @vladmandic/human - v2.9.3
        +FaceAttentionConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -88,7 +88,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceConfig.html b/typedoc/interfaces/FaceConfig.html index 06d10da9..a606e097 100644 --- a/typedoc/interfaces/FaceConfig.html +++ b/typedoc/interfaces/FaceConfig.html @@ -1,16 +1,16 @@ -FaceConfig | @vladmandic/human - v2.9.3
        +FaceConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -142,7 +142,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceDescriptionConfig.html b/typedoc/interfaces/FaceDescriptionConfig.html index 9f164d49..879560dd 100644 --- a/typedoc/interfaces/FaceDescriptionConfig.html +++ b/typedoc/interfaces/FaceDescriptionConfig.html @@ -1,16 +1,16 @@ -FaceDescriptionConfig | @vladmandic/human - v2.9.3
        +FaceDescriptionConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -99,7 +99,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceDetectorConfig.html b/typedoc/interfaces/FaceDetectorConfig.html index c96d15b3..cd49fa88 100644 --- a/typedoc/interfaces/FaceDetectorConfig.html +++ b/typedoc/interfaces/FaceDetectorConfig.html @@ -1,16 +1,16 @@ -FaceDetectorConfig | @vladmandic/human - v2.9.3
        +FaceDetectorConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -138,7 +138,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceEmotionConfig.html b/typedoc/interfaces/FaceEmotionConfig.html index 00cdc5ec..b89c8ca5 100644 --- a/typedoc/interfaces/FaceEmotionConfig.html +++ b/typedoc/interfaces/FaceEmotionConfig.html @@ -1,16 +1,16 @@ -FaceEmotionConfig | @vladmandic/human - v2.9.3
        +FaceEmotionConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -96,7 +96,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceGearConfig.html b/typedoc/interfaces/FaceGearConfig.html index f7bfc8fd..791e80b2 100644 --- a/typedoc/interfaces/FaceGearConfig.html +++ b/typedoc/interfaces/FaceGearConfig.html @@ -1,16 +1,16 @@ -FaceGearConfig | @vladmandic/human - v2.9.3
        +FaceGearConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -96,7 +96,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceIrisConfig.html b/typedoc/interfaces/FaceIrisConfig.html index 2100937b..d108e1d3 100644 --- a/typedoc/interfaces/FaceIrisConfig.html +++ b/typedoc/interfaces/FaceIrisConfig.html @@ -1,16 +1,16 @@ -FaceIrisConfig | @vladmandic/human - v2.9.3
        +FaceIrisConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -88,7 +88,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceLivenessConfig.html b/typedoc/interfaces/FaceLivenessConfig.html index 9e6c68f9..ecbb76e5 100644 --- a/typedoc/interfaces/FaceLivenessConfig.html +++ b/typedoc/interfaces/FaceLivenessConfig.html @@ -1,16 +1,16 @@ -FaceLivenessConfig | @vladmandic/human - v2.9.3
        +FaceLivenessConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -88,7 +88,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceMeshConfig.html b/typedoc/interfaces/FaceMeshConfig.html index baa589b5..662e66cd 100644 --- a/typedoc/interfaces/FaceMeshConfig.html +++ b/typedoc/interfaces/FaceMeshConfig.html @@ -1,16 +1,16 @@ -FaceMeshConfig | @vladmandic/human - v2.9.3
        +FaceMeshConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -96,7 +96,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FaceResult.html b/typedoc/interfaces/FaceResult.html index 3ec9aa7f..4fcdba99 100644 --- a/typedoc/interfaces/FaceResult.html +++ b/typedoc/interfaces/FaceResult.html @@ -1,16 +1,16 @@ -FaceResult | @vladmandic/human - v2.9.3
        +FaceResult | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -212,7 +212,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/FilterConfig.html b/typedoc/interfaces/FilterConfig.html index aeaa8506..1753cc8c 100644 --- a/typedoc/interfaces/FilterConfig.html +++ b/typedoc/interfaces/FilterConfig.html @@ -1,16 +1,16 @@ -FilterConfig | @vladmandic/human - v2.9.3
        +FilterConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -217,7 +217,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/GenericConfig.html b/typedoc/interfaces/GenericConfig.html index ac52d2c7..180778d0 100644 --- a/typedoc/interfaces/GenericConfig.html +++ b/typedoc/interfaces/GenericConfig.html @@ -1,16 +1,16 @@ -GenericConfig | @vladmandic/human - v2.9.3
        +GenericConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -97,7 +97,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/GestureConfig.html b/typedoc/interfaces/GestureConfig.html index 42d82594..f427b677 100644 --- a/typedoc/interfaces/GestureConfig.html +++ b/typedoc/interfaces/GestureConfig.html @@ -1,16 +1,16 @@ -GestureConfig | @vladmandic/human - v2.9.3
        +GestureConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -56,7 +56,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/HandConfig.html b/typedoc/interfaces/HandConfig.html index f62e0724..dcf8bc52 100644 --- a/typedoc/interfaces/HandConfig.html +++ b/typedoc/interfaces/HandConfig.html @@ -1,16 +1,16 @@ -HandConfig | @vladmandic/human - v2.9.3
        +HandConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -154,7 +154,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/HandResult.html b/typedoc/interfaces/HandResult.html index 3f5458ab..c2ab572c 100644 --- a/typedoc/interfaces/HandResult.html +++ b/typedoc/interfaces/HandResult.html @@ -1,16 +1,16 @@ -HandResult | @vladmandic/human - v2.9.3
        +HandResult | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -128,7 +128,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/ObjectConfig.html b/typedoc/interfaces/ObjectConfig.html index 6750d602..fb9a17be 100644 --- a/typedoc/interfaces/ObjectConfig.html +++ b/typedoc/interfaces/ObjectConfig.html @@ -1,16 +1,16 @@ -ObjectConfig | @vladmandic/human - v2.9.3
        +ObjectConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -112,7 +112,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/ObjectResult.html b/typedoc/interfaces/ObjectResult.html index 2fe6bb49..4eee035c 100644 --- a/typedoc/interfaces/ObjectResult.html +++ b/typedoc/interfaces/ObjectResult.html @@ -1,16 +1,16 @@ -ObjectResult | @vladmandic/human - v2.9.3
        +ObjectResult | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -96,7 +96,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/PersonResult.html b/typedoc/interfaces/PersonResult.html index 9d80cdfc..f2bdd98b 100644 --- a/typedoc/interfaces/PersonResult.html +++ b/typedoc/interfaces/PersonResult.html @@ -1,16 +1,16 @@ -PersonResult | @vladmandic/human - v2.9.3
        +PersonResult | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -114,7 +114,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/Result.html b/typedoc/interfaces/Result.html index 6cea470b..82fa3aa8 100644 --- a/typedoc/interfaces/Result.html +++ b/typedoc/interfaces/Result.html @@ -1,16 +1,16 @@ -Result | @vladmandic/human - v2.9.3
        +Result | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -129,7 +129,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/interfaces/SegmentationConfig.html b/typedoc/interfaces/SegmentationConfig.html index f6057a4b..a35e06ed 100644 --- a/typedoc/interfaces/SegmentationConfig.html +++ b/typedoc/interfaces/SegmentationConfig.html @@ -1,16 +1,16 @@ -SegmentationConfig | @vladmandic/human - v2.9.3
        +SegmentationConfig | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -100,7 +100,7 @@ for two-phase models such as face and hand caching applies to bounding boxes det

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/modules/Tensor.html b/typedoc/modules/Tensor.html index 51e0f940..7f621aa3 100644 --- a/typedoc/modules/Tensor.html +++ b/typedoc/modules/Tensor.html @@ -1,16 +1,16 @@ -Tensor | @vladmandic/human - v2.9.3
        +Tensor | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -69,7 +69,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/modules/match.html b/typedoc/modules/match.html index 8e5a1557..5e914b91 100644 --- a/typedoc/modules/match.html +++ b/typedoc/modules/match.html @@ -1,16 +1,16 @@ -match | @vladmandic/human - v2.9.3
        +match | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -48,7 +48,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/modules/models-1.html b/typedoc/modules/models-1.html index c65934ca..dcec3b51 100644 --- a/typedoc/modules/models-1.html +++ b/typedoc/modules/models-1.html @@ -1,16 +1,16 @@ -models | @vladmandic/human - v2.9.3
        +models | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -54,7 +54,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/AnyCanvas.html b/typedoc/types/AnyCanvas.html index f09dec8f..4c652324 100644 --- a/typedoc/types/AnyCanvas.html +++ b/typedoc/types/AnyCanvas.html @@ -1,16 +1,16 @@ -AnyCanvas | @vladmandic/human - v2.9.3
        +AnyCanvas | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    AnyCanvas: HTMLCanvasElement | OffscreenCanvas
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/AnyImage.html b/typedoc/types/AnyImage.html index c78da6d8..c237cec0 100644 --- a/typedoc/types/AnyImage.html +++ b/typedoc/types/AnyImage.html @@ -1,16 +1,16 @@ -AnyImage | @vladmandic/human - v2.9.3
        +AnyImage | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    AnyImage: HTMLImageElement | typeof Image
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/AnyVideo.html b/typedoc/types/AnyVideo.html index 4cc74ec1..b1341ea4 100644 --- a/typedoc/types/AnyVideo.html +++ b/typedoc/types/AnyVideo.html @@ -1,16 +1,16 @@ -AnyVideo | @vladmandic/human - v2.9.3
        +AnyVideo | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    AnyVideo: HTMLMediaElement | HTMLVideoElement
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/BackendType.html b/typedoc/types/BackendType.html index 470b9358..f631b000 100644 --- a/typedoc/types/BackendType.html +++ b/typedoc/types/BackendType.html @@ -1,16 +1,16 @@ -BackendType | @vladmandic/human - v2.9.3
        +BackendType | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    BackendType: ["cpu", "wasm", "webgl", "humangl", "tensorflow", "webgpu"]
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/BodyAnnotation.html b/typedoc/types/BodyAnnotation.html index c456d761..2c1c7a23 100644 --- a/typedoc/types/BodyAnnotation.html +++ b/typedoc/types/BodyAnnotation.html @@ -1,16 +1,16 @@ -BodyAnnotation | @vladmandic/human - v2.9.3
        +BodyAnnotation | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    BodyAnnotationBlazePose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "leftEye" | "rightEye" | "mouth"
    BodyAnnotationEfficientPose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "head"
    BodyGesture: `leaning ${"left" | "right"}` | `raise ${"left" | "right"} hand` | "i give up"
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/BodyLandmark.html b/typedoc/types/BodyLandmark.html index 754e8581..056c62ae 100644 --- a/typedoc/types/BodyLandmark.html +++ b/typedoc/types/BodyLandmark.html @@ -1,16 +1,16 @@ -BodyLandmark | @vladmandic/human - v2.9.3
        +BodyLandmark | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    BodyLandmarkBlazePose: "nose" | "leftEyeInside" | "leftEye" | "leftEyeOutside" | "rightEyeInside" | "rightEye" | "rightEyeOutside" | "leftEar" | "rightEar" | "leftMouth" | "rightMouth" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftPinky" | "rightPinky" | "leftIndex" | "rightIndex" | "leftThumb" | "rightThumb" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle" | "leftHeel" | "rightHeel" | "leftFoot" | "rightFoot" | "bodyCenter" | "bodyTop" | "leftPalm" | "leftHand" | "rightPalm" | "rightHand"
    BodyLandmarkEfficientNet: "head" | "neck" | "rightShoulder" | "rightElbow" | "rightWrist" | "chest" | "leftShoulder" | "leftElbow" | "leftWrist" | "bodyCenter" | "rightHip" | "rightKnee" | "rightAnkle" | "leftHip" | "leftKnee" | "leftAnkle"
    BodyLandmarkMoveNet: "nose" | "leftEye" | "rightEye" | "leftEar" | "rightEar" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle"
    BodyLandmarkPoseNet: "nose" | "leftEye" | "rightEye" | "leftEar" | "rightEar" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle"
    Box: [number, number, number, number]
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/DrawOptions.html b/typedoc/types/DrawOptions.html index 4cb55bec..4b450705 100644 --- a/typedoc/types/DrawOptions.html +++ b/typedoc/types/DrawOptions.html @@ -1,16 +1,16 @@ -DrawOptions | @vladmandic/human - v2.9.3
        +DrawOptions | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    DrawOptions: { alpha: number; color: string; drawAttention: boolean; drawBoxes: boolean; drawGaze: boolean; drawGestures: boolean; drawLabels: boolean; drawPoints: boolean; drawPolygons: boolean; fillPolygons: boolean; font: string; labelColor: string; lineHeight: number; lineWidth: number; pointSize: number; roundRect: number; shadowColor: string; useCurves: boolean; useDepth: boolean }
    @@ -116,7 +116,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/Emotion.html b/typedoc/types/Emotion.html index 8145b86e..7ea08b0a 100644 --- a/typedoc/types/Emotion.html +++ b/typedoc/types/Emotion.html @@ -1,16 +1,16 @@ -Emotion | @vladmandic/human - v2.9.3
        +Emotion | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    Emotion: "angry" | "disgust" | "fear" | "happy" | "sad" | "surprise" | "neutral"
    Events: "create" | "load" | "image" | "result" | "warmup" | "error"
    @@ -41,7 +41,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/ExternalCanvas.html b/typedoc/types/ExternalCanvas.html index 5743abf0..11196f1a 100644 --- a/typedoc/types/ExternalCanvas.html +++ b/typedoc/types/ExternalCanvas.html @@ -1,16 +1,16 @@ -ExternalCanvas | @vladmandic/human - v2.9.3
        +ExternalCanvas | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    ExternalCanvas: typeof Canvas
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/FaceGesture.html b/typedoc/types/FaceGesture.html index 8f596406..de924df6 100644 --- a/typedoc/types/FaceGesture.html +++ b/typedoc/types/FaceGesture.html @@ -1,16 +1,16 @@ -FaceGesture | @vladmandic/human - v2.9.3
        +FaceGesture | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    FaceGesture: `facing ${"left" | "center" | "right"}` | `blink ${"left" | "right"} eye` | `mouth ${number}% open` | `head ${"up" | "down"}`
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/FaceLandmark.html b/typedoc/types/FaceLandmark.html index 64de71ac..310984b0 100644 --- a/typedoc/types/FaceLandmark.html +++ b/typedoc/types/FaceLandmark.html @@ -1,16 +1,16 @@ -FaceLandmark | @vladmandic/human - v2.9.3
        +FaceLandmark | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    FaceLandmark: "leftEye" | "rightEye" | "nose" | "mouth" | "leftEar" | "rightEar" | "symmetryLine" | "silhouette" | "lipsUpperOuter" | "lipsLowerOuter" | "lipsUpperInner" | "lipsLowerInner" | "rightEyeUpper0" | "rightEyeLower0" | "rightEyeUpper1" | "rightEyeLower1" | "rightEyeUpper2" | "rightEyeLower2" | "rightEyeLower3" | "rightEyebrowUpper" | "rightEyebrowLower" | "rightEyeIris" | "leftEyeUpper0" | "leftEyeLower0" | "leftEyeUpper1" | "leftEyeLower1" | "leftEyeUpper2" | "leftEyeLower2" | "leftEyeLower3" | "leftEyebrowUpper" | "leftEyebrowLower" | "leftEyeIris" | "midwayBetweenEyes" | "noseTip" | "noseBottom" | "noseRightCorner" | "noseLeftCorner" | "rightCheek" | "leftCheek"
    Finger: "index" | "middle" | "pinky" | "ring" | "thumb" | "palm"
    FingerCurl: "none" | "half" | "full"
    FingerDirection: "verticalUp" | "verticalDown" | "horizontalLeft" | "horizontalRight" | "diagonalUpRight" | "diagonalUpLeft" | "diagonalDownRight" | "diagonalDownLeft"
    Gender: "male" | "female" | "unknown"
    GestureResult: { face: number; gesture: FaceGesture } | { gesture: IrisGesture; iris: number } | { body: number; gesture: BodyGesture } | { gesture: HandGesture; hand: number }
    @@ -39,7 +39,7 @@ Each result has:

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/HandGesture.html b/typedoc/types/HandGesture.html index 5a789ed3..d0c5cb3d 100644 --- a/typedoc/types/HandGesture.html +++ b/typedoc/types/HandGesture.html @@ -1,16 +1,16 @@ -HandGesture | @vladmandic/human - v2.9.3
        +HandGesture | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    HandGesture: `${"thumb" | "index" | "middle" | "ring" | "pinky"} forward` | `${"thumb" | "index" | "middle" | "ring" | "pinky"} up` | "victory" | "thumbs up"
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/HandType.html b/typedoc/types/HandType.html index 0ce3b54d..ad47aaad 100644 --- a/typedoc/types/HandType.html +++ b/typedoc/types/HandType.html @@ -1,16 +1,16 @@ -HandType | @vladmandic/human - v2.9.3
        +HandType | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    HandType: "hand" | "fist" | "pinch" | "point" | "face" | "tip" | "pinchtip"
    ImageObjects: ImageData | ImageBitmap
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/Input.html b/typedoc/types/Input.html index cc420f04..5b908ec3 100644 --- a/typedoc/types/Input.html +++ b/typedoc/types/Input.html @@ -1,16 +1,16 @@ -Input | @vladmandic/human - v2.9.3
        +Input | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/IrisGesture.html b/typedoc/types/IrisGesture.html index 8d722b3e..139139aa 100644 --- a/typedoc/types/IrisGesture.html +++ b/typedoc/types/IrisGesture.html @@ -1,16 +1,16 @@ -IrisGesture | @vladmandic/human - v2.9.3
        +IrisGesture | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    IrisGesture: "facing center" | `looking ${"left" | "right" | "up" | "down"}` | "looking center"
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/ModelInfo.html b/typedoc/types/ModelInfo.html index 9b5ee579..7f184549 100644 --- a/typedoc/types/ModelInfo.html +++ b/typedoc/types/ModelInfo.html @@ -1,16 +1,16 @@ -ModelInfo | @vladmandic/human - v2.9.3
        +ModelInfo | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    ModelInfo: { inCache: boolean; name: string; sizeDesired: number; sizeFromManifest: number; sizeLoadedWeights: number }
    @@ -45,7 +45,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/ObjectType.html b/typedoc/types/ObjectType.html index 24ae28c3..f2156b0a 100644 --- a/typedoc/types/ObjectType.html +++ b/typedoc/types/ObjectType.html @@ -1,16 +1,16 @@ -ObjectType | @vladmandic/human - v2.9.3
        +ObjectType | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    ObjectType: "person" | "bicycle" | "car" | "motorcycle" | "airplane" | "bus" | "train" | "truck" | "boat" | "traffic light" | "fire hydrant" | "stop sign" | "parking meter" | "bench" | "bird" | "cat" | "dog" | "horse" | "sheep" | "cow" | "elephant" | "bear" | "zebra" | "giraffe" | "backpack" | "umbrella" | "handbag" | "tie" | "suitcase" | "frisbee" | "skis" | "snowboard" | "sports ball" | "kite" | "baseball bat" | "baseball glove" | "skateboard" | "surfboard" | "tennis racket" | "bottle" | "wine glass" | "cup" | "fork" | "knife" | "spoon" | "bowl" | "banana" | "apple" | "sandwich" | "orange" | "broccoli" | "carrot" | "hot dog" | "pizza" | "donut" | "cake" | "chair" | "couch" | "potted plant" | "bed" | "dining table" | "toilet" | "tv" | "laptop" | "mouse" | "remote" | "keyboard" | "cell phone" | "microwave" | "oven" | "toaster" | "sink" | "refrigerator" | "book" | "clock" | "vase" | "scissors" | "teddy bear" | "hair drier" | "toothbrush"
    Point: [number, number, number?]
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/Race.html b/typedoc/types/Race.html index 8a941476..dab59983 100644 --- a/typedoc/types/Race.html +++ b/typedoc/types/Race.html @@ -1,16 +1,16 @@ -Race | @vladmandic/human - v2.9.3
        +Race | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    Race: "white" | "black" | "asian" | "indian" | "other"
    TensorLike: TypedArray | number | boolean | string | RecursiveArray<number | number[] | TypedArray> | RecursiveArray<boolean> | RecursiveArray<string> | Uint8Array[]
    @@ -35,7 +35,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/WarmupType.html b/typedoc/types/WarmupType.html index c620a3a6..742e5b0e 100644 --- a/typedoc/types/WarmupType.html +++ b/typedoc/types/WarmupType.html @@ -1,16 +1,16 @@ -WarmupType | @vladmandic/human - v2.9.3
        +WarmupType | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    WarmupType: ["" | "none" | "face" | "full" | "body"]
    @@ -34,7 +34,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/match.Descriptor.html b/typedoc/types/match.Descriptor.html index cc74ce29..28d6aba3 100644 --- a/typedoc/types/match.Descriptor.html +++ b/typedoc/types/match.Descriptor.html @@ -1,16 +1,16 @@ -Descriptor | @vladmandic/human - v2.9.3
        +Descriptor | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -35,7 +35,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/match.MatchOptions.html b/typedoc/types/match.MatchOptions.html index 21a2c98c..19ab5aed 100644 --- a/typedoc/types/match.MatchOptions.html +++ b/typedoc/types/match.MatchOptions.html @@ -1,16 +1,16 @@ -MatchOptions | @vladmandic/human - v2.9.3
        +MatchOptions | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -33,7 +33,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/models-1.KernelOps.html b/typedoc/types/models-1.KernelOps.html index 40ec1634..6246bcb3 100644 --- a/typedoc/types/models-1.KernelOps.html +++ b/typedoc/types/models-1.KernelOps.html @@ -1,16 +1,16 @@ -KernelOps | @vladmandic/human - v2.9.3
        +KernelOps | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -44,7 +44,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/types/models-1.ModelStats.html b/typedoc/types/models-1.ModelStats.html index 29cecae1..d8c9f82c 100644 --- a/typedoc/types/models-1.ModelStats.html +++ b/typedoc/types/models-1.ModelStats.html @@ -1,16 +1,16 @@ -ModelStats | @vladmandic/human - v2.9.3
        +ModelStats | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -54,7 +54,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/variables/defaults.html b/typedoc/variables/defaults.html index 8a21264e..99127eb6 100644 --- a/typedoc/variables/defaults.html +++ b/typedoc/variables/defaults.html @@ -1,16 +1,16 @@ -defaults | @vladmandic/human - v2.9.3
        +defaults | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    defaults: Config = ...
    @@ -36,7 +36,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/variables/draw.options.html b/typedoc/variables/draw.options.html index 36b9c1ba..ddcf28f1 100644 --- a/typedoc/variables/draw.options.html +++ b/typedoc/variables/draw.options.html @@ -1,16 +1,16 @@ -options | @vladmandic/human - v2.9.3
        +options | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4
    @@ -35,7 +35,7 @@

    Modules

      -
    • @vladmandic/human - v2.9.3 +
    • @vladmandic/human - v2.9.4
      • Tensor
      • draw
      • diff --git a/typedoc/variables/env-1.html b/typedoc/variables/env-1.html index 956a8be8..a00ca1c7 100644 --- a/typedoc/variables/env-1.html +++ b/typedoc/variables/env-1.html @@ -1,16 +1,16 @@ -env | @vladmandic/human - v2.9.3
        +env | @vladmandic/human - v2.9.4
        +
      • The search index is not available
      @vladmandic/human - v2.9.4