diff --git a/CHANGELOG.md b/CHANGELOG.md index 24f99635..f0a8340a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,12 @@ ## Changelog -### **HEAD -> main** 2021/10/25 mandic00@live.com +### **2.4.1** 2021/10/25 mandic00@live.com + +### **origin/main** 2021/10/25 mandic00@live.com + +- increase face similarity match resolution - time based caching - turn on minification - initial work on skiptime diff --git a/dist/human.custom.esm.js b/dist/human.custom.esm.js index 0f6e600a..5d437227 100644 --- a/dist/human.custom.esm.js +++ b/dist/human.custom.esm.js @@ -7078,7 +7078,7 @@ return a / b;`,lre=` gl_FragColor.a = c22.a; } `;var xx=(e,t,n)=>{let s=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(s,(r,a)=>(n[a]=0,r))},N6=class{constructor(t,n,s){de(this,"uniform",{});de(this,"attribute",{});de(this,"gl");de(this,"id");de(this,"compile",(t,n)=>{let s=this.gl.createShader(n);if(this.gl.shaderSource(s,t),this.gl.compileShader(s),!this.gl.getShaderParameter(s,this.gl.COMPILE_STATUS))throw new Error(`filter: gl compile failed: ${this.gl.getShaderInfoLog(s)}`);return s});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(),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))throw new Error(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);this.gl.useProgram(this.id),xx(n,"attribute",this.attribute);for(let o in this.attribute)this.attribute[o]=this.gl.getAttribLocation(this.id,o);xx(n,"uniform",this.uniform),xx(s,"uniform",this.uniform);for(let o in this.uniform)this.uniform[o]=this.gl.getUniformLocation(this.id,o)}};function E6(){let e=0,t=null,n=!1,s=-1,r=[null,null],a=[],o=null,i=null,l=Kn(100,100),c={},u={INTERMEDIATE:1},d=l.getContext("webgl");if(!d)throw new Error("filter: cannot get webgl context");function p(y,x){if(!(y===l.width&&x===l.height)){if(l.width=y,l.height=x,!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=d.createBuffer(),d.bindBuffer(d.ARRAY_BUFFER,o),d.bufferData(d.ARRAY_BUFFER,b,d.STATIC_DRAW),d.pixelStorei(d.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}d.viewport(0,0,l.width,l.height),r=[null,null]}}function h(y,x){let b=d.createFramebuffer();d.bindFramebuffer(d.FRAMEBUFFER,b);let w=d.createRenderbuffer();d.bindRenderbuffer(d.RENDERBUFFER,w);let k=d.createTexture();return d.bindTexture(d.TEXTURE_2D,k),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,y,x,0,d.RGBA,d.UNSIGNED_BYTE,null),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MAG_FILTER,d.LINEAR),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MIN_FILTER,d.LINEAR),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,d.TEXTURE_2D,k,0),d.bindTexture(d.TEXTURE_2D,null),d.bindFramebuffer(d.FRAMEBUFFER,null),{fbo:b,texture:k}}function f(y){return r[y]=r[y]||h(l.width,l.height),r[y]}function m(y=0){var k,S;if(!i)return;let x=null,b=null,w=!1;e===0?x=t:x=((k=f(s))==null?void 0:k.texture)||null,e++,n&&!(y&u.INTERMEDIATE)?(b=null,w=e%2==0):(s=(s+1)%2,b=((S=f(s))==null?void 0:S.fbo)||null),d.bindTexture(d.TEXTURE_2D,x),d.bindFramebuffer(d.FRAMEBUFFER,b),d.uniform1f(i.uniform.flipY,w?-1:1),d.drawArrays(d.TRIANGLES,0,6)}function g(y){if(c[y])return i=c[y],d.useProgram((i==null?void 0:i.id)||null),i;i=new N6(d,w6,y);let x=Float32Array.BYTES_PER_ELEMENT,b=4*x;return d.enableVertexAttribArray(i.attribute.pos),d.vertexAttribPointer(i.attribute.pos,2,d.FLOAT,!1,b,0*x),d.enableVertexAttribArray(i.attribute.uv),d.vertexAttribPointer(i.attribute.uv,2,d.FLOAT,!1,b,2*x),c[y]=i,i}let A={colorMatrix:y=>{let x=new Float32Array(y);x[4]/=255,x[9]/=255,x[14]/=255,x[19]/=255;let b=x[18]===1&&x[3]===0&&x[8]===0&&x[13]===0&&x[15]===0&&x[16]===0&&x[17]===0&&x[19]===0?I6:k6,w=g(b);d.uniform1fv(w==null?void 0:w.uniform.m,x),m()},brightness:y=>{let x=(y||0)+1;A.colorMatrix([x,0,0,0,0,0,x,0,0,0,0,0,x,0,0,0,0,0,1,0])},saturation:y=>{let x=(y||0)*2/3+1,b=(x-1)*-.5;A.colorMatrix([x,b,b,0,0,b,x,b,0,0,b,b,x,0,0,0,0,0,1,0])},desaturate:()=>{A.saturation(-1)},contrast:y=>{let x=(y||0)+1,b=-128*(x-1);A.colorMatrix([x,0,0,0,b,0,x,0,0,b,0,0,x,0,b,0,0,0,1,0])},negative:()=>{A.contrast(-2)},hue:y=>{y=(y||0)/180*Math.PI;let x=Math.cos(y),b=Math.sin(y),w=.213,k=.715,S=.072;A.colorMatrix([w+x*(1-w)+b*-w,k+x*-k+b*-k,S+x*-S+b*(1-S),0,0,w+x*-w+b*.143,k+x*(1-k)+b*.14,S+x*-S+b*-.283,0,0,w+x*-w+b*-(1-w),k+x*-k+b*k,S+x*(1-S)+b*S,0,0,0,0,0,1,0])},desaturateLuminance:()=>{A.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:()=>{A.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{A.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:()=>{A.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:()=>{A.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:()=>{A.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:()=>{A.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:()=>{A.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:y=>{let x=new Float32Array(y),b=1/l.width,w=1/l.height,k=g(T6);d.uniform1fv(k==null?void 0:k.uniform.m,x),d.uniform2f(k==null?void 0:k.uniform.px,b,w),m()},detectEdges:()=>{A.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{A.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{A.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:y=>{let x=y||1;A.convolution.call(this,[0,-1*x,0,-1*x,1+4*x,-1*x,0,-1*x,0])},emboss:y=>{let x=y||1;A.convolution.call(this,[-2*x,-1*x,0,-1*x,1,1*x,0,1*x,2*x])},blur:y=>{let x=y/7/l.width,b=y/7/l.height,w=g(C6);d.uniform2f(w==null?void 0:w.uniform.px,0,b),m(u.INTERMEDIATE),d.uniform2f(w==null?void 0:w.uniform.px,x,0),m()},pixelate:y=>{let x=y/l.width,b=y/l.height,w=g(S6);d.uniform2f(w==null?void 0:w.uniform.size,x,b),m()}};this.add=function(y){let x=Array.prototype.slice.call(arguments,1),b=A[y];a.push({func:b,args:x})},this.reset=function(){a=[]},this.get=function(){return a},this.apply=function(y){p(y.width,y.height),e=0,t||(t=d.createTexture()),d.bindTexture(d.TEXTURE_2D,t),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MIN_FILTER,d.NEAREST),d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MAG_FILTER,d.NEAREST),d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,y);for(let x=0;x0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!s||!r)return t.debug&&ae("cannot determine input dimensions"),{tensor:null,canvas:lt};let a=s,o=r;if(a>Lm&&(a=Lm,o=Math.trunc(a*r/s)),o>Lm&&(o=Lm,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 cannot determine dimension");(!lt||(lt==null?void 0:lt.width)!==a||(lt==null?void 0:lt.height)!==o)&&(lt=Kn(a,o));let i=lt.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,lt==null?void 0:lt.width,lt==null?void 0:lt.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,s,r,0,0,lt==null?void 0:lt.width,lt==null?void 0:lt.height),(!qt||lt.width!==qt.width||(lt==null?void 0:lt.height)!==(qt==null?void 0:qt.height))&&(qt=Kn(lt.width,lt.height)),t.filter.enabled&&ye.webgl.supported){if(_t||(_t=ye.browser?new E6:null),ye.filter=!!_t,!_t)return{tensor:null,canvas:lt};_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?qt=_t.apply(lt):qt=_t.draw(lt)}else bx(lt,qt),_t&&(_t=null),ye.filter=!!_t;if(!n)return{tensor:null,canvas:qt};if(!qt)throw new Error("cannot create output canvas");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(ye.browser&&Gs)l=Gs?Gs.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let p=new Uint8Array(e.data.buffer);l=Gt(p,[e.height,e.width,c],"int32")}else if((!Bo||qt.width!==Bo.width||(qt==null?void 0:qt.height)!==(Bo==null?void 0:Bo.height))&&(Bo=Kn(qt.width,qt.height)),Gs&&ye.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Gs.fromPixels(qt):(Bo=bx(qt),l=Gs.fromPixels(Bo));else{let f=bx(qt).getContext("2d").getImageData(0,0,a,o);c=f.data.length/a/o;let m=new Uint8Array(f.data.buffer);l=Gt(m,[a,o,c])}if(c===4){let p=Ru(l,[0,0,0],[-1,-1,3]);Q(l),l=p}if(!l)throw new Error("cannot create tensor from input");let u=he(l,"float32"),d=Kt(u,0);return Q([l,u]),{tensor:d,canvas:t.filter.return?qt:null}}}var vx=0,wx=1,kx=0,Z0e=async e=>{let t=48,n=$e.resizeBilinear(e,[Math.trunc((e.shape[1]||1)/t),Math.trunc((e.shape[2]||1)/t)]),s=async()=>{let o=Ie(n),i=await o.data();return Q(o),i[0]},r=async()=>{let o=await n.data(),i=0;for(let l=0;l10*e.cacheSensitivity?0:s,r=r&&wx>0,r}var $6=class{constructor(){de(this,"browser");de(this,"node");de(this,"worker");de(this,"platform","");de(this,"agent","");de(this,"backends",[]);de(this,"initial");de(this,"filter");de(this,"tfjs");de(this,"offscreen");de(this,"perfadd",!1);de(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});de(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});de(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});de(this,"cpu",{model:void 0,flags:[]});de(this,"kernels",[]);de(this,"Canvas");de(this,"Image");de(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined",this.tfjs={version:up},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(){var s;this.backends=Object.keys(ss().registryFactory),this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&ir()==="wasm"&&(this.wasm.simd=await K().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await K().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Kn(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&&(ir()==="webgl"||ir()==="humangl")){let r=Tr().gpgpu!=="undefined"?await Tr().getGPGPUContext().gl:null;r&&(this.webgl.version=r.getParameter(r.VERSION),this.webgl.renderer=r.getParameter(r.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu"),this.webgpu.supported&&(this.webgpu.adapter=(s=await navigator.gpu.requestAdapter())==null?void 0:s.name),this.kernels=Xr(ir()).map(r=>r.kernelName.toLowerCase())}async updateCPU(){var n;let t={model:"",flags:[]};if(this.node&&((n=this.platform)==null?void 0:n.startsWith("linux"))){let s=xa("fs");try{let r=s.readFileSync("/proc/cpuinfo").toString();for(let a of r.split(` -`))a.startsWith("model name")&&(t.model=a.match(/:(.*)/g)[0].replace(":","").trim()),a.startsWith("flags")&&(t.flags=a.match(/:(.*)/g)[0].replace(":","").trim().split(" ").sort())}catch(r){}}this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},ye=new $6;var Ix="2.4.0";var Wo;var m2e=Number.MAX_SAFE_INTEGER;async function D6(e){return ye.initial&&(Wo=null),Wo?e.debug&&ae("cached model:",Wo.modelUrl):(Wo=await st(at(e.modelBasePath,e.face.agegenderrace.modelPath)),!Wo||!Wo.modelUrl?ae("load model failed:",e.face.agegenderrace.modelPath):e.debug&&ae("load model:",Wo.modelUrl)),Wo}var cn,Bm=[],Sx=Number.MAX_SAFE_INTEGER,_6=0,P6=0;async function F6(e){var t,n;return ye.initial&&(cn=null),cn?e.debug&&ae("cached model:",cn.modelUrl):(cn=await st(at(e.modelBasePath,((t=e.face.antispoof)==null?void 0:t.modelPath)||"")),!cn||!cn.modelUrl?ae("load model failed:",(n=e.face.antispoof)==null?void 0:n.modelPath):e.debug&&ae("load model:",cn.modelUrl)),cn}async function Cx(e,t,n,s){var o,i;if(!cn)return null;let r=(((o=t.face.antispoof)==null?void 0:o.skipTime)||0)>pe()-P6,a=Sx<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&a&&_6===s&&Bm[n]?(Sx++,Bm[n]):(Sx=0,new Promise(async l=>{let c=$e.resizeBilinear(e,[(cn==null?void 0:cn.inputs[0].shape)?cn.inputs[0].shape[2]:0,(cn==null?void 0:cn.inputs[0].shape)?cn.inputs[0].shape[1]:0],!1),u=cn==null?void 0:cn.predict(c),d=(await u.data())[0];Bm[n]=Math.round(100*d)/100,_6=s,P6=pe(),Q([c,u]),l(Bm[n])}))}var Lr={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:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],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]},Tx={count:468,mouth:13,symmetryLine:[13,Lr.midwayBetweenEyes[0]]},cp={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},Nx=[{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]}],dp=[[.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]],kl=[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 J0e=[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],Q0e=[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],ege=[33,133,362,263,1,78,308],v2e=J0e.map(e=>dp[e]),w2e=Q0e.map(e=>dp[e]),k2e=ege.map(e=>dp[e]);var O6=e=>({startPoint:_e(e,[0,0],[-1,2]),endPoint:_e(e,[0,2],[-1,2])});var pp=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],Wm=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2],Ex=(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],Rx=(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],M6=(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}},$x=(e,t,n)=>{let s=t.shape[1],r=t.shape[2];return $e.cropAndResize(t,[[e.startPoint[1]/s,e.startPoint[0]/r,e.endPoint[1]/s,e.endPoint[0]/r]],[0],n)},hp=(e,t=1.5)=>{let n=Wm(e),s=pp(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}},fp=e=>{let t=Wm(e),n=pp(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}},Vm=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}},Um=[[1,0,0],[0,1,0],[0,0,1]],tge=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),nge=(e,t)=>tge(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var z6=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Il=(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=z6(t[0],t[1]),o=L6(a,r),i=z6(-t[0],-t[1]);return L6(o,i)},rge=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],s=[-Il(t[0],n),-Il(t[1],n)];return[t[0].concat(s[0]),t[1].concat(s[1]),[0,0,1]]},age=(e,t)=>[Il(e,t[0]),Il(e,t[1])];function W6(e){let t={strides:[e/16,e/8],anchors:[2,6]},n=[];for(let s=0;s[a[0]/r*(d[0]-r/2),a[1]/r*(d[1]-r/2),d[2]||0]),i=n!==0?B6(n,[0,0]):Um,l=n!==0?o.map(d=>[...age(d,i),d[2]]):o,c=n!==0?rge(s):Um,u=[...Wm({startPoint:t.startPoint,endPoint:t.endPoint}),1];return l.map(d=>[Math.round(d[0]+Il(u,c[0])),Math.round(d[1]+Il(u,c[1])),Math.round(d[2]||0)])}function Dx(e,t,n){let s=e.landmarks.length>=Tx.count?Tx.symmetryLine:cp.symmetryLine,r=nge(e.landmarks[s[0]],e.landmarks[s[1]]),a=Wm({startPoint:e.startPoint,endPoint:e.endPoint}),o=[a[0]/t.shape[2],a[1]/t.shape[1]],i=$e.rotateWithOffset(t,r,0,o),l=B6(-r,a),c=$x({startPoint:e.startPoint,endPoint:e.endPoint},i,[n,n]),u=fe(c,255);return Q(c),Q(i),[r,l,u]}var U6=6,Os,_x=[],G6=null,Ms=0,mp=()=>Ms;async function H6(e){var t,n;return ye.initial&&(Os=null),Os?e.debug&&ae("cached model:",Os.modelUrl):(Os=await st(at(e.modelBasePath,((t=e.face.detector)==null?void 0:t.modelPath)||"")),!Os||!Os.modelUrl?ae("load model failed:",(n=e.face.detector)==null?void 0:n.modelPath):e.debug&&ae("load model:",Os.modelUrl)),Ms=Os.inputs[0].shape?Os.inputs[0].shape[2]:0,Ms===-1&&(Ms=64),_x=W6(Ms),G6=ur(_x),Os}function oge(e){let t=_e(e,[0,1],[-1,2]),n=ie(t,G6),s=_e(e,[0,3],[-1,2]),r=fe(s,Ms),a=fe(n,Ms),o=fe(r,2),i=xe(a,o),l=ie(a,o),c=W(i,Ms),u=W(l,Ms);return ku([c,u],1)}async function j6(e,t){var c,u,d,p;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return{boxes:[]};let[n,s,r]=j(()=>{let h=$e.resizeBilinear(e,[Ms,Ms]),f=xe(fe(h,127.5),.5),m=Os==null?void 0:Os.execute(f),g;if(Array.isArray(m)){let b=m.sort((E,$)=>E.size-$.size),w=It([b[0],b[2]],2),k=It([b[1],b[3]],2),S=It([k,w],1);g=pt(S,0)}else g=pt(m);let A=oge(g),y=_e(g,[0,0],[-1,1]),x=pt(hs(y));return[g,A,x]}),a=await $e.nonMaxSuppressionAsync(s,r,((c=t.face.detector)==null?void 0:c.maxDetected)||0,((u=t.face.detector)==null?void 0:u.iouThreshold)||0,((d=t.face.detector)==null?void 0:d.minConfidence)||0),o=await a.array();Q(a);let i=[],l=await r.data();for(let h=0;h(((p=t.face.detector)==null?void 0:p.minConfidence)||0)){let m=_e(s,[o[h],0],[1,-1]),g=j(()=>G(pt(_e(n,[o[h],U6-1],[1,-1])),[U6,-1]));i.push({box:O6(m),landmarks:g,anchor:_x[o[h]],confidence:f}),Q(m)}}return Q(n),Q(s),Q(r),{boxes:i,scaleFactor:[e.shape[2]/Ms,e.shape[1]/Ms]}}var Ox={};qp(Ox,{connected:()=>Fx,kpt:()=>Px});var Px=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPalm","rightPalm","leftIndex","rightIndex","leftPinky","rightPinky","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftThumb","leftHand","rightThumb","rightHand"],Fx={leftLeg:["leftHip","leftKnee","leftAnkle","leftHeel","leftFoot"],rightLeg:["rightHip","rightKnee","rightAnkle","rightHeel","rightFoot"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist","leftPalm"],rightArm:["rightShoulder","rightElbow","rightWrist","rightPalm"],leftHand:[],rightHand:[],head:[]};var q6={initial:!0},dn=[null,null],Vo=[[0,0],[0,0]],Mx=Number.MAX_SAFE_INTEGER,zx,Gm=null,Uo=[[0,0],[0,0],[0,0],[0,0]],X6=0;async function K6(e){var t,n,s;if(q6.initial&&(dn[0]=null),!dn[0]&&((t=e.body.detector)==null?void 0:t.modelPath)){dn[0]=await st(at(e.modelBasePath,((n=e.body.detector)==null?void 0:n.modelPath)||""));let r=Object.values(dn[0].modelSignature.inputs);Vo[0][0]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[1].size):0,Vo[0][1]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[2].size):0,!dn[0]||!dn[0].modelUrl?ae("load model failed:",(s=e.body.detector)==null?void 0:s.modelPath):e.debug&&ae("load model:",dn[0].modelUrl)}else e.debug&&dn[0]&&ae("cached model:",dn[0].modelUrl);return dn[0]}async function Z6(e){var t;if(q6.initial&&(dn[1]=null),dn[1])e.debug&&ae("cached model:",dn[1].modelUrl);else{dn[1]=await st(at(e.modelBasePath,e.body.modelPath||""));let n=Object.values(dn[1].modelSignature.inputs);Vo[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Vo[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0,((t=e.body.modelPath)==null?void 0:t.includes("lite"))?zx=["ld_3d","output_segmentation","output_heatmap","world_3d","output_poseflag"]:zx=["Identity","Identity_2","Identity_3","Identity_4","Identity_1"],!dn[1]||!dn[1].modelUrl?ae("load model failed:",e.body.modelPath):e.debug&&ae("load model:",dn[1].modelUrl)}return dn[1]}function ige(e,t){let n=e.map(o=>o.position[0]),s=e.map(o=>o.position[1]),r=[Math.min(...n),Math.min(...s),Math.max(...n)-Math.min(...n),Math.max(...s)-Math.min(...s)],a=[r[0]/t[0],r[1]/t[1],r[2]/t[0],r[3]/t[1]];return{keypointsBox:r,keypointsBoxRaw:a}}async function lge(e){let t={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;Uo=[[0,0],[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],[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]],t.pad=qs(e,Uo),t.resize=$e.resizeBilinear(t.pad,[Vo[1][0],Vo[1][1]]);let n=fe(t.resize,255);return Object.keys(t).forEach(s=>Q(t[s])),n}function uge(e,t){for(let n of e)n.position=[n.position[0]*(t[0]+Uo[2][0]+Uo[2][1])/t[0]-Uo[2][0],n.position[1]*(t[1]+Uo[1][0]+Uo[1][1])/t[1]-Uo[1][0],n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],n.position[2]];return e}var Y6=e=>1-1/(1+Math.exp(e));async function cge(e,t,n){var h;let s={};s.input=await lge(e),[s.ld,s.segmentation,s.heatmap,s.world,s.poseflag]=await((h=dn[1])==null?void 0:h.execute(s.input,zx));let r=(await s.poseflag.data())[0],a=Math.max(0,(r-.8)/(1-.8)),o=await s.ld.data(),i=[],l=5;for(let f=0;fQ(s[f]));let d={};for(let[f,m]of Object.entries(Fx)){let g=[];for(let A=0;Ab.part===m[A]),x=c.find(b=>b.part===m[A+1]);y&&x&&y.score>(t.body.minConfidence||0)&&x.score>(t.body.minConfidence||0)&&g.push([y.position,x.position])}d[f]=g}return{id:0,score:Math.trunc(100*a)/100,box:u.keypointsBox,boxRaw:u.keypointsBoxRaw,keypoints:c,annotations:d}}async function Lx(e,t){let n=[e.shape[2]||0,e.shape[1]||0],s=(t.body.skipTime||0)>pe()-X6,r=Mx<(t.body.skipFrames||0);return t.skipAllowed&&s&&r&&Gm!==null?Mx++:(Gm=await cge(e,t,n),X6=pe(),Mx=0),Gm?[Gm]:[]}var cc=[{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 Qs,Sl=0,Hm=[],J6=0,Bx=Number.MAX_SAFE_INTEGER;async function Q6(e){if(ye.initial&&(Qs=null),Qs)e.debug&&ae("cached model:",Qs.modelUrl);else{dc(["floormod"],e),Qs=await st(at(e.modelBasePath,e.object.modelPath||""));let t=Object.values(Qs.modelSignature.inputs);Sl=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0,!Qs||!Qs.modelUrl?ae("load model failed:",e.object.modelPath):e.debug&&ae("load model:",Qs.modelUrl)}return Qs}async function dge(e,t,n){if(!e)return[];let s=[],r=await e.array(),a=pt(e);Q(e);let o=Sn(a,6,1);Q(a);let i=Pn([o[1],o[0],o[3],o[2]],1),l=pt(i);Q(i);let c=pt(o[4]),u=pt(o[5]);o.forEach(f=>Q(f));let d=await $e.nonMaxSuppressionAsync(l,c,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence);Q(l),Q(c),Q(u);let p=await d.data();Q(d);let h=0;for(let f of p){let m=Math.trunc(100*r[0][f][4])/100,g=r[0][f][5],A=cc[g].label,[y,x]=[r[0][f][0]/Sl,r[0][f][1]/Sl],b=[y,x,r[0][f][2]/Sl-y,r[0][f][3]/Sl-x],w=[Math.trunc(b[0]*t[0]),Math.trunc(b[1]*t[1]),Math.trunc(b[2]*t[0]),Math.trunc(b[3]*t[1])];s.push({id:h++,score:m,class:g,label:A,box:w,boxRaw:b})}return s}async function Wx(e,t){let n=(t.object.skipTime||0)>pe()-J6,s=Bx<(t.object.skipFrames||0);return t.skipAllowed&&n&&s&&Hm.length>0?(Bx++,Hm):(Bx=0,!ye.kernels.includes("mod")||!ye.kernels.includes("sparsetodense")?Hm:new Promise(async r=>{let a=[e.shape[2],e.shape[1]],o=$e.resizeBilinear(e,[Sl,Sl]),i=t.object.enabled?Qs==null?void 0:Qs.execute(o,["tower_0/detections"]):null;J6=pe(),Q(o);let l=await dge(i,a,t);Hm=l,r(l)}))}var Gx={};qp(Gx,{connected:()=>Ux,kpt:()=>Vx});var Vx=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Ux={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var pn,e8=0,Zn={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Hx=Number.MAX_SAFE_INTEGER;async function jx(e){return ye.initial&&(pn=null),pn?e.debug&&ae("cached model:",pn.modelUrl):(pn=await st(at(e.modelBasePath,e.body.modelPath||"")),!pn||!pn.modelUrl?ae("load model failed:",e.body.modelPath):e.debug&&ae("load model:",pn.modelUrl)),pn}function pge(e,t){let[n,s]=e.shape;return j(()=>{let r=(i,l)=>xe(i,W(fe(i,Ee(l,"int32")),Ee(l,"int32"))),a=G(e,[s*n]),o=rs(a,0).dataSync()[0];if(o>t){let i=Hs(a,0),l=r(i,n).dataSync()[0],c=fe(i,Ee(n,"int32")).dataSync()[0];return[l,c,o]}return[0,0,o]})}async function qx(e,t){let n=(t.body.skipTime||0)>pe()-e8,s=Hx<(t.body.skipFrames||0);return t.skipAllowed&&n&&s&&Object.keys(Zn.keypoints).length>0?(Hx++,[Zn]):(Hx=0,new Promise(async r=>{var d;let a=j(()=>{if(!(pn==null?void 0:pn.inputs[0].shape))return null;let p=$e.resizeBilinear(e,[pn.inputs[0].shape[2],pn.inputs[0].shape[1]],!1);return W(p,2).sub(1)}),o;if(t.body.enabled&&(o=await(pn==null?void 0:pn.predict(a))),e8=pe(),Q(a),o){Zn.keypoints.length=0;let p=o.squeeze();Q(o);let h=p.unstack(2);Q(p);for(let f=0;f(((d=t.body)==null?void 0:d.minConfidence)||0)&&Zn.keypoints.push({score:Math.round(100*A)/100,part:Vx[f],positionRaw:[m/pn.inputs[0].shape[2],g/pn.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/pn.inputs[0].shape[2]),Math.round(e.shape[1]*g/pn.inputs[0].shape[1])]})}h.forEach(f=>Q(f))}Zn.score=Zn.keypoints.reduce((p,h)=>h.score>p?h.score:p,0);let i=Zn.keypoints.map(p=>p.position[0]),l=Zn.keypoints.map(p=>p.position[1]);Zn.box=[Math.min(...i),Math.min(...l),Math.max(...i)-Math.min(...i),Math.max(...l)-Math.min(...l)];let c=Zn.keypoints.map(p=>p.positionRaw[0]),u=Zn.keypoints.map(p=>p.positionRaw[1]);Zn.boxRaw=[Math.min(...c),Math.min(...u),Math.max(...c)-Math.min(...c),Math.max(...u)-Math.min(...u)];for(let[p,h]of Object.entries(Ux)){let f=[];for(let m=0;my.part===h[m]),A=Zn.keypoints.find(y=>y.part===h[m+1]);g&&A&&g.score>(t.body.minConfidence||0)&&A.score>(t.body.minConfidence||0)&&f.push([g.position,A.position])}Zn.annotations[p]=f}r([Zn])}))}var hge=["angry","disgust","fear","happy","sad","surprise","neutral"],hn,jm=[],t8=0,n8=0,Xx=Number.MAX_SAFE_INTEGER,Kx=[.2989,.587,.114];async function s8(e){var t,n;return ye.initial&&(hn=null),hn?e.debug&&ae("cached model:",hn.modelUrl):(hn=await st(at(e.modelBasePath,((t=e.face.emotion)==null?void 0:t.modelPath)||"")),!hn||!hn.modelUrl?ae("load model failed:",(n=e.face.emotion)==null?void 0:n.modelPath):e.debug&&ae("load model:",hn.modelUrl)),hn}async function Zx(e,t,n,s){var o,i;if(!hn)return null;let r=Xx<(((o=t.face.emotion)==null?void 0:o.skipFrames)||0),a=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>pe()-n8;return t.skipAllowed&&a&&r&&t8===s&&jm[n]&&jm[n].length>0?(Xx++,jm[n]):(Xx=0,new Promise(async l=>{var u,d;let c=[];if((u=t.face.emotion)==null?void 0:u.enabled){let p=$e.resizeBilinear(e,[(hn==null?void 0:hn.inputs[0].shape)?hn.inputs[0].shape[2]:0,(hn==null?void 0:hn.inputs[0].shape)?hn.inputs[0].shape[1]:0],!1),[h,f,m]=Sn(p,3,3);Q(p);let g=W(h,Kx[0]),A=W(f,Kx[1]),y=W(m,Kx[2]);Q(h),Q(f),Q(m);let x=Vh([g,A,y]);Q(g),Q(A),Q(y);let b=j(()=>W(xe(x,.5),2));Q(x);let w=await(hn==null?void 0:hn.predict(b));n8=pe();let k=await w.data();Q(w);for(let S=0;S(((d=t.face.emotion)==null?void 0:d.minConfidence)||0)&&c.push({score:Math.min(.99,Math.trunc(100*k[S])/100),emotion:hge[S]});c.sort((S,E)=>E.score-S.score),Q(b)}jm[n]=c,t8=s,l(c)}))}var er,Go=0,fge=2.3,Yx=Lr.leftEyeLower0,Jx=Lr.rightEyeLower0,pc={leftBounds:[Yx[0],Yx[Yx.length-1]],rightBounds:[Jx[0],Jx[Jx.length-1]]},hc={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function r8(e){var t,n;return ye.initial&&(er=null),er?e.debug&&ae("cached model:",er.modelUrl):(er=await st(at(e.modelBasePath,((t=e.face.iris)==null?void 0:t.modelPath)||"")),!er||!er.modelUrl?ae("load model failed:",(n=e.face.iris)==null?void 0:n.modelPath):e.debug&&ae("load model:",er.modelUrl)),Go=er.inputs[0].shape?er.inputs[0].shape[2]:0,Go===-1&&(Go=64),er}function qm(e,t,n,s){for(let r=0;r{let t=e[pc.leftBounds[0]][2],n=e[pc.rightBounds[0]][2];return t-n},a8=(e,t,n,s,r=!1,a)=>{let o=fp(hp(Vm([e[n],e[s]]),fge)),i=pp(o),l=$e.cropAndResize(t,[[o.startPoint[1]/a,o.startPoint[0]/a,o.endPoint[1]/a,o.endPoint[0]/a]],[0],[Go,Go]);if(r&&ye.kernels.includes("flipleftright")){let c=$e.flipLeftRight(l);Q(l),l=c}return{box:o,boxSize:i,crop:l}},o8=(e,t,n,s=!1)=>{let r=[];for(let a=0;a{let s=e[Lr[`${n}EyeUpper0`][hc.upperCenter]][2],r=e[Lr[`${n}EyeLower0`][hc.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 l8(e,t,n,s){if(!er)return n.debug&&ae("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:a,crop:o}=a8(e,t,pc.leftBounds[0],pc.leftBounds[1],!0,s),{box:i,boxSize:l,crop:c}=a8(e,t,pc.rightBounds[0],pc.rightBounds[1],!0,s),u=It([o,c]);Q(o),Q(c);let d=er.predict(u);Q(u);let p=await d.data();Q(d);let h=p.slice(0,hc.numCoordinates*3),{rawCoords:f,iris:m}=o8(h,r,a,!0),g=p.slice(hc.numCoordinates*3),{rawCoords:A,iris:y}=o8(g,i,l),x=mge(e);Math.abs(x)<30?(qm(e,f,"left",null),qm(e,A,"right",null)):x<1?qm(e,f,"left",["EyeUpper0","EyeLower0"]):qm(e,A,"right",["EyeUpper0","EyeLower0"]);let b=i8(e,m,"left"),w=i8(e,y,"right");return e.concat(b).concat(w)}var Br=[],tr=null,xr=0,Qx=Number.MAX_SAFE_INTEGER,u8=0,c8=0;async function d8(e,t){var i,l,c,u,d,p,h,f,m,g,A;let n=(((i=t.face.detector)==null?void 0:i.skipTime)||0)>pe()-u8,s=Qx<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);if(!t.skipAllowed||!n||!s||c8===0){let y=await j6(e,t);u8=pe(),Br=[];for(let x of y.boxes){let b=await x.box.startPoint.data(),w=await x.box.endPoint.data(),k=await x.landmarks.array();Br.push({startPoint:b,endPoint:w,landmarks:k,confidence:x.confidence})}y.boxes.forEach(x=>Q([x.box.startPoint,x.box.endPoint,x.landmarks]));for(let x=0;x[P[0]/(e.shape[2]||0),P[1]/(e.shape[1]||0),(P[2]||0)/xr]),y={...hp(Vm(w.mesh),1.5),confidence:y.confidence};for(let P of Object.keys(Lr))w.annotations[P]=Lr[P].map(T=>w.mesh[T]);((m=t.face.detector)==null?void 0:m.rotation)&&t.face.mesh.enabled&&((g=t.face.description)==null?void 0:g.enabled)&&ye.kernels.includes("rotatewithoffset")&&(Q(w.tensor),[x,b,w.tensor]=Dx(y,e,xr)),w.box=Ex(y,e),w.boxRaw=Rx(y,e),w.score=Math.round(100*$||100*y.confidence||0)/100,w.faceScore=Math.round(100*$)/100,y={...fp(y),confidence:y.confidence,faceConfidence:$}}}else{w.box=Ex(y,e),w.boxRaw=Rx(y,e),w.score=Math.round(100*y.confidence||0)/100,w.mesh=y.landmarks.map(k=>[(y.startPoint[0]+y.endPoint[0])/2+(y.endPoint[0]+y.startPoint[0])*k[0]/mp(),(y.startPoint[1]+y.endPoint[1])/2+(y.endPoint[1]+y.startPoint[1])*k[1]/mp()]),w.meshRaw=w.mesh.map(k=>[k[0]/(e.shape[2]||0),k[1]/(e.shape[1]||0),(k[2]||0)/xr]);for(let k of Object.keys(cp))w.annotations[k]=[w.mesh[cp[k]]]}r.push(w),a.push(y)}return((A=t.face.mesh)==null?void 0:A.enabled)&&(Br=a.filter(y=>{var x;return y.confidence>(((x=t.face.detector)==null?void 0:x.minConfidence)||0)})),c8=r.length,r}async function p8(e){var t,n;return ye.initial&&(tr=null),tr?e.debug&&ae("cached model:",tr.modelUrl):(tr=await st(at(e.modelBasePath,((t=e.face.mesh)==null?void 0:t.modelPath)||"")),!tr||!tr.modelUrl?ae("load model failed:",(n=e.face.mesh)==null?void 0:n.modelPath):e.debug&&ae("load model:",tr.modelUrl)),xr=tr.inputs[0].shape?tr.inputs[0].shape[2]:0,xr===-1&&(xr=64),tr}var h8=kl,f8=dp;var Yn,Xm=[],m8=0,g8=0,eb=Number.MAX_SAFE_INTEGER;async function A8(e){var n,s;let t=at(e.modelBasePath,((n=e.face.description)==null?void 0:n.modelPath)||"");return ye.initial&&(Yn=null),Yn?e.debug&&ae("cached model:",t):(Yn=await st(t),Yn?e.debug&&ae("load model:",t):ae("load model failed:",((s=e.face.description)==null?void 0:s.modelPath)||"")),Yn}function tb(e){return j(()=>{let n=e.image||e.tensor||e;if(!(n instanceof Ye))return null;let s=[[.05,.15,.85,.85]];if(!(Yn==null?void 0:Yn.inputs[0].shape))return null;let r=n.shape.length===3?$e.cropAndResize(Kt(n,0),s,[0],[Yn.inputs[0].shape[2],Yn.inputs[0].shape[1]]):$e.cropAndResize(n,s,[0],[Yn.inputs[0].shape[2],Yn.inputs[0].shape[1]]);return W(r,255)})}async function nb(e,t,n,s){var o,i,l,c;if(!Yn)return null;let r=eb<(((o=t.face.description)==null?void 0:o.skipFrames)||0),a=(((i=t.face.description)==null?void 0:i.skipTime)||0)>pe()-m8;return t.skipAllowed&&r&&a&&g8===s&&((l=Xm[n])==null?void 0:l.age)&&((c=Xm[n])==null?void 0:c.age)>0?(eb++,Xm[n]):(eb=0,new Promise(async u=>{var p,h;let d={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((p=t.face.description)==null?void 0:p.enabled){let f=tb(e),m=await(Yn==null?void 0:Yn.predict(f));m8=pe(),Q(f);let A=await(await m.find($=>$.shape[1]===1)).data(),y=Math.trunc(200*Math.abs(A[0]-.5))/100;y>(((h=t.face.description)==null?void 0:h.minConfidence)||0)&&(d.gender=A[0]<=.5?"female":"male",d.genderScore=Math.min(.99,y));let x=Hs(m.find($=>$.shape[1]===100),1),b=(await x.data())[0];Q(x);let k=await m.find($=>$.shape[1]===100).data();d.age=Math.round(k[b-1]>k[b+1]?10*b-100*k[b-1]:10*b+100*k[b+1])/10;let S=m.find($=>$.shape[1]===1024),E=S?await S.data():[];d.descriptor=Array.from(E),m.forEach($=>Q($))}Xm[n]=d,g8=s,u(d)}))}function Km(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function gp(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function y8(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 $e.cropAndResize(t,a,[0],n)}function x8(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 Zm(e,t=1.5){let n=gp(e),s=Km(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 Ym(e){let t=gp(e),n=Km(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 gge(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function b8(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return gge(n)}var v8=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ho(e,t){let n=0;for(let s=0;s[n.x,n.y]),this.anchorsTensor=ur(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=Zt([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Zt([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){return j(()=>{let n=_e(t,[0,0],[-1,2]),s=_e(t,[0,2],[-1,2]),r=ie(fe(n,this.inputSizeTensor),this.anchorsTensor),a=fe(s,this.doubleInputSizeTensor),o=W(xe(r,a),this.inputSizeTensor),i=W(ie(r,a),this.inputSizeTensor);return ku([o,i],1)})}normalizeLandmarks(t,n){return j(()=>{let s=ie(fe(G(t,[-1,7,2]),this.inputSizeTensor),this.anchors[n]);return W(s,this.inputSizeTensor)})}async getBoxes(t,n){let s={};s.batched=this.model.predict(t),s.predictions=pt(s.batched),s.scores=j(()=>pt(hs(_e(s.predictions,[0,0],[-1,1]))));let r=await s.scores.data();s.boxes=_e(s.predictions,[0,1],[-1,4]),s.norm=this.normalizeBoxes(s.boxes),s.nms=await $e.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=_e(s.norm,[i,0],[1,-1]),c=j(()=>G(this.normalizeLandmarks(_e(s.predictions,[i,5],[1,14]),i),[-1,2]));o.push({box:l,palmLandmarks:c,confidence:r[i]})}for(let i of Object.keys(s))Q(s[i]);return o}async estimateHandBounds(t,n){let s=t.shape[1],r=t.shape[2],a=j(()=>xe(fe($e.resizeBilinear(t,[this.inputSize,this.inputSize]),127.5),1)),o=await this.getBoxes(a,n);Q(a);let i=[];if(!o||o.length===0)return i;for(let l of o){let c=await l.box.data(),u=c.slice(0,2),d=c.slice(2,4),p=await l.palmLandmarks.array();Q(l.box),Q(l.palmLandmarks),i.push(x8({startPoint:u,endPoint:d,palmLandmarks:p,confidence:l.confidence},[r/this.inputSize,s/this.inputSize]))}return i}};var yge=5,S8=1.65,C8=[0,5,9,13,17,1,2],xge=0,bge=2,T8=0,ob=class{constructor(t,n){de(this,"handDetector");de(this,"handPoseModel");de(this,"inputSize");de(this,"storedBoxes");de(this,"skipped");de(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=>rb([...a,1],n)),r=this.calculateLandmarksBoundingBox(s);return Zm(Ym(r),yge)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),s=Zm(Ym(n),S8);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=sb(s,[0,0]),c=i.map(h=>[...rb(h,l),h[2]]),u=k8(r),d=[...gp(n),1],p=[Ho(d,u[0]),Ho(d,u[1])];return c.map(h=>[Math.trunc(h[0]+p[0]),Math.trunc(h[1]+p[1]),Math.trunc(h[2])])}async estimateHands(t,n){let s=!1,r,a=(n.hand.skipTime||0)>pe()-T8,o=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&a&&o&&(r=await this.handDetector.estimateHandBounds(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(x,[-1,3]),k=await w.array();Q(x),Q(w);let S=this.transformRawCoords(k,m,u,f),E=this.getBoxForHandLandmarks(S);this.storedBoxes[l]={...E,confidence:b};let $={landmarks:S,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};i.push($)}else this.storedBoxes[l]=null;Q(x)}else{let u=Zm(Ym(c),S8),d={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:u.startPoint,bottomRight:u.endPoint},landmarks:[]};i.push(d)}}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 Ze={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=>Ze.nameMapping[e],getPoints:e=>Ze.pointsMapping[e]},cs={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>cs.nameMapping[e]},qe={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=>qe.nameMapping[e]},Jm=class{constructor(t){de(this,"name");de(this,"curls");de(this,"directions");de(this,"weights");de(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}addCurl(t,n,s){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,s])}addDirection(t,n,s){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,s])}setWeight(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 jo=new Jm("thumbs up");jo.addCurl(Ze.thumb,cs.none,1);jo.addDirection(Ze.thumb,qe.verticalUp,1);jo.addDirection(Ze.thumb,qe.diagonalUpLeft,.25);jo.addDirection(Ze.thumb,qe.diagonalUpRight,.25);for(let e of[Ze.index,Ze.middle,Ze.ring,Ze.pinky])jo.addCurl(e,cs.full,1),jo.addDirection(e,qe.horizontalLeft,1),jo.addDirection(e,qe.horizontalRight,1);var tn=new Jm("victory");tn.addCurl(Ze.thumb,cs.half,.5);tn.addCurl(Ze.thumb,cs.none,.5);tn.addDirection(Ze.thumb,qe.verticalUp,1);tn.addDirection(Ze.thumb,qe.diagonalUpLeft,1);tn.addCurl(Ze.index,cs.none,1);tn.addDirection(Ze.index,qe.verticalUp,.75);tn.addDirection(Ze.index,qe.diagonalUpLeft,1);tn.addCurl(Ze.middle,cs.none,1);tn.addDirection(Ze.middle,qe.verticalUp,1);tn.addDirection(Ze.middle,qe.diagonalUpLeft,.75);tn.addCurl(Ze.ring,cs.full,1);tn.addDirection(Ze.ring,qe.verticalUp,.2);tn.addDirection(Ze.ring,qe.diagonalUpLeft,1);tn.addDirection(Ze.ring,qe.horizontalLeft,.2);tn.addCurl(Ze.pinky,cs.full,1);tn.addDirection(Ze.pinky,qe.verticalUp,.2);tn.addDirection(Ze.pinky,qe.diagonalUpLeft,1);tn.addDirection(Ze.pinky,qe.horizontalLeft,.2);tn.setWeight(Ze.index,2);tn.setWeight(Ze.middle,2);var N8=[jo,tn];var vge=.7,Cl={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 E8(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 R8(e,t){if(!e||!t)return[0,0];let n=E8(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let s=E8(e[1],e[2],t[1],t[2]);return[n,s]}function $8(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 wge(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],c=e[2]-t[2],u=e[2]-n[2],d=t[2]-n[2],p=Math.sqrt(s*s+o*o+c*c),h=Math.sqrt(r*r+i*i+u*u),f=Math.sqrt(a*a+l*l+d*d),m=(f*f+p*p-h*h)/(2*f*p);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let A;return g>Cl.NO_CURL_START_LIMIT?A=cs.none:g>Cl.HALF_CURL_START_LIMIT?A=cs.half:A=cs.full,A}function D8(e,t,n,s){let r;return s===Math.abs(e)?e>0?r=qe.horizontalLeft:r=qe.horizontalRight:s===Math.abs(t)?t>0?r=qe.horizontalLeft:r=qe.horizontalRight:n>0?r=qe.horizontalLeft:r=qe.horizontalRight,r}function _8(e,t,n,s){let r;return s===Math.abs(e)?e<0?r=qe.verticalDown:r=qe.verticalUp:s===Math.abs(t)?t<0?r=qe.verticalDown:r=qe.verticalUp:n<0?r=qe.verticalDown:r=qe.verticalUp,r}function kge(e,t,n,s,r,a,o,i){let l,c=_8(e,t,n,s),u=D8(r,a,o,i);return c===qe.verticalUp?u===qe.horizontalLeft?l=qe.diagonalUpLeft:l=qe.diagonalUpRight:u===qe.horizontalLeft?l=qe.diagonalDownLeft:l=qe.diagonalDownRight,l}function Ige(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],c=t[1]-n[1],u=Math.max(Math.abs(r),Math.abs(a),Math.abs(o)),d=Math.max(Math.abs(i),Math.abs(l),Math.abs(c)),p=0,h=0,f=0,m=d/(u+1e-5);m>1.5?p+=Cl.DISTANCE_VOTE_POWER:m>.66?h+=Cl.DISTANCE_VOTE_POWER:f+=Cl.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+i*i),A=Math.sqrt(a*a+l*l),y=Math.sqrt(o*o+c*c),x=Math.max(g,A,y),b=e[0],w=e[1],k=n[0],S=n[1];x===g?(k=n[0],S=n[1]):x===y&&(b=t[0],w=t[1]);let F=R8([b,w],[k,S]),R=$8(F,Cl.TOTAL_ANGLE_VOTE_POWER);p+=R[0],h+=R[1],f+=R[2];for(let T of s){let M=$8(T,Cl.SINGLE_ANGLE_VOTE_POWER);p+=M[0],h+=M[1],f+=M[2]}let P;return p===Math.max(p,h,f)?P=_8(l,i,c,d):f===Math.max(h,f)?P=D8(a,r,o,u):P=kge(l,i,c,d,a,r,o,u),P}function P8(e){let t=[],n=[],s=[],r=[];if(!e)return{curls:s,directions:r};for(let a of Ze.all){let o=Ze.getPoints(a),i=[],l=[];for(let c of o){let u=e[c[0]],d=e[c[1]],p=R8(u,d),h=p[0],f=p[1];i.push(h),l.push(f)}t.push(i),n.push(l)}for(let a of Ze.all){let o=a===Ze.thumb?1:0,i=Ze.getPoints(a),l=e[i[o][0]],c=e[i[o+1][1]],u=e[i[3][1]],d=wge(l,c,u),p=Ige(l,c,u,t[a].slice(o));s[a]=d,r[a]=p}return{curls:s,directions:r}}function Qm(e){if(!e||e.length===0)return null;let t=P8(e),n={};for(let s of Ze.all)n[Ze.getName(s)]={curl:cs.getName(t.curls[s]),direction:qe.getName(t.directions[s])};return n}function F8(e){let t=[];if(!e||e.length===0)return t;let n=P8(e);for(let s of N8){let r=s.matchAgainst(n.curls,n.directions);r>=vge&&t.push({name:s.name,confidence:r})}return t}var O8={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]},la,ua,M8;async function ib(e,t){let n=await M8.estimateHands(e,t);if(!n)return[];let s=[];for(let r=0;rn[r].landmarks[d]);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 u of o)u[0]i[2]&&(i[2]=u[0]),u[1]>i[3]&&(i[3]=u[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 c=Qm(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:c})}return s}async function lb(e){var n,s,r,a,o,i;ye.initial&&(la=null,ua=null),!la||!ua?([la,ua]=await Promise.all([e.hand.enabled?st(at(e.modelBasePath,((n=e.hand.detector)==null?void 0:n.modelPath)||""),{fromTFHub:(((s=e.hand.detector)==null?void 0:s.modelPath)||"").includes("tfhub.dev")}):null,e.hand.landmarks?st(at(e.modelBasePath,((r=e.hand.skeleton)==null?void 0:r.modelPath)||""),{fromTFHub:(((a=e.hand.skeleton)==null?void 0:a.modelPath)||"").includes("tfhub.dev")}):null]),e.hand.enabled&&(!la||!la.modelUrl?ae("load model failed:",((o=e.hand.detector)==null?void 0:o.modelPath)||""):e.debug&&ae("load model:",la.modelUrl),!ua||!ua.modelUrl?ae("load model failed:",((i=e.hand.skeleton)==null?void 0:i.modelPath)||""):e.debug&&ae("load model:",ua.modelUrl))):(e.debug&&ae("cached model:",la.modelUrl),e.debug&&ae("cached model:",ua.modelUrl));let t=new ab(la);return M8=new ob(t,ua),[la,ua]}function Tl(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 z8(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[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 e0(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]]}function ub(e){return[Math.max(0,e[1]),Math.max(0,e[0]),Math.min(1,e[3]+e[1]),Math.min(1,e[2]+e[0])]}var Nt=[null,null],Sge=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qo=[[0,0],[0,0]],Cge=["hand","fist","pinch","point","face","tip","pinchtip"],L8=4,B8=1.6,Tge=512,Nge=1.4,t0=Number.MAX_SAFE_INTEGER,cb=0,ca=[0,0],Xt={boxes:[],hands:[]},W8={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]};async function V8(e){var t,n;if(ye.initial&&(Nt[0]=null),Nt[0])e.debug&&ae("cached model:",Nt[0].modelUrl);else{dc(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Nt[0]=await st(at(e.modelBasePath,((t=e.hand.detector)==null?void 0:t.modelPath)||""));let s=Object.values(Nt[0].modelSignature.inputs);qo[0][0]=Array.isArray(s)?parseInt(s[0].tensorShape.dim[1].size):0,qo[0][1]=Array.isArray(s)?parseInt(s[0].tensorShape.dim[2].size):0,!Nt[0]||!Nt[0].modelUrl?ae("load model failed:",(n=e.hand.detector)==null?void 0:n.modelPath):e.debug&&ae("load model:",Nt[0].modelUrl)}return Nt[0]}async function U8(e){var t,n;if(ye.initial&&(Nt[1]=null),Nt[1])e.debug&&ae("cached model:",Nt[1].modelUrl);else{Nt[1]=await st(at(e.modelBasePath,((t=e.hand.skeleton)==null?void 0:t.modelPath)||""));let s=Object.values(Nt[1].modelSignature.inputs);qo[1][0]=Array.isArray(s)?parseInt(s[0].tensorShape.dim[1].size):0,qo[1][1]=Array.isArray(s)?parseInt(s[0].tensorShape.dim[2].size):0,!Nt[1]||!Nt[1].modelUrl?ae("load model failed:",(n=e.hand.skeleton)==null?void 0:n.modelPath):e.debug&&ae("load model:",Nt[1].modelUrl)}return Nt[1]}async function Ege(e,t){let n=[];if(!e||!Nt[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,Tge),o=Math.round(a*r/8)*8;s.resize=$e.resizeBilinear(e,[a,o]),s.cast=he(s.resize,"int32"),[s.rawScores,s.rawBoxes]=await Nt[0].executeAsync(s.cast,Sge),s.boxes=pt(s.rawBoxes,[0,2]),s.scores=pt(s.rawScores,[0]);let i=as(s.scores,1);Q(i[L8]),i.splice(L8,1),s.filtered=Pn(i,1),Q(i),s.max=rs(s.filtered,1),s.argmax=Hs(s.filtered,1);let l=0;s.nms=await $e.nonMaxSuppressionAsync(s.boxes,s.max,t.hand.maxDetected,t.hand.iouThreshold,t.hand.minConfidence);let c=await s.nms.data(),u=await s.max.data(),d=await s.argmax.data();for(let p of Array.from(c)){let h=_e(s.boxes,p,1),f=await h.data();Q(h);let m=[f[1],f[0],f[3]-f[1],f[2]-f[0]],g=e0(m,Nge),A=ub(g),y=[Math.trunc(m[0]*ca[0]),Math.trunc(m[1]*ca[1]),Math.trunc(m[2]*ca[0]),Math.trunc(m[3]*ca[1])],x=u[p],b=Cge[d[p]],w={id:l++,score:x,box:y,boxRaw:g,boxCrop:A,label:b};n.push(w)}return Object.keys(s).forEach(p=>Q(s[p])),n.sort((p,h)=>h.score-p.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function db(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&&Nt[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={};r.crop=$e.cropAndResize(e,[t.boxCrop],[0],[qo[1][0],qo[1][1]],"bilinear"),r.cast=he(r.crop,"float32"),r.div=fe(r.cast,255),[r.score,r.keypoints]=Nt[1].execute(r.div);let a=(await r.score.data())[0],o=(100-Math.trunc(100/(1+Math.exp(a))))/100;if(o>=(n.hand.minConfidence||0)){s.fingerScore=o,r.reshaped=G(r.keypoints,[-1,3]);let c=(await r.reshaped.array()).map(u=>[u[0]/qo[1][1],u[1]/qo[1][0],u[2]||0]).map(u=>[u[0]*t.boxRaw[2],u[1]*t.boxRaw[3],u[2]||0]);s.keypoints=c.map(u=>[ca[0]*(u[0]+t.boxRaw[0]),ca[1]*(u[1]+t.boxRaw[1]),u[2]||0]),s.landmarks=Qm(s.keypoints);for(let u of Object.keys(W8))s.annotations[u]=W8[u].map(d=>s.landmarks&&s.keypoints[d]?s.keypoints[d]:null)}Object.keys(r).forEach(i=>Q(r[i]))}return s}async function pb(e,t){var r,a;if(!Nt[0]||!Nt[1]||!((r=Nt[0])==null?void 0:r.inputs[0].shape)||!((a=Nt[1])==null?void 0:a.inputs[0].shape))return[];ca=[e.shape[2]||0,e.shape[1]||0],t0++;let n=(t.hand.skipTime||0)>pe()-cb,s=t0<(t.hand.skipFrames||0);return t.skipAllowed&&n&&s?Xt.hands:new Promise(async o=>{let i=3*(t.hand.skipTime||0)>pe()-cb,l=t0<3*(t.hand.skipFrames||0);t.skipAllowed&&Xt.hands.length===t.hand.maxDetected?Xt.hands=await Promise.all(Xt.boxes.map(u=>db(e,u,t))):t.skipAllowed&&i&&l&&Xt.hands.length>0?Xt.hands=await Promise.all(Xt.boxes.map(u=>db(e,u,t))):(Xt.boxes=await Ege(e,t),cb=pe(),Xt.hands=await Promise.all(Xt.boxes.map(u=>db(e,u,t))),t0=0);let c=[...Xt.boxes];if(Xt.boxes.length=0,t.cacheSensitivity>0)for(let u=0;u.05&&d.box[3]/(e.shape[1]||1)>.05&&Xt.hands[u].fingerScore&&Xt.hands[u].fingerScore>(t.hand.minConfidence||0)){let p=e0(d.box,B8),h=e0(d.boxRaw,B8),f=ub(h);Xt.boxes.push({...c[u],box:p,boxRaw:h,boxCrop:f})}}for(let u=0;us0,horizontal:()=>hb,kpt:()=>n0,relative:()=>mb,vertical:()=>fb});var n0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],hb=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],fb=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],mb=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],s0={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var G8=.005,vs={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function Ab(e){for(let t of hb){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]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),a=e.keypoints.findIndex(c=>c&&c.part===n[0]),o=e.keypoints.findIndex(c=>c&&c.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 c=e.keypoints[s];e.keypoints[s]=e.keypoints[r],e.keypoints[r]=c}}}function H8(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=$e.resizeBilinear(n.pad,[t,t]);let s=he(n.resize,"int32");return Object.keys(n).forEach(r=>Q(n[r])),s}function q8(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=Tl(e.keypoints.map(s=>s.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var Fn,r0=0,yb=Number.MAX_SAFE_INTEGER,Nl={boxes:[],bodies:[],last:0};async function X8(e){return ye.initial&&(Fn=null),Fn?e.debug&&ae("cached model:",Fn.modelUrl):(dc(["size"],e),Fn=await st(at(e.modelBasePath,e.body.modelPath||"")),!Fn||!Fn.modelUrl?ae("load model failed:",e.body.modelPath):e.debug&&ae("load model:",Fn.modelUrl)),r0=Fn.inputs[0].shape?Fn.inputs[0].shape[2]:0,r0===-1&&(r0=256),Fn}async function Rge(e,t,n,s){let r=e[0][0],a=[],o=0;for(let d=0;dt.body.minConfidence){let p=[(s[3]-s[1])*r[d][1]+s[1],(s[2]-s[0])*r[d][0]+s[0]];a.push({score:Math.round(100*o)/100,part:n0[d],positionRaw:p,position:[Math.round((n.shape[2]||0)*p[0]),Math.round((n.shape[1]||0)*p[1])]})}o=a.reduce((d,p)=>p.score>d?p.score:d,0);let i=[],l=Tl(a.map(d=>d.position),[n.shape[2],n.shape[1]]),c={};for(let[d,p]of Object.entries(s0)){let h=[];for(let f=0;fA.part===p[f]),g=a.find(A=>A.part===p[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}c[d]=h}let u={id:0,score:o,box:l.box,boxRaw:l.boxRaw,keypoints:a,annotations:c};return Ab(u),i.push(u),i}async function $ge(e,t,n,s){let r=[];for(let a=0;at.body.minConfidence){let l=[];for(let p=0;p<17;p++){let h=o[3*p+2];if(h>t.body.minConfidence){let f=[(s[3]-s[1])*o[3*p+1]+s[1],(s[2]-s[0])*o[3*p+0]+s[0]];l.push({part:n0[p],score:Math.round(100*h)/100,positionRaw:f,position:[Math.round((n.shape[2]||0)*f[0]),Math.round((n.shape[1]||0)*f[1])]})}}let c=Tl(l.map(p=>p.position),[n.shape[2],n.shape[1]]),u={};for(let[p,h]of Object.entries(s0)){let f=[];for(let m=0;my.part===h[m]),A=l.find(y=>y.part===h[m+1]);g&&A&&g.score>(t.body.minConfidence||0)&&A.score>(t.body.minConfidence||0)&&f.push([g.position,A.position])}u[p]=f}let d={id:a,score:i,box:c.box,boxRaw:c.boxRaw,keypoints:[...l],annotations:u};Ab(d),r.push(d)}}return r.sort((a,o)=>o.score-a.score),r.length>t.body.maxDetected&&(r.length=t.body.maxDetected),r}async function xb(e,t){if(!Fn||!(Fn==null?void 0:Fn.inputs[0].shape))return[];t.skipAllowed||(Nl.boxes.length=0),yb++;let n=(t.body.skipTime||0)>pe()-Nl.last,s=yb<(t.body.skipFrames||0);return t.skipAllowed&&n&&s?Nl.bodies:new Promise(async r=>{let a={};yb=0,a.input=j8(e,r0),a.res=await(Fn==null?void 0:Fn.predict(a.input)),Nl.last=pe();let o=await a.res.array();Nl.bodies=a.res.shape[2]===17?await Rge(o,t,e,[0,0,1,1]):await $ge(o,t,e,[0,0,1,1]);for(let i of Nl.bodies)q8(i,[e.shape[2]||1,e.shape[1]||1]),H8(i.keypoints);Object.keys(a).forEach(i=>Q(a[i])),r(Nl.bodies)})}var ws,a0=[],K8=0,bb=Number.MAX_SAFE_INTEGER,o0=2.5;async function Z8(e){if(!ws||ye.initial){ws=await st(at(e.modelBasePath,e.object.modelPath||""));let t=Object.values(ws.modelSignature.inputs);if(ws.inputSize=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):null,!ws.inputSize)throw new Error(`cannot determine model inputSize: ${e.object.modelPath}`);!ws||!ws.modelUrl?ae("load model failed:",e.object.modelPath):e.debug&&ae("load model:",ws.modelUrl)}else e.debug&&ae("cached model:",ws.modelUrl);return ws}async function Dge(e,t,n,s){let r=0,a=[];for(let c of[1,2,4])j(async()=>{var g,A;let u=c*13,d=(g=e.find(y=>y.shape[1]===u**2&&y.shape[2]===cc.length))==null?void 0:g.squeeze(),p=(A=e.find(y=>y.shape[1]===u**2&&y.shape[2]s.object.minConfidence&&x!==61){let w=(.5+Math.trunc(y%u))/u,k=(.5+Math.trunc(y/u))/u,S=f[y].map(U=>U*(u/c/t)),[E,$]=[w-o0/c*S[0],k-o0/c*S[1]],[F,R]=[w+o0/c*S[2]-E,k+o0/c*S[3]-$],P=[E,$,F,R];P=P.map(U=>Math.max(0,Math.min(U,1)));let T=[P[0]*n[0],P[1]*n[1],P[2]*n[0],P[3]*n[1]],M={id:r++,score:Math.round(100*b)/100,class:x+1,label:cc[x].label,box:T.map(U=>Math.trunc(U)),boxRaw:P};a.push(M)}}});e.forEach(c=>Q(c));let o=a.map(c=>[c.boxRaw[1],c.boxRaw[0],c.boxRaw[3],c.boxRaw[2]]),i=a.map(c=>c.score),l=[];if(o&&o.length>0){let c=await $e.nonMaxSuppressionAsync(o,i,s.object.maxDetected,s.object.iouThreshold,s.object.minConfidence);l=await c.data(),Q(c)}return a=a.filter((c,u)=>l.includes(u)).sort((c,u)=>u.score-c.score),a}async function vb(e,t){let n=(t.object.skipTime||0)>pe()-K8,s=bb<(t.object.skipFrames||0);return t.skipAllowed&&n&&s&&a0.length>0?(bb++,a0):(bb=0,!ye.kernels.includes("mod")||!ye.kernels.includes("sparsetodense")?a0:new Promise(async r=>{let a=[e.shape[2],e.shape[1]],o=$e.resizeBilinear(e,[ws.inputSize,ws.inputSize],!1),i=fe(o,255),l=i.transpose([0,3,1,2]);Q(i),Q(o);let c;t.object.enabled&&(c=await ws.predict(l)),K8=pe(),Q(l);let u=await Dge(c,ws.inputSize,a,t);a0=u,r(u)}))}var Ap=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_ge=Ap.length,yp=Ap.reduce((e,t,n)=>(e[t]=n,e),{}),Pge=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],hAe=Pge.map(([e,t])=>[yp[e],yp[t]]),Y8=[["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 J8(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 Q8(e,[t,n],[s,r]){let a=t/s,o=n/r,i=(c,u)=>({id:u,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/s,c.box[2]/r,c.box[3]/s],box:[Math.trunc(c.box[0]*o),Math.trunc(c.box[1]*a),Math.trunc(c.box[2]*o),Math.trunc(c.box[3]*a)],keypoints:c.keypoints.map(({score:d,part:p,position:h})=>({score:d,part:p,position:[Math.trunc(h.x*o),Math.trunc(h.y*a)],positionRaw:[h.x/s,h.y/s]}))});return e.map((c,u)=>i(c,u))}var wb=class{constructor(t,n){de(this,"priorityQueue");de(this,"numberOfElements");de(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 eT(e,t,n,s){let r=n-e,a=s-t;return r*r+a*a}function Cb(e,t){return{x:e.x+t.x,y:e.y+t.y}}var ks,Fge=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],i0=1,fc=16,Oge=50**2;function tT(e,t,n,s,r,a,o=2){let i=A=>({y:a.get(A.y,A.x,e),x:a.get(A.y,A.x,a.shape[2]/2+e)}),l=(A,y,x)=>({y:Sb(Math.round(A.y/fc),0,y-1),x:Sb(Math.round(A.x/fc),0,x-1)}),[c,u]=s.shape,d=l(t.position,c,u),p=i(d),f=Cb(t.position,p);for(let A=0;A[yp[p],yp[h]]),o=a.map(([,p])=>p),i=a.map(([p])=>p),l=t.shape[2],c=o.length,u=new Array(l),d=Ib(e.part,fc,n);u[e.part.id]={score:e.score,part:Ap[e.part.id],position:d};for(let p=c-1;p>=0;--p){let h=o[p],f=i[p];u[h]&&!u[f]&&(u[f]=tT(p,u[h],f,t,n,r))}for(let p=0;pt){i=!1;break}if(!i)break}return i}function Lge(e,t){let[n,s,r]=t.shape,a=new wb(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?eT(n,t,a.y,a.x)<=Oge:!1})}function Bge(e,t){return t.reduce((s,{position:r,score:a},o)=>(nT(e,r,o)||(s+=a),s),0)/t.length}function Wge(e,t,n,s,r,a){let o=[],i=Lge(a,t);for(;o.lengthh.score>a);let d=Bge(o,u),p=J8(u);d>a&&o.push({keypoints:u,box:p,score:Math.round(100*d)/100})}return o}async function Tb(e,t){let n=j(()=>{if(!ks.inputs[0].shape)return[];let o=$e.resizeBilinear(e,[ks.inputs[0].shape[2],ks.inputs[0].shape[1]]),i=xe(fe(he(o,"float32"),127.5),1),c=ks.execute(i,Fge).map(u=>pt(u,[0]));return c[1]=c[1].sigmoid(),c}),s=await Promise.all(n.map(o=>o.buffer()));for(let o of n)Q(o);let r=await Wge(s[0],s[1],s[2],s[3],t.body.maxDetected,t.body.minConfidence);return ks.inputs[0].shape?Q8(r,[e.shape[1],e.shape[2]],[ks.inputs[0].shape[2],ks.inputs[0].shape[1]]):[]}async function sT(e){return!ks||ye.initial?(ks=await st(at(e.modelBasePath,e.body.modelPath||"")),!ks||!ks.modelUrl?ae("load model failed:",e.body.modelPath):e.debug&&ae("load model:",ks.modelUrl)):e.debug&&ae("cached model:",ks.modelUrl),ks}var zs,Nb=!1;async function Eb(e){return!zs||ye.initial?(zs=await st(at(e.modelBasePath,e.segmentation.modelPath||"")),!zs||!zs.modelUrl?ae("load model failed:",e.segmentation.modelPath):e.debug&&ae("load model:",zs.modelUrl)):e.debug&&ae("cached model:",zs.modelUrl),zs}async function rT(e,t,n){var m,g;if(Nb)return{data:[],canvas:null,alpha:null};Nb=!0,zs||await Eb(n);let s=uc(e,n),r=((m=s.canvas)==null?void 0:m.width)||0,a=((g=s.canvas)==null?void 0:g.height)||0;if(!s.tensor)return{data:[],canvas:null,alpha:null};let o={};o.resize=$e.resizeBilinear(s.tensor,[zs.inputs[0].shape?zs.inputs[0].shape[1]:0,zs.inputs[0].shape?zs.inputs[0].shape[2]:0],!1),Q(s.tensor),o.norm=fe(o.resize,255),o.res=zs.predict(o.norm),o.squeeze=pt(o.res,0),o.squeeze.shape[2]===2?(o.softmax=$u(o.squeeze),[o.bg,o.fg]=as(o.softmax,2),o.expand=Kt(o.fg,2),o.pad=Kt(o.expand,0),o.crop=$e.cropAndResize(o.pad,[[0,0,.5,.5]],[0],[r,a]),o.data=pt(o.crop,0)):o.data=$e.resizeBilinear(o.squeeze,[a,r]);let i=Array.from(await o.data.data());if(ye.node&&!ye.Canvas&&typeof ImageData=="undefined")return n.debug&&ae("canvas support missing"),Object.keys(o).forEach(A=>Q(o[A])),{data:i,canvas:null,alpha:null};let l=Kn(r,a);await Gs.toPixels(o.data,l);let c=l.getContext("2d");n.segmentation.blur&&n.segmentation.blur>0&&(c.filter=`blur(${n.segmentation.blur}px)`);let u=c.getImageData(0,0,r,a),d=Kn(r,a),p=d.getContext("2d");s.canvas&&p.drawImage(s.canvas,0,0),p.globalCompositeOperation="darken",n.segmentation.blur&&n.segmentation.blur>0&&(p.filter=`blur(${n.segmentation.blur}px)`),p.drawImage(l,0,0),p.globalCompositeOperation="source-over",p.filter="none";let h=p.getImageData(0,0,r,a);for(let A=0;AQ(o[A])),Nb=!1,{data:i,canvas:f||d,alpha:l}}var Rb=class{constructor(){de(this,"age",null);de(this,"agegenderrace",null);de(this,"blazeposedetect",null);de(this,"blazepose",null);de(this,"centernet",null);de(this,"efficientpose",null);de(this,"embedding",null);de(this,"emotion",null);de(this,"facedetect",null);de(this,"faceiris",null);de(this,"facemesh",null);de(this,"faceres",null);de(this,"gender",null);de(this,"handpose",null);de(this,"handskeleton",null);de(this,"handtrack",null);de(this,"movenet",null);de(this,"nanodet",null);de(this,"posenet",null);de(this,"segmentation",null);de(this,"antispoof",null)}};function $b(e){for(let t of Object.keys(e.models))e.models[t]=null}async function aT(e){var t,n,s,r,a,o,i,l,c,u,d,p,h,f,m,g,A,y,x,b,w,k,S,E,$,F,R,P,T,M,U;ye.initial&&$b(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 lb(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 lb(e.config))),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=H6(e.config)),e.config.face.enabled&&((a=e.config.face.mesh)==null?void 0:a.enabled)&&!e.models.facemesh&&(e.models.facemesh=p8(e.config)),e.config.face.enabled&&((o=e.config.face.iris)==null?void 0:o.enabled)&&!e.models.faceiris&&(e.models.faceiris=r8(e.config)),e.config.face.enabled&&((i=e.config.face.antispoof)==null?void 0:i.enabled)&&!e.models.antispoof&&(e.models.antispoof=F6(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((c=(l=e.config.hand.detector)==null?void 0:l.modelPath)==null?void 0:c.includes("handtrack"))&&(e.models.handtrack=V8(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((d=(u=e.config.hand.detector)==null?void 0:u.modelPath)==null?void 0:d.includes("handtrack"))&&(e.models.handskeleton=U8(e.config)),e.config.body.enabled&&!e.models.posenet&&((h=(p=e.config.body)==null?void 0:p.modelPath)==null?void 0:h.includes("posenet"))&&(e.models.posenet=sT(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((m=(f=e.config.body)==null?void 0:f.modelPath)==null?void 0:m.includes("efficientpose"))&&(e.models.efficientpose=jx(e.config)),e.config.body.enabled&&!e.models.blazepose&&((A=(g=e.config.body)==null?void 0:g.modelPath)==null?void 0:A.includes("blazepose"))&&(e.models.blazepose=Z6(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&((y=e.config.body.detector)==null?void 0:y.modelPath)&&((b=(x=e.config.body)==null?void 0:x.modelPath)==null?void 0:b.includes("blazepose"))&&(e.models.blazeposedetect=K6(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((k=(w=e.config.body)==null?void 0:w.modelPath)==null?void 0:k.includes("efficientpose"))&&(e.models.efficientpose=jx(e.config)),e.config.body.enabled&&!e.models.movenet&&((E=(S=e.config.body)==null?void 0:S.modelPath)==null?void 0:E.includes("movenet"))&&(e.models.movenet=X8(e.config)),e.config.object.enabled&&!e.models.nanodet&&((F=($=e.config.object)==null?void 0:$.modelPath)==null?void 0:F.includes("nanodet"))&&(e.models.nanodet=Z8(e.config)),e.config.object.enabled&&!e.models.centernet&&((P=(R=e.config.object)==null?void 0:R.modelPath)==null?void 0:P.includes("centernet"))&&(e.models.centernet=Q6(e.config)),e.config.face.enabled&&((T=e.config.face.emotion)==null?void 0:T.enabled)&&!e.models.emotion&&(e.models.emotion=s8(e.config)),e.config.face.enabled&&((M=e.config.face.description)==null?void 0:M.enabled)&&!e.models.faceres&&(e.models.faceres=A8(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=Eb(e.config)),e.config.face.enabled&&((U=e.config.face.agegenderrace)==null?void 0:U.enabled)&&!e.models.agegenderrace&&(e.models.agegenderrace=D6(e.config));for await(let H of Object.keys(e.models))e.models[H]&&typeof e.models[H]!="undefined"&&(e.models[H]=await e.models[H])}async function oT(e){let t=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"];for(let n of Object.keys(e.models))if(e.models[n]){let s=[];Array.isArray(e.models[n])?s=e.models[n].filter(r=>r!==null).map(r=>r&&r.executor?r:r.model):s=[e.models[n]];for(let r of s){if(!r){e.config.debug&&ae("model marked as loaded but not defined:",n);continue}let a=[],o=r==null?void 0:r.executor;if(o&&o.graph.nodes)for(let l of Object.values(o.graph.nodes)){let c=l.op.toLowerCase();a.includes(c)||a.push(c)}else!o&&e.config.debug&&ae("model signature not determined:",n);let i=[];for(let l of a)!t.includes(l)&&!e.env.kernels.includes(l)&&!e.env.kernels.includes(l.replace("_",""))&&!e.env.kernels.includes(l.replace("native",""))&&!e.env.kernels.includes(l.replace("v2",""))&&i.push(l);i.length>0&&e.config.debug&&ae("model validation:",n,i)}}}var zt={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 Vge(){let e=zt.gl;!e||(zt.extensions=e.getSupportedExtensions())}async function iT(e){var t;if(e.config.backend==="humangl"&&(zt.name in ss().registry&&(!zt.gl||!zt.gl.getParameter(zt.gl.VERSION))&&(ae("error: humangl backend invalid context"),$b(e)),!I2(zt.name))){try{zt.canvas=await Kn(100,100)}catch(s){ae("error: cannot create canvas:",s);return}try{zt.gl=(t=zt.canvas)==null?void 0:t.getContext("webgl2",zt.webGLattr),zt.canvas&&(zt.canvas.addEventListener("webglcontextlost",async s=>{throw ae("error: humangl:",s.type),ae("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("browser webgl error")}),zt.canvas.addEventListener("webglcontextrestored",s=>{ae("error: humangl context restored:",s)}),zt.canvas.addEventListener("webglcontextcreationerror",s=>{ae("error: humangl context create:",s)}))}catch(s){ae("error: cannot get WebGL context:",s);return}try{pm(2,zt.gl)}catch(s){ae("error: cannot set WebGL context:",s);return}try{let s=new vm(zt.gl);Ki(zt.name,()=>new Kd(s),zt.priority)}catch(s){ae("error: cannot register WebGL backend:",s);return}try{Xr("webgl").forEach(r=>{let a={...r,backendName:zt.name};Kr(a)})}catch(s){ae("error: cannot update WebGL backend registration:",s);return}let n=Tr().getGPGPUContext?Tr().getGPGPUContext().gl:null;if(n)ae(`humangl webgl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`);else{ae("error: no current gl context:",n,zt.gl);return}try{Ir.set("WEBGL_VERSION",2)}catch(s){ae("error: cannot set WebGL backend flags:",s);return}Vge(),ae("backend registered:",zt.name)}}async function l0(e,t=!1){if(e.state="backend",t||ye.initial||e.config.backend&&e.config.backend.length>0&&ir()!==e.config.backend){let n=pe();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&ae("running inside web worker"),ye.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&ae("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),ye.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&ae(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),ye.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")ae("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();e.config.debug&&ae("enumerated webgpu adapter:",r)}e.config.backend==="humangl"&&await iT(e);let s=Object.keys(ss().registryFactory);if(e.config.debug&&ae("available backends:",s),s.includes(e.config.backend)||(ae(`error: backend ${e.config.backend} not found in registry`),e.config.backend=ye.node?"tensorflow":"webgl",e.config.debug&&ae(`override: setting backend ${e.config.backend}`)),e.config.debug&&ae("setting backend:",e.config.backend),e.config.backend==="wasm"){if(e.config.debug&&ae("wasm path:",e.config.wasmPath),typeof(wl==null?void 0:wl.setWasmPaths)!="undefined")await x6(e.config.wasmPath);else throw new Error("wasm backend is not loaded");let r=await K().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await K().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");e.config.debug&&ae(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),e.config.debug&&!r&&ae("warning: wasm simd support is not enabled")}try{await m3(e.config.backend),await Wh()}catch(r){return ae("error: cannot set backend:",e.config.backend,r),!1}}if(ir()==="humangl"&&(Ir.set("CHECK_COMPUTATION_FOR_ERRORS",!1),Ir.set("WEBGL_CPU_FORWARD",!0),Ir.set("WEBGL_USE_SHAPES_UNIFORMS",!0),Ir.set("CPU_HANDOFF_SIZE_THRESHOLD",256),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(ae("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),Ir.set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),Tr().getGPGPUContext)){let s=await Tr().getGPGPUContext().gl;e.config.debug&&ae(`gl version:${s.getParameter(s.VERSION)} renderer:${s.getParameter(s.RENDERER)}`)}ir()==="webgpu",f3(),await Wh(),e.performance.backend=Math.trunc(pe()-n),e.config.backend=ir(),ye.updateBackend()}return!0}function dc(e,t){for(let n of e){let s={kernelName:n,backendName:t.backend,kernelFunc:()=>{t.debug&&ae("kernelFunc",n,t.backend)}};Kr(s)}ye.kernels=Xr(ir()).map(n=>n.kernelName.toLowerCase())}var da={color:"rgba(173, 216, 230, 0.6)",labelColor:"rgba(173, 216, 230, 1)",shadowColor:"black",font:'small-caps 14px "Segoe UI"',lineHeight:18,lineWidth:4,pointSize:2,roundRect:8,drawPoints:!1,drawLabels:!0,drawBoxes:!0,drawGestures:!0,drawPolygons:!0,drawGaze:!0,fillPolygons:!1,useDepth:!0,useCurves:!1},El=e=>{if(e&&e.getContext)return e.getContext("2d");throw new Error("invalid canvas")},mc=e=>Math.round(e*180/Math.PI);function Db(e,t,n,s=0,r){e.fillStyle=r.useDepth&&s?`rgba(${127.5+2*s}, ${127.5-2*s}, 255, 0.3)`:r.color,e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function xp(e,t,n,s,r,a){if(e.beginPath(),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.lineWidth=a.lineWidth,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 lT(e,t=[],n){if(!(t===void 0||t.length===0)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let s of t){let r=s[2]||0;e.strokeStyle=n.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:n.color,e.fillStyle=n.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:n.color,e.lineTo(s[0],Math.round(s[1]))}e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function Uge(e,t=[],n){if(!(t===void 0||t.length===0)){if(!n.useCurves||t.length<=2){lT(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let s=0;s1&&l[1].length>0){let c=i[1]>0?`#${i[1]}`:"",u=`${i[0]} ${c}: ${l[1]}`;s.shadowColor&&s.shadowColor!==""&&(r.fillStyle=s.shadowColor,r.fillText(u,8,2+a*s.lineHeight)),r.fillStyle=s.labelColor,r.fillText(u,6,0+a*s.lineHeight),a+=1}}}}async function Pb(e,t,n){var a,o,i,l,c;let s=$n(da,n);if(!t||!e)return;let r=El(e);for(let u of t){if(r.font=s.font,r.strokeStyle=s.color,r.fillStyle=s.color,s.drawBoxes&&xp(r,u.box[0],u.box[1],u.box[2],u.box[3],s),s.drawLabels){let d=[];if(d.push(`face: ${Math.trunc(100*u.score)}%`),u.genderScore&&d.push(`${u.gender||""} ${Math.trunc(100*u.genderScore)}%`),u.age&&d.push(`age: ${u.age||""}`),u.iris&&d.push(`distance: ${u.iris}`),u.real&&d.push(`real: ${Math.trunc(100*u.real)}%`),u.emotion&&u.emotion.length>0){let p=u.emotion.map(h=>`${Math.trunc(100*h.score)}% ${h.emotion}`);p.length>3&&(p.length=3),d.push(p.join(" "))}u.rotation&&u.rotation.angle&&u.rotation.gaze&&(u.rotation.angle.roll&&d.push(`roll: ${mc(u.rotation.angle.roll)}\xB0 yaw:${mc(u.rotation.angle.yaw)}\xB0 pitch:${mc(u.rotation.angle.pitch)}\xB0`),u.rotation.gaze.bearing&&d.push(`gaze: ${mc(u.rotation.gaze.bearing)}\xB0`)),d.length===0&&d.push("face"),r.fillStyle=s.color;for(let p=d.length-1;p>=0;p--){let h=Math.max(u.box[0],0),f=p*s.lineHeight+u.box[1];s.shadowColor&&s.shadowColor!==""&&(r.fillStyle=s.shadowColor,r.fillText(d[p],h+5,f+16)),r.fillStyle=s.labelColor,r.fillText(d[p],h+4,f+15)}}if(r.lineWidth=1,u.mesh&&u.mesh.length>0){if(s.drawPoints)for(let d of u.mesh)Db(r,d[0],d[1],d[2],s);if(s.drawPolygons){if(r.lineWidth=1,u.mesh.length>450)for(let d=0;du.mesh[h]);lT(r,p,s)}if(u.annotations&&u.annotations.leftEyeIris&&u.annotations.leftEyeIris[0]){r.strokeStyle=s.useDepth?"rgba(255, 200, 255, 0.3)":s.color,r.beginPath();let d=Math.abs(u.annotations.leftEyeIris[3][0]-u.annotations.leftEyeIris[1][0])/2,p=Math.abs(u.annotations.leftEyeIris[4][1]-u.annotations.leftEyeIris[2][1])/2;r.ellipse(u.annotations.leftEyeIris[0][0],u.annotations.leftEyeIris[0][1],d,p,0,0,2*Math.PI),r.stroke(),s.fillPolygons&&(r.fillStyle=s.useDepth?"rgba(255, 255, 200, 0.3)":s.color,r.fill())}if(u.annotations&&u.annotations.rightEyeIris&&u.annotations.rightEyeIris[0]){r.strokeStyle=s.useDepth?"rgba(255, 200, 255, 0.3)":s.color,r.beginPath();let d=Math.abs(u.annotations.rightEyeIris[3][0]-u.annotations.rightEyeIris[1][0])/2,p=Math.abs(u.annotations.rightEyeIris[4][1]-u.annotations.rightEyeIris[2][1])/2;r.ellipse(u.annotations.rightEyeIris[0][0],u.annotations.rightEyeIris[0][1],d,p,0,0,2*Math.PI),r.stroke(),s.fillPolygons&&(r.fillStyle=s.useDepth?"rgba(255, 255, 200, 0.3)":s.color,r.fill())}if(s.drawGaze&&((a=u.rotation)==null?void 0:a.angle)){r.strokeStyle="pink";let d=u.box[0]+u.box[2]/2-u.box[3]*mc(u.rotation.angle.yaw)/90,p=u.box[1]+u.box[3]/2+u.box[2]*mc(u.rotation.angle.pitch)/90,h=new Path2D(` +`))a.startsWith("model name")&&(t.model=a.match(/:(.*)/g)[0].replace(":","").trim()),a.startsWith("flags")&&(t.flags=a.match(/:(.*)/g)[0].replace(":","").trim().split(" ").sort())}catch(r){}}this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},ye=new $6;var Ix="2.4.1";var Wo;var m2e=Number.MAX_SAFE_INTEGER;async function D6(e){return ye.initial&&(Wo=null),Wo?e.debug&&ae("cached model:",Wo.modelUrl):(Wo=await st(at(e.modelBasePath,e.face.agegenderrace.modelPath)),!Wo||!Wo.modelUrl?ae("load model failed:",e.face.agegenderrace.modelPath):e.debug&&ae("load model:",Wo.modelUrl)),Wo}var cn,Bm=[],Sx=Number.MAX_SAFE_INTEGER,_6=0,P6=0;async function F6(e){var t,n;return ye.initial&&(cn=null),cn?e.debug&&ae("cached model:",cn.modelUrl):(cn=await st(at(e.modelBasePath,((t=e.face.antispoof)==null?void 0:t.modelPath)||"")),!cn||!cn.modelUrl?ae("load model failed:",(n=e.face.antispoof)==null?void 0:n.modelPath):e.debug&&ae("load model:",cn.modelUrl)),cn}async function Cx(e,t,n,s){var o,i;if(!cn)return null;let r=(((o=t.face.antispoof)==null?void 0:o.skipTime)||0)>pe()-P6,a=Sx<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&r&&a&&_6===s&&Bm[n]?(Sx++,Bm[n]):(Sx=0,new Promise(async l=>{let c=$e.resizeBilinear(e,[(cn==null?void 0:cn.inputs[0].shape)?cn.inputs[0].shape[2]:0,(cn==null?void 0:cn.inputs[0].shape)?cn.inputs[0].shape[1]:0],!1),u=cn==null?void 0:cn.predict(c),d=(await u.data())[0];Bm[n]=Math.round(100*d)/100,_6=s,P6=pe(),Q([c,u]),l(Bm[n])}))}var Lr={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:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],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]},Tx={count:468,mouth:13,symmetryLine:[13,Lr.midwayBetweenEyes[0]]},cp={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},Nx=[{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]}],dp=[[.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]],kl=[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 J0e=[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],Q0e=[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],ege=[33,133,362,263,1,78,308],v2e=J0e.map(e=>dp[e]),w2e=Q0e.map(e=>dp[e]),k2e=ege.map(e=>dp[e]);var O6=e=>({startPoint:_e(e,[0,0],[-1,2]),endPoint:_e(e,[0,2],[-1,2])});var pp=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],Wm=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2],Ex=(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],Rx=(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],M6=(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}},$x=(e,t,n)=>{let s=t.shape[1],r=t.shape[2];return $e.cropAndResize(t,[[e.startPoint[1]/s,e.startPoint[0]/r,e.endPoint[1]/s,e.endPoint[0]/r]],[0],n)},hp=(e,t=1.5)=>{let n=Wm(e),s=pp(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}},fp=e=>{let t=Wm(e),n=pp(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}},Vm=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}},Um=[[1,0,0],[0,1,0],[0,0,1]],tge=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),nge=(e,t)=>tge(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var z6=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Il=(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=z6(t[0],t[1]),o=L6(a,r),i=z6(-t[0],-t[1]);return L6(o,i)},rge=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],s=[-Il(t[0],n),-Il(t[1],n)];return[t[0].concat(s[0]),t[1].concat(s[1]),[0,0,1]]},age=(e,t)=>[Il(e,t[0]),Il(e,t[1])];function W6(e){let t={strides:[e/16,e/8],anchors:[2,6]},n=[];for(let s=0;s[a[0]/r*(d[0]-r/2),a[1]/r*(d[1]-r/2),d[2]||0]),i=n!==0?B6(n,[0,0]):Um,l=n!==0?o.map(d=>[...age(d,i),d[2]]):o,c=n!==0?rge(s):Um,u=[...Wm({startPoint:t.startPoint,endPoint:t.endPoint}),1];return l.map(d=>[Math.round(d[0]+Il(u,c[0])),Math.round(d[1]+Il(u,c[1])),Math.round(d[2]||0)])}function Dx(e,t,n){let s=e.landmarks.length>=Tx.count?Tx.symmetryLine:cp.symmetryLine,r=nge(e.landmarks[s[0]],e.landmarks[s[1]]),a=Wm({startPoint:e.startPoint,endPoint:e.endPoint}),o=[a[0]/t.shape[2],a[1]/t.shape[1]],i=$e.rotateWithOffset(t,r,0,o),l=B6(-r,a),c=$x({startPoint:e.startPoint,endPoint:e.endPoint},i,[n,n]),u=fe(c,255);return Q(c),Q(i),[r,l,u]}var U6=6,Os,_x=[],G6=null,Ms=0,mp=()=>Ms;async function H6(e){var t,n;return ye.initial&&(Os=null),Os?e.debug&&ae("cached model:",Os.modelUrl):(Os=await st(at(e.modelBasePath,((t=e.face.detector)==null?void 0:t.modelPath)||"")),!Os||!Os.modelUrl?ae("load model failed:",(n=e.face.detector)==null?void 0:n.modelPath):e.debug&&ae("load model:",Os.modelUrl)),Ms=Os.inputs[0].shape?Os.inputs[0].shape[2]:0,Ms===-1&&(Ms=64),_x=W6(Ms),G6=ur(_x),Os}function oge(e){let t=_e(e,[0,1],[-1,2]),n=ie(t,G6),s=_e(e,[0,3],[-1,2]),r=fe(s,Ms),a=fe(n,Ms),o=fe(r,2),i=xe(a,o),l=ie(a,o),c=W(i,Ms),u=W(l,Ms);return ku([c,u],1)}async function j6(e,t){var c,u,d,p;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return{boxes:[]};let[n,s,r]=j(()=>{let h=$e.resizeBilinear(e,[Ms,Ms]),f=xe(fe(h,127.5),.5),m=Os==null?void 0:Os.execute(f),g;if(Array.isArray(m)){let b=m.sort((E,$)=>E.size-$.size),w=It([b[0],b[2]],2),k=It([b[1],b[3]],2),S=It([k,w],1);g=pt(S,0)}else g=pt(m);let A=oge(g),y=_e(g,[0,0],[-1,1]),x=pt(hs(y));return[g,A,x]}),a=await $e.nonMaxSuppressionAsync(s,r,((c=t.face.detector)==null?void 0:c.maxDetected)||0,((u=t.face.detector)==null?void 0:u.iouThreshold)||0,((d=t.face.detector)==null?void 0:d.minConfidence)||0),o=await a.array();Q(a);let i=[],l=await r.data();for(let h=0;h(((p=t.face.detector)==null?void 0:p.minConfidence)||0)){let m=_e(s,[o[h],0],[1,-1]),g=j(()=>G(pt(_e(n,[o[h],U6-1],[1,-1])),[U6,-1]));i.push({box:O6(m),landmarks:g,anchor:_x[o[h]],confidence:f}),Q(m)}}return Q(n),Q(s),Q(r),{boxes:i,scaleFactor:[e.shape[2]/Ms,e.shape[1]/Ms]}}var Ox={};qp(Ox,{connected:()=>Fx,kpt:()=>Px});var Px=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPalm","rightPalm","leftIndex","rightIndex","leftPinky","rightPinky","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftThumb","leftHand","rightThumb","rightHand"],Fx={leftLeg:["leftHip","leftKnee","leftAnkle","leftHeel","leftFoot"],rightLeg:["rightHip","rightKnee","rightAnkle","rightHeel","rightFoot"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist","leftPalm"],rightArm:["rightShoulder","rightElbow","rightWrist","rightPalm"],leftHand:[],rightHand:[],head:[]};var q6={initial:!0},dn=[null,null],Vo=[[0,0],[0,0]],Mx=Number.MAX_SAFE_INTEGER,zx,Gm=null,Uo=[[0,0],[0,0],[0,0],[0,0]],X6=0;async function K6(e){var t,n,s;if(q6.initial&&(dn[0]=null),!dn[0]&&((t=e.body.detector)==null?void 0:t.modelPath)){dn[0]=await st(at(e.modelBasePath,((n=e.body.detector)==null?void 0:n.modelPath)||""));let r=Object.values(dn[0].modelSignature.inputs);Vo[0][0]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[1].size):0,Vo[0][1]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[2].size):0,!dn[0]||!dn[0].modelUrl?ae("load model failed:",(s=e.body.detector)==null?void 0:s.modelPath):e.debug&&ae("load model:",dn[0].modelUrl)}else e.debug&&dn[0]&&ae("cached model:",dn[0].modelUrl);return dn[0]}async function Z6(e){var t;if(q6.initial&&(dn[1]=null),dn[1])e.debug&&ae("cached model:",dn[1].modelUrl);else{dn[1]=await st(at(e.modelBasePath,e.body.modelPath||""));let n=Object.values(dn[1].modelSignature.inputs);Vo[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Vo[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0,((t=e.body.modelPath)==null?void 0:t.includes("lite"))?zx=["ld_3d","output_segmentation","output_heatmap","world_3d","output_poseflag"]:zx=["Identity","Identity_2","Identity_3","Identity_4","Identity_1"],!dn[1]||!dn[1].modelUrl?ae("load model failed:",e.body.modelPath):e.debug&&ae("load model:",dn[1].modelUrl)}return dn[1]}function ige(e,t){let n=e.map(o=>o.position[0]),s=e.map(o=>o.position[1]),r=[Math.min(...n),Math.min(...s),Math.max(...n)-Math.min(...n),Math.max(...s)-Math.min(...s)],a=[r[0]/t[0],r[1]/t[1],r[2]/t[0],r[3]/t[1]];return{keypointsBox:r,keypointsBoxRaw:a}}async function lge(e){let t={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;Uo=[[0,0],[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],[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]],t.pad=qs(e,Uo),t.resize=$e.resizeBilinear(t.pad,[Vo[1][0],Vo[1][1]]);let n=fe(t.resize,255);return Object.keys(t).forEach(s=>Q(t[s])),n}function uge(e,t){for(let n of e)n.position=[n.position[0]*(t[0]+Uo[2][0]+Uo[2][1])/t[0]-Uo[2][0],n.position[1]*(t[1]+Uo[1][0]+Uo[1][1])/t[1]-Uo[1][0],n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],n.position[2]];return e}var Y6=e=>1-1/(1+Math.exp(e));async function cge(e,t,n){var h;let s={};s.input=await lge(e),[s.ld,s.segmentation,s.heatmap,s.world,s.poseflag]=await((h=dn[1])==null?void 0:h.execute(s.input,zx));let r=(await s.poseflag.data())[0],a=Math.max(0,(r-.8)/(1-.8)),o=await s.ld.data(),i=[],l=5;for(let f=0;fQ(s[f]));let d={};for(let[f,m]of Object.entries(Fx)){let g=[];for(let A=0;Ab.part===m[A]),x=c.find(b=>b.part===m[A+1]);y&&x&&y.score>(t.body.minConfidence||0)&&x.score>(t.body.minConfidence||0)&&g.push([y.position,x.position])}d[f]=g}return{id:0,score:Math.trunc(100*a)/100,box:u.keypointsBox,boxRaw:u.keypointsBoxRaw,keypoints:c,annotations:d}}async function Lx(e,t){let n=[e.shape[2]||0,e.shape[1]||0],s=(t.body.skipTime||0)>pe()-X6,r=Mx<(t.body.skipFrames||0);return t.skipAllowed&&s&&r&&Gm!==null?Mx++:(Gm=await cge(e,t,n),X6=pe(),Mx=0),Gm?[Gm]:[]}var cc=[{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 Qs,Sl=0,Hm=[],J6=0,Bx=Number.MAX_SAFE_INTEGER;async function Q6(e){if(ye.initial&&(Qs=null),Qs)e.debug&&ae("cached model:",Qs.modelUrl);else{dc(["floormod"],e),Qs=await st(at(e.modelBasePath,e.object.modelPath||""));let t=Object.values(Qs.modelSignature.inputs);Sl=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0,!Qs||!Qs.modelUrl?ae("load model failed:",e.object.modelPath):e.debug&&ae("load model:",Qs.modelUrl)}return Qs}async function dge(e,t,n){if(!e)return[];let s=[],r=await e.array(),a=pt(e);Q(e);let o=Sn(a,6,1);Q(a);let i=Pn([o[1],o[0],o[3],o[2]],1),l=pt(i);Q(i);let c=pt(o[4]),u=pt(o[5]);o.forEach(f=>Q(f));let d=await $e.nonMaxSuppressionAsync(l,c,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence);Q(l),Q(c),Q(u);let p=await d.data();Q(d);let h=0;for(let f of p){let m=Math.trunc(100*r[0][f][4])/100,g=r[0][f][5],A=cc[g].label,[y,x]=[r[0][f][0]/Sl,r[0][f][1]/Sl],b=[y,x,r[0][f][2]/Sl-y,r[0][f][3]/Sl-x],w=[Math.trunc(b[0]*t[0]),Math.trunc(b[1]*t[1]),Math.trunc(b[2]*t[0]),Math.trunc(b[3]*t[1])];s.push({id:h++,score:m,class:g,label:A,box:w,boxRaw:b})}return s}async function Wx(e,t){let n=(t.object.skipTime||0)>pe()-J6,s=Bx<(t.object.skipFrames||0);return t.skipAllowed&&n&&s&&Hm.length>0?(Bx++,Hm):(Bx=0,!ye.kernels.includes("mod")||!ye.kernels.includes("sparsetodense")?Hm:new Promise(async r=>{let a=[e.shape[2],e.shape[1]],o=$e.resizeBilinear(e,[Sl,Sl]),i=t.object.enabled?Qs==null?void 0:Qs.execute(o,["tower_0/detections"]):null;J6=pe(),Q(o);let l=await dge(i,a,t);Hm=l,r(l)}))}var Gx={};qp(Gx,{connected:()=>Ux,kpt:()=>Vx});var Vx=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Ux={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var pn,e8=0,Zn={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Hx=Number.MAX_SAFE_INTEGER;async function jx(e){return ye.initial&&(pn=null),pn?e.debug&&ae("cached model:",pn.modelUrl):(pn=await st(at(e.modelBasePath,e.body.modelPath||"")),!pn||!pn.modelUrl?ae("load model failed:",e.body.modelPath):e.debug&&ae("load model:",pn.modelUrl)),pn}function pge(e,t){let[n,s]=e.shape;return j(()=>{let r=(i,l)=>xe(i,W(fe(i,Ee(l,"int32")),Ee(l,"int32"))),a=G(e,[s*n]),o=rs(a,0).dataSync()[0];if(o>t){let i=Hs(a,0),l=r(i,n).dataSync()[0],c=fe(i,Ee(n,"int32")).dataSync()[0];return[l,c,o]}return[0,0,o]})}async function qx(e,t){let n=(t.body.skipTime||0)>pe()-e8,s=Hx<(t.body.skipFrames||0);return t.skipAllowed&&n&&s&&Object.keys(Zn.keypoints).length>0?(Hx++,[Zn]):(Hx=0,new Promise(async r=>{var d;let a=j(()=>{if(!(pn==null?void 0:pn.inputs[0].shape))return null;let p=$e.resizeBilinear(e,[pn.inputs[0].shape[2],pn.inputs[0].shape[1]],!1);return W(p,2).sub(1)}),o;if(t.body.enabled&&(o=await(pn==null?void 0:pn.predict(a))),e8=pe(),Q(a),o){Zn.keypoints.length=0;let p=o.squeeze();Q(o);let h=p.unstack(2);Q(p);for(let f=0;f(((d=t.body)==null?void 0:d.minConfidence)||0)&&Zn.keypoints.push({score:Math.round(100*A)/100,part:Vx[f],positionRaw:[m/pn.inputs[0].shape[2],g/pn.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/pn.inputs[0].shape[2]),Math.round(e.shape[1]*g/pn.inputs[0].shape[1])]})}h.forEach(f=>Q(f))}Zn.score=Zn.keypoints.reduce((p,h)=>h.score>p?h.score:p,0);let i=Zn.keypoints.map(p=>p.position[0]),l=Zn.keypoints.map(p=>p.position[1]);Zn.box=[Math.min(...i),Math.min(...l),Math.max(...i)-Math.min(...i),Math.max(...l)-Math.min(...l)];let c=Zn.keypoints.map(p=>p.positionRaw[0]),u=Zn.keypoints.map(p=>p.positionRaw[1]);Zn.boxRaw=[Math.min(...c),Math.min(...u),Math.max(...c)-Math.min(...c),Math.max(...u)-Math.min(...u)];for(let[p,h]of Object.entries(Ux)){let f=[];for(let m=0;my.part===h[m]),A=Zn.keypoints.find(y=>y.part===h[m+1]);g&&A&&g.score>(t.body.minConfidence||0)&&A.score>(t.body.minConfidence||0)&&f.push([g.position,A.position])}Zn.annotations[p]=f}r([Zn])}))}var hge=["angry","disgust","fear","happy","sad","surprise","neutral"],hn,jm=[],t8=0,n8=0,Xx=Number.MAX_SAFE_INTEGER,Kx=[.2989,.587,.114];async function s8(e){var t,n;return ye.initial&&(hn=null),hn?e.debug&&ae("cached model:",hn.modelUrl):(hn=await st(at(e.modelBasePath,((t=e.face.emotion)==null?void 0:t.modelPath)||"")),!hn||!hn.modelUrl?ae("load model failed:",(n=e.face.emotion)==null?void 0:n.modelPath):e.debug&&ae("load model:",hn.modelUrl)),hn}async function Zx(e,t,n,s){var o,i;if(!hn)return null;let r=Xx<(((o=t.face.emotion)==null?void 0:o.skipFrames)||0),a=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>pe()-n8;return t.skipAllowed&&a&&r&&t8===s&&jm[n]&&jm[n].length>0?(Xx++,jm[n]):(Xx=0,new Promise(async l=>{var u,d;let c=[];if((u=t.face.emotion)==null?void 0:u.enabled){let p=$e.resizeBilinear(e,[(hn==null?void 0:hn.inputs[0].shape)?hn.inputs[0].shape[2]:0,(hn==null?void 0:hn.inputs[0].shape)?hn.inputs[0].shape[1]:0],!1),[h,f,m]=Sn(p,3,3);Q(p);let g=W(h,Kx[0]),A=W(f,Kx[1]),y=W(m,Kx[2]);Q(h),Q(f),Q(m);let x=Vh([g,A,y]);Q(g),Q(A),Q(y);let b=j(()=>W(xe(x,.5),2));Q(x);let w=await(hn==null?void 0:hn.predict(b));n8=pe();let k=await w.data();Q(w);for(let S=0;S(((d=t.face.emotion)==null?void 0:d.minConfidence)||0)&&c.push({score:Math.min(.99,Math.trunc(100*k[S])/100),emotion:hge[S]});c.sort((S,E)=>E.score-S.score),Q(b)}jm[n]=c,t8=s,l(c)}))}var er,Go=0,fge=2.3,Yx=Lr.leftEyeLower0,Jx=Lr.rightEyeLower0,pc={leftBounds:[Yx[0],Yx[Yx.length-1]],rightBounds:[Jx[0],Jx[Jx.length-1]]},hc={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function r8(e){var t,n;return ye.initial&&(er=null),er?e.debug&&ae("cached model:",er.modelUrl):(er=await st(at(e.modelBasePath,((t=e.face.iris)==null?void 0:t.modelPath)||"")),!er||!er.modelUrl?ae("load model failed:",(n=e.face.iris)==null?void 0:n.modelPath):e.debug&&ae("load model:",er.modelUrl)),Go=er.inputs[0].shape?er.inputs[0].shape[2]:0,Go===-1&&(Go=64),er}function qm(e,t,n,s){for(let r=0;r{let t=e[pc.leftBounds[0]][2],n=e[pc.rightBounds[0]][2];return t-n},a8=(e,t,n,s,r=!1,a)=>{let o=fp(hp(Vm([e[n],e[s]]),fge)),i=pp(o),l=$e.cropAndResize(t,[[o.startPoint[1]/a,o.startPoint[0]/a,o.endPoint[1]/a,o.endPoint[0]/a]],[0],[Go,Go]);if(r&&ye.kernels.includes("flipleftright")){let c=$e.flipLeftRight(l);Q(l),l=c}return{box:o,boxSize:i,crop:l}},o8=(e,t,n,s=!1)=>{let r=[];for(let a=0;a{let s=e[Lr[`${n}EyeUpper0`][hc.upperCenter]][2],r=e[Lr[`${n}EyeLower0`][hc.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 l8(e,t,n,s){if(!er)return n.debug&&ae("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:a,crop:o}=a8(e,t,pc.leftBounds[0],pc.leftBounds[1],!0,s),{box:i,boxSize:l,crop:c}=a8(e,t,pc.rightBounds[0],pc.rightBounds[1],!0,s),u=It([o,c]);Q(o),Q(c);let d=er.predict(u);Q(u);let p=await d.data();Q(d);let h=p.slice(0,hc.numCoordinates*3),{rawCoords:f,iris:m}=o8(h,r,a,!0),g=p.slice(hc.numCoordinates*3),{rawCoords:A,iris:y}=o8(g,i,l),x=mge(e);Math.abs(x)<30?(qm(e,f,"left",null),qm(e,A,"right",null)):x<1?qm(e,f,"left",["EyeUpper0","EyeLower0"]):qm(e,A,"right",["EyeUpper0","EyeLower0"]);let b=i8(e,m,"left"),w=i8(e,y,"right");return e.concat(b).concat(w)}var Br=[],tr=null,xr=0,Qx=Number.MAX_SAFE_INTEGER,u8=0,c8=0;async function d8(e,t){var i,l,c,u,d,p,h,f,m,g,A;let n=(((i=t.face.detector)==null?void 0:i.skipTime)||0)>pe()-u8,s=Qx<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);if(!t.skipAllowed||!n||!s||c8===0){let y=await j6(e,t);u8=pe(),Br=[];for(let x of y.boxes){let b=await x.box.startPoint.data(),w=await x.box.endPoint.data(),k=await x.landmarks.array();Br.push({startPoint:b,endPoint:w,landmarks:k,confidence:x.confidence})}y.boxes.forEach(x=>Q([x.box.startPoint,x.box.endPoint,x.landmarks]));for(let x=0;x[P[0]/(e.shape[2]||0),P[1]/(e.shape[1]||0),(P[2]||0)/xr]),y={...hp(Vm(w.mesh),1.5),confidence:y.confidence};for(let P of Object.keys(Lr))w.annotations[P]=Lr[P].map(T=>w.mesh[T]);((m=t.face.detector)==null?void 0:m.rotation)&&t.face.mesh.enabled&&((g=t.face.description)==null?void 0:g.enabled)&&ye.kernels.includes("rotatewithoffset")&&(Q(w.tensor),[x,b,w.tensor]=Dx(y,e,xr)),w.box=Ex(y,e),w.boxRaw=Rx(y,e),w.score=Math.round(100*$||100*y.confidence||0)/100,w.faceScore=Math.round(100*$)/100,y={...fp(y),confidence:y.confidence,faceConfidence:$}}}else{w.box=Ex(y,e),w.boxRaw=Rx(y,e),w.score=Math.round(100*y.confidence||0)/100,w.mesh=y.landmarks.map(k=>[(y.startPoint[0]+y.endPoint[0])/2+(y.endPoint[0]+y.startPoint[0])*k[0]/mp(),(y.startPoint[1]+y.endPoint[1])/2+(y.endPoint[1]+y.startPoint[1])*k[1]/mp()]),w.meshRaw=w.mesh.map(k=>[k[0]/(e.shape[2]||0),k[1]/(e.shape[1]||0),(k[2]||0)/xr]);for(let k of Object.keys(cp))w.annotations[k]=[w.mesh[cp[k]]]}r.push(w),a.push(y)}return((A=t.face.mesh)==null?void 0:A.enabled)&&(Br=a.filter(y=>{var x;return y.confidence>(((x=t.face.detector)==null?void 0:x.minConfidence)||0)})),c8=r.length,r}async function p8(e){var t,n;return ye.initial&&(tr=null),tr?e.debug&&ae("cached model:",tr.modelUrl):(tr=await st(at(e.modelBasePath,((t=e.face.mesh)==null?void 0:t.modelPath)||"")),!tr||!tr.modelUrl?ae("load model failed:",(n=e.face.mesh)==null?void 0:n.modelPath):e.debug&&ae("load model:",tr.modelUrl)),xr=tr.inputs[0].shape?tr.inputs[0].shape[2]:0,xr===-1&&(xr=64),tr}var h8=kl,f8=dp;var Yn,Xm=[],m8=0,g8=0,eb=Number.MAX_SAFE_INTEGER;async function A8(e){var n,s;let t=at(e.modelBasePath,((n=e.face.description)==null?void 0:n.modelPath)||"");return ye.initial&&(Yn=null),Yn?e.debug&&ae("cached model:",t):(Yn=await st(t),Yn?e.debug&&ae("load model:",t):ae("load model failed:",((s=e.face.description)==null?void 0:s.modelPath)||"")),Yn}function tb(e){return j(()=>{let n=e.image||e.tensor||e;if(!(n instanceof Ye))return null;let s=[[.05,.15,.85,.85]];if(!(Yn==null?void 0:Yn.inputs[0].shape))return null;let r=n.shape.length===3?$e.cropAndResize(Kt(n,0),s,[0],[Yn.inputs[0].shape[2],Yn.inputs[0].shape[1]]):$e.cropAndResize(n,s,[0],[Yn.inputs[0].shape[2],Yn.inputs[0].shape[1]]);return W(r,255)})}async function nb(e,t,n,s){var o,i,l,c;if(!Yn)return null;let r=eb<(((o=t.face.description)==null?void 0:o.skipFrames)||0),a=(((i=t.face.description)==null?void 0:i.skipTime)||0)>pe()-m8;return t.skipAllowed&&r&&a&&g8===s&&((l=Xm[n])==null?void 0:l.age)&&((c=Xm[n])==null?void 0:c.age)>0?(eb++,Xm[n]):(eb=0,new Promise(async u=>{var p,h;let d={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((p=t.face.description)==null?void 0:p.enabled){let f=tb(e),m=await(Yn==null?void 0:Yn.predict(f));m8=pe(),Q(f);let A=await(await m.find($=>$.shape[1]===1)).data(),y=Math.trunc(200*Math.abs(A[0]-.5))/100;y>(((h=t.face.description)==null?void 0:h.minConfidence)||0)&&(d.gender=A[0]<=.5?"female":"male",d.genderScore=Math.min(.99,y));let x=Hs(m.find($=>$.shape[1]===100),1),b=(await x.data())[0];Q(x);let k=await m.find($=>$.shape[1]===100).data();d.age=Math.round(k[b-1]>k[b+1]?10*b-100*k[b-1]:10*b+100*k[b+1])/10;let S=m.find($=>$.shape[1]===1024),E=S?await S.data():[];d.descriptor=Array.from(E),m.forEach($=>Q($))}Xm[n]=d,g8=s,u(d)}))}function Km(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function gp(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function y8(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 $e.cropAndResize(t,a,[0],n)}function x8(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 Zm(e,t=1.5){let n=gp(e),s=Km(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 Ym(e){let t=gp(e),n=Km(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 gge(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function b8(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return gge(n)}var v8=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ho(e,t){let n=0;for(let s=0;s[n.x,n.y]),this.anchorsTensor=ur(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=Zt([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Zt([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){return j(()=>{let n=_e(t,[0,0],[-1,2]),s=_e(t,[0,2],[-1,2]),r=ie(fe(n,this.inputSizeTensor),this.anchorsTensor),a=fe(s,this.doubleInputSizeTensor),o=W(xe(r,a),this.inputSizeTensor),i=W(ie(r,a),this.inputSizeTensor);return ku([o,i],1)})}normalizeLandmarks(t,n){return j(()=>{let s=ie(fe(G(t,[-1,7,2]),this.inputSizeTensor),this.anchors[n]);return W(s,this.inputSizeTensor)})}async getBoxes(t,n){let s={};s.batched=this.model.predict(t),s.predictions=pt(s.batched),s.scores=j(()=>pt(hs(_e(s.predictions,[0,0],[-1,1]))));let r=await s.scores.data();s.boxes=_e(s.predictions,[0,1],[-1,4]),s.norm=this.normalizeBoxes(s.boxes),s.nms=await $e.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=_e(s.norm,[i,0],[1,-1]),c=j(()=>G(this.normalizeLandmarks(_e(s.predictions,[i,5],[1,14]),i),[-1,2]));o.push({box:l,palmLandmarks:c,confidence:r[i]})}for(let i of Object.keys(s))Q(s[i]);return o}async estimateHandBounds(t,n){let s=t.shape[1],r=t.shape[2],a=j(()=>xe(fe($e.resizeBilinear(t,[this.inputSize,this.inputSize]),127.5),1)),o=await this.getBoxes(a,n);Q(a);let i=[];if(!o||o.length===0)return i;for(let l of o){let c=await l.box.data(),u=c.slice(0,2),d=c.slice(2,4),p=await l.palmLandmarks.array();Q(l.box),Q(l.palmLandmarks),i.push(x8({startPoint:u,endPoint:d,palmLandmarks:p,confidence:l.confidence},[r/this.inputSize,s/this.inputSize]))}return i}};var yge=5,S8=1.65,C8=[0,5,9,13,17,1,2],xge=0,bge=2,T8=0,ob=class{constructor(t,n){de(this,"handDetector");de(this,"handPoseModel");de(this,"inputSize");de(this,"storedBoxes");de(this,"skipped");de(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=>rb([...a,1],n)),r=this.calculateLandmarksBoundingBox(s);return Zm(Ym(r),yge)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),s=Zm(Ym(n),S8);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=sb(s,[0,0]),c=i.map(h=>[...rb(h,l),h[2]]),u=k8(r),d=[...gp(n),1],p=[Ho(d,u[0]),Ho(d,u[1])];return c.map(h=>[Math.trunc(h[0]+p[0]),Math.trunc(h[1]+p[1]),Math.trunc(h[2])])}async estimateHands(t,n){let s=!1,r,a=(n.hand.skipTime||0)>pe()-T8,o=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&a&&o&&(r=await this.handDetector.estimateHandBounds(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(x,[-1,3]),k=await w.array();Q(x),Q(w);let S=this.transformRawCoords(k,m,u,f),E=this.getBoxForHandLandmarks(S);this.storedBoxes[l]={...E,confidence:b};let $={landmarks:S,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};i.push($)}else this.storedBoxes[l]=null;Q(x)}else{let u=Zm(Ym(c),S8),d={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:u.startPoint,bottomRight:u.endPoint},landmarks:[]};i.push(d)}}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 Ze={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=>Ze.nameMapping[e],getPoints:e=>Ze.pointsMapping[e]},cs={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>cs.nameMapping[e]},qe={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=>qe.nameMapping[e]},Jm=class{constructor(t){de(this,"name");de(this,"curls");de(this,"directions");de(this,"weights");de(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}addCurl(t,n,s){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,s])}addDirection(t,n,s){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,s])}setWeight(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 jo=new Jm("thumbs up");jo.addCurl(Ze.thumb,cs.none,1);jo.addDirection(Ze.thumb,qe.verticalUp,1);jo.addDirection(Ze.thumb,qe.diagonalUpLeft,.25);jo.addDirection(Ze.thumb,qe.diagonalUpRight,.25);for(let e of[Ze.index,Ze.middle,Ze.ring,Ze.pinky])jo.addCurl(e,cs.full,1),jo.addDirection(e,qe.horizontalLeft,1),jo.addDirection(e,qe.horizontalRight,1);var tn=new Jm("victory");tn.addCurl(Ze.thumb,cs.half,.5);tn.addCurl(Ze.thumb,cs.none,.5);tn.addDirection(Ze.thumb,qe.verticalUp,1);tn.addDirection(Ze.thumb,qe.diagonalUpLeft,1);tn.addCurl(Ze.index,cs.none,1);tn.addDirection(Ze.index,qe.verticalUp,.75);tn.addDirection(Ze.index,qe.diagonalUpLeft,1);tn.addCurl(Ze.middle,cs.none,1);tn.addDirection(Ze.middle,qe.verticalUp,1);tn.addDirection(Ze.middle,qe.diagonalUpLeft,.75);tn.addCurl(Ze.ring,cs.full,1);tn.addDirection(Ze.ring,qe.verticalUp,.2);tn.addDirection(Ze.ring,qe.diagonalUpLeft,1);tn.addDirection(Ze.ring,qe.horizontalLeft,.2);tn.addCurl(Ze.pinky,cs.full,1);tn.addDirection(Ze.pinky,qe.verticalUp,.2);tn.addDirection(Ze.pinky,qe.diagonalUpLeft,1);tn.addDirection(Ze.pinky,qe.horizontalLeft,.2);tn.setWeight(Ze.index,2);tn.setWeight(Ze.middle,2);var N8=[jo,tn];var vge=.7,Cl={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 E8(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 R8(e,t){if(!e||!t)return[0,0];let n=E8(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let s=E8(e[1],e[2],t[1],t[2]);return[n,s]}function $8(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 wge(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],c=e[2]-t[2],u=e[2]-n[2],d=t[2]-n[2],p=Math.sqrt(s*s+o*o+c*c),h=Math.sqrt(r*r+i*i+u*u),f=Math.sqrt(a*a+l*l+d*d),m=(f*f+p*p-h*h)/(2*f*p);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let A;return g>Cl.NO_CURL_START_LIMIT?A=cs.none:g>Cl.HALF_CURL_START_LIMIT?A=cs.half:A=cs.full,A}function D8(e,t,n,s){let r;return s===Math.abs(e)?e>0?r=qe.horizontalLeft:r=qe.horizontalRight:s===Math.abs(t)?t>0?r=qe.horizontalLeft:r=qe.horizontalRight:n>0?r=qe.horizontalLeft:r=qe.horizontalRight,r}function _8(e,t,n,s){let r;return s===Math.abs(e)?e<0?r=qe.verticalDown:r=qe.verticalUp:s===Math.abs(t)?t<0?r=qe.verticalDown:r=qe.verticalUp:n<0?r=qe.verticalDown:r=qe.verticalUp,r}function kge(e,t,n,s,r,a,o,i){let l,c=_8(e,t,n,s),u=D8(r,a,o,i);return c===qe.verticalUp?u===qe.horizontalLeft?l=qe.diagonalUpLeft:l=qe.diagonalUpRight:u===qe.horizontalLeft?l=qe.diagonalDownLeft:l=qe.diagonalDownRight,l}function Ige(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],c=t[1]-n[1],u=Math.max(Math.abs(r),Math.abs(a),Math.abs(o)),d=Math.max(Math.abs(i),Math.abs(l),Math.abs(c)),p=0,h=0,f=0,m=d/(u+1e-5);m>1.5?p+=Cl.DISTANCE_VOTE_POWER:m>.66?h+=Cl.DISTANCE_VOTE_POWER:f+=Cl.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+i*i),A=Math.sqrt(a*a+l*l),y=Math.sqrt(o*o+c*c),x=Math.max(g,A,y),b=e[0],w=e[1],k=n[0],S=n[1];x===g?(k=n[0],S=n[1]):x===y&&(b=t[0],w=t[1]);let F=R8([b,w],[k,S]),R=$8(F,Cl.TOTAL_ANGLE_VOTE_POWER);p+=R[0],h+=R[1],f+=R[2];for(let T of s){let M=$8(T,Cl.SINGLE_ANGLE_VOTE_POWER);p+=M[0],h+=M[1],f+=M[2]}let P;return p===Math.max(p,h,f)?P=_8(l,i,c,d):f===Math.max(h,f)?P=D8(a,r,o,u):P=kge(l,i,c,d,a,r,o,u),P}function P8(e){let t=[],n=[],s=[],r=[];if(!e)return{curls:s,directions:r};for(let a of Ze.all){let o=Ze.getPoints(a),i=[],l=[];for(let c of o){let u=e[c[0]],d=e[c[1]],p=R8(u,d),h=p[0],f=p[1];i.push(h),l.push(f)}t.push(i),n.push(l)}for(let a of Ze.all){let o=a===Ze.thumb?1:0,i=Ze.getPoints(a),l=e[i[o][0]],c=e[i[o+1][1]],u=e[i[3][1]],d=wge(l,c,u),p=Ige(l,c,u,t[a].slice(o));s[a]=d,r[a]=p}return{curls:s,directions:r}}function Qm(e){if(!e||e.length===0)return null;let t=P8(e),n={};for(let s of Ze.all)n[Ze.getName(s)]={curl:cs.getName(t.curls[s]),direction:qe.getName(t.directions[s])};return n}function F8(e){let t=[];if(!e||e.length===0)return t;let n=P8(e);for(let s of N8){let r=s.matchAgainst(n.curls,n.directions);r>=vge&&t.push({name:s.name,confidence:r})}return t}var O8={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]},la,ua,M8;async function ib(e,t){let n=await M8.estimateHands(e,t);if(!n)return[];let s=[];for(let r=0;rn[r].landmarks[d]);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 u of o)u[0]i[2]&&(i[2]=u[0]),u[1]>i[3]&&(i[3]=u[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 c=Qm(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:c})}return s}async function lb(e){var n,s,r,a,o,i;ye.initial&&(la=null,ua=null),!la||!ua?([la,ua]=await Promise.all([e.hand.enabled?st(at(e.modelBasePath,((n=e.hand.detector)==null?void 0:n.modelPath)||""),{fromTFHub:(((s=e.hand.detector)==null?void 0:s.modelPath)||"").includes("tfhub.dev")}):null,e.hand.landmarks?st(at(e.modelBasePath,((r=e.hand.skeleton)==null?void 0:r.modelPath)||""),{fromTFHub:(((a=e.hand.skeleton)==null?void 0:a.modelPath)||"").includes("tfhub.dev")}):null]),e.hand.enabled&&(!la||!la.modelUrl?ae("load model failed:",((o=e.hand.detector)==null?void 0:o.modelPath)||""):e.debug&&ae("load model:",la.modelUrl),!ua||!ua.modelUrl?ae("load model failed:",((i=e.hand.skeleton)==null?void 0:i.modelPath)||""):e.debug&&ae("load model:",ua.modelUrl))):(e.debug&&ae("cached model:",la.modelUrl),e.debug&&ae("cached model:",ua.modelUrl));let t=new ab(la);return M8=new ob(t,ua),[la,ua]}function Tl(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 z8(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[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 e0(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]]}function ub(e){return[Math.max(0,e[1]),Math.max(0,e[0]),Math.min(1,e[3]+e[1]),Math.min(1,e[2]+e[0])]}var Nt=[null,null],Sge=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qo=[[0,0],[0,0]],Cge=["hand","fist","pinch","point","face","tip","pinchtip"],L8=4,B8=1.6,Tge=512,Nge=1.4,t0=Number.MAX_SAFE_INTEGER,cb=0,ca=[0,0],Xt={boxes:[],hands:[]},W8={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]};async function V8(e){var t,n;if(ye.initial&&(Nt[0]=null),Nt[0])e.debug&&ae("cached model:",Nt[0].modelUrl);else{dc(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Nt[0]=await st(at(e.modelBasePath,((t=e.hand.detector)==null?void 0:t.modelPath)||""));let s=Object.values(Nt[0].modelSignature.inputs);qo[0][0]=Array.isArray(s)?parseInt(s[0].tensorShape.dim[1].size):0,qo[0][1]=Array.isArray(s)?parseInt(s[0].tensorShape.dim[2].size):0,!Nt[0]||!Nt[0].modelUrl?ae("load model failed:",(n=e.hand.detector)==null?void 0:n.modelPath):e.debug&&ae("load model:",Nt[0].modelUrl)}return Nt[0]}async function U8(e){var t,n;if(ye.initial&&(Nt[1]=null),Nt[1])e.debug&&ae("cached model:",Nt[1].modelUrl);else{Nt[1]=await st(at(e.modelBasePath,((t=e.hand.skeleton)==null?void 0:t.modelPath)||""));let s=Object.values(Nt[1].modelSignature.inputs);qo[1][0]=Array.isArray(s)?parseInt(s[0].tensorShape.dim[1].size):0,qo[1][1]=Array.isArray(s)?parseInt(s[0].tensorShape.dim[2].size):0,!Nt[1]||!Nt[1].modelUrl?ae("load model failed:",(n=e.hand.skeleton)==null?void 0:n.modelPath):e.debug&&ae("load model:",Nt[1].modelUrl)}return Nt[1]}async function Ege(e,t){let n=[];if(!e||!Nt[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,Tge),o=Math.round(a*r/8)*8;s.resize=$e.resizeBilinear(e,[a,o]),s.cast=he(s.resize,"int32"),[s.rawScores,s.rawBoxes]=await Nt[0].executeAsync(s.cast,Sge),s.boxes=pt(s.rawBoxes,[0,2]),s.scores=pt(s.rawScores,[0]);let i=as(s.scores,1);Q(i[L8]),i.splice(L8,1),s.filtered=Pn(i,1),Q(i),s.max=rs(s.filtered,1),s.argmax=Hs(s.filtered,1);let l=0;s.nms=await $e.nonMaxSuppressionAsync(s.boxes,s.max,t.hand.maxDetected,t.hand.iouThreshold,t.hand.minConfidence);let c=await s.nms.data(),u=await s.max.data(),d=await s.argmax.data();for(let p of Array.from(c)){let h=_e(s.boxes,p,1),f=await h.data();Q(h);let m=[f[1],f[0],f[3]-f[1],f[2]-f[0]],g=e0(m,Nge),A=ub(g),y=[Math.trunc(m[0]*ca[0]),Math.trunc(m[1]*ca[1]),Math.trunc(m[2]*ca[0]),Math.trunc(m[3]*ca[1])],x=u[p],b=Cge[d[p]],w={id:l++,score:x,box:y,boxRaw:g,boxCrop:A,label:b};n.push(w)}return Object.keys(s).forEach(p=>Q(s[p])),n.sort((p,h)=>h.score-p.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function db(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&&Nt[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={};r.crop=$e.cropAndResize(e,[t.boxCrop],[0],[qo[1][0],qo[1][1]],"bilinear"),r.cast=he(r.crop,"float32"),r.div=fe(r.cast,255),[r.score,r.keypoints]=Nt[1].execute(r.div);let a=(await r.score.data())[0],o=(100-Math.trunc(100/(1+Math.exp(a))))/100;if(o>=(n.hand.minConfidence||0)){s.fingerScore=o,r.reshaped=G(r.keypoints,[-1,3]);let c=(await r.reshaped.array()).map(u=>[u[0]/qo[1][1],u[1]/qo[1][0],u[2]||0]).map(u=>[u[0]*t.boxRaw[2],u[1]*t.boxRaw[3],u[2]||0]);s.keypoints=c.map(u=>[ca[0]*(u[0]+t.boxRaw[0]),ca[1]*(u[1]+t.boxRaw[1]),u[2]||0]),s.landmarks=Qm(s.keypoints);for(let u of Object.keys(W8))s.annotations[u]=W8[u].map(d=>s.landmarks&&s.keypoints[d]?s.keypoints[d]:null)}Object.keys(r).forEach(i=>Q(r[i]))}return s}async function pb(e,t){var r,a;if(!Nt[0]||!Nt[1]||!((r=Nt[0])==null?void 0:r.inputs[0].shape)||!((a=Nt[1])==null?void 0:a.inputs[0].shape))return[];ca=[e.shape[2]||0,e.shape[1]||0],t0++;let n=(t.hand.skipTime||0)>pe()-cb,s=t0<(t.hand.skipFrames||0);return t.skipAllowed&&n&&s?Xt.hands:new Promise(async o=>{let i=3*(t.hand.skipTime||0)>pe()-cb,l=t0<3*(t.hand.skipFrames||0);t.skipAllowed&&Xt.hands.length===t.hand.maxDetected?Xt.hands=await Promise.all(Xt.boxes.map(u=>db(e,u,t))):t.skipAllowed&&i&&l&&Xt.hands.length>0?Xt.hands=await Promise.all(Xt.boxes.map(u=>db(e,u,t))):(Xt.boxes=await Ege(e,t),cb=pe(),Xt.hands=await Promise.all(Xt.boxes.map(u=>db(e,u,t))),t0=0);let c=[...Xt.boxes];if(Xt.boxes.length=0,t.cacheSensitivity>0)for(let u=0;u.05&&d.box[3]/(e.shape[1]||1)>.05&&Xt.hands[u].fingerScore&&Xt.hands[u].fingerScore>(t.hand.minConfidence||0)){let p=e0(d.box,B8),h=e0(d.boxRaw,B8),f=ub(h);Xt.boxes.push({...c[u],box:p,boxRaw:h,boxCrop:f})}}for(let u=0;us0,horizontal:()=>hb,kpt:()=>n0,relative:()=>mb,vertical:()=>fb});var n0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],hb=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],fb=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],mb=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],s0={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var G8=.005,vs={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function Ab(e){for(let t of hb){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]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),a=e.keypoints.findIndex(c=>c&&c.part===n[0]),o=e.keypoints.findIndex(c=>c&&c.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 c=e.keypoints[s];e.keypoints[s]=e.keypoints[r],e.keypoints[r]=c}}}function H8(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=$e.resizeBilinear(n.pad,[t,t]);let s=he(n.resize,"int32");return Object.keys(n).forEach(r=>Q(n[r])),s}function q8(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=Tl(e.keypoints.map(s=>s.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var Fn,r0=0,yb=Number.MAX_SAFE_INTEGER,Nl={boxes:[],bodies:[],last:0};async function X8(e){return ye.initial&&(Fn=null),Fn?e.debug&&ae("cached model:",Fn.modelUrl):(dc(["size"],e),Fn=await st(at(e.modelBasePath,e.body.modelPath||"")),!Fn||!Fn.modelUrl?ae("load model failed:",e.body.modelPath):e.debug&&ae("load model:",Fn.modelUrl)),r0=Fn.inputs[0].shape?Fn.inputs[0].shape[2]:0,r0===-1&&(r0=256),Fn}async function Rge(e,t,n,s){let r=e[0][0],a=[],o=0;for(let d=0;dt.body.minConfidence){let p=[(s[3]-s[1])*r[d][1]+s[1],(s[2]-s[0])*r[d][0]+s[0]];a.push({score:Math.round(100*o)/100,part:n0[d],positionRaw:p,position:[Math.round((n.shape[2]||0)*p[0]),Math.round((n.shape[1]||0)*p[1])]})}o=a.reduce((d,p)=>p.score>d?p.score:d,0);let i=[],l=Tl(a.map(d=>d.position),[n.shape[2],n.shape[1]]),c={};for(let[d,p]of Object.entries(s0)){let h=[];for(let f=0;fA.part===p[f]),g=a.find(A=>A.part===p[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}c[d]=h}let u={id:0,score:o,box:l.box,boxRaw:l.boxRaw,keypoints:a,annotations:c};return Ab(u),i.push(u),i}async function $ge(e,t,n,s){let r=[];for(let a=0;at.body.minConfidence){let l=[];for(let p=0;p<17;p++){let h=o[3*p+2];if(h>t.body.minConfidence){let f=[(s[3]-s[1])*o[3*p+1]+s[1],(s[2]-s[0])*o[3*p+0]+s[0]];l.push({part:n0[p],score:Math.round(100*h)/100,positionRaw:f,position:[Math.round((n.shape[2]||0)*f[0]),Math.round((n.shape[1]||0)*f[1])]})}}let c=Tl(l.map(p=>p.position),[n.shape[2],n.shape[1]]),u={};for(let[p,h]of Object.entries(s0)){let f=[];for(let m=0;my.part===h[m]),A=l.find(y=>y.part===h[m+1]);g&&A&&g.score>(t.body.minConfidence||0)&&A.score>(t.body.minConfidence||0)&&f.push([g.position,A.position])}u[p]=f}let d={id:a,score:i,box:c.box,boxRaw:c.boxRaw,keypoints:[...l],annotations:u};Ab(d),r.push(d)}}return r.sort((a,o)=>o.score-a.score),r.length>t.body.maxDetected&&(r.length=t.body.maxDetected),r}async function xb(e,t){if(!Fn||!(Fn==null?void 0:Fn.inputs[0].shape))return[];t.skipAllowed||(Nl.boxes.length=0),yb++;let n=(t.body.skipTime||0)>pe()-Nl.last,s=yb<(t.body.skipFrames||0);return t.skipAllowed&&n&&s?Nl.bodies:new Promise(async r=>{let a={};yb=0,a.input=j8(e,r0),a.res=await(Fn==null?void 0:Fn.predict(a.input)),Nl.last=pe();let o=await a.res.array();Nl.bodies=a.res.shape[2]===17?await Rge(o,t,e,[0,0,1,1]):await $ge(o,t,e,[0,0,1,1]);for(let i of Nl.bodies)q8(i,[e.shape[2]||1,e.shape[1]||1]),H8(i.keypoints);Object.keys(a).forEach(i=>Q(a[i])),r(Nl.bodies)})}var ws,a0=[],K8=0,bb=Number.MAX_SAFE_INTEGER,o0=2.5;async function Z8(e){if(!ws||ye.initial){ws=await st(at(e.modelBasePath,e.object.modelPath||""));let t=Object.values(ws.modelSignature.inputs);if(ws.inputSize=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):null,!ws.inputSize)throw new Error(`cannot determine model inputSize: ${e.object.modelPath}`);!ws||!ws.modelUrl?ae("load model failed:",e.object.modelPath):e.debug&&ae("load model:",ws.modelUrl)}else e.debug&&ae("cached model:",ws.modelUrl);return ws}async function Dge(e,t,n,s){let r=0,a=[];for(let c of[1,2,4])j(async()=>{var g,A;let u=c*13,d=(g=e.find(y=>y.shape[1]===u**2&&y.shape[2]===cc.length))==null?void 0:g.squeeze(),p=(A=e.find(y=>y.shape[1]===u**2&&y.shape[2]s.object.minConfidence&&x!==61){let w=(.5+Math.trunc(y%u))/u,k=(.5+Math.trunc(y/u))/u,S=f[y].map(U=>U*(u/c/t)),[E,$]=[w-o0/c*S[0],k-o0/c*S[1]],[F,R]=[w+o0/c*S[2]-E,k+o0/c*S[3]-$],P=[E,$,F,R];P=P.map(U=>Math.max(0,Math.min(U,1)));let T=[P[0]*n[0],P[1]*n[1],P[2]*n[0],P[3]*n[1]],M={id:r++,score:Math.round(100*b)/100,class:x+1,label:cc[x].label,box:T.map(U=>Math.trunc(U)),boxRaw:P};a.push(M)}}});e.forEach(c=>Q(c));let o=a.map(c=>[c.boxRaw[1],c.boxRaw[0],c.boxRaw[3],c.boxRaw[2]]),i=a.map(c=>c.score),l=[];if(o&&o.length>0){let c=await $e.nonMaxSuppressionAsync(o,i,s.object.maxDetected,s.object.iouThreshold,s.object.minConfidence);l=await c.data(),Q(c)}return a=a.filter((c,u)=>l.includes(u)).sort((c,u)=>u.score-c.score),a}async function vb(e,t){let n=(t.object.skipTime||0)>pe()-K8,s=bb<(t.object.skipFrames||0);return t.skipAllowed&&n&&s&&a0.length>0?(bb++,a0):(bb=0,!ye.kernels.includes("mod")||!ye.kernels.includes("sparsetodense")?a0:new Promise(async r=>{let a=[e.shape[2],e.shape[1]],o=$e.resizeBilinear(e,[ws.inputSize,ws.inputSize],!1),i=fe(o,255),l=i.transpose([0,3,1,2]);Q(i),Q(o);let c;t.object.enabled&&(c=await ws.predict(l)),K8=pe(),Q(l);let u=await Dge(c,ws.inputSize,a,t);a0=u,r(u)}))}var Ap=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_ge=Ap.length,yp=Ap.reduce((e,t,n)=>(e[t]=n,e),{}),Pge=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],hAe=Pge.map(([e,t])=>[yp[e],yp[t]]),Y8=[["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 J8(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 Q8(e,[t,n],[s,r]){let a=t/s,o=n/r,i=(c,u)=>({id:u,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/s,c.box[2]/r,c.box[3]/s],box:[Math.trunc(c.box[0]*o),Math.trunc(c.box[1]*a),Math.trunc(c.box[2]*o),Math.trunc(c.box[3]*a)],keypoints:c.keypoints.map(({score:d,part:p,position:h})=>({score:d,part:p,position:[Math.trunc(h.x*o),Math.trunc(h.y*a)],positionRaw:[h.x/s,h.y/s]}))});return e.map((c,u)=>i(c,u))}var wb=class{constructor(t,n){de(this,"priorityQueue");de(this,"numberOfElements");de(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 eT(e,t,n,s){let r=n-e,a=s-t;return r*r+a*a}function Cb(e,t){return{x:e.x+t.x,y:e.y+t.y}}var ks,Fge=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],i0=1,fc=16,Oge=50**2;function tT(e,t,n,s,r,a,o=2){let i=A=>({y:a.get(A.y,A.x,e),x:a.get(A.y,A.x,a.shape[2]/2+e)}),l=(A,y,x)=>({y:Sb(Math.round(A.y/fc),0,y-1),x:Sb(Math.round(A.x/fc),0,x-1)}),[c,u]=s.shape,d=l(t.position,c,u),p=i(d),f=Cb(t.position,p);for(let A=0;A[yp[p],yp[h]]),o=a.map(([,p])=>p),i=a.map(([p])=>p),l=t.shape[2],c=o.length,u=new Array(l),d=Ib(e.part,fc,n);u[e.part.id]={score:e.score,part:Ap[e.part.id],position:d};for(let p=c-1;p>=0;--p){let h=o[p],f=i[p];u[h]&&!u[f]&&(u[f]=tT(p,u[h],f,t,n,r))}for(let p=0;pt){i=!1;break}if(!i)break}return i}function Lge(e,t){let[n,s,r]=t.shape,a=new wb(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?eT(n,t,a.y,a.x)<=Oge:!1})}function Bge(e,t){return t.reduce((s,{position:r,score:a},o)=>(nT(e,r,o)||(s+=a),s),0)/t.length}function Wge(e,t,n,s,r,a){let o=[],i=Lge(a,t);for(;o.lengthh.score>a);let d=Bge(o,u),p=J8(u);d>a&&o.push({keypoints:u,box:p,score:Math.round(100*d)/100})}return o}async function Tb(e,t){let n=j(()=>{if(!ks.inputs[0].shape)return[];let o=$e.resizeBilinear(e,[ks.inputs[0].shape[2],ks.inputs[0].shape[1]]),i=xe(fe(he(o,"float32"),127.5),1),c=ks.execute(i,Fge).map(u=>pt(u,[0]));return c[1]=c[1].sigmoid(),c}),s=await Promise.all(n.map(o=>o.buffer()));for(let o of n)Q(o);let r=await Wge(s[0],s[1],s[2],s[3],t.body.maxDetected,t.body.minConfidence);return ks.inputs[0].shape?Q8(r,[e.shape[1],e.shape[2]],[ks.inputs[0].shape[2],ks.inputs[0].shape[1]]):[]}async function sT(e){return!ks||ye.initial?(ks=await st(at(e.modelBasePath,e.body.modelPath||"")),!ks||!ks.modelUrl?ae("load model failed:",e.body.modelPath):e.debug&&ae("load model:",ks.modelUrl)):e.debug&&ae("cached model:",ks.modelUrl),ks}var zs,Nb=!1;async function Eb(e){return!zs||ye.initial?(zs=await st(at(e.modelBasePath,e.segmentation.modelPath||"")),!zs||!zs.modelUrl?ae("load model failed:",e.segmentation.modelPath):e.debug&&ae("load model:",zs.modelUrl)):e.debug&&ae("cached model:",zs.modelUrl),zs}async function rT(e,t,n){var m,g;if(Nb)return{data:[],canvas:null,alpha:null};Nb=!0,zs||await Eb(n);let s=uc(e,n),r=((m=s.canvas)==null?void 0:m.width)||0,a=((g=s.canvas)==null?void 0:g.height)||0;if(!s.tensor)return{data:[],canvas:null,alpha:null};let o={};o.resize=$e.resizeBilinear(s.tensor,[zs.inputs[0].shape?zs.inputs[0].shape[1]:0,zs.inputs[0].shape?zs.inputs[0].shape[2]:0],!1),Q(s.tensor),o.norm=fe(o.resize,255),o.res=zs.predict(o.norm),o.squeeze=pt(o.res,0),o.squeeze.shape[2]===2?(o.softmax=$u(o.squeeze),[o.bg,o.fg]=as(o.softmax,2),o.expand=Kt(o.fg,2),o.pad=Kt(o.expand,0),o.crop=$e.cropAndResize(o.pad,[[0,0,.5,.5]],[0],[r,a]),o.data=pt(o.crop,0)):o.data=$e.resizeBilinear(o.squeeze,[a,r]);let i=Array.from(await o.data.data());if(ye.node&&!ye.Canvas&&typeof ImageData=="undefined")return n.debug&&ae("canvas support missing"),Object.keys(o).forEach(A=>Q(o[A])),{data:i,canvas:null,alpha:null};let l=Kn(r,a);await Gs.toPixels(o.data,l);let c=l.getContext("2d");n.segmentation.blur&&n.segmentation.blur>0&&(c.filter=`blur(${n.segmentation.blur}px)`);let u=c.getImageData(0,0,r,a),d=Kn(r,a),p=d.getContext("2d");s.canvas&&p.drawImage(s.canvas,0,0),p.globalCompositeOperation="darken",n.segmentation.blur&&n.segmentation.blur>0&&(p.filter=`blur(${n.segmentation.blur}px)`),p.drawImage(l,0,0),p.globalCompositeOperation="source-over",p.filter="none";let h=p.getImageData(0,0,r,a);for(let A=0;AQ(o[A])),Nb=!1,{data:i,canvas:f||d,alpha:l}}var Rb=class{constructor(){de(this,"age",null);de(this,"agegenderrace",null);de(this,"blazeposedetect",null);de(this,"blazepose",null);de(this,"centernet",null);de(this,"efficientpose",null);de(this,"embedding",null);de(this,"emotion",null);de(this,"facedetect",null);de(this,"faceiris",null);de(this,"facemesh",null);de(this,"faceres",null);de(this,"gender",null);de(this,"handpose",null);de(this,"handskeleton",null);de(this,"handtrack",null);de(this,"movenet",null);de(this,"nanodet",null);de(this,"posenet",null);de(this,"segmentation",null);de(this,"antispoof",null)}};function $b(e){for(let t of Object.keys(e.models))e.models[t]=null}async function aT(e){var t,n,s,r,a,o,i,l,c,u,d,p,h,f,m,g,A,y,x,b,w,k,S,E,$,F,R,P,T,M,U;ye.initial&&$b(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 lb(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 lb(e.config))),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=H6(e.config)),e.config.face.enabled&&((a=e.config.face.mesh)==null?void 0:a.enabled)&&!e.models.facemesh&&(e.models.facemesh=p8(e.config)),e.config.face.enabled&&((o=e.config.face.iris)==null?void 0:o.enabled)&&!e.models.faceiris&&(e.models.faceiris=r8(e.config)),e.config.face.enabled&&((i=e.config.face.antispoof)==null?void 0:i.enabled)&&!e.models.antispoof&&(e.models.antispoof=F6(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((c=(l=e.config.hand.detector)==null?void 0:l.modelPath)==null?void 0:c.includes("handtrack"))&&(e.models.handtrack=V8(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((d=(u=e.config.hand.detector)==null?void 0:u.modelPath)==null?void 0:d.includes("handtrack"))&&(e.models.handskeleton=U8(e.config)),e.config.body.enabled&&!e.models.posenet&&((h=(p=e.config.body)==null?void 0:p.modelPath)==null?void 0:h.includes("posenet"))&&(e.models.posenet=sT(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((m=(f=e.config.body)==null?void 0:f.modelPath)==null?void 0:m.includes("efficientpose"))&&(e.models.efficientpose=jx(e.config)),e.config.body.enabled&&!e.models.blazepose&&((A=(g=e.config.body)==null?void 0:g.modelPath)==null?void 0:A.includes("blazepose"))&&(e.models.blazepose=Z6(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&((y=e.config.body.detector)==null?void 0:y.modelPath)&&((b=(x=e.config.body)==null?void 0:x.modelPath)==null?void 0:b.includes("blazepose"))&&(e.models.blazeposedetect=K6(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((k=(w=e.config.body)==null?void 0:w.modelPath)==null?void 0:k.includes("efficientpose"))&&(e.models.efficientpose=jx(e.config)),e.config.body.enabled&&!e.models.movenet&&((E=(S=e.config.body)==null?void 0:S.modelPath)==null?void 0:E.includes("movenet"))&&(e.models.movenet=X8(e.config)),e.config.object.enabled&&!e.models.nanodet&&((F=($=e.config.object)==null?void 0:$.modelPath)==null?void 0:F.includes("nanodet"))&&(e.models.nanodet=Z8(e.config)),e.config.object.enabled&&!e.models.centernet&&((P=(R=e.config.object)==null?void 0:R.modelPath)==null?void 0:P.includes("centernet"))&&(e.models.centernet=Q6(e.config)),e.config.face.enabled&&((T=e.config.face.emotion)==null?void 0:T.enabled)&&!e.models.emotion&&(e.models.emotion=s8(e.config)),e.config.face.enabled&&((M=e.config.face.description)==null?void 0:M.enabled)&&!e.models.faceres&&(e.models.faceres=A8(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=Eb(e.config)),e.config.face.enabled&&((U=e.config.face.agegenderrace)==null?void 0:U.enabled)&&!e.models.agegenderrace&&(e.models.agegenderrace=D6(e.config));for await(let H of Object.keys(e.models))e.models[H]&&typeof e.models[H]!="undefined"&&(e.models[H]=await e.models[H])}async function oT(e){let t=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"];for(let n of Object.keys(e.models))if(e.models[n]){let s=[];Array.isArray(e.models[n])?s=e.models[n].filter(r=>r!==null).map(r=>r&&r.executor?r:r.model):s=[e.models[n]];for(let r of s){if(!r){e.config.debug&&ae("model marked as loaded but not defined:",n);continue}let a=[],o=r==null?void 0:r.executor;if(o&&o.graph.nodes)for(let l of Object.values(o.graph.nodes)){let c=l.op.toLowerCase();a.includes(c)||a.push(c)}else!o&&e.config.debug&&ae("model signature not determined:",n);let i=[];for(let l of a)!t.includes(l)&&!e.env.kernels.includes(l)&&!e.env.kernels.includes(l.replace("_",""))&&!e.env.kernels.includes(l.replace("native",""))&&!e.env.kernels.includes(l.replace("v2",""))&&i.push(l);i.length>0&&e.config.debug&&ae("model validation:",n,i)}}}var zt={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 Vge(){let e=zt.gl;!e||(zt.extensions=e.getSupportedExtensions())}async function iT(e){var t;if(e.config.backend==="humangl"&&(zt.name in ss().registry&&(!zt.gl||!zt.gl.getParameter(zt.gl.VERSION))&&(ae("error: humangl backend invalid context"),$b(e)),!I2(zt.name))){try{zt.canvas=await Kn(100,100)}catch(s){ae("error: cannot create canvas:",s);return}try{zt.gl=(t=zt.canvas)==null?void 0:t.getContext("webgl2",zt.webGLattr),zt.canvas&&(zt.canvas.addEventListener("webglcontextlost",async s=>{throw ae("error: humangl:",s.type),ae("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("browser webgl error")}),zt.canvas.addEventListener("webglcontextrestored",s=>{ae("error: humangl context restored:",s)}),zt.canvas.addEventListener("webglcontextcreationerror",s=>{ae("error: humangl context create:",s)}))}catch(s){ae("error: cannot get WebGL context:",s);return}try{pm(2,zt.gl)}catch(s){ae("error: cannot set WebGL context:",s);return}try{let s=new vm(zt.gl);Ki(zt.name,()=>new Kd(s),zt.priority)}catch(s){ae("error: cannot register WebGL backend:",s);return}try{Xr("webgl").forEach(r=>{let a={...r,backendName:zt.name};Kr(a)})}catch(s){ae("error: cannot update WebGL backend registration:",s);return}let n=Tr().getGPGPUContext?Tr().getGPGPUContext().gl:null;if(n)ae(`humangl webgl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`);else{ae("error: no current gl context:",n,zt.gl);return}try{Ir.set("WEBGL_VERSION",2)}catch(s){ae("error: cannot set WebGL backend flags:",s);return}Vge(),ae("backend registered:",zt.name)}}async function l0(e,t=!1){if(e.state="backend",t||ye.initial||e.config.backend&&e.config.backend.length>0&&ir()!==e.config.backend){let n=pe();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&ae("running inside web worker"),ye.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&ae("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),ye.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&ae(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),ye.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")ae("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();e.config.debug&&ae("enumerated webgpu adapter:",r)}e.config.backend==="humangl"&&await iT(e);let s=Object.keys(ss().registryFactory);if(e.config.debug&&ae("available backends:",s),s.includes(e.config.backend)||(ae(`error: backend ${e.config.backend} not found in registry`),e.config.backend=ye.node?"tensorflow":"webgl",e.config.debug&&ae(`override: setting backend ${e.config.backend}`)),e.config.debug&&ae("setting backend:",e.config.backend),e.config.backend==="wasm"){if(e.config.debug&&ae("wasm path:",e.config.wasmPath),typeof(wl==null?void 0:wl.setWasmPaths)!="undefined")await x6(e.config.wasmPath);else throw new Error("wasm backend is not loaded");let r=await K().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await K().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");e.config.debug&&ae(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),e.config.debug&&!r&&ae("warning: wasm simd support is not enabled")}try{await m3(e.config.backend),await Wh()}catch(r){return ae("error: cannot set backend:",e.config.backend,r),!1}}if(ir()==="humangl"&&(Ir.set("CHECK_COMPUTATION_FOR_ERRORS",!1),Ir.set("WEBGL_CPU_FORWARD",!0),Ir.set("WEBGL_USE_SHAPES_UNIFORMS",!0),Ir.set("CPU_HANDOFF_SIZE_THRESHOLD",256),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(ae("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),Ir.set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),Tr().getGPGPUContext)){let s=await Tr().getGPGPUContext().gl;e.config.debug&&ae(`gl version:${s.getParameter(s.VERSION)} renderer:${s.getParameter(s.RENDERER)}`)}ir()==="webgpu",f3(),await Wh(),e.performance.backend=Math.trunc(pe()-n),e.config.backend=ir(),ye.updateBackend()}return!0}function dc(e,t){for(let n of e){let s={kernelName:n,backendName:t.backend,kernelFunc:()=>{t.debug&&ae("kernelFunc",n,t.backend)}};Kr(s)}ye.kernels=Xr(ir()).map(n=>n.kernelName.toLowerCase())}var da={color:"rgba(173, 216, 230, 0.6)",labelColor:"rgba(173, 216, 230, 1)",shadowColor:"black",font:'small-caps 14px "Segoe UI"',lineHeight:18,lineWidth:4,pointSize:2,roundRect:8,drawPoints:!1,drawLabels:!0,drawBoxes:!0,drawGestures:!0,drawPolygons:!0,drawGaze:!0,fillPolygons:!1,useDepth:!0,useCurves:!1},El=e=>{if(e&&e.getContext)return e.getContext("2d");throw new Error("invalid canvas")},mc=e=>Math.round(e*180/Math.PI);function Db(e,t,n,s=0,r){e.fillStyle=r.useDepth&&s?`rgba(${127.5+2*s}, ${127.5-2*s}, 255, 0.3)`:r.color,e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function xp(e,t,n,s,r,a){if(e.beginPath(),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.lineWidth=a.lineWidth,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 lT(e,t=[],n){if(!(t===void 0||t.length===0)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let s of t){let r=s[2]||0;e.strokeStyle=n.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:n.color,e.fillStyle=n.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:n.color,e.lineTo(s[0],Math.round(s[1]))}e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function Uge(e,t=[],n){if(!(t===void 0||t.length===0)){if(!n.useCurves||t.length<=2){lT(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let s=0;s1&&l[1].length>0){let c=i[1]>0?`#${i[1]}`:"",u=`${i[0]} ${c}: ${l[1]}`;s.shadowColor&&s.shadowColor!==""&&(r.fillStyle=s.shadowColor,r.fillText(u,8,2+a*s.lineHeight)),r.fillStyle=s.labelColor,r.fillText(u,6,0+a*s.lineHeight),a+=1}}}}async function Pb(e,t,n){var a,o,i,l,c;let s=$n(da,n);if(!t||!e)return;let r=El(e);for(let u of t){if(r.font=s.font,r.strokeStyle=s.color,r.fillStyle=s.color,s.drawBoxes&&xp(r,u.box[0],u.box[1],u.box[2],u.box[3],s),s.drawLabels){let d=[];if(d.push(`face: ${Math.trunc(100*u.score)}%`),u.genderScore&&d.push(`${u.gender||""} ${Math.trunc(100*u.genderScore)}%`),u.age&&d.push(`age: ${u.age||""}`),u.iris&&d.push(`distance: ${u.iris}`),u.real&&d.push(`real: ${Math.trunc(100*u.real)}%`),u.emotion&&u.emotion.length>0){let p=u.emotion.map(h=>`${Math.trunc(100*h.score)}% ${h.emotion}`);p.length>3&&(p.length=3),d.push(p.join(" "))}u.rotation&&u.rotation.angle&&u.rotation.gaze&&(u.rotation.angle.roll&&d.push(`roll: ${mc(u.rotation.angle.roll)}\xB0 yaw:${mc(u.rotation.angle.yaw)}\xB0 pitch:${mc(u.rotation.angle.pitch)}\xB0`),u.rotation.gaze.bearing&&d.push(`gaze: ${mc(u.rotation.gaze.bearing)}\xB0`)),d.length===0&&d.push("face"),r.fillStyle=s.color;for(let p=d.length-1;p>=0;p--){let h=Math.max(u.box[0],0),f=p*s.lineHeight+u.box[1];s.shadowColor&&s.shadowColor!==""&&(r.fillStyle=s.shadowColor,r.fillText(d[p],h+5,f+16)),r.fillStyle=s.labelColor,r.fillText(d[p],h+4,f+15)}}if(r.lineWidth=1,u.mesh&&u.mesh.length>0){if(s.drawPoints)for(let d of u.mesh)Db(r,d[0],d[1],d[2],s);if(s.drawPolygons){if(r.lineWidth=1,u.mesh.length>450)for(let d=0;du.mesh[h]);lT(r,p,s)}if(u.annotations&&u.annotations.leftEyeIris&&u.annotations.leftEyeIris[0]){r.strokeStyle=s.useDepth?"rgba(255, 200, 255, 0.3)":s.color,r.beginPath();let d=Math.abs(u.annotations.leftEyeIris[3][0]-u.annotations.leftEyeIris[1][0])/2,p=Math.abs(u.annotations.leftEyeIris[4][1]-u.annotations.leftEyeIris[2][1])/2;r.ellipse(u.annotations.leftEyeIris[0][0],u.annotations.leftEyeIris[0][1],d,p,0,0,2*Math.PI),r.stroke(),s.fillPolygons&&(r.fillStyle=s.useDepth?"rgba(255, 255, 200, 0.3)":s.color,r.fill())}if(u.annotations&&u.annotations.rightEyeIris&&u.annotations.rightEyeIris[0]){r.strokeStyle=s.useDepth?"rgba(255, 200, 255, 0.3)":s.color,r.beginPath();let d=Math.abs(u.annotations.rightEyeIris[3][0]-u.annotations.rightEyeIris[1][0])/2,p=Math.abs(u.annotations.rightEyeIris[4][1]-u.annotations.rightEyeIris[2][1])/2;r.ellipse(u.annotations.rightEyeIris[0][0],u.annotations.rightEyeIris[0][1],d,p,0,0,2*Math.PI),r.stroke(),s.fillPolygons&&(r.fillStyle=s.useDepth?"rgba(255, 255, 200, 0.3)":s.color,r.fill())}if(s.drawGaze&&((a=u.rotation)==null?void 0:a.angle)){r.strokeStyle="pink";let d=u.box[0]+u.box[2]/2-u.box[3]*mc(u.rotation.angle.yaw)/90,p=u.box[1]+u.box[3]/2+u.box[2]*mc(u.rotation.angle.pitch)/90,h=new Path2D(` M ${u.box[0]+u.box[2]/2} ${u.box[1]} C ${d} ${u.box[1]}, diff --git a/dist/human.esm-nobundle.js b/dist/human.esm-nobundle.js index 70da902d..8155d125 100644 --- a/dist/human.esm-nobundle.js +++ b/dist/human.esm-nobundle.js @@ -1281,7 +1281,7 @@ var Env = class { var env = new Env(); // package.json -var version10 = "2.4.0"; +var version10 = "2.4.1"; // src/gear/gear-agegenderrace.ts var model; diff --git a/dist/human.esm.js b/dist/human.esm.js index 9dd2748f..4b34d427 100644 --- a/dist/human.esm.js +++ b/dist/human.esm.js @@ -34898,7 +34898,7 @@ var Env = class { var env = new Env(); // package.json -var version = "2.4.0"; +var version = "2.4.1"; // src/gear/gear-agegenderrace.ts var model; diff --git a/dist/human.js b/dist/human.js index 5a543052..404c339e 100644 --- a/dist/human.js +++ b/dist/human.js @@ -4707,7 +4707,7 @@ return a / b;`,Mne=` gl_FragColor.a = c22.a; } `;var tx=(e,t,n)=>{let a=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(a,(r,s)=>(n[s]=0,r))},n9=class{constructor(t,n,a){ce(this,"uniform",{});ce(this,"attribute",{});ce(this,"gl");ce(this,"id");ce(this,"compile",(t,n)=>{let a=this.gl.createShader(n);if(this.gl.shaderSource(a,t),this.gl.compileShader(a),!this.gl.getShaderParameter(a,this.gl.COMPILE_STATUS))throw new Error(`filter: gl compile failed: ${this.gl.getShaderInfoLog(a)}`);return a});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(a,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),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))throw new Error(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)}`);this.gl.useProgram(this.id),tx(n,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);tx(n,"uniform",this.uniform),tx(a,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}};function a9(){let e=0,t=null,n=!1,a=-1,r=[null,null],s=[],i=null,o=null,l=zn(100,100),d={},u={INTERMEDIATE:1},p=l.getContext("webgl");if(!p)throw new Error("filter: cannot get webgl context");function c(A,x){if(!(A===l.width&&x===l.height)){if(l.width=A,l.height=x,!i){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]);i=p.createBuffer(),p.bindBuffer(p.ARRAY_BUFFER,i),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(A,x){let b=p.createFramebuffer();p.bindFramebuffer(p.FRAMEBUFFER,b);let v=p.createRenderbuffer();p.bindRenderbuffer(p.RENDERBUFFER,v);let k=p.createTexture();return p.bindTexture(p.TEXTURE_2D,k),p.texImage2D(p.TEXTURE_2D,0,p.RGBA,A,x,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,k,0),p.bindTexture(p.TEXTURE_2D,null),p.bindFramebuffer(p.FRAMEBUFFER,null),{fbo:b,texture:k}}function f(A){return r[A]=r[A]||h(l.width,l.height),r[A]}function m(A=0){var k,T;if(!o)return;let x=null,b=null,v=!1;e===0?x=t:x=((k=f(a))==null?void 0:k.texture)||null,e++,n&&!(A&u.INTERMEDIATE)?(b=null,v=e%2==0):(a=(a+1)%2,b=((T=f(a))==null?void 0:T.fbo)||null),p.bindTexture(p.TEXTURE_2D,x),p.bindFramebuffer(p.FRAMEBUFFER,b),p.uniform1f(o.uniform.flipY,v?-1:1),p.drawArrays(p.TRIANGLES,0,6)}function g(A){if(d[A])return o=d[A],p.useProgram((o==null?void 0:o.id)||null),o;o=new n9(p,Z8,A);let x=Float32Array.BYTES_PER_ELEMENT,b=4*x;return p.enableVertexAttribArray(o.attribute.pos),p.vertexAttribPointer(o.attribute.pos,2,p.FLOAT,!1,b,0*x),p.enableVertexAttribArray(o.attribute.uv),p.vertexAttribPointer(o.attribute.uv,2,p.FLOAT,!1,b,2*x),d[A]=o,o}let y={colorMatrix:A=>{let x=new Float32Array(A);x[4]/=255,x[9]/=255,x[14]/=255,x[19]/=255;let b=x[18]===1&&x[3]===0&&x[8]===0&&x[13]===0&&x[15]===0&&x[16]===0&&x[17]===0&&x[19]===0?J8:Y8,v=g(b);p.uniform1fv(v==null?void 0:v.uniform.m,x),m()},brightness:A=>{let x=(A||0)+1;y.colorMatrix([x,0,0,0,0,0,x,0,0,0,0,0,x,0,0,0,0,0,1,0])},saturation:A=>{let x=(A||0)*2/3+1,b=(x-1)*-.5;y.colorMatrix([x,b,b,0,0,b,x,b,0,0,b,b,x,0,0,0,0,0,1,0])},desaturate:()=>{y.saturation(-1)},contrast:A=>{let x=(A||0)+1,b=-128*(x-1);y.colorMatrix([x,0,0,0,b,0,x,0,0,b,0,0,x,0,b,0,0,0,1,0])},negative:()=>{y.contrast(-2)},hue:A=>{A=(A||0)/180*Math.PI;let x=Math.cos(A),b=Math.sin(A),v=.213,k=.715,T=.072;y.colorMatrix([v+x*(1-v)+b*-v,k+x*-k+b*-k,T+x*-T+b*(1-T),0,0,v+x*-v+b*.143,k+x*(1-k)+b*.14,T+x*-T+b*-.283,0,0,v+x*-v+b*-(1-v),k+x*-k+b*k,T+x*(1-T)+b*T,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:A=>{let x=new Float32Array(A),b=1/l.width,v=1/l.height,k=g(t9);p.uniform1fv(k==null?void 0:k.uniform.m,x),p.uniform2f(k==null?void 0:k.uniform.px,b,v),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:A=>{let x=A||1;y.convolution.call(this,[0,-1*x,0,-1*x,1+4*x,-1*x,0,-1*x,0])},emboss:A=>{let x=A||1;y.convolution.call(this,[-2*x,-1*x,0,-1*x,1,1*x,0,1*x,2*x])},blur:A=>{let x=A/7/l.width,b=A/7/l.height,v=g(e9);p.uniform2f(v==null?void 0:v.uniform.px,0,b),m(u.INTERMEDIATE),p.uniform2f(v==null?void 0:v.uniform.px,x,0),m()},pixelate:A=>{let x=A/l.width,b=A/l.height,v=g(Q8);p.uniform2f(v==null?void 0:v.uniform.size,x,b),m()}};this.add=function(A){let x=Array.prototype.slice.call(arguments,1),b=y[A];s.push({func:b,args:x})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(A){c(A.width,A.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,A);for(let x=0;x0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!a||!r)return t.debug&&se("cannot determine input dimensions"),{tensor:null,canvas:it};let s=a,i=r;if(s>Ef&&(s=Ef,i=Math.trunc(s*r/a)),i>Ef&&(i=Ef,s=Math.trunc(i*a/r)),(t.filter.width||0)>0?s=t.filter.width:(t.filter.height||0)>0&&(s=a*((t.filter.height||0)/r)),(t.filter.height||0)>0?i=t.filter.height:(t.filter.width||0)>0&&(i=r*((t.filter.width||0)/a)),!s||!i)throw new Error("input cannot determine dimension");(!it||(it==null?void 0:it.width)!==s||(it==null?void 0:it.height)!==i)&&(it=zn(s,i));let o=it.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?o.putImageData(e,0,0):t.filter.flip&&typeof o.translate!="undefined"?(o.translate(a,0),o.scale(-1,1),o.drawImage(e,0,0,a,r,0,0,it==null?void 0:it.width,it==null?void 0:it.height),o.setTransform(1,0,0,1,0,0)):o.drawImage(e,0,0,a,r,0,0,it==null?void 0:it.width,it==null?void 0:it.height),(!Vt||it.width!==Vt.width||(it==null?void 0:it.height)!==(Vt==null?void 0:Vt.height))&&(Vt=zn(it.width,it.height)),t.filter.enabled&&ye.webgl.supported){if(Rt||(Rt=ye.browser?new a9:null),ye.filter=!!Rt,!Rt)return{tensor:null,canvas:it};Rt.reset(),t.filter.brightness!==0&&Rt.add("brightness",t.filter.brightness),t.filter.contrast!==0&&Rt.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&Rt.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&Rt.add("blur",t.filter.blur),t.filter.saturation!==0&&Rt.add("saturation",t.filter.saturation),t.filter.hue!==0&&Rt.add("hue",t.filter.hue),t.filter.negative&&Rt.add("negative"),t.filter.sepia&&Rt.add("sepia"),t.filter.vintage&&Rt.add("brownie"),t.filter.sepia&&Rt.add("sepia"),t.filter.kodachrome&&Rt.add("kodachrome"),t.filter.technicolor&&Rt.add("technicolor"),t.filter.polaroid&&Rt.add("polaroid"),t.filter.pixelate!==0&&Rt.add("pixelate",t.filter.pixelate),Rt.get()>0?Vt=Rt.apply(it):Vt=Rt.draw(it)}else nx(it,Vt),Rt&&(Rt=null),ye.filter=!!Rt;if(!n)return{tensor:null,canvas:Vt};if(!Vt)throw new Error("cannot create output canvas");let l,d=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(ye.browser&&za)l=za?za.fromPixels(e):null;else{d=e.data.length/e.height/e.width;let c=new Uint8Array(e.data.buffer);l=Lt(c,[e.height,e.width,d],"int32")}else if((!Os||Vt.width!==Os.width||(Vt==null?void 0:Vt.height)!==(Os==null?void 0:Os.height))&&(Os=zn(Vt.width,Vt.height)),za&&ye.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=za.fromPixels(Vt):(Os=nx(Vt),l=za.fromPixels(Os));else{let f=nx(Vt).getContext("2d").getImageData(0,0,s,i);d=f.data.length/s/i;let m=new Uint8Array(f.data.buffer);l=Lt(m,[s,i,d])}if(d===4){let c=fu(l,[0,0,0],[-1,-1,3]);Q(l),l=c}if(!l)throw new Error("cannot create tensor from input");let u=pe(l,"float32"),p=Wt(u,0);return Q([l,u]),{tensor:p,canvas:t.filter.return?Vt:null}}}var ax=0,rx=1,sx=0,Wue=async e=>{let t=48,n=Me.resizeBilinear(e,[Math.trunc((e.shape[1]||1)/t),Math.trunc((e.shape[2]||1)/t)]),a=async()=>{let i=Ie(n),o=await i.data();return Q(i),o[0]},r=async()=>{let i=await n.data(),o=0;for(let l=0;l10*e.cacheSensitivity?0:a,r=r&&rx>0,r}var s9=class{constructor(){ce(this,"browser");ce(this,"node");ce(this,"worker");ce(this,"platform","");ce(this,"agent","");ce(this,"backends",[]);ce(this,"initial");ce(this,"filter");ce(this,"tfjs");ce(this,"offscreen");ce(this,"perfadd",!1);ce(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});ce(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0});ce(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});ce(this,"cpu",{model:void 0,flags:[]});ce(this,"kernels",[]);ce(this,"Canvas");ce(this,"Image");ce(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined",this.tfjs={version:Ud},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(){var a;this.backends=Object.keys(sa().registryFactory),this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&Ya()==="wasm"&&(this.wasm.simd=await ne().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await ne().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=zn(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&&(Ya()==="webgl"||Ya()==="humangl")){let r=mr().gpgpu!=="undefined"?await mr().getGPGPUContext().gl:null;r&&(this.webgl.version=r.getParameter(r.VERSION),this.webgl.renderer=r.getParameter(r.RENDERER))}this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu"),this.webgpu.supported&&(this.webgpu.adapter=(a=await navigator.gpu.requestAdapter())==null?void 0:a.name),this.kernels=$r(Ya()).map(r=>r.kernelName.toLowerCase())}async updateCPU(){var n;let t={model:"",flags:[]};if(this.node&&((n=this.platform)==null?void 0:n.startsWith("linux"))){let a=rs("fs");try{let r=a.readFileSync("/proc/cpuinfo").toString();for(let s of r.split(` -`))s.startsWith("model name")&&(t.model=s.match(/:(.*)/g)[0].replace(":","").trim()),s.startsWith("flags")&&(t.flags=s.match(/:(.*)/g)[0].replace(":","").trim().split(" ").sort())}catch(r){}}this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},ye=new s9;var ix="2.4.0";var _s;var rpe=Number.MAX_SAFE_INTEGER;async function i9(e){return ye.initial&&(_s=null),_s?e.debug&&se("cached model:",_s.modelUrl):(_s=await et(tt(e.modelBasePath,e.face.agegenderrace.modelPath)),!_s||!_s.modelUrl?se("load model failed:",e.face.agegenderrace.modelPath):e.debug&&se("load model:",_s.modelUrl)),_s}var an,Rf=[],ox=Number.MAX_SAFE_INTEGER,o9=0,l9=0;async function u9(e){var t,n;return ye.initial&&(an=null),an?e.debug&&se("cached model:",an.modelUrl):(an=await et(tt(e.modelBasePath,((t=e.face.antispoof)==null?void 0:t.modelPath)||"")),!an||!an.modelUrl?se("load model failed:",(n=e.face.antispoof)==null?void 0:n.modelPath):e.debug&&se("load model:",an.modelUrl)),an}async function lx(e,t,n,a){var i,o;if(!an)return null;let r=(((i=t.face.antispoof)==null?void 0:i.skipTime)||0)>he()-l9,s=ox<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&o9===a&&Rf[n]?(ox++,Rf[n]):(ox=0,new Promise(async l=>{let d=Me.resizeBilinear(e,[(an==null?void 0:an.inputs[0].shape)?an.inputs[0].shape[2]:0,(an==null?void 0:an.inputs[0].shape)?an.inputs[0].shape[1]:0],!1),u=an==null?void 0:an.predict(d),p=(await u.data())[0];Rf[n]=Math.round(100*p)/100,o9=a,l9=he(),Q([d,u]),l(Rf[n])}))}var Tr={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:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],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]},ux={count:468,mouth:13,symmetryLine:[13,Tr.midwayBetweenEyes[0]]},Kp={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},dx=[{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]}],Zp=[[.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]],Mo=[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 Vue=[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],Uue=[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],jue=[33,133,362,263,1,78,308],dpe=Vue.map(e=>Zp[e]),ppe=Uue.map(e=>Zp[e]),cpe=jue.map(e=>Zp[e]);var d9=e=>({startPoint:De(e,[0,0],[-1,2]),endPoint:De(e,[0,2],[-1,2])});var Yp=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],Mf=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2],px=(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],cx=(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],p9=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],a=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:a}},hx=(e,t,n)=>{let a=t.shape[1],r=t.shape[2];return Me.cropAndResize(t,[[e.startPoint[1]/a,e.startPoint[0]/r,e.endPoint[1]/a,e.endPoint[0]/r]],[0],n)},Jp=(e,t=1.5)=>{let n=Mf(e),a=Yp(e),r=[t*a[0]/2,t*a[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks}},Qp=e=>{let t=Mf(e),n=Yp(e),a=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-a),Math.round(t[1]-a)],endPoint:[Math.round(t[0]+a),Math.round(t[1]+a)],landmarks:e.landmarks}},Ff=e=>{let t=e.map(a=>a[0]),n=e.map(a=>a[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},Df=[[1,0,0],[0,1,0],[0,0,1]],Gue=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),Hue=(e,t)=>Gue(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var c9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Fo=(e,t)=>{let n=0;for(let a=0;a{let n=[];for(let a=0;a{let n=[],a=e.length;for(let r=0;r{let n=Math.cos(e),a=Math.sin(e),r=[[n,-a,0],[a,n,0],[0,0,1]],s=c9(t[0],t[1]),i=h9(s,r),o=c9(-t[0],-t[1]);return h9(i,o)},Xue=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],a=[-Fo(t[0],n),-Fo(t[1],n)];return[t[0].concat(a[0]),t[1].concat(a[1]),[0,0,1]]},Kue=(e,t)=>[Fo(e,t[0]),Fo(e,t[1])];function m9(e){let t={strides:[e/16,e/8],anchors:[2,6]},n=[];for(let a=0;a[s[0]/r*(p[0]-r/2),s[1]/r*(p[1]-r/2),p[2]||0]),o=n!==0?f9(n,[0,0]):Df,l=n!==0?i.map(p=>[...Kue(p,o),p[2]]):i,d=n!==0?Xue(a):Df,u=[...Mf({startPoint:t.startPoint,endPoint:t.endPoint}),1];return l.map(p=>[Math.round(p[0]+Fo(u,d[0])),Math.round(p[1]+Fo(u,d[1])),Math.round(p[2]||0)])}function fx(e,t,n){let a=e.landmarks.length>=ux.count?ux.symmetryLine:Kp.symmetryLine,r=Hue(e.landmarks[a[0]],e.landmarks[a[1]]),s=Mf({startPoint:e.startPoint,endPoint:e.endPoint}),i=[s[0]/t.shape[2],s[1]/t.shape[1]],o=Me.rotateWithOffset(t,r,0,i),l=f9(-r,s),d=hx({startPoint:e.startPoint,endPoint:e.endPoint},o,[n,n]),u=fe(d,255);return Q(d),Q(o),[r,l,u]}var y9=6,Ma,mx=[],A9=null,Fa=0,ec=()=>Fa;async function x9(e){var t,n;return ye.initial&&(Ma=null),Ma?e.debug&&se("cached model:",Ma.modelUrl):(Ma=await et(tt(e.modelBasePath,((t=e.face.detector)==null?void 0:t.modelPath)||"")),!Ma||!Ma.modelUrl?se("load model failed:",(n=e.face.detector)==null?void 0:n.modelPath):e.debug&&se("load model:",Ma.modelUrl)),Fa=Ma.inputs[0].shape?Ma.inputs[0].shape[2]:0,Fa===-1&&(Fa=64),mx=m9(Fa),A9=Qa(mx),Ma}function Zue(e){let t=De(e,[0,1],[-1,2]),n=le(t,A9),a=De(e,[0,3],[-1,2]),r=fe(a,Fa),s=fe(n,Fa),i=fe(r,2),o=Ae(s,i),l=le(s,i),d=L(o,Fa),u=L(l,Fa);return iu([d,u],1)}async function b9(e,t){var d,u,p,c;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return{boxes:[]};let[n,a,r]=G(()=>{let h=Me.resizeBilinear(e,[Fa,Fa]),f=Ae(fe(h,127.5),.5),m=Ma==null?void 0:Ma.execute(f),g;if(Array.isArray(m)){let b=m.sort((C,E)=>C.size-E.size),v=mt([b[0],b[2]],2),k=mt([b[1],b[3]],2),T=mt([k,v],1);g=st(T,0)}else g=st(m);let y=Zue(g),A=De(g,[0,0],[-1,1]),x=st(Kn(A));return[g,y,x]}),s=await Me.nonMaxSuppressionAsync(a,r,((d=t.face.detector)==null?void 0:d.maxDetected)||0,((u=t.face.detector)==null?void 0:u.iouThreshold)||0,((p=t.face.detector)==null?void 0:p.minConfidence)||0),i=await s.array();Q(s);let o=[],l=await r.data();for(let h=0;h(((c=t.face.detector)==null?void 0:c.minConfidence)||0)){let m=De(a,[i[h],0],[1,-1]),g=G(()=>V(st(De(n,[i[h],y9-1],[1,-1])),[y9,-1]));o.push({box:d9(m),landmarks:g,anchor:mx[i[h]],confidence:f}),Q(m)}}return Q(n),Q(a),Q(r),{boxes:o,scaleFactor:[e.shape[2]/Fa,e.shape[1]/Fa]}}var Ax={};ud(Ax,{connected:()=>yx,kpt:()=>gx});var gx=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPalm","rightPalm","leftIndex","rightIndex","leftPinky","rightPinky","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftThumb","leftHand","rightThumb","rightHand"],yx={leftLeg:["leftHip","leftKnee","leftAnkle","leftHeel","leftFoot"],rightLeg:["rightHip","rightKnee","rightAnkle","rightHeel","rightFoot"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist","leftPalm"],rightArm:["rightShoulder","rightElbow","rightWrist","rightPalm"],leftHand:[],rightHand:[],head:[]};var v9={initial:!0},rn=[null,null],Ps=[[0,0],[0,0]],xx=Number.MAX_SAFE_INTEGER,bx,$f=null,zs=[[0,0],[0,0],[0,0],[0,0]],w9=0;async function k9(e){var t,n,a;if(v9.initial&&(rn[0]=null),!rn[0]&&((t=e.body.detector)==null?void 0:t.modelPath)){rn[0]=await et(tt(e.modelBasePath,((n=e.body.detector)==null?void 0:n.modelPath)||""));let r=Object.values(rn[0].modelSignature.inputs);Ps[0][0]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[1].size):0,Ps[0][1]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[2].size):0,!rn[0]||!rn[0].modelUrl?se("load model failed:",(a=e.body.detector)==null?void 0:a.modelPath):e.debug&&se("load model:",rn[0].modelUrl)}else e.debug&&rn[0]&&se("cached model:",rn[0].modelUrl);return rn[0]}async function I9(e){var t;if(v9.initial&&(rn[1]=null),rn[1])e.debug&&se("cached model:",rn[1].modelUrl);else{rn[1]=await et(tt(e.modelBasePath,e.body.modelPath||""));let n=Object.values(rn[1].modelSignature.inputs);Ps[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ps[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0,((t=e.body.modelPath)==null?void 0:t.includes("lite"))?bx=["ld_3d","output_segmentation","output_heatmap","world_3d","output_poseflag"]:bx=["Identity","Identity_2","Identity_3","Identity_4","Identity_1"],!rn[1]||!rn[1].modelUrl?se("load model failed:",e.body.modelPath):e.debug&&se("load model:",rn[1].modelUrl)}return rn[1]}function Yue(e,t){let n=e.map(i=>i.position[0]),a=e.map(i=>i.position[1]),r=[Math.min(...n),Math.min(...a),Math.max(...n)-Math.min(...n),Math.max(...a)-Math.min(...a)],s=[r[0]/t[0],r[1]/t[1],r[2]/t[0],r[3]/t[1]];return{keypointsBox:r,keypointsBoxRaw:s}}async function Jue(e){let t={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;zs=[[0,0],[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],[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]],t.pad=Sa(e,zs),t.resize=Me.resizeBilinear(t.pad,[Ps[1][0],Ps[1][1]]);let n=fe(t.resize,255);return Object.keys(t).forEach(a=>Q(t[a])),n}function Que(e,t){for(let n of e)n.position=[n.position[0]*(t[0]+zs[2][0]+zs[2][1])/t[0]-zs[2][0],n.position[1]*(t[1]+zs[1][0]+zs[1][1])/t[1]-zs[1][0],n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],n.position[2]];return e}var S9=e=>1-1/(1+Math.exp(e));async function ede(e,t,n){var h;let a={};a.input=await Jue(e),[a.ld,a.segmentation,a.heatmap,a.world,a.poseflag]=await((h=rn[1])==null?void 0:h.execute(a.input,bx));let r=(await a.poseflag.data())[0],s=Math.max(0,(r-.8)/(1-.8)),i=await a.ld.data(),o=[],l=5;for(let f=0;fQ(a[f]));let p={};for(let[f,m]of Object.entries(yx)){let g=[];for(let y=0;yb.part===m[y]),x=d.find(b=>b.part===m[y+1]);A&&x&&A.score>(t.body.minConfidence||0)&&x.score>(t.body.minConfidence||0)&&g.push([A.position,x.position])}p[f]=g}return{id:0,score:Math.trunc(100*s)/100,box:u.keypointsBox,boxRaw:u.keypointsBoxRaw,keypoints:d,annotations:p}}async function vx(e,t){let n=[e.shape[2]||0,e.shape[1]||0],a=(t.body.skipTime||0)>he()-w9,r=xx<(t.body.skipFrames||0);return t.skipAllowed&&a&&r&&$f!==null?xx++:($f=await ede(e,t,n),w9=he(),xx=0),$f?[$f]:[]}var ju=[{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 ja,Do=0,Of=[],N9=0,wx=Number.MAX_SAFE_INTEGER;async function T9(e){if(ye.initial&&(ja=null),ja)e.debug&&se("cached model:",ja.modelUrl);else{Gu(["floormod"],e),ja=await et(tt(e.modelBasePath,e.object.modelPath||""));let t=Object.values(ja.modelSignature.inputs);Do=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0,!ja||!ja.modelUrl?se("load model failed:",e.object.modelPath):e.debug&&se("load model:",ja.modelUrl)}return ja}async function tde(e,t,n){if(!e)return[];let a=[],r=await e.array(),s=st(e);Q(e);let i=cn(s,6,1);Q(s);let o=xn([i[1],i[0],i[3],i[2]],1),l=st(o);Q(o);let d=st(i[4]),u=st(i[5]);i.forEach(f=>Q(f));let p=await Me.nonMaxSuppressionAsync(l,d,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence);Q(l),Q(d),Q(u);let c=await p.data();Q(p);let h=0;for(let f of c){let m=Math.trunc(100*r[0][f][4])/100,g=r[0][f][5],y=ju[g].label,[A,x]=[r[0][f][0]/Do,r[0][f][1]/Do],b=[A,x,r[0][f][2]/Do-A,r[0][f][3]/Do-x],v=[Math.trunc(b[0]*t[0]),Math.trunc(b[1]*t[1]),Math.trunc(b[2]*t[0]),Math.trunc(b[3]*t[1])];a.push({id:h++,score:m,class:g,label:y,box:v,boxRaw:b})}return a}async function kx(e,t){let n=(t.object.skipTime||0)>he()-N9,a=wx<(t.object.skipFrames||0);return t.skipAllowed&&n&&a&&Of.length>0?(wx++,Of):(wx=0,!ye.kernels.includes("mod")||!ye.kernels.includes("sparsetodense")?Of:new Promise(async r=>{let s=[e.shape[2],e.shape[1]],i=Me.resizeBilinear(e,[Do,Do]),o=t.object.enabled?ja==null?void 0:ja.execute(i,["tower_0/detections"]):null;N9=he(),Q(i);let l=await tde(o,s,t);Of=l,r(l)}))}var Nx={};ud(Nx,{connected:()=>Sx,kpt:()=>Ix});var Ix=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Sx={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var sn,C9=0,Ln={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Tx=Number.MAX_SAFE_INTEGER;async function Cx(e){return ye.initial&&(sn=null),sn?e.debug&&se("cached model:",sn.modelUrl):(sn=await et(tt(e.modelBasePath,e.body.modelPath||"")),!sn||!sn.modelUrl?se("load model failed:",e.body.modelPath):e.debug&&se("load model:",sn.modelUrl)),sn}function nde(e,t){let[n,a]=e.shape;return G(()=>{let r=(o,l)=>Ae(o,L(fe(o,Ce(l,"int32")),Ce(l,"int32"))),s=V(e,[a*n]),i=Rn(s,0).dataSync()[0];if(i>t){let o=ka(s,0),l=r(o,n).dataSync()[0],d=fe(o,Ce(n,"int32")).dataSync()[0];return[l,d,i]}return[0,0,i]})}async function Ex(e,t){let n=(t.body.skipTime||0)>he()-C9,a=Tx<(t.body.skipFrames||0);return t.skipAllowed&&n&&a&&Object.keys(Ln.keypoints).length>0?(Tx++,[Ln]):(Tx=0,new Promise(async r=>{var p;let s=G(()=>{if(!(sn==null?void 0:sn.inputs[0].shape))return null;let c=Me.resizeBilinear(e,[sn.inputs[0].shape[2],sn.inputs[0].shape[1]],!1);return L(c,2).sub(1)}),i;if(t.body.enabled&&(i=await(sn==null?void 0:sn.predict(s))),C9=he(),Q(s),i){Ln.keypoints.length=0;let c=i.squeeze();Q(i);let h=c.unstack(2);Q(c);for(let f=0;f(((p=t.body)==null?void 0:p.minConfidence)||0)&&Ln.keypoints.push({score:Math.round(100*y)/100,part:Ix[f],positionRaw:[m/sn.inputs[0].shape[2],g/sn.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/sn.inputs[0].shape[2]),Math.round(e.shape[1]*g/sn.inputs[0].shape[1])]})}h.forEach(f=>Q(f))}Ln.score=Ln.keypoints.reduce((c,h)=>h.score>c?h.score:c,0);let o=Ln.keypoints.map(c=>c.position[0]),l=Ln.keypoints.map(c=>c.position[1]);Ln.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let d=Ln.keypoints.map(c=>c.positionRaw[0]),u=Ln.keypoints.map(c=>c.positionRaw[1]);Ln.boxRaw=[Math.min(...d),Math.min(...u),Math.max(...d)-Math.min(...d),Math.max(...u)-Math.min(...u)];for(let[c,h]of Object.entries(Sx)){let f=[];for(let m=0;mA.part===h[m]),y=Ln.keypoints.find(A=>A.part===h[m+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([g.position,y.position])}Ln.annotations[c]=f}r([Ln])}))}var ade=["angry","disgust","fear","happy","sad","surprise","neutral"],on,_f=[],E9=0,R9=0,Rx=Number.MAX_SAFE_INTEGER,Mx=[.2989,.587,.114];async function M9(e){var t,n;return ye.initial&&(on=null),on?e.debug&&se("cached model:",on.modelUrl):(on=await et(tt(e.modelBasePath,((t=e.face.emotion)==null?void 0:t.modelPath)||"")),!on||!on.modelUrl?se("load model failed:",(n=e.face.emotion)==null?void 0:n.modelPath):e.debug&&se("load model:",on.modelUrl)),on}async function Fx(e,t,n,a){var i,o;if(!on)return null;let r=Rx<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>he()-R9;return t.skipAllowed&&s&&r&&E9===a&&_f[n]&&_f[n].length>0?(Rx++,_f[n]):(Rx=0,new Promise(async l=>{var u,p;let d=[];if((u=t.face.emotion)==null?void 0:u.enabled){let c=Me.resizeBilinear(e,[(on==null?void 0:on.inputs[0].shape)?on.inputs[0].shape[2]:0,(on==null?void 0:on.inputs[0].shape)?on.inputs[0].shape[1]:0],!1),[h,f,m]=cn(c,3,3);Q(c);let g=L(h,Mx[0]),y=L(f,Mx[1]),A=L(m,Mx[2]);Q(h),Q(f),Q(m);let x=Oh([g,y,A]);Q(g),Q(y),Q(A);let b=G(()=>L(Ae(x,.5),2));Q(x);let v=await(on==null?void 0:on.predict(b));R9=he();let k=await v.data();Q(v);for(let T=0;T(((p=t.face.emotion)==null?void 0:p.minConfidence)||0)&&d.push({score:Math.min(.99,Math.trunc(100*k[T])/100),emotion:ade[T]});d.sort((T,C)=>C.score-T.score),Q(b)}_f[n]=d,E9=a,l(d)}))}var Ga,Ls=0,rde=2.3,Dx=Tr.leftEyeLower0,$x=Tr.rightEyeLower0,Hu={leftBounds:[Dx[0],Dx[Dx.length-1]],rightBounds:[$x[0],$x[$x.length-1]]},qu={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function F9(e){var t,n;return ye.initial&&(Ga=null),Ga?e.debug&&se("cached model:",Ga.modelUrl):(Ga=await et(tt(e.modelBasePath,((t=e.face.iris)==null?void 0:t.modelPath)||"")),!Ga||!Ga.modelUrl?se("load model failed:",(n=e.face.iris)==null?void 0:n.modelPath):e.debug&&se("load model:",Ga.modelUrl)),Ls=Ga.inputs[0].shape?Ga.inputs[0].shape[2]:0,Ls===-1&&(Ls=64),Ga}function Pf(e,t,n,a){for(let r=0;r{let t=e[Hu.leftBounds[0]][2],n=e[Hu.rightBounds[0]][2];return t-n},D9=(e,t,n,a,r=!1,s)=>{let i=Qp(Jp(Ff([e[n],e[a]]),rde)),o=Yp(i),l=Me.cropAndResize(t,[[i.startPoint[1]/s,i.startPoint[0]/s,i.endPoint[1]/s,i.endPoint[0]/s]],[0],[Ls,Ls]);if(r&&ye.kernels.includes("flipleftright")){let d=Me.flipLeftRight(l);Q(l),l=d}return{box:i,boxSize:o,crop:l}},$9=(e,t,n,a=!1)=>{let r=[];for(let s=0;s{let a=e[Tr[`${n}EyeUpper0`][qu.upperCenter]][2],r=e[Tr[`${n}EyeLower0`][qu.lowerCenter]][2],s=(a+r)/2;return t.map((i,o)=>{let l=s;return o===2?l=a:o===4&&(l=r),[i[0],i[1],l]})};async function _9(e,t,n,a){if(!Ga)return n.debug&&se("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:s,crop:i}=D9(e,t,Hu.leftBounds[0],Hu.leftBounds[1],!0,a),{box:o,boxSize:l,crop:d}=D9(e,t,Hu.rightBounds[0],Hu.rightBounds[1],!0,a),u=mt([i,d]);Q(i),Q(d);let p=Ga.predict(u);Q(u);let c=await p.data();Q(p);let h=c.slice(0,qu.numCoordinates*3),{rawCoords:f,iris:m}=$9(h,r,s,!0),g=c.slice(qu.numCoordinates*3),{rawCoords:y,iris:A}=$9(g,o,l),x=sde(e);Math.abs(x)<30?(Pf(e,f,"left",null),Pf(e,y,"right",null)):x<1?Pf(e,f,"left",["EyeUpper0","EyeLower0"]):Pf(e,y,"right",["EyeUpper0","EyeLower0"]);let b=O9(e,m,"left"),v=O9(e,A,"right");return e.concat(b).concat(v)}var Cr=[],Ha=null,ur=0,Ox=Number.MAX_SAFE_INTEGER,P9=0,z9=0;async function L9(e,t){var o,l,d,u,p,c,h,f,m,g,y;let n=(((o=t.face.detector)==null?void 0:o.skipTime)||0)>he()-P9,a=Ox<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);if(!t.skipAllowed||!n||!a||z9===0){let A=await b9(e,t);P9=he(),Cr=[];for(let x of A.boxes){let b=await x.box.startPoint.data(),v=await x.box.endPoint.data(),k=await x.landmarks.array();Cr.push({startPoint:b,endPoint:v,landmarks:k,confidence:x.confidence})}A.boxes.forEach(x=>Q([x.box.startPoint,x.box.endPoint,x.landmarks]));for(let x=0;x[S[0]/(e.shape[2]||0),S[1]/(e.shape[1]||0),(S[2]||0)/ur]),A={...Jp(Ff(v.mesh),1.5),confidence:A.confidence};for(let S of Object.keys(Tr))v.annotations[S]=Tr[S].map(P=>v.mesh[P]);((m=t.face.detector)==null?void 0:m.rotation)&&t.face.mesh.enabled&&((g=t.face.description)==null?void 0:g.enabled)&&ye.kernels.includes("rotatewithoffset")&&(Q(v.tensor),[x,b,v.tensor]=fx(A,e,ur)),v.box=px(A,e),v.boxRaw=cx(A,e),v.score=Math.round(100*E||100*A.confidence||0)/100,v.faceScore=Math.round(100*E)/100,A={...Qp(A),confidence:A.confidence,faceConfidence:E}}}else{v.box=px(A,e),v.boxRaw=cx(A,e),v.score=Math.round(100*A.confidence||0)/100,v.mesh=A.landmarks.map(k=>[(A.startPoint[0]+A.endPoint[0])/2+(A.endPoint[0]+A.startPoint[0])*k[0]/ec(),(A.startPoint[1]+A.endPoint[1])/2+(A.endPoint[1]+A.startPoint[1])*k[1]/ec()]),v.meshRaw=v.mesh.map(k=>[k[0]/(e.shape[2]||0),k[1]/(e.shape[1]||0),(k[2]||0)/ur]);for(let k of Object.keys(Kp))v.annotations[k]=[v.mesh[Kp[k]]]}r.push(v),s.push(A)}return((y=t.face.mesh)==null?void 0:y.enabled)&&(Cr=s.filter(A=>{var x;return A.confidence>(((x=t.face.detector)==null?void 0:x.minConfidence)||0)})),z9=r.length,r}async function W9(e){var t,n;return ye.initial&&(Ha=null),Ha?e.debug&&se("cached model:",Ha.modelUrl):(Ha=await et(tt(e.modelBasePath,((t=e.face.mesh)==null?void 0:t.modelPath)||"")),!Ha||!Ha.modelUrl?se("load model failed:",(n=e.face.mesh)==null?void 0:n.modelPath):e.debug&&se("load model:",Ha.modelUrl)),ur=Ha.inputs[0].shape?Ha.inputs[0].shape[2]:0,ur===-1&&(ur=64),Ha}var B9=Mo,V9=Zp;var Wn,zf=[],U9=0,j9=0,_x=Number.MAX_SAFE_INTEGER;async function G9(e){var n,a;let t=tt(e.modelBasePath,((n=e.face.description)==null?void 0:n.modelPath)||"");return ye.initial&&(Wn=null),Wn?e.debug&&se("cached model:",t):(Wn=await et(t),Wn?e.debug&&se("load model:",t):se("load model failed:",((a=e.face.description)==null?void 0:a.modelPath)||"")),Wn}function Px(e){return G(()=>{let n=e.image||e.tensor||e;if(!(n instanceof je))return null;let a=[[.05,.15,.85,.85]];if(!(Wn==null?void 0:Wn.inputs[0].shape))return null;let r=n.shape.length===3?Me.cropAndResize(Wt(n,0),a,[0],[Wn.inputs[0].shape[2],Wn.inputs[0].shape[1]]):Me.cropAndResize(n,a,[0],[Wn.inputs[0].shape[2],Wn.inputs[0].shape[1]]);return L(r,255)})}async function zx(e,t,n,a){var i,o,l,d;if(!Wn)return null;let r=_x<(((i=t.face.description)==null?void 0:i.skipFrames)||0),s=(((o=t.face.description)==null?void 0:o.skipTime)||0)>he()-U9;return t.skipAllowed&&r&&s&&j9===a&&((l=zf[n])==null?void 0:l.age)&&((d=zf[n])==null?void 0:d.age)>0?(_x++,zf[n]):(_x=0,new Promise(async u=>{var c,h;let p={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((c=t.face.description)==null?void 0:c.enabled){let f=Px(e),m=await(Wn==null?void 0:Wn.predict(f));U9=he(),Q(f);let y=await(await m.find(E=>E.shape[1]===1)).data(),A=Math.trunc(200*Math.abs(y[0]-.5))/100;A>(((h=t.face.description)==null?void 0:h.minConfidence)||0)&&(p.gender=y[0]<=.5?"female":"male",p.genderScore=Math.min(.99,A));let x=ka(m.find(E=>E.shape[1]===100),1),b=(await x.data())[0];Q(x);let k=await m.find(E=>E.shape[1]===100).data();p.age=Math.round(k[b-1]>k[b+1]?10*b-100*k[b-1]:10*b+100*k[b+1])/10;let T=m.find(E=>E.shape[1]===1024),C=T?await T.data():[];p.descriptor=Array.from(C),m.forEach(E=>Q(E))}zf[n]=p,j9=a,u(p)}))}function Lf(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function tc(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function H9(e,t,n){let a=t.shape[1],r=t.shape[2],s=[[e.startPoint[1]/a,e.startPoint[0]/r,e.endPoint[1]/a,e.endPoint[0]/r]];return Me.cropAndResize(t,s,[0],n)}function q9(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],a=[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:n,endPoint:a,palmLandmarks:r,confidence:e.confidence}}function Wf(e,t=1.5){let n=tc(e),a=Lf(e),r=[t*a[0]/2,t*a[1]/2],s=[n[0]-r[0],n[1]-r[1]],i=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function Bf(e){let t=tc(e),n=Lf(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],i=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function ide(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function X9(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return ide(n)}var K9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ws(e,t){let n=0;for(let a=0;a[n.x,n.y]),this.anchorsTensor=Qa(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=Ht([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Ht([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){return G(()=>{let n=De(t,[0,0],[-1,2]),a=De(t,[0,2],[-1,2]),r=le(fe(n,this.inputSizeTensor),this.anchorsTensor),s=fe(a,this.doubleInputSizeTensor),i=L(Ae(r,s),this.inputSizeTensor),o=L(le(r,s),this.inputSizeTensor);return iu([i,o],1)})}normalizeLandmarks(t,n){return G(()=>{let a=le(fe(V(t,[-1,7,2]),this.inputSizeTensor),this.anchors[n]);return L(a,this.inputSizeTensor)})}async getBoxes(t,n){let a={};a.batched=this.model.predict(t),a.predictions=st(a.batched),a.scores=G(()=>st(Kn(De(a.predictions,[0,0],[-1,1]))));let r=await a.scores.data();a.boxes=De(a.predictions,[0,1],[-1,4]),a.norm=this.normalizeBoxes(a.boxes),a.nms=await Me.nonMaxSuppressionAsync(a.norm,a.scores,3*n.hand.maxDetected,n.hand.iouThreshold,n.hand.minConfidence);let s=await a.nms.array(),i=[];for(let o of s){let l=De(a.norm,[o,0],[1,-1]),d=G(()=>V(this.normalizeLandmarks(De(a.predictions,[o,5],[1,14]),o),[-1,2]));i.push({box:l,palmLandmarks:d,confidence:r[o]})}for(let o of Object.keys(a))Q(a[o]);return i}async estimateHandBounds(t,n){let a=t.shape[1],r=t.shape[2],s=G(()=>Ae(fe(Me.resizeBilinear(t,[this.inputSize,this.inputSize]),127.5),1)),i=await this.getBoxes(s,n);Q(s);let o=[];if(!i||i.length===0)return o;for(let l of i){let d=await l.box.data(),u=d.slice(0,2),p=d.slice(2,4),c=await l.palmLandmarks.array();Q(l.box),Q(l.palmLandmarks),o.push(q9({startPoint:u,endPoint:p,palmLandmarks:c,confidence:l.confidence},[r/this.inputSize,a/this.inputSize]))}return o}};var lde=5,Q9=1.65,eI=[0,5,9,13,17,1,2],ude=0,dde=2,tI=0,Vx=class{constructor(t,n){ce(this,"handDetector");ce(this,"handPoseModel");ce(this,"inputSize");ce(this,"storedBoxes");ce(this,"skipped");ce(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(i=>i[0]),a=t.map(i=>i[1]),r=[Math.min(...n),Math.min(...a)],s=[Math.max(...n),Math.max(...a)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let a=t.map(s=>Wx([...s,1],n)),r=this.calculateLandmarksBoundingBox(a);return Wf(Bf(r),lde)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),a=Wf(Bf(n),Q9);a.palmLandmarks=[];for(let r=0;r[i[0]*(h[0]-this.inputSize/2),i[1]*(h[1]-this.inputSize/2),i[2]*h[2]]),l=Lx(a,[0,0]),d=o.map(h=>[...Wx(h,l),h[2]]),u=Y9(r),p=[...tc(n),1],c=[Ws(p,u[0]),Ws(p,u[1])];return d.map(h=>[Math.trunc(h[0]+c[0]),Math.trunc(h[1]+c[1]),Math.trunc(h[2])])}async estimateHands(t,n){let a=!1,r,s=(n.hand.skipTime||0)>he()-tI,i=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&i&&(r=await this.handDetector.estimateHandBounds(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&&(a=!0));let o=[];for(let l=0;l=n.hand.minConfidence/4){let v=V(x,[-1,3]),k=await v.array();Q(x),Q(v);let T=this.transformRawCoords(k,m,u,f),C=this.getBoxForHandLandmarks(T);this.storedBoxes[l]={...C,confidence:b};let E={landmarks:T,confidence:b,boxConfidence:d.confidence,fingerConfidence:b,box:{topLeft:C.startPoint,bottomRight:C.endPoint}};o.push(E)}else this.storedBoxes[l]=null;Q(x)}else{let u=Wf(Bf(d),Q9),p={confidence:d.confidence,boxConfidence:d.confidence,fingerConfidence:0,box:{topLeft:u.startPoint,bottomRight:u.endPoint},landmarks:[]};o.push(p)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=o.length,o.length>n.hand.maxDetected&&(o.length=n.hand.maxDetected),o}};var qe={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=>qe.nameMapping[e],getPoints:e=>qe.pointsMapping[e]},na={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>na.nameMapping[e]},He={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=>He.nameMapping[e]},Vf=class{constructor(t){ce(this,"name");ce(this,"curls");ce(this,"directions");ce(this,"weights");ce(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}addCurl(t,n,a){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,a])}addDirection(t,n,a){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,a])}setWeight(t,n){this.weights[t]=n;let a=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/a)}matchAgainst(t,n){let a=0;for(let r in t){let s=t[r],i=this.curls[r];if(typeof i=="undefined"){a+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){a+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],i=this.directions[r];if(typeof i=="undefined"){a+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){a+=l*this.weightsRelative[r];break}}return a/10}};var Bs=new Vf("thumbs up");Bs.addCurl(qe.thumb,na.none,1);Bs.addDirection(qe.thumb,He.verticalUp,1);Bs.addDirection(qe.thumb,He.diagonalUpLeft,.25);Bs.addDirection(qe.thumb,He.diagonalUpRight,.25);for(let e of[qe.index,qe.middle,qe.ring,qe.pinky])Bs.addCurl(e,na.full,1),Bs.addDirection(e,He.horizontalLeft,1),Bs.addDirection(e,He.horizontalRight,1);var Zt=new Vf("victory");Zt.addCurl(qe.thumb,na.half,.5);Zt.addCurl(qe.thumb,na.none,.5);Zt.addDirection(qe.thumb,He.verticalUp,1);Zt.addDirection(qe.thumb,He.diagonalUpLeft,1);Zt.addCurl(qe.index,na.none,1);Zt.addDirection(qe.index,He.verticalUp,.75);Zt.addDirection(qe.index,He.diagonalUpLeft,1);Zt.addCurl(qe.middle,na.none,1);Zt.addDirection(qe.middle,He.verticalUp,1);Zt.addDirection(qe.middle,He.diagonalUpLeft,.75);Zt.addCurl(qe.ring,na.full,1);Zt.addDirection(qe.ring,He.verticalUp,.2);Zt.addDirection(qe.ring,He.diagonalUpLeft,1);Zt.addDirection(qe.ring,He.horizontalLeft,.2);Zt.addCurl(qe.pinky,na.full,1);Zt.addDirection(qe.pinky,He.verticalUp,.2);Zt.addDirection(qe.pinky,He.diagonalUpLeft,1);Zt.addDirection(qe.pinky,He.horizontalLeft,.2);Zt.setWeight(qe.index,2);Zt.setWeight(qe.middle,2);var nI=[Bs,Zt];var pde=.7,$o={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 aI(e,t,n,a){let r=(t-a)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function rI(e,t){if(!e||!t)return[0,0];let n=aI(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let a=aI(e[1],e[2],t[1],t[2]);return[n,a]}function sI(e,t=1){let n=0,a=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?a=1*t:r=1*t,[n,a,r]}function cde(e,t,n){let a=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],i=e[1]-t[1],o=e[1]-n[1],l=t[1]-n[1],d=e[2]-t[2],u=e[2]-n[2],p=t[2]-n[2],c=Math.sqrt(a*a+i*i+d*d),h=Math.sqrt(r*r+o*o+u*u),f=Math.sqrt(s*s+l*l+p*p),m=(f*f+c*c-h*h)/(2*f*c);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let y;return g>$o.NO_CURL_START_LIMIT?y=na.none:g>$o.HALF_CURL_START_LIMIT?y=na.half:y=na.full,y}function iI(e,t,n,a){let r;return a===Math.abs(e)?e>0?r=He.horizontalLeft:r=He.horizontalRight:a===Math.abs(t)?t>0?r=He.horizontalLeft:r=He.horizontalRight:n>0?r=He.horizontalLeft:r=He.horizontalRight,r}function oI(e,t,n,a){let r;return a===Math.abs(e)?e<0?r=He.verticalDown:r=He.verticalUp:a===Math.abs(t)?t<0?r=He.verticalDown:r=He.verticalUp:n<0?r=He.verticalDown:r=He.verticalUp,r}function hde(e,t,n,a,r,s,i,o){let l,d=oI(e,t,n,a),u=iI(r,s,i,o);return d===He.verticalUp?u===He.horizontalLeft?l=He.diagonalUpLeft:l=He.diagonalUpRight:u===He.horizontalLeft?l=He.diagonalDownLeft:l=He.diagonalDownRight,l}function fde(e,t,n,a){let r=e[0]-t[0],s=e[0]-n[0],i=t[0]-n[0],o=e[1]-t[1],l=e[1]-n[1],d=t[1]-n[1],u=Math.max(Math.abs(r),Math.abs(s),Math.abs(i)),p=Math.max(Math.abs(o),Math.abs(l),Math.abs(d)),c=0,h=0,f=0,m=p/(u+1e-5);m>1.5?c+=$o.DISTANCE_VOTE_POWER:m>.66?h+=$o.DISTANCE_VOTE_POWER:f+=$o.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+o*o),y=Math.sqrt(s*s+l*l),A=Math.sqrt(i*i+d*d),x=Math.max(g,y,A),b=e[0],v=e[1],k=n[0],T=n[1];x===g?(k=n[0],T=n[1]):x===A&&(b=t[0],v=t[1]);let O=rI([b,v],[k,T]),D=sI(O,$o.TOTAL_ANGLE_VOTE_POWER);c+=D[0],h+=D[1],f+=D[2];for(let P of a){let _=sI(P,$o.SINGLE_ANGLE_VOTE_POWER);c+=_[0],h+=_[1],f+=_[2]}let S;return c===Math.max(c,h,f)?S=oI(l,o,d,p):f===Math.max(h,f)?S=iI(s,r,i,u):S=hde(l,o,d,p,s,r,i,u),S}function lI(e){let t=[],n=[],a=[],r=[];if(!e)return{curls:a,directions:r};for(let s of qe.all){let i=qe.getPoints(s),o=[],l=[];for(let d of i){let u=e[d[0]],p=e[d[1]],c=rI(u,p),h=c[0],f=c[1];o.push(h),l.push(f)}t.push(o),n.push(l)}for(let s of qe.all){let i=s===qe.thumb?1:0,o=qe.getPoints(s),l=e[o[i][0]],d=e[o[i+1][1]],u=e[o[3][1]],p=cde(l,d,u),c=fde(l,d,u,t[s].slice(i));a[s]=p,r[s]=c}return{curls:a,directions:r}}function Uf(e){if(!e||e.length===0)return null;let t=lI(e),n={};for(let a of qe.all)n[qe.getName(a)]={curl:na.getName(t.curls[a]),direction:He.getName(t.directions[a])};return n}function uI(e){let t=[];if(!e||e.length===0)return t;let n=lI(e);for(let a of nI){let r=a.matchAgainst(n.curls,n.directions);r>=pde&&t.push({name:a.name,confidence:r})}return t}var dI={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]},Hr,qr,pI;async function Ux(e,t){let n=await pI.estimateHands(e,t);if(!n)return[];let a=[];for(let r=0;rn[r].landmarks[p]);let i=n[r].landmarks,o=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(i&&i.length>0){for(let u of i)u[0]o[2]&&(o[2]=u[0]),u[1]>o[3]&&(o[3]=u[1]);o[2]-=o[0],o[3]-=o[1],l=[o[0]/(e.shape[2]||0),o[1]/(e.shape[1]||0),o[2]/(e.shape[2]||0),o[3]/(e.shape[1]||0)]}else o=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 d=Uf(i);a.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:o,boxRaw:l,keypoints:i,annotations:s,landmarks:d})}return a}async function jx(e){var n,a,r,s,i,o;ye.initial&&(Hr=null,qr=null),!Hr||!qr?([Hr,qr]=await Promise.all([e.hand.enabled?et(tt(e.modelBasePath,((n=e.hand.detector)==null?void 0:n.modelPath)||""),{fromTFHub:(((a=e.hand.detector)==null?void 0:a.modelPath)||"").includes("tfhub.dev")}):null,e.hand.landmarks?et(tt(e.modelBasePath,((r=e.hand.skeleton)==null?void 0:r.modelPath)||""),{fromTFHub:(((s=e.hand.skeleton)==null?void 0:s.modelPath)||"").includes("tfhub.dev")}):null]),e.hand.enabled&&(!Hr||!Hr.modelUrl?se("load model failed:",((i=e.hand.detector)==null?void 0:i.modelPath)||""):e.debug&&se("load model:",Hr.modelUrl),!qr||!qr.modelUrl?se("load model failed:",((o=e.hand.skeleton)==null?void 0:o.modelPath)||""):e.debug&&se("load model:",qr.modelUrl))):(e.debug&&se("cached model:",Hr.modelUrl),e.debug&&se("cached model:",qr.modelUrl));let t=new Bx(Hr);return pI=new Vx(t,qr),[Hr,qr]}function Oo(e,t=[1,1]){let n=[e.map(o=>o[0]),e.map(o=>o[1])],a=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[a[0],a[1],r[0]-a[0],r[1]-a[1]],i=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:i}}function cI(e,t=[1,1]){let n=[e.map(d=>d[0]),e.map(d=>d[1])],a=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(a[0]+r[0])/2,(a[1]+r[1])/2],i=Math.max(s[0]-a[0],s[1]-a[1],-s[0]+r[0],-s[1]+r[1]),o=[Math.trunc(s[0]-i),Math.trunc(s[1]-i),Math.trunc(2*i),Math.trunc(2*i)],l=[o[0]/t[0],o[1]/t[1],o[2]/t[0],o[3]/t[1]];return{box:o,boxRaw:l}}function jf(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]]}function Gx(e){return[Math.max(0,e[1]),Math.max(0,e[0]),Math.min(1,e[3]+e[1]),Math.min(1,e[2]+e[0])]}var kt=[null,null],mde=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Vs=[[0,0],[0,0]],gde=["hand","fist","pinch","point","face","tip","pinchtip"],hI=4,fI=1.6,yde=512,Ade=1.4,Gf=Number.MAX_SAFE_INTEGER,Hx=0,Xr=[0,0],Ut={boxes:[],hands:[]},mI={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]};async function gI(e){var t,n;if(ye.initial&&(kt[0]=null),kt[0])e.debug&&se("cached model:",kt[0].modelUrl);else{Gu(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),kt[0]=await et(tt(e.modelBasePath,((t=e.hand.detector)==null?void 0:t.modelPath)||""));let a=Object.values(kt[0].modelSignature.inputs);Vs[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Vs[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0,!kt[0]||!kt[0].modelUrl?se("load model failed:",(n=e.hand.detector)==null?void 0:n.modelPath):e.debug&&se("load model:",kt[0].modelUrl)}return kt[0]}async function yI(e){var t,n;if(ye.initial&&(kt[1]=null),kt[1])e.debug&&se("cached model:",kt[1].modelUrl);else{kt[1]=await et(tt(e.modelBasePath,((t=e.hand.skeleton)==null?void 0:t.modelPath)||""));let a=Object.values(kt[1].modelSignature.inputs);Vs[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Vs[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0,!kt[1]||!kt[1].modelUrl?se("load model failed:",(n=e.hand.skeleton)==null?void 0:n.modelPath):e.debug&&se("load model:",kt[1].modelUrl)}return kt[1]}async function xde(e,t){let n=[];if(!e||!kt[0])return n;let a={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,yde),i=Math.round(s*r/8)*8;a.resize=Me.resizeBilinear(e,[s,i]),a.cast=pe(a.resize,"int32"),[a.rawScores,a.rawBoxes]=await kt[0].executeAsync(a.cast,mde),a.boxes=st(a.rawBoxes,[0,2]),a.scores=st(a.rawScores,[0]);let o=Mn(a.scores,1);Q(o[hI]),o.splice(hI,1),a.filtered=xn(o,1),Q(o),a.max=Rn(a.filtered,1),a.argmax=ka(a.filtered,1);let l=0;a.nms=await Me.nonMaxSuppressionAsync(a.boxes,a.max,t.hand.maxDetected,t.hand.iouThreshold,t.hand.minConfidence);let d=await a.nms.data(),u=await a.max.data(),p=await a.argmax.data();for(let c of Array.from(d)){let h=De(a.boxes,c,1),f=await h.data();Q(h);let m=[f[1],f[0],f[3]-f[1],f[2]-f[0]],g=jf(m,Ade),y=Gx(g),A=[Math.trunc(m[0]*Xr[0]),Math.trunc(m[1]*Xr[1]),Math.trunc(m[2]*Xr[0]),Math.trunc(m[3]*Xr[1])],x=u[c],b=gde[p[c]],v={id:l++,score:x,box:A,boxRaw:g,boxCrop:y,label:b};n.push(v)}return Object.keys(a).forEach(c=>Q(a[c])),n.sort((c,h)=>h.score-c.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function qx(e,t,n){let a={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&&kt[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={};r.crop=Me.cropAndResize(e,[t.boxCrop],[0],[Vs[1][0],Vs[1][1]],"bilinear"),r.cast=pe(r.crop,"float32"),r.div=fe(r.cast,255),[r.score,r.keypoints]=kt[1].execute(r.div);let s=(await r.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(s))))/100;if(i>=(n.hand.minConfidence||0)){a.fingerScore=i,r.reshaped=V(r.keypoints,[-1,3]);let d=(await r.reshaped.array()).map(u=>[u[0]/Vs[1][1],u[1]/Vs[1][0],u[2]||0]).map(u=>[u[0]*t.boxRaw[2],u[1]*t.boxRaw[3],u[2]||0]);a.keypoints=d.map(u=>[Xr[0]*(u[0]+t.boxRaw[0]),Xr[1]*(u[1]+t.boxRaw[1]),u[2]||0]),a.landmarks=Uf(a.keypoints);for(let u of Object.keys(mI))a.annotations[u]=mI[u].map(p=>a.landmarks&&a.keypoints[p]?a.keypoints[p]:null)}Object.keys(r).forEach(o=>Q(r[o]))}return a}async function Xx(e,t){var r,s;if(!kt[0]||!kt[1]||!((r=kt[0])==null?void 0:r.inputs[0].shape)||!((s=kt[1])==null?void 0:s.inputs[0].shape))return[];Xr=[e.shape[2]||0,e.shape[1]||0],Gf++;let n=(t.hand.skipTime||0)>he()-Hx,a=Gf<(t.hand.skipFrames||0);return t.skipAllowed&&n&&a?Ut.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>he()-Hx,l=Gf<3*(t.hand.skipFrames||0);t.skipAllowed&&Ut.hands.length===t.hand.maxDetected?Ut.hands=await Promise.all(Ut.boxes.map(u=>qx(e,u,t))):t.skipAllowed&&o&&l&&Ut.hands.length>0?Ut.hands=await Promise.all(Ut.boxes.map(u=>qx(e,u,t))):(Ut.boxes=await xde(e,t),Hx=he(),Ut.hands=await Promise.all(Ut.boxes.map(u=>qx(e,u,t))),Gf=0);let d=[...Ut.boxes];if(Ut.boxes.length=0,t.cacheSensitivity>0)for(let u=0;u.05&&p.box[3]/(e.shape[1]||1)>.05&&Ut.hands[u].fingerScore&&Ut.hands[u].fingerScore>(t.hand.minConfidence||0)){let c=jf(p.box,fI),h=jf(p.boxRaw,fI),f=Gx(h);Ut.boxes.push({...d[u],box:c,boxRaw:h,boxCrop:f})}}for(let u=0;uqf,horizontal:()=>Kx,kpt:()=>Hf,relative:()=>Yx,vertical:()=>Zx});var Hf=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],Kx=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],Zx=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],Yx=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],qf={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var AI=.005,ga={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function Qx(e){for(let t of Kx){let n=e.keypoints.findIndex(r=>r.part===t[0]),a=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[a]&&e.keypoints[n].position[0]r&&r.part===t[0]),a=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[a]&&e.keypoints[n].position[1]d&&d.part===t[0]),r=e.keypoints.findIndex(d=>d&&d.part===t[1]),s=e.keypoints.findIndex(d=>d&&d.part===n[0]),i=e.keypoints.findIndex(d=>d&&d.part===n[1]);if(!e.keypoints[s]||!e.keypoints[i])continue;let o=e.keypoints[a]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[a].position[0]),Math.abs(e.keypoints[i].position[0]-e.keypoints[a].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[i].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(o[0]>o[1]||l[0]>l[1]){let d=e.keypoints[a];e.keypoints[a]=e.keypoints[r],e.keypoints[r]=d}}}function xI(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=Sa(e,ga.padding),n.resize=Me.resizeBilinear(n.pad,[t,t]);let a=pe(n.resize,"int32");return Object.keys(n).forEach(r=>Q(n[r])),a}function vI(e,t){e.keypoints=e.keypoints.filter(a=>a&&a.position);for(let a of e.keypoints)a.position=[a.position[0]*(t[0]+ga.padding[2][0]+ga.padding[2][1])/t[0]-ga.padding[2][0],a.position[1]*(t[1]+ga.padding[1][0]+ga.padding[1][1])/t[1]-ga.padding[1][0]],a.positionRaw=[a.position[0]/t[0],a.position[1]/t[1]];let n=Oo(e.keypoints.map(a=>a.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var Nn,Xf=0,e5=Number.MAX_SAFE_INTEGER,_o={boxes:[],bodies:[],last:0};async function wI(e){return ye.initial&&(Nn=null),Nn?e.debug&&se("cached model:",Nn.modelUrl):(Gu(["size"],e),Nn=await et(tt(e.modelBasePath,e.body.modelPath||"")),!Nn||!Nn.modelUrl?se("load model failed:",e.body.modelPath):e.debug&&se("load model:",Nn.modelUrl)),Xf=Nn.inputs[0].shape?Nn.inputs[0].shape[2]:0,Xf===-1&&(Xf=256),Nn}async function bde(e,t,n,a){let r=e[0][0],s=[],i=0;for(let p=0;pt.body.minConfidence){let c=[(a[3]-a[1])*r[p][1]+a[1],(a[2]-a[0])*r[p][0]+a[0]];s.push({score:Math.round(100*i)/100,part:Hf[p],positionRaw:c,position:[Math.round((n.shape[2]||0)*c[0]),Math.round((n.shape[1]||0)*c[1])]})}i=s.reduce((p,c)=>c.score>p?c.score:p,0);let o=[],l=Oo(s.map(p=>p.position),[n.shape[2],n.shape[1]]),d={};for(let[p,c]of Object.entries(qf)){let h=[];for(let f=0;fy.part===c[f]),g=s.find(y=>y.part===c[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}d[p]=h}let u={id:0,score:i,box:l.box,boxRaw:l.boxRaw,keypoints:s,annotations:d};return Qx(u),o.push(u),o}async function vde(e,t,n,a){let r=[];for(let s=0;st.body.minConfidence){let l=[];for(let c=0;c<17;c++){let h=i[3*c+2];if(h>t.body.minConfidence){let f=[(a[3]-a[1])*i[3*c+1]+a[1],(a[2]-a[0])*i[3*c+0]+a[0]];l.push({part:Hf[c],score:Math.round(100*h)/100,positionRaw:f,position:[Math.round((n.shape[2]||0)*f[0]),Math.round((n.shape[1]||0)*f[1])]})}}let d=Oo(l.map(c=>c.position),[n.shape[2],n.shape[1]]),u={};for(let[c,h]of Object.entries(qf)){let f=[];for(let m=0;mA.part===h[m]),y=l.find(A=>A.part===h[m+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([g.position,y.position])}u[c]=f}let p={id:s,score:o,box:d.box,boxRaw:d.boxRaw,keypoints:[...l],annotations:u};Qx(p),r.push(p)}}return r.sort((s,i)=>i.score-s.score),r.length>t.body.maxDetected&&(r.length=t.body.maxDetected),r}async function t5(e,t){if(!Nn||!(Nn==null?void 0:Nn.inputs[0].shape))return[];t.skipAllowed||(_o.boxes.length=0),e5++;let n=(t.body.skipTime||0)>he()-_o.last,a=e5<(t.body.skipFrames||0);return t.skipAllowed&&n&&a?_o.bodies:new Promise(async r=>{let s={};e5=0,s.input=bI(e,Xf),s.res=await(Nn==null?void 0:Nn.predict(s.input)),_o.last=he();let i=await s.res.array();_o.bodies=s.res.shape[2]===17?await bde(i,t,e,[0,0,1,1]):await vde(i,t,e,[0,0,1,1]);for(let o of _o.bodies)vI(o,[e.shape[2]||1,e.shape[1]||1]),xI(o.keypoints);Object.keys(s).forEach(o=>Q(s[o])),r(_o.bodies)})}var ya,Kf=[],kI=0,n5=Number.MAX_SAFE_INTEGER,Zf=2.5;async function II(e){if(!ya||ye.initial){ya=await et(tt(e.modelBasePath,e.object.modelPath||""));let t=Object.values(ya.modelSignature.inputs);if(ya.inputSize=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):null,!ya.inputSize)throw new Error(`cannot determine model inputSize: ${e.object.modelPath}`);!ya||!ya.modelUrl?se("load model failed:",e.object.modelPath):e.debug&&se("load model:",ya.modelUrl)}else e.debug&&se("cached model:",ya.modelUrl);return ya}async function wde(e,t,n,a){let r=0,s=[];for(let d of[1,2,4])G(async()=>{var g,y;let u=d*13,p=(g=e.find(A=>A.shape[1]===u**2&&A.shape[2]===ju.length))==null?void 0:g.squeeze(),c=(y=e.find(A=>A.shape[1]===u**2&&A.shape[2]a.object.minConfidence&&x!==61){let v=(.5+Math.trunc(A%u))/u,k=(.5+Math.trunc(A/u))/u,T=f[A].map(j=>j*(u/d/t)),[C,E]=[v-Zf/d*T[0],k-Zf/d*T[1]],[O,D]=[v+Zf/d*T[2]-C,k+Zf/d*T[3]-E],S=[C,E,O,D];S=S.map(j=>Math.max(0,Math.min(j,1)));let P=[S[0]*n[0],S[1]*n[1],S[2]*n[0],S[3]*n[1]],_={id:r++,score:Math.round(100*b)/100,class:x+1,label:ju[x].label,box:P.map(j=>Math.trunc(j)),boxRaw:S};s.push(_)}}});e.forEach(d=>Q(d));let i=s.map(d=>[d.boxRaw[1],d.boxRaw[0],d.boxRaw[3],d.boxRaw[2]]),o=s.map(d=>d.score),l=[];if(i&&i.length>0){let d=await Me.nonMaxSuppressionAsync(i,o,a.object.maxDetected,a.object.iouThreshold,a.object.minConfidence);l=await d.data(),Q(d)}return s=s.filter((d,u)=>l.includes(u)).sort((d,u)=>u.score-d.score),s}async function a5(e,t){let n=(t.object.skipTime||0)>he()-kI,a=n5<(t.object.skipFrames||0);return t.skipAllowed&&n&&a&&Kf.length>0?(n5++,Kf):(n5=0,!ye.kernels.includes("mod")||!ye.kernels.includes("sparsetodense")?Kf:new Promise(async r=>{let s=[e.shape[2],e.shape[1]],i=Me.resizeBilinear(e,[ya.inputSize,ya.inputSize],!1),o=fe(i,255),l=o.transpose([0,3,1,2]);Q(o),Q(i);let d;t.object.enabled&&(d=await ya.predict(l)),kI=he(),Q(l);let u=await wde(d,ya.inputSize,s,t);Kf=u,r(u)}))}var nc=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],kde=nc.length,ac=nc.reduce((e,t,n)=>(e[t]=n,e),{}),Ide=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],nhe=Ide.map(([e,t])=>[ac[e],ac[t]]),SI=[["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 NI(e){let t=e.reduce(({maxX:n,maxY:a,minX:r,minY:s},{position:{x:i,y:o}})=>({maxX:Math.max(n,i),maxY:Math.max(a,o),minX:Math.min(r,i),minY:Math.min(s,o)}),{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 TI(e,[t,n],[a,r]){let s=t/a,i=n/r,o=(d,u)=>({id:u,score:d.score,boxRaw:[d.box[0]/r,d.box[1]/a,d.box[2]/r,d.box[3]/a],box:[Math.trunc(d.box[0]*i),Math.trunc(d.box[1]*s),Math.trunc(d.box[2]*i),Math.trunc(d.box[3]*s)],keypoints:d.keypoints.map(({score:p,part:c,position:h})=>({score:p,part:c,position:[Math.trunc(h.x*i),Math.trunc(h.y*s)],positionRaw:[h.x/a,h.y/a]}))});return e.map((d,u)=>o(d,u))}var r5=class{constructor(t,n){ce(this,"priorityQueue");ce(this,"numberOfElements");ce(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 CI(e,t,n,a){let r=n-e,s=a-t;return r*r+s*s}function l5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var Aa,Sde=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Yf=1,Xu=16,Nde=50**2;function EI(e,t,n,a,r,s,i=2){let o=y=>({y:s.get(y.y,y.x,e),x:s.get(y.y,y.x,s.shape[2]/2+e)}),l=(y,A,x)=>({y:o5(Math.round(y.y/Xu),0,A-1),x:o5(Math.round(y.x/Xu),0,x-1)}),[d,u]=a.shape,p=l(t.position,d,u),c=o(p),f=l5(t.position,c);for(let y=0;y[ac[c],ac[h]]),i=s.map(([,c])=>c),o=s.map(([c])=>c),l=t.shape[2],d=i.length,u=new Array(l),p=i5(e.part,Xu,n);u[e.part.id]={score:e.score,part:nc[e.part.id],position:p};for(let c=d-1;c>=0;--c){let h=i[c],f=o[c];u[h]&&!u[f]&&(u[f]=EI(c,u[h],f,t,n,r))}for(let c=0;ct){o=!1;break}if(!o)break}return o}function Ede(e,t){let[n,a,r]=t.shape,s=new r5(n*a*r,({score:i})=>i);for(let i=0;i{var i;let s=(i=r[a])==null?void 0:i.position;return s?CI(n,t,s.y,s.x)<=Nde:!1})}function Rde(e,t){return t.reduce((a,{position:r,score:s},i)=>(RI(e,r,i)||(a+=s),a),0)/t.length}function Mde(e,t,n,a,r,s){let i=[],o=Ede(s,t);for(;i.lengthh.score>s);let p=Rde(i,u),c=NI(u);p>s&&i.push({keypoints:u,box:c,score:Math.round(100*p)/100})}return i}async function u5(e,t){let n=G(()=>{if(!Aa.inputs[0].shape)return[];let i=Me.resizeBilinear(e,[Aa.inputs[0].shape[2],Aa.inputs[0].shape[1]]),o=Ae(fe(pe(i,"float32"),127.5),1),d=Aa.execute(o,Sde).map(u=>st(u,[0]));return d[1]=d[1].sigmoid(),d}),a=await Promise.all(n.map(i=>i.buffer()));for(let i of n)Q(i);let r=await Mde(a[0],a[1],a[2],a[3],t.body.maxDetected,t.body.minConfidence);return Aa.inputs[0].shape?TI(r,[e.shape[1],e.shape[2]],[Aa.inputs[0].shape[2],Aa.inputs[0].shape[1]]):[]}async function MI(e){return!Aa||ye.initial?(Aa=await et(tt(e.modelBasePath,e.body.modelPath||"")),!Aa||!Aa.modelUrl?se("load model failed:",e.body.modelPath):e.debug&&se("load model:",Aa.modelUrl)):e.debug&&se("cached model:",Aa.modelUrl),Aa}var Da,d5=!1;async function p5(e){return!Da||ye.initial?(Da=await et(tt(e.modelBasePath,e.segmentation.modelPath||"")),!Da||!Da.modelUrl?se("load model failed:",e.segmentation.modelPath):e.debug&&se("load model:",Da.modelUrl)):e.debug&&se("cached model:",Da.modelUrl),Da}async function FI(e,t,n){var m,g;if(d5)return{data:[],canvas:null,alpha:null};d5=!0,Da||await p5(n);let a=Uu(e,n),r=((m=a.canvas)==null?void 0:m.width)||0,s=((g=a.canvas)==null?void 0:g.height)||0;if(!a.tensor)return{data:[],canvas:null,alpha:null};let i={};i.resize=Me.resizeBilinear(a.tensor,[Da.inputs[0].shape?Da.inputs[0].shape[1]:0,Da.inputs[0].shape?Da.inputs[0].shape[2]:0],!1),Q(a.tensor),i.norm=fe(i.resize,255),i.res=Da.predict(i.norm),i.squeeze=st(i.res,0),i.squeeze.shape[2]===2?(i.softmax=lo(i.squeeze),[i.bg,i.fg]=Mn(i.softmax,2),i.expand=Wt(i.fg,2),i.pad=Wt(i.expand,0),i.crop=Me.cropAndResize(i.pad,[[0,0,.5,.5]],[0],[r,s]),i.data=st(i.crop,0)):i.data=Me.resizeBilinear(i.squeeze,[s,r]);let o=Array.from(await i.data.data());if(ye.node&&!ye.Canvas&&typeof ImageData=="undefined")return n.debug&&se("canvas support missing"),Object.keys(i).forEach(y=>Q(i[y])),{data:o,canvas:null,alpha:null};let l=zn(r,s);await za.toPixels(i.data,l);let d=l.getContext("2d");n.segmentation.blur&&n.segmentation.blur>0&&(d.filter=`blur(${n.segmentation.blur}px)`);let u=d.getImageData(0,0,r,s),p=zn(r,s),c=p.getContext("2d");a.canvas&&c.drawImage(a.canvas,0,0),c.globalCompositeOperation="darken",n.segmentation.blur&&n.segmentation.blur>0&&(c.filter=`blur(${n.segmentation.blur}px)`),c.drawImage(l,0,0),c.globalCompositeOperation="source-over",c.filter="none";let h=c.getImageData(0,0,r,s);for(let y=0;yQ(i[y])),d5=!1,{data:o,canvas:f||p,alpha:l}}var c5=class{constructor(){ce(this,"age",null);ce(this,"agegenderrace",null);ce(this,"blazeposedetect",null);ce(this,"blazepose",null);ce(this,"centernet",null);ce(this,"efficientpose",null);ce(this,"embedding",null);ce(this,"emotion",null);ce(this,"facedetect",null);ce(this,"faceiris",null);ce(this,"facemesh",null);ce(this,"faceres",null);ce(this,"gender",null);ce(this,"handpose",null);ce(this,"handskeleton",null);ce(this,"handtrack",null);ce(this,"movenet",null);ce(this,"nanodet",null);ce(this,"posenet",null);ce(this,"segmentation",null);ce(this,"antispoof",null)}};function h5(e){for(let t of Object.keys(e.models))e.models[t]=null}async function DI(e){var t,n,a,r,s,i,o,l,d,u,p,c,h,f,m,g,y,A,x,b,v,k,T,C,E,O,D,S,P,_,j;ye.initial&&h5(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 jx(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(a=e.config.hand.detector)==null?void 0:a.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await jx(e.config))),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=x9(e.config)),e.config.face.enabled&&((s=e.config.face.mesh)==null?void 0:s.enabled)&&!e.models.facemesh&&(e.models.facemesh=W9(e.config)),e.config.face.enabled&&((i=e.config.face.iris)==null?void 0:i.enabled)&&!e.models.faceiris&&(e.models.faceiris=F9(e.config)),e.config.face.enabled&&((o=e.config.face.antispoof)==null?void 0:o.enabled)&&!e.models.antispoof&&(e.models.antispoof=u9(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((d=(l=e.config.hand.detector)==null?void 0:l.modelPath)==null?void 0:d.includes("handtrack"))&&(e.models.handtrack=gI(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((p=(u=e.config.hand.detector)==null?void 0:u.modelPath)==null?void 0:p.includes("handtrack"))&&(e.models.handskeleton=yI(e.config)),e.config.body.enabled&&!e.models.posenet&&((h=(c=e.config.body)==null?void 0:c.modelPath)==null?void 0:h.includes("posenet"))&&(e.models.posenet=MI(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((m=(f=e.config.body)==null?void 0:f.modelPath)==null?void 0:m.includes("efficientpose"))&&(e.models.efficientpose=Cx(e.config)),e.config.body.enabled&&!e.models.blazepose&&((y=(g=e.config.body)==null?void 0:g.modelPath)==null?void 0:y.includes("blazepose"))&&(e.models.blazepose=I9(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&((A=e.config.body.detector)==null?void 0:A.modelPath)&&((b=(x=e.config.body)==null?void 0:x.modelPath)==null?void 0:b.includes("blazepose"))&&(e.models.blazeposedetect=k9(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((k=(v=e.config.body)==null?void 0:v.modelPath)==null?void 0:k.includes("efficientpose"))&&(e.models.efficientpose=Cx(e.config)),e.config.body.enabled&&!e.models.movenet&&((C=(T=e.config.body)==null?void 0:T.modelPath)==null?void 0:C.includes("movenet"))&&(e.models.movenet=wI(e.config)),e.config.object.enabled&&!e.models.nanodet&&((O=(E=e.config.object)==null?void 0:E.modelPath)==null?void 0:O.includes("nanodet"))&&(e.models.nanodet=II(e.config)),e.config.object.enabled&&!e.models.centernet&&((S=(D=e.config.object)==null?void 0:D.modelPath)==null?void 0:S.includes("centernet"))&&(e.models.centernet=T9(e.config)),e.config.face.enabled&&((P=e.config.face.emotion)==null?void 0:P.enabled)&&!e.models.emotion&&(e.models.emotion=M9(e.config)),e.config.face.enabled&&((_=e.config.face.description)==null?void 0:_.enabled)&&!e.models.faceres&&(e.models.faceres=G9(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=p5(e.config)),e.config.face.enabled&&((j=e.config.face.agegenderrace)==null?void 0:j.enabled)&&!e.models.agegenderrace&&(e.models.agegenderrace=i9(e.config));for await(let q of Object.keys(e.models))e.models[q]&&typeof e.models[q]!="undefined"&&(e.models[q]=await e.models[q])}async function $I(e){let t=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"];for(let n of Object.keys(e.models))if(e.models[n]){let a=[];Array.isArray(e.models[n])?a=e.models[n].filter(r=>r!==null).map(r=>r&&r.executor?r:r.model):a=[e.models[n]];for(let r of a){if(!r){e.config.debug&&se("model marked as loaded but not defined:",n);continue}let s=[],i=r==null?void 0:r.executor;if(i&&i.graph.nodes)for(let l of Object.values(i.graph.nodes)){let d=l.op.toLowerCase();s.includes(d)||s.push(d)}else!i&&e.config.debug&&se("model signature not determined:",n);let o=[];for(let l of s)!t.includes(l)&&!e.env.kernels.includes(l)&&!e.env.kernels.includes(l.replace("_",""))&&!e.env.kernels.includes(l.replace("native",""))&&!e.env.kernels.includes(l.replace("v2",""))&&o.push(l);o.length>0&&e.config.debug&&se("model validation:",n,o)}}}var Ot={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 Fde(){let e=Ot.gl;!e||(Ot.extensions=e.getSupportedExtensions())}async function OI(e){var t;if(e.config.backend==="humangl"&&(Ot.name in sa().registry&&(!Ot.gl||!Ot.gl.getParameter(Ot.gl.VERSION))&&(se("error: humangl backend invalid context"),h5(e)),!fg(Ot.name))){try{Ot.canvas=await zn(100,100)}catch(a){se("error: cannot create canvas:",a);return}try{Ot.gl=(t=Ot.canvas)==null?void 0:t.getContext("webgl2",Ot.webGLattr),Ot.canvas&&(Ot.canvas.addEventListener("webglcontextlost",async a=>{throw se("error: humangl:",a.type),se("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("browser webgl error")}),Ot.canvas.addEventListener("webglcontextrestored",a=>{se("error: humangl context restored:",a)}),Ot.canvas.addEventListener("webglcontextcreationerror",a=>{se("error: humangl context create:",a)}))}catch(a){se("error: cannot get WebGL context:",a);return}try{of(2,Ot.gl)}catch(a){se("error: cannot set WebGL context:",a);return}try{let a=new gf(Ot.gl);au(Ot.name,()=>new Pu(a),Ot.priority)}catch(a){se("error: cannot register WebGL backend:",a);return}try{$r("webgl").forEach(r=>{let s={...r,backendName:Ot.name};cs(s)})}catch(a){se("error: cannot update WebGL backend registration:",a);return}let n=mr().getGPGPUContext?mr().getGPGPUContext().gl:null;if(n)se(`humangl webgl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`);else{se("error: no current gl context:",n,Ot.gl);return}try{cr.set("WEBGL_VERSION",2)}catch(a){se("error: cannot set WebGL backend flags:",a);return}Fde(),se("backend registered:",Ot.name)}}async function Jf(e,t=!1){if(e.state="backend",t||ye.initial||e.config.backend&&e.config.backend.length>0&&Ya()!==e.config.backend){let n=he();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&se("running inside web worker"),ye.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&se("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),ye.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&se(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),ye.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")se("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();e.config.debug&&se("enumerated webgpu adapter:",r)}e.config.backend==="humangl"&&await OI(e);let a=Object.keys(sa().registryFactory);if(e.config.debug&&se("available backends:",a),a.includes(e.config.backend)||(se(`error: backend ${e.config.backend} not found in registry`),e.config.backend=ye.node?"tensorflow":"webgl",e.config.debug&&se(`override: setting backend ${e.config.backend}`)),e.config.debug&&se("setting backend:",e.config.backend),e.config.backend==="wasm"){if(e.config.debug&&se("wasm path:",e.config.wasmPath),typeof(Ro==null?void 0:Ro.setWasmPaths)!="undefined")await X8(e.config.wasmPath);else throw new Error("wasm backend is not loaded");let r=await ne().getAsync("WASM_HAS_SIMD_SUPPORT"),s=await ne().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");e.config.debug&&se(`wasm execution: ${r?"SIMD":"no SIMD"} ${s?"multithreaded":"singlethreaded"}`),e.config.debug&&!r&&se("warning: wasm simd support is not enabled")}try{await e3(e.config.backend),await Dh()}catch(r){return se("error: cannot set backend:",e.config.backend,r),!1}}if(Ya()==="humangl"&&(cr.set("CHECK_COMPUTATION_FOR_ERRORS",!1),cr.set("WEBGL_CPU_FORWARD",!0),cr.set("WEBGL_USE_SHAPES_UNIFORMS",!0),cr.set("CPU_HANDOFF_SIZE_THRESHOLD",256),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(se("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),cr.set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),mr().getGPGPUContext)){let a=await mr().getGPGPUContext().gl;e.config.debug&&se(`gl version:${a.getParameter(a.VERSION)} renderer:${a.getParameter(a.RENDERER)}`)}Ya()==="webgpu",Qb(),await Dh(),e.performance.backend=Math.trunc(he()-n),e.config.backend=Ya(),ye.updateBackend()}return!0}function Gu(e,t){for(let n of e){let a={kernelName:n,backendName:t.backend,kernelFunc:()=>{t.debug&&se("kernelFunc",n,t.backend)}};cs(a)}ye.kernels=$r(Ya()).map(n=>n.kernelName.toLowerCase())}var Kr={color:"rgba(173, 216, 230, 0.6)",labelColor:"rgba(173, 216, 230, 1)",shadowColor:"black",font:'small-caps 14px "Segoe UI"',lineHeight:18,lineWidth:4,pointSize:2,roundRect:8,drawPoints:!1,drawLabels:!0,drawBoxes:!0,drawGestures:!0,drawPolygons:!0,drawGaze:!0,fillPolygons:!1,useDepth:!0,useCurves:!1},Po=e=>{if(e&&e.getContext)return e.getContext("2d");throw new Error("invalid canvas")},Ku=e=>Math.round(e*180/Math.PI);function f5(e,t,n,a=0,r){e.fillStyle=r.useDepth&&a?`rgba(${127.5+2*a}, ${127.5-2*a}, 255, 0.3)`:r.color,e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function rc(e,t,n,a,r,s){if(e.beginPath(),s.useCurves){let i=(t+t+a)/2,o=(n+n+r)/2;e.ellipse(i,o,a/2,r/2,0,0,2*Math.PI)}else e.lineWidth=s.lineWidth,e.moveTo(t+s.roundRect,n),e.lineTo(t+a-s.roundRect,n),e.quadraticCurveTo(t+a,n,t+a,n+s.roundRect),e.lineTo(t+a,n+r-s.roundRect),e.quadraticCurveTo(t+a,n+r,t+a-s.roundRect,n+r),e.lineTo(t+s.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s.roundRect),e.lineTo(t,n+s.roundRect),e.quadraticCurveTo(t,n,t+s.roundRect,n),e.closePath();e.stroke()}function _I(e,t=[],n){if(!(t===void 0||t.length===0)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let a of t){let r=a[2]||0;e.strokeStyle=n.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:n.color,e.fillStyle=n.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:n.color,e.lineTo(a[0],Math.round(a[1]))}e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function Dde(e,t=[],n){if(!(t===void 0||t.length===0)){if(!n.useCurves||t.length<=2){_I(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let a=0;a1&&l[1].length>0){let d=o[1]>0?`#${o[1]}`:"",u=`${o[0]} ${d}: ${l[1]}`;a.shadowColor&&a.shadowColor!==""&&(r.fillStyle=a.shadowColor,r.fillText(u,8,2+s*a.lineHeight)),r.fillStyle=a.labelColor,r.fillText(u,6,0+s*a.lineHeight),s+=1}}}}async function g5(e,t,n){var s,i,o,l,d;let a=kn(Kr,n);if(!t||!e)return;let r=Po(e);for(let u of t){if(r.font=a.font,r.strokeStyle=a.color,r.fillStyle=a.color,a.drawBoxes&&rc(r,u.box[0],u.box[1],u.box[2],u.box[3],a),a.drawLabels){let p=[];if(p.push(`face: ${Math.trunc(100*u.score)}%`),u.genderScore&&p.push(`${u.gender||""} ${Math.trunc(100*u.genderScore)}%`),u.age&&p.push(`age: ${u.age||""}`),u.iris&&p.push(`distance: ${u.iris}`),u.real&&p.push(`real: ${Math.trunc(100*u.real)}%`),u.emotion&&u.emotion.length>0){let c=u.emotion.map(h=>`${Math.trunc(100*h.score)}% ${h.emotion}`);c.length>3&&(c.length=3),p.push(c.join(" "))}u.rotation&&u.rotation.angle&&u.rotation.gaze&&(u.rotation.angle.roll&&p.push(`roll: ${Ku(u.rotation.angle.roll)}\xB0 yaw:${Ku(u.rotation.angle.yaw)}\xB0 pitch:${Ku(u.rotation.angle.pitch)}\xB0`),u.rotation.gaze.bearing&&p.push(`gaze: ${Ku(u.rotation.gaze.bearing)}\xB0`)),p.length===0&&p.push("face"),r.fillStyle=a.color;for(let c=p.length-1;c>=0;c--){let h=Math.max(u.box[0],0),f=c*a.lineHeight+u.box[1];a.shadowColor&&a.shadowColor!==""&&(r.fillStyle=a.shadowColor,r.fillText(p[c],h+5,f+16)),r.fillStyle=a.labelColor,r.fillText(p[c],h+4,f+15)}}if(r.lineWidth=1,u.mesh&&u.mesh.length>0){if(a.drawPoints)for(let p of u.mesh)f5(r,p[0],p[1],p[2],a);if(a.drawPolygons){if(r.lineWidth=1,u.mesh.length>450)for(let p=0;pu.mesh[h]);_I(r,c,a)}if(u.annotations&&u.annotations.leftEyeIris&&u.annotations.leftEyeIris[0]){r.strokeStyle=a.useDepth?"rgba(255, 200, 255, 0.3)":a.color,r.beginPath();let p=Math.abs(u.annotations.leftEyeIris[3][0]-u.annotations.leftEyeIris[1][0])/2,c=Math.abs(u.annotations.leftEyeIris[4][1]-u.annotations.leftEyeIris[2][1])/2;r.ellipse(u.annotations.leftEyeIris[0][0],u.annotations.leftEyeIris[0][1],p,c,0,0,2*Math.PI),r.stroke(),a.fillPolygons&&(r.fillStyle=a.useDepth?"rgba(255, 255, 200, 0.3)":a.color,r.fill())}if(u.annotations&&u.annotations.rightEyeIris&&u.annotations.rightEyeIris[0]){r.strokeStyle=a.useDepth?"rgba(255, 200, 255, 0.3)":a.color,r.beginPath();let p=Math.abs(u.annotations.rightEyeIris[3][0]-u.annotations.rightEyeIris[1][0])/2,c=Math.abs(u.annotations.rightEyeIris[4][1]-u.annotations.rightEyeIris[2][1])/2;r.ellipse(u.annotations.rightEyeIris[0][0],u.annotations.rightEyeIris[0][1],p,c,0,0,2*Math.PI),r.stroke(),a.fillPolygons&&(r.fillStyle=a.useDepth?"rgba(255, 255, 200, 0.3)":a.color,r.fill())}if(a.drawGaze&&((s=u.rotation)==null?void 0:s.angle)){r.strokeStyle="pink";let p=u.box[0]+u.box[2]/2-u.box[3]*Ku(u.rotation.angle.yaw)/90,c=u.box[1]+u.box[3]/2+u.box[2]*Ku(u.rotation.angle.pitch)/90,h=new Path2D(` +`))s.startsWith("model name")&&(t.model=s.match(/:(.*)/g)[0].replace(":","").trim()),s.startsWith("flags")&&(t.flags=s.match(/:(.*)/g)[0].replace(":","").trim().split(" ").sort())}catch(r){}}this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},ye=new s9;var ix="2.4.1";var _s;var rpe=Number.MAX_SAFE_INTEGER;async function i9(e){return ye.initial&&(_s=null),_s?e.debug&&se("cached model:",_s.modelUrl):(_s=await et(tt(e.modelBasePath,e.face.agegenderrace.modelPath)),!_s||!_s.modelUrl?se("load model failed:",e.face.agegenderrace.modelPath):e.debug&&se("load model:",_s.modelUrl)),_s}var an,Rf=[],ox=Number.MAX_SAFE_INTEGER,o9=0,l9=0;async function u9(e){var t,n;return ye.initial&&(an=null),an?e.debug&&se("cached model:",an.modelUrl):(an=await et(tt(e.modelBasePath,((t=e.face.antispoof)==null?void 0:t.modelPath)||"")),!an||!an.modelUrl?se("load model failed:",(n=e.face.antispoof)==null?void 0:n.modelPath):e.debug&&se("load model:",an.modelUrl)),an}async function lx(e,t,n,a){var i,o;if(!an)return null;let r=(((i=t.face.antispoof)==null?void 0:i.skipTime)||0)>he()-l9,s=ox<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&o9===a&&Rf[n]?(ox++,Rf[n]):(ox=0,new Promise(async l=>{let d=Me.resizeBilinear(e,[(an==null?void 0:an.inputs[0].shape)?an.inputs[0].shape[2]:0,(an==null?void 0:an.inputs[0].shape)?an.inputs[0].shape[1]:0],!1),u=an==null?void 0:an.predict(d),p=(await u.data())[0];Rf[n]=Math.round(100*p)/100,o9=a,l9=he(),Q([d,u]),l(Rf[n])}))}var Tr={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:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],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]},ux={count:468,mouth:13,symmetryLine:[13,Tr.midwayBetweenEyes[0]]},Kp={leftEye:0,rightEye:1,nose:2,mouth:3,leftEar:4,rightEar:5,symmetryLine:[3,2]},dx=[{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]}],Zp=[[.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]],Mo=[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 Vue=[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],Uue=[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],jue=[33,133,362,263,1,78,308],dpe=Vue.map(e=>Zp[e]),ppe=Uue.map(e=>Zp[e]),cpe=jue.map(e=>Zp[e]);var d9=e=>({startPoint:De(e,[0,0],[-1,2]),endPoint:De(e,[0,2],[-1,2])});var Yp=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],Mf=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2],px=(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],cx=(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],p9=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],a=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:a}},hx=(e,t,n)=>{let a=t.shape[1],r=t.shape[2];return Me.cropAndResize(t,[[e.startPoint[1]/a,e.startPoint[0]/r,e.endPoint[1]/a,e.endPoint[0]/r]],[0],n)},Jp=(e,t=1.5)=>{let n=Mf(e),a=Yp(e),r=[t*a[0]/2,t*a[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks}},Qp=e=>{let t=Mf(e),n=Yp(e),a=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-a),Math.round(t[1]-a)],endPoint:[Math.round(t[0]+a),Math.round(t[1]+a)],landmarks:e.landmarks}},Ff=e=>{let t=e.map(a=>a[0]),n=e.map(a=>a[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},Df=[[1,0,0],[0,1,0],[0,0,1]],Gue=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),Hue=(e,t)=>Gue(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var c9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Fo=(e,t)=>{let n=0;for(let a=0;a{let n=[];for(let a=0;a{let n=[],a=e.length;for(let r=0;r{let n=Math.cos(e),a=Math.sin(e),r=[[n,-a,0],[a,n,0],[0,0,1]],s=c9(t[0],t[1]),i=h9(s,r),o=c9(-t[0],-t[1]);return h9(i,o)},Xue=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],a=[-Fo(t[0],n),-Fo(t[1],n)];return[t[0].concat(a[0]),t[1].concat(a[1]),[0,0,1]]},Kue=(e,t)=>[Fo(e,t[0]),Fo(e,t[1])];function m9(e){let t={strides:[e/16,e/8],anchors:[2,6]},n=[];for(let a=0;a[s[0]/r*(p[0]-r/2),s[1]/r*(p[1]-r/2),p[2]||0]),o=n!==0?f9(n,[0,0]):Df,l=n!==0?i.map(p=>[...Kue(p,o),p[2]]):i,d=n!==0?Xue(a):Df,u=[...Mf({startPoint:t.startPoint,endPoint:t.endPoint}),1];return l.map(p=>[Math.round(p[0]+Fo(u,d[0])),Math.round(p[1]+Fo(u,d[1])),Math.round(p[2]||0)])}function fx(e,t,n){let a=e.landmarks.length>=ux.count?ux.symmetryLine:Kp.symmetryLine,r=Hue(e.landmarks[a[0]],e.landmarks[a[1]]),s=Mf({startPoint:e.startPoint,endPoint:e.endPoint}),i=[s[0]/t.shape[2],s[1]/t.shape[1]],o=Me.rotateWithOffset(t,r,0,i),l=f9(-r,s),d=hx({startPoint:e.startPoint,endPoint:e.endPoint},o,[n,n]),u=fe(d,255);return Q(d),Q(o),[r,l,u]}var y9=6,Ma,mx=[],A9=null,Fa=0,ec=()=>Fa;async function x9(e){var t,n;return ye.initial&&(Ma=null),Ma?e.debug&&se("cached model:",Ma.modelUrl):(Ma=await et(tt(e.modelBasePath,((t=e.face.detector)==null?void 0:t.modelPath)||"")),!Ma||!Ma.modelUrl?se("load model failed:",(n=e.face.detector)==null?void 0:n.modelPath):e.debug&&se("load model:",Ma.modelUrl)),Fa=Ma.inputs[0].shape?Ma.inputs[0].shape[2]:0,Fa===-1&&(Fa=64),mx=m9(Fa),A9=Qa(mx),Ma}function Zue(e){let t=De(e,[0,1],[-1,2]),n=le(t,A9),a=De(e,[0,3],[-1,2]),r=fe(a,Fa),s=fe(n,Fa),i=fe(r,2),o=Ae(s,i),l=le(s,i),d=L(o,Fa),u=L(l,Fa);return iu([d,u],1)}async function b9(e,t){var d,u,p,c;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return{boxes:[]};let[n,a,r]=G(()=>{let h=Me.resizeBilinear(e,[Fa,Fa]),f=Ae(fe(h,127.5),.5),m=Ma==null?void 0:Ma.execute(f),g;if(Array.isArray(m)){let b=m.sort((C,E)=>C.size-E.size),v=mt([b[0],b[2]],2),k=mt([b[1],b[3]],2),T=mt([k,v],1);g=st(T,0)}else g=st(m);let y=Zue(g),A=De(g,[0,0],[-1,1]),x=st(Kn(A));return[g,y,x]}),s=await Me.nonMaxSuppressionAsync(a,r,((d=t.face.detector)==null?void 0:d.maxDetected)||0,((u=t.face.detector)==null?void 0:u.iouThreshold)||0,((p=t.face.detector)==null?void 0:p.minConfidence)||0),i=await s.array();Q(s);let o=[],l=await r.data();for(let h=0;h(((c=t.face.detector)==null?void 0:c.minConfidence)||0)){let m=De(a,[i[h],0],[1,-1]),g=G(()=>V(st(De(n,[i[h],y9-1],[1,-1])),[y9,-1]));o.push({box:d9(m),landmarks:g,anchor:mx[i[h]],confidence:f}),Q(m)}}return Q(n),Q(a),Q(r),{boxes:o,scaleFactor:[e.shape[2]/Fa,e.shape[1]/Fa]}}var Ax={};ud(Ax,{connected:()=>yx,kpt:()=>gx});var gx=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPalm","rightPalm","leftIndex","rightIndex","leftPinky","rightPinky","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftThumb","leftHand","rightThumb","rightHand"],yx={leftLeg:["leftHip","leftKnee","leftAnkle","leftHeel","leftFoot"],rightLeg:["rightHip","rightKnee","rightAnkle","rightHeel","rightFoot"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist","leftPalm"],rightArm:["rightShoulder","rightElbow","rightWrist","rightPalm"],leftHand:[],rightHand:[],head:[]};var v9={initial:!0},rn=[null,null],Ps=[[0,0],[0,0]],xx=Number.MAX_SAFE_INTEGER,bx,$f=null,zs=[[0,0],[0,0],[0,0],[0,0]],w9=0;async function k9(e){var t,n,a;if(v9.initial&&(rn[0]=null),!rn[0]&&((t=e.body.detector)==null?void 0:t.modelPath)){rn[0]=await et(tt(e.modelBasePath,((n=e.body.detector)==null?void 0:n.modelPath)||""));let r=Object.values(rn[0].modelSignature.inputs);Ps[0][0]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[1].size):0,Ps[0][1]=Array.isArray(r)?parseInt(r[0].tensorShape.dim[2].size):0,!rn[0]||!rn[0].modelUrl?se("load model failed:",(a=e.body.detector)==null?void 0:a.modelPath):e.debug&&se("load model:",rn[0].modelUrl)}else e.debug&&rn[0]&&se("cached model:",rn[0].modelUrl);return rn[0]}async function I9(e){var t;if(v9.initial&&(rn[1]=null),rn[1])e.debug&&se("cached model:",rn[1].modelUrl);else{rn[1]=await et(tt(e.modelBasePath,e.body.modelPath||""));let n=Object.values(rn[1].modelSignature.inputs);Ps[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ps[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0,((t=e.body.modelPath)==null?void 0:t.includes("lite"))?bx=["ld_3d","output_segmentation","output_heatmap","world_3d","output_poseflag"]:bx=["Identity","Identity_2","Identity_3","Identity_4","Identity_1"],!rn[1]||!rn[1].modelUrl?se("load model failed:",e.body.modelPath):e.debug&&se("load model:",rn[1].modelUrl)}return rn[1]}function Yue(e,t){let n=e.map(i=>i.position[0]),a=e.map(i=>i.position[1]),r=[Math.min(...n),Math.min(...a),Math.max(...n)-Math.min(...n),Math.max(...a)-Math.min(...a)],s=[r[0]/t[0],r[1]/t[1],r[2]/t[0],r[3]/t[1]];return{keypointsBox:r,keypointsBoxRaw:s}}async function Jue(e){let t={};if(!e.shape||!e.shape[1]||!e.shape[2])return e;zs=[[0,0],[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],[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]],t.pad=Sa(e,zs),t.resize=Me.resizeBilinear(t.pad,[Ps[1][0],Ps[1][1]]);let n=fe(t.resize,255);return Object.keys(t).forEach(a=>Q(t[a])),n}function Que(e,t){for(let n of e)n.position=[n.position[0]*(t[0]+zs[2][0]+zs[2][1])/t[0]-zs[2][0],n.position[1]*(t[1]+zs[1][0]+zs[1][1])/t[1]-zs[1][0],n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],n.position[2]];return e}var S9=e=>1-1/(1+Math.exp(e));async function ede(e,t,n){var h;let a={};a.input=await Jue(e),[a.ld,a.segmentation,a.heatmap,a.world,a.poseflag]=await((h=rn[1])==null?void 0:h.execute(a.input,bx));let r=(await a.poseflag.data())[0],s=Math.max(0,(r-.8)/(1-.8)),i=await a.ld.data(),o=[],l=5;for(let f=0;fQ(a[f]));let p={};for(let[f,m]of Object.entries(yx)){let g=[];for(let y=0;yb.part===m[y]),x=d.find(b=>b.part===m[y+1]);A&&x&&A.score>(t.body.minConfidence||0)&&x.score>(t.body.minConfidence||0)&&g.push([A.position,x.position])}p[f]=g}return{id:0,score:Math.trunc(100*s)/100,box:u.keypointsBox,boxRaw:u.keypointsBoxRaw,keypoints:d,annotations:p}}async function vx(e,t){let n=[e.shape[2]||0,e.shape[1]||0],a=(t.body.skipTime||0)>he()-w9,r=xx<(t.body.skipFrames||0);return t.skipAllowed&&a&&r&&$f!==null?xx++:($f=await ede(e,t,n),w9=he(),xx=0),$f?[$f]:[]}var ju=[{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 ja,Do=0,Of=[],N9=0,wx=Number.MAX_SAFE_INTEGER;async function T9(e){if(ye.initial&&(ja=null),ja)e.debug&&se("cached model:",ja.modelUrl);else{Gu(["floormod"],e),ja=await et(tt(e.modelBasePath,e.object.modelPath||""));let t=Object.values(ja.modelSignature.inputs);Do=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):0,!ja||!ja.modelUrl?se("load model failed:",e.object.modelPath):e.debug&&se("load model:",ja.modelUrl)}return ja}async function tde(e,t,n){if(!e)return[];let a=[],r=await e.array(),s=st(e);Q(e);let i=cn(s,6,1);Q(s);let o=xn([i[1],i[0],i[3],i[2]],1),l=st(o);Q(o);let d=st(i[4]),u=st(i[5]);i.forEach(f=>Q(f));let p=await Me.nonMaxSuppressionAsync(l,d,n.object.maxDetected,n.object.iouThreshold,n.object.minConfidence);Q(l),Q(d),Q(u);let c=await p.data();Q(p);let h=0;for(let f of c){let m=Math.trunc(100*r[0][f][4])/100,g=r[0][f][5],y=ju[g].label,[A,x]=[r[0][f][0]/Do,r[0][f][1]/Do],b=[A,x,r[0][f][2]/Do-A,r[0][f][3]/Do-x],v=[Math.trunc(b[0]*t[0]),Math.trunc(b[1]*t[1]),Math.trunc(b[2]*t[0]),Math.trunc(b[3]*t[1])];a.push({id:h++,score:m,class:g,label:y,box:v,boxRaw:b})}return a}async function kx(e,t){let n=(t.object.skipTime||0)>he()-N9,a=wx<(t.object.skipFrames||0);return t.skipAllowed&&n&&a&&Of.length>0?(wx++,Of):(wx=0,!ye.kernels.includes("mod")||!ye.kernels.includes("sparsetodense")?Of:new Promise(async r=>{let s=[e.shape[2],e.shape[1]],i=Me.resizeBilinear(e,[Do,Do]),o=t.object.enabled?ja==null?void 0:ja.execute(i,["tower_0/detections"]):null;N9=he(),Q(i);let l=await tde(o,s,t);Of=l,r(l)}))}var Nx={};ud(Nx,{connected:()=>Sx,kpt:()=>Ix});var Ix=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Sx={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var sn,C9=0,Ln={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Tx=Number.MAX_SAFE_INTEGER;async function Cx(e){return ye.initial&&(sn=null),sn?e.debug&&se("cached model:",sn.modelUrl):(sn=await et(tt(e.modelBasePath,e.body.modelPath||"")),!sn||!sn.modelUrl?se("load model failed:",e.body.modelPath):e.debug&&se("load model:",sn.modelUrl)),sn}function nde(e,t){let[n,a]=e.shape;return G(()=>{let r=(o,l)=>Ae(o,L(fe(o,Ce(l,"int32")),Ce(l,"int32"))),s=V(e,[a*n]),i=Rn(s,0).dataSync()[0];if(i>t){let o=ka(s,0),l=r(o,n).dataSync()[0],d=fe(o,Ce(n,"int32")).dataSync()[0];return[l,d,i]}return[0,0,i]})}async function Ex(e,t){let n=(t.body.skipTime||0)>he()-C9,a=Tx<(t.body.skipFrames||0);return t.skipAllowed&&n&&a&&Object.keys(Ln.keypoints).length>0?(Tx++,[Ln]):(Tx=0,new Promise(async r=>{var p;let s=G(()=>{if(!(sn==null?void 0:sn.inputs[0].shape))return null;let c=Me.resizeBilinear(e,[sn.inputs[0].shape[2],sn.inputs[0].shape[1]],!1);return L(c,2).sub(1)}),i;if(t.body.enabled&&(i=await(sn==null?void 0:sn.predict(s))),C9=he(),Q(s),i){Ln.keypoints.length=0;let c=i.squeeze();Q(i);let h=c.unstack(2);Q(c);for(let f=0;f(((p=t.body)==null?void 0:p.minConfidence)||0)&&Ln.keypoints.push({score:Math.round(100*y)/100,part:Ix[f],positionRaw:[m/sn.inputs[0].shape[2],g/sn.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/sn.inputs[0].shape[2]),Math.round(e.shape[1]*g/sn.inputs[0].shape[1])]})}h.forEach(f=>Q(f))}Ln.score=Ln.keypoints.reduce((c,h)=>h.score>c?h.score:c,0);let o=Ln.keypoints.map(c=>c.position[0]),l=Ln.keypoints.map(c=>c.position[1]);Ln.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let d=Ln.keypoints.map(c=>c.positionRaw[0]),u=Ln.keypoints.map(c=>c.positionRaw[1]);Ln.boxRaw=[Math.min(...d),Math.min(...u),Math.max(...d)-Math.min(...d),Math.max(...u)-Math.min(...u)];for(let[c,h]of Object.entries(Sx)){let f=[];for(let m=0;mA.part===h[m]),y=Ln.keypoints.find(A=>A.part===h[m+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([g.position,y.position])}Ln.annotations[c]=f}r([Ln])}))}var ade=["angry","disgust","fear","happy","sad","surprise","neutral"],on,_f=[],E9=0,R9=0,Rx=Number.MAX_SAFE_INTEGER,Mx=[.2989,.587,.114];async function M9(e){var t,n;return ye.initial&&(on=null),on?e.debug&&se("cached model:",on.modelUrl):(on=await et(tt(e.modelBasePath,((t=e.face.emotion)==null?void 0:t.modelPath)||"")),!on||!on.modelUrl?se("load model failed:",(n=e.face.emotion)==null?void 0:n.modelPath):e.debug&&se("load model:",on.modelUrl)),on}async function Fx(e,t,n,a){var i,o;if(!on)return null;let r=Rx<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>he()-R9;return t.skipAllowed&&s&&r&&E9===a&&_f[n]&&_f[n].length>0?(Rx++,_f[n]):(Rx=0,new Promise(async l=>{var u,p;let d=[];if((u=t.face.emotion)==null?void 0:u.enabled){let c=Me.resizeBilinear(e,[(on==null?void 0:on.inputs[0].shape)?on.inputs[0].shape[2]:0,(on==null?void 0:on.inputs[0].shape)?on.inputs[0].shape[1]:0],!1),[h,f,m]=cn(c,3,3);Q(c);let g=L(h,Mx[0]),y=L(f,Mx[1]),A=L(m,Mx[2]);Q(h),Q(f),Q(m);let x=Oh([g,y,A]);Q(g),Q(y),Q(A);let b=G(()=>L(Ae(x,.5),2));Q(x);let v=await(on==null?void 0:on.predict(b));R9=he();let k=await v.data();Q(v);for(let T=0;T(((p=t.face.emotion)==null?void 0:p.minConfidence)||0)&&d.push({score:Math.min(.99,Math.trunc(100*k[T])/100),emotion:ade[T]});d.sort((T,C)=>C.score-T.score),Q(b)}_f[n]=d,E9=a,l(d)}))}var Ga,Ls=0,rde=2.3,Dx=Tr.leftEyeLower0,$x=Tr.rightEyeLower0,Hu={leftBounds:[Dx[0],Dx[Dx.length-1]],rightBounds:[$x[0],$x[$x.length-1]]},qu={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function F9(e){var t,n;return ye.initial&&(Ga=null),Ga?e.debug&&se("cached model:",Ga.modelUrl):(Ga=await et(tt(e.modelBasePath,((t=e.face.iris)==null?void 0:t.modelPath)||"")),!Ga||!Ga.modelUrl?se("load model failed:",(n=e.face.iris)==null?void 0:n.modelPath):e.debug&&se("load model:",Ga.modelUrl)),Ls=Ga.inputs[0].shape?Ga.inputs[0].shape[2]:0,Ls===-1&&(Ls=64),Ga}function Pf(e,t,n,a){for(let r=0;r{let t=e[Hu.leftBounds[0]][2],n=e[Hu.rightBounds[0]][2];return t-n},D9=(e,t,n,a,r=!1,s)=>{let i=Qp(Jp(Ff([e[n],e[a]]),rde)),o=Yp(i),l=Me.cropAndResize(t,[[i.startPoint[1]/s,i.startPoint[0]/s,i.endPoint[1]/s,i.endPoint[0]/s]],[0],[Ls,Ls]);if(r&&ye.kernels.includes("flipleftright")){let d=Me.flipLeftRight(l);Q(l),l=d}return{box:i,boxSize:o,crop:l}},$9=(e,t,n,a=!1)=>{let r=[];for(let s=0;s{let a=e[Tr[`${n}EyeUpper0`][qu.upperCenter]][2],r=e[Tr[`${n}EyeLower0`][qu.lowerCenter]][2],s=(a+r)/2;return t.map((i,o)=>{let l=s;return o===2?l=a:o===4&&(l=r),[i[0],i[1],l]})};async function _9(e,t,n,a){if(!Ga)return n.debug&&se("face mesh iris detection requested, but model is not loaded"),e;let{box:r,boxSize:s,crop:i}=D9(e,t,Hu.leftBounds[0],Hu.leftBounds[1],!0,a),{box:o,boxSize:l,crop:d}=D9(e,t,Hu.rightBounds[0],Hu.rightBounds[1],!0,a),u=mt([i,d]);Q(i),Q(d);let p=Ga.predict(u);Q(u);let c=await p.data();Q(p);let h=c.slice(0,qu.numCoordinates*3),{rawCoords:f,iris:m}=$9(h,r,s,!0),g=c.slice(qu.numCoordinates*3),{rawCoords:y,iris:A}=$9(g,o,l),x=sde(e);Math.abs(x)<30?(Pf(e,f,"left",null),Pf(e,y,"right",null)):x<1?Pf(e,f,"left",["EyeUpper0","EyeLower0"]):Pf(e,y,"right",["EyeUpper0","EyeLower0"]);let b=O9(e,m,"left"),v=O9(e,A,"right");return e.concat(b).concat(v)}var Cr=[],Ha=null,ur=0,Ox=Number.MAX_SAFE_INTEGER,P9=0,z9=0;async function L9(e,t){var o,l,d,u,p,c,h,f,m,g,y;let n=(((o=t.face.detector)==null?void 0:o.skipTime)||0)>he()-P9,a=Ox<(((l=t.face.detector)==null?void 0:l.skipFrames)||0);if(!t.skipAllowed||!n||!a||z9===0){let A=await b9(e,t);P9=he(),Cr=[];for(let x of A.boxes){let b=await x.box.startPoint.data(),v=await x.box.endPoint.data(),k=await x.landmarks.array();Cr.push({startPoint:b,endPoint:v,landmarks:k,confidence:x.confidence})}A.boxes.forEach(x=>Q([x.box.startPoint,x.box.endPoint,x.landmarks]));for(let x=0;x[S[0]/(e.shape[2]||0),S[1]/(e.shape[1]||0),(S[2]||0)/ur]),A={...Jp(Ff(v.mesh),1.5),confidence:A.confidence};for(let S of Object.keys(Tr))v.annotations[S]=Tr[S].map(P=>v.mesh[P]);((m=t.face.detector)==null?void 0:m.rotation)&&t.face.mesh.enabled&&((g=t.face.description)==null?void 0:g.enabled)&&ye.kernels.includes("rotatewithoffset")&&(Q(v.tensor),[x,b,v.tensor]=fx(A,e,ur)),v.box=px(A,e),v.boxRaw=cx(A,e),v.score=Math.round(100*E||100*A.confidence||0)/100,v.faceScore=Math.round(100*E)/100,A={...Qp(A),confidence:A.confidence,faceConfidence:E}}}else{v.box=px(A,e),v.boxRaw=cx(A,e),v.score=Math.round(100*A.confidence||0)/100,v.mesh=A.landmarks.map(k=>[(A.startPoint[0]+A.endPoint[0])/2+(A.endPoint[0]+A.startPoint[0])*k[0]/ec(),(A.startPoint[1]+A.endPoint[1])/2+(A.endPoint[1]+A.startPoint[1])*k[1]/ec()]),v.meshRaw=v.mesh.map(k=>[k[0]/(e.shape[2]||0),k[1]/(e.shape[1]||0),(k[2]||0)/ur]);for(let k of Object.keys(Kp))v.annotations[k]=[v.mesh[Kp[k]]]}r.push(v),s.push(A)}return((y=t.face.mesh)==null?void 0:y.enabled)&&(Cr=s.filter(A=>{var x;return A.confidence>(((x=t.face.detector)==null?void 0:x.minConfidence)||0)})),z9=r.length,r}async function W9(e){var t,n;return ye.initial&&(Ha=null),Ha?e.debug&&se("cached model:",Ha.modelUrl):(Ha=await et(tt(e.modelBasePath,((t=e.face.mesh)==null?void 0:t.modelPath)||"")),!Ha||!Ha.modelUrl?se("load model failed:",(n=e.face.mesh)==null?void 0:n.modelPath):e.debug&&se("load model:",Ha.modelUrl)),ur=Ha.inputs[0].shape?Ha.inputs[0].shape[2]:0,ur===-1&&(ur=64),Ha}var B9=Mo,V9=Zp;var Wn,zf=[],U9=0,j9=0,_x=Number.MAX_SAFE_INTEGER;async function G9(e){var n,a;let t=tt(e.modelBasePath,((n=e.face.description)==null?void 0:n.modelPath)||"");return ye.initial&&(Wn=null),Wn?e.debug&&se("cached model:",t):(Wn=await et(t),Wn?e.debug&&se("load model:",t):se("load model failed:",((a=e.face.description)==null?void 0:a.modelPath)||"")),Wn}function Px(e){return G(()=>{let n=e.image||e.tensor||e;if(!(n instanceof je))return null;let a=[[.05,.15,.85,.85]];if(!(Wn==null?void 0:Wn.inputs[0].shape))return null;let r=n.shape.length===3?Me.cropAndResize(Wt(n,0),a,[0],[Wn.inputs[0].shape[2],Wn.inputs[0].shape[1]]):Me.cropAndResize(n,a,[0],[Wn.inputs[0].shape[2],Wn.inputs[0].shape[1]]);return L(r,255)})}async function zx(e,t,n,a){var i,o,l,d;if(!Wn)return null;let r=_x<(((i=t.face.description)==null?void 0:i.skipFrames)||0),s=(((o=t.face.description)==null?void 0:o.skipTime)||0)>he()-U9;return t.skipAllowed&&r&&s&&j9===a&&((l=zf[n])==null?void 0:l.age)&&((d=zf[n])==null?void 0:d.age)>0?(_x++,zf[n]):(_x=0,new Promise(async u=>{var c,h;let p={age:0,gender:"unknown",genderScore:0,descriptor:[]};if((c=t.face.description)==null?void 0:c.enabled){let f=Px(e),m=await(Wn==null?void 0:Wn.predict(f));U9=he(),Q(f);let y=await(await m.find(E=>E.shape[1]===1)).data(),A=Math.trunc(200*Math.abs(y[0]-.5))/100;A>(((h=t.face.description)==null?void 0:h.minConfidence)||0)&&(p.gender=y[0]<=.5?"female":"male",p.genderScore=Math.min(.99,A));let x=ka(m.find(E=>E.shape[1]===100),1),b=(await x.data())[0];Q(x);let k=await m.find(E=>E.shape[1]===100).data();p.age=Math.round(k[b-1]>k[b+1]?10*b-100*k[b-1]:10*b+100*k[b+1])/10;let T=m.find(E=>E.shape[1]===1024),C=T?await T.data():[];p.descriptor=Array.from(C),m.forEach(E=>Q(E))}zf[n]=p,j9=a,u(p)}))}function Lf(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function tc(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function H9(e,t,n){let a=t.shape[1],r=t.shape[2],s=[[e.startPoint[1]/a,e.startPoint[0]/r,e.endPoint[1]/a,e.endPoint[0]/r]];return Me.cropAndResize(t,s,[0],n)}function q9(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],a=[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:n,endPoint:a,palmLandmarks:r,confidence:e.confidence}}function Wf(e,t=1.5){let n=tc(e),a=Lf(e),r=[t*a[0]/2,t*a[1]/2],s=[n[0]-r[0],n[1]-r[1]],i=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function Bf(e){let t=tc(e),n=Lf(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],i=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function ide(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function X9(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return ide(n)}var K9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ws(e,t){let n=0;for(let a=0;a[n.x,n.y]),this.anchorsTensor=Qa(this.anchors),this.inputSize=this.model&&this.model.inputs&&this.model.inputs[0].shape?this.model.inputs[0].shape[2]:0,this.inputSizeTensor=Ht([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Ht([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){return G(()=>{let n=De(t,[0,0],[-1,2]),a=De(t,[0,2],[-1,2]),r=le(fe(n,this.inputSizeTensor),this.anchorsTensor),s=fe(a,this.doubleInputSizeTensor),i=L(Ae(r,s),this.inputSizeTensor),o=L(le(r,s),this.inputSizeTensor);return iu([i,o],1)})}normalizeLandmarks(t,n){return G(()=>{let a=le(fe(V(t,[-1,7,2]),this.inputSizeTensor),this.anchors[n]);return L(a,this.inputSizeTensor)})}async getBoxes(t,n){let a={};a.batched=this.model.predict(t),a.predictions=st(a.batched),a.scores=G(()=>st(Kn(De(a.predictions,[0,0],[-1,1]))));let r=await a.scores.data();a.boxes=De(a.predictions,[0,1],[-1,4]),a.norm=this.normalizeBoxes(a.boxes),a.nms=await Me.nonMaxSuppressionAsync(a.norm,a.scores,3*n.hand.maxDetected,n.hand.iouThreshold,n.hand.minConfidence);let s=await a.nms.array(),i=[];for(let o of s){let l=De(a.norm,[o,0],[1,-1]),d=G(()=>V(this.normalizeLandmarks(De(a.predictions,[o,5],[1,14]),o),[-1,2]));i.push({box:l,palmLandmarks:d,confidence:r[o]})}for(let o of Object.keys(a))Q(a[o]);return i}async estimateHandBounds(t,n){let a=t.shape[1],r=t.shape[2],s=G(()=>Ae(fe(Me.resizeBilinear(t,[this.inputSize,this.inputSize]),127.5),1)),i=await this.getBoxes(s,n);Q(s);let o=[];if(!i||i.length===0)return o;for(let l of i){let d=await l.box.data(),u=d.slice(0,2),p=d.slice(2,4),c=await l.palmLandmarks.array();Q(l.box),Q(l.palmLandmarks),o.push(q9({startPoint:u,endPoint:p,palmLandmarks:c,confidence:l.confidence},[r/this.inputSize,a/this.inputSize]))}return o}};var lde=5,Q9=1.65,eI=[0,5,9,13,17,1,2],ude=0,dde=2,tI=0,Vx=class{constructor(t,n){ce(this,"handDetector");ce(this,"handPoseModel");ce(this,"inputSize");ce(this,"storedBoxes");ce(this,"skipped");ce(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(i=>i[0]),a=t.map(i=>i[1]),r=[Math.min(...n),Math.min(...a)],s=[Math.max(...n),Math.max(...a)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let a=t.map(s=>Wx([...s,1],n)),r=this.calculateLandmarksBoundingBox(a);return Wf(Bf(r),lde)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),a=Wf(Bf(n),Q9);a.palmLandmarks=[];for(let r=0;r[i[0]*(h[0]-this.inputSize/2),i[1]*(h[1]-this.inputSize/2),i[2]*h[2]]),l=Lx(a,[0,0]),d=o.map(h=>[...Wx(h,l),h[2]]),u=Y9(r),p=[...tc(n),1],c=[Ws(p,u[0]),Ws(p,u[1])];return d.map(h=>[Math.trunc(h[0]+c[0]),Math.trunc(h[1]+c[1]),Math.trunc(h[2])])}async estimateHands(t,n){let a=!1,r,s=(n.hand.skipTime||0)>he()-tI,i=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&i&&(r=await this.handDetector.estimateHandBounds(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&&(a=!0));let o=[];for(let l=0;l=n.hand.minConfidence/4){let v=V(x,[-1,3]),k=await v.array();Q(x),Q(v);let T=this.transformRawCoords(k,m,u,f),C=this.getBoxForHandLandmarks(T);this.storedBoxes[l]={...C,confidence:b};let E={landmarks:T,confidence:b,boxConfidence:d.confidence,fingerConfidence:b,box:{topLeft:C.startPoint,bottomRight:C.endPoint}};o.push(E)}else this.storedBoxes[l]=null;Q(x)}else{let u=Wf(Bf(d),Q9),p={confidence:d.confidence,boxConfidence:d.confidence,fingerConfidence:0,box:{topLeft:u.startPoint,bottomRight:u.endPoint},landmarks:[]};o.push(p)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=o.length,o.length>n.hand.maxDetected&&(o.length=n.hand.maxDetected),o}};var qe={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=>qe.nameMapping[e],getPoints:e=>qe.pointsMapping[e]},na={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>na.nameMapping[e]},He={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=>He.nameMapping[e]},Vf=class{constructor(t){ce(this,"name");ce(this,"curls");ce(this,"directions");ce(this,"weights");ce(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}addCurl(t,n,a){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,a])}addDirection(t,n,a){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,a])}setWeight(t,n){this.weights[t]=n;let a=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/a)}matchAgainst(t,n){let a=0;for(let r in t){let s=t[r],i=this.curls[r];if(typeof i=="undefined"){a+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){a+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],i=this.directions[r];if(typeof i=="undefined"){a+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){a+=l*this.weightsRelative[r];break}}return a/10}};var Bs=new Vf("thumbs up");Bs.addCurl(qe.thumb,na.none,1);Bs.addDirection(qe.thumb,He.verticalUp,1);Bs.addDirection(qe.thumb,He.diagonalUpLeft,.25);Bs.addDirection(qe.thumb,He.diagonalUpRight,.25);for(let e of[qe.index,qe.middle,qe.ring,qe.pinky])Bs.addCurl(e,na.full,1),Bs.addDirection(e,He.horizontalLeft,1),Bs.addDirection(e,He.horizontalRight,1);var Zt=new Vf("victory");Zt.addCurl(qe.thumb,na.half,.5);Zt.addCurl(qe.thumb,na.none,.5);Zt.addDirection(qe.thumb,He.verticalUp,1);Zt.addDirection(qe.thumb,He.diagonalUpLeft,1);Zt.addCurl(qe.index,na.none,1);Zt.addDirection(qe.index,He.verticalUp,.75);Zt.addDirection(qe.index,He.diagonalUpLeft,1);Zt.addCurl(qe.middle,na.none,1);Zt.addDirection(qe.middle,He.verticalUp,1);Zt.addDirection(qe.middle,He.diagonalUpLeft,.75);Zt.addCurl(qe.ring,na.full,1);Zt.addDirection(qe.ring,He.verticalUp,.2);Zt.addDirection(qe.ring,He.diagonalUpLeft,1);Zt.addDirection(qe.ring,He.horizontalLeft,.2);Zt.addCurl(qe.pinky,na.full,1);Zt.addDirection(qe.pinky,He.verticalUp,.2);Zt.addDirection(qe.pinky,He.diagonalUpLeft,1);Zt.addDirection(qe.pinky,He.horizontalLeft,.2);Zt.setWeight(qe.index,2);Zt.setWeight(qe.middle,2);var nI=[Bs,Zt];var pde=.7,$o={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 aI(e,t,n,a){let r=(t-a)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function rI(e,t){if(!e||!t)return[0,0];let n=aI(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let a=aI(e[1],e[2],t[1],t[2]);return[n,a]}function sI(e,t=1){let n=0,a=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?a=1*t:r=1*t,[n,a,r]}function cde(e,t,n){let a=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],i=e[1]-t[1],o=e[1]-n[1],l=t[1]-n[1],d=e[2]-t[2],u=e[2]-n[2],p=t[2]-n[2],c=Math.sqrt(a*a+i*i+d*d),h=Math.sqrt(r*r+o*o+u*u),f=Math.sqrt(s*s+l*l+p*p),m=(f*f+c*c-h*h)/(2*f*c);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let y;return g>$o.NO_CURL_START_LIMIT?y=na.none:g>$o.HALF_CURL_START_LIMIT?y=na.half:y=na.full,y}function iI(e,t,n,a){let r;return a===Math.abs(e)?e>0?r=He.horizontalLeft:r=He.horizontalRight:a===Math.abs(t)?t>0?r=He.horizontalLeft:r=He.horizontalRight:n>0?r=He.horizontalLeft:r=He.horizontalRight,r}function oI(e,t,n,a){let r;return a===Math.abs(e)?e<0?r=He.verticalDown:r=He.verticalUp:a===Math.abs(t)?t<0?r=He.verticalDown:r=He.verticalUp:n<0?r=He.verticalDown:r=He.verticalUp,r}function hde(e,t,n,a,r,s,i,o){let l,d=oI(e,t,n,a),u=iI(r,s,i,o);return d===He.verticalUp?u===He.horizontalLeft?l=He.diagonalUpLeft:l=He.diagonalUpRight:u===He.horizontalLeft?l=He.diagonalDownLeft:l=He.diagonalDownRight,l}function fde(e,t,n,a){let r=e[0]-t[0],s=e[0]-n[0],i=t[0]-n[0],o=e[1]-t[1],l=e[1]-n[1],d=t[1]-n[1],u=Math.max(Math.abs(r),Math.abs(s),Math.abs(i)),p=Math.max(Math.abs(o),Math.abs(l),Math.abs(d)),c=0,h=0,f=0,m=p/(u+1e-5);m>1.5?c+=$o.DISTANCE_VOTE_POWER:m>.66?h+=$o.DISTANCE_VOTE_POWER:f+=$o.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+o*o),y=Math.sqrt(s*s+l*l),A=Math.sqrt(i*i+d*d),x=Math.max(g,y,A),b=e[0],v=e[1],k=n[0],T=n[1];x===g?(k=n[0],T=n[1]):x===A&&(b=t[0],v=t[1]);let O=rI([b,v],[k,T]),D=sI(O,$o.TOTAL_ANGLE_VOTE_POWER);c+=D[0],h+=D[1],f+=D[2];for(let P of a){let _=sI(P,$o.SINGLE_ANGLE_VOTE_POWER);c+=_[0],h+=_[1],f+=_[2]}let S;return c===Math.max(c,h,f)?S=oI(l,o,d,p):f===Math.max(h,f)?S=iI(s,r,i,u):S=hde(l,o,d,p,s,r,i,u),S}function lI(e){let t=[],n=[],a=[],r=[];if(!e)return{curls:a,directions:r};for(let s of qe.all){let i=qe.getPoints(s),o=[],l=[];for(let d of i){let u=e[d[0]],p=e[d[1]],c=rI(u,p),h=c[0],f=c[1];o.push(h),l.push(f)}t.push(o),n.push(l)}for(let s of qe.all){let i=s===qe.thumb?1:0,o=qe.getPoints(s),l=e[o[i][0]],d=e[o[i+1][1]],u=e[o[3][1]],p=cde(l,d,u),c=fde(l,d,u,t[s].slice(i));a[s]=p,r[s]=c}return{curls:a,directions:r}}function Uf(e){if(!e||e.length===0)return null;let t=lI(e),n={};for(let a of qe.all)n[qe.getName(a)]={curl:na.getName(t.curls[a]),direction:He.getName(t.directions[a])};return n}function uI(e){let t=[];if(!e||e.length===0)return t;let n=lI(e);for(let a of nI){let r=a.matchAgainst(n.curls,n.directions);r>=pde&&t.push({name:a.name,confidence:r})}return t}var dI={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]},Hr,qr,pI;async function Ux(e,t){let n=await pI.estimateHands(e,t);if(!n)return[];let a=[];for(let r=0;rn[r].landmarks[p]);let i=n[r].landmarks,o=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(i&&i.length>0){for(let u of i)u[0]o[2]&&(o[2]=u[0]),u[1]>o[3]&&(o[3]=u[1]);o[2]-=o[0],o[3]-=o[1],l=[o[0]/(e.shape[2]||0),o[1]/(e.shape[1]||0),o[2]/(e.shape[2]||0),o[3]/(e.shape[1]||0)]}else o=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 d=Uf(i);a.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:o,boxRaw:l,keypoints:i,annotations:s,landmarks:d})}return a}async function jx(e){var n,a,r,s,i,o;ye.initial&&(Hr=null,qr=null),!Hr||!qr?([Hr,qr]=await Promise.all([e.hand.enabled?et(tt(e.modelBasePath,((n=e.hand.detector)==null?void 0:n.modelPath)||""),{fromTFHub:(((a=e.hand.detector)==null?void 0:a.modelPath)||"").includes("tfhub.dev")}):null,e.hand.landmarks?et(tt(e.modelBasePath,((r=e.hand.skeleton)==null?void 0:r.modelPath)||""),{fromTFHub:(((s=e.hand.skeleton)==null?void 0:s.modelPath)||"").includes("tfhub.dev")}):null]),e.hand.enabled&&(!Hr||!Hr.modelUrl?se("load model failed:",((i=e.hand.detector)==null?void 0:i.modelPath)||""):e.debug&&se("load model:",Hr.modelUrl),!qr||!qr.modelUrl?se("load model failed:",((o=e.hand.skeleton)==null?void 0:o.modelPath)||""):e.debug&&se("load model:",qr.modelUrl))):(e.debug&&se("cached model:",Hr.modelUrl),e.debug&&se("cached model:",qr.modelUrl));let t=new Bx(Hr);return pI=new Vx(t,qr),[Hr,qr]}function Oo(e,t=[1,1]){let n=[e.map(o=>o[0]),e.map(o=>o[1])],a=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[a[0],a[1],r[0]-a[0],r[1]-a[1]],i=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:i}}function cI(e,t=[1,1]){let n=[e.map(d=>d[0]),e.map(d=>d[1])],a=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(a[0]+r[0])/2,(a[1]+r[1])/2],i=Math.max(s[0]-a[0],s[1]-a[1],-s[0]+r[0],-s[1]+r[1]),o=[Math.trunc(s[0]-i),Math.trunc(s[1]-i),Math.trunc(2*i),Math.trunc(2*i)],l=[o[0]/t[0],o[1]/t[1],o[2]/t[0],o[3]/t[1]];return{box:o,boxRaw:l}}function jf(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]]}function Gx(e){return[Math.max(0,e[1]),Math.max(0,e[0]),Math.min(1,e[3]+e[1]),Math.min(1,e[2]+e[0])]}var kt=[null,null],mde=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Vs=[[0,0],[0,0]],gde=["hand","fist","pinch","point","face","tip","pinchtip"],hI=4,fI=1.6,yde=512,Ade=1.4,Gf=Number.MAX_SAFE_INTEGER,Hx=0,Xr=[0,0],Ut={boxes:[],hands:[]},mI={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]};async function gI(e){var t,n;if(ye.initial&&(kt[0]=null),kt[0])e.debug&&se("cached model:",kt[0].modelUrl);else{Gu(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),kt[0]=await et(tt(e.modelBasePath,((t=e.hand.detector)==null?void 0:t.modelPath)||""));let a=Object.values(kt[0].modelSignature.inputs);Vs[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Vs[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0,!kt[0]||!kt[0].modelUrl?se("load model failed:",(n=e.hand.detector)==null?void 0:n.modelPath):e.debug&&se("load model:",kt[0].modelUrl)}return kt[0]}async function yI(e){var t,n;if(ye.initial&&(kt[1]=null),kt[1])e.debug&&se("cached model:",kt[1].modelUrl);else{kt[1]=await et(tt(e.modelBasePath,((t=e.hand.skeleton)==null?void 0:t.modelPath)||""));let a=Object.values(kt[1].modelSignature.inputs);Vs[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Vs[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0,!kt[1]||!kt[1].modelUrl?se("load model failed:",(n=e.hand.skeleton)==null?void 0:n.modelPath):e.debug&&se("load model:",kt[1].modelUrl)}return kt[1]}async function xde(e,t){let n=[];if(!e||!kt[0])return n;let a={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,yde),i=Math.round(s*r/8)*8;a.resize=Me.resizeBilinear(e,[s,i]),a.cast=pe(a.resize,"int32"),[a.rawScores,a.rawBoxes]=await kt[0].executeAsync(a.cast,mde),a.boxes=st(a.rawBoxes,[0,2]),a.scores=st(a.rawScores,[0]);let o=Mn(a.scores,1);Q(o[hI]),o.splice(hI,1),a.filtered=xn(o,1),Q(o),a.max=Rn(a.filtered,1),a.argmax=ka(a.filtered,1);let l=0;a.nms=await Me.nonMaxSuppressionAsync(a.boxes,a.max,t.hand.maxDetected,t.hand.iouThreshold,t.hand.minConfidence);let d=await a.nms.data(),u=await a.max.data(),p=await a.argmax.data();for(let c of Array.from(d)){let h=De(a.boxes,c,1),f=await h.data();Q(h);let m=[f[1],f[0],f[3]-f[1],f[2]-f[0]],g=jf(m,Ade),y=Gx(g),A=[Math.trunc(m[0]*Xr[0]),Math.trunc(m[1]*Xr[1]),Math.trunc(m[2]*Xr[0]),Math.trunc(m[3]*Xr[1])],x=u[c],b=gde[p[c]],v={id:l++,score:x,box:A,boxRaw:g,boxCrop:y,label:b};n.push(v)}return Object.keys(a).forEach(c=>Q(a[c])),n.sort((c,h)=>h.score-c.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function qx(e,t,n){let a={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&&kt[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={};r.crop=Me.cropAndResize(e,[t.boxCrop],[0],[Vs[1][0],Vs[1][1]],"bilinear"),r.cast=pe(r.crop,"float32"),r.div=fe(r.cast,255),[r.score,r.keypoints]=kt[1].execute(r.div);let s=(await r.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(s))))/100;if(i>=(n.hand.minConfidence||0)){a.fingerScore=i,r.reshaped=V(r.keypoints,[-1,3]);let d=(await r.reshaped.array()).map(u=>[u[0]/Vs[1][1],u[1]/Vs[1][0],u[2]||0]).map(u=>[u[0]*t.boxRaw[2],u[1]*t.boxRaw[3],u[2]||0]);a.keypoints=d.map(u=>[Xr[0]*(u[0]+t.boxRaw[0]),Xr[1]*(u[1]+t.boxRaw[1]),u[2]||0]),a.landmarks=Uf(a.keypoints);for(let u of Object.keys(mI))a.annotations[u]=mI[u].map(p=>a.landmarks&&a.keypoints[p]?a.keypoints[p]:null)}Object.keys(r).forEach(o=>Q(r[o]))}return a}async function Xx(e,t){var r,s;if(!kt[0]||!kt[1]||!((r=kt[0])==null?void 0:r.inputs[0].shape)||!((s=kt[1])==null?void 0:s.inputs[0].shape))return[];Xr=[e.shape[2]||0,e.shape[1]||0],Gf++;let n=(t.hand.skipTime||0)>he()-Hx,a=Gf<(t.hand.skipFrames||0);return t.skipAllowed&&n&&a?Ut.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>he()-Hx,l=Gf<3*(t.hand.skipFrames||0);t.skipAllowed&&Ut.hands.length===t.hand.maxDetected?Ut.hands=await Promise.all(Ut.boxes.map(u=>qx(e,u,t))):t.skipAllowed&&o&&l&&Ut.hands.length>0?Ut.hands=await Promise.all(Ut.boxes.map(u=>qx(e,u,t))):(Ut.boxes=await xde(e,t),Hx=he(),Ut.hands=await Promise.all(Ut.boxes.map(u=>qx(e,u,t))),Gf=0);let d=[...Ut.boxes];if(Ut.boxes.length=0,t.cacheSensitivity>0)for(let u=0;u.05&&p.box[3]/(e.shape[1]||1)>.05&&Ut.hands[u].fingerScore&&Ut.hands[u].fingerScore>(t.hand.minConfidence||0)){let c=jf(p.box,fI),h=jf(p.boxRaw,fI),f=Gx(h);Ut.boxes.push({...d[u],box:c,boxRaw:h,boxCrop:f})}}for(let u=0;uqf,horizontal:()=>Kx,kpt:()=>Hf,relative:()=>Yx,vertical:()=>Zx});var Hf=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],Kx=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],Zx=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],Yx=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],qf={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var AI=.005,ga={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function Qx(e){for(let t of Kx){let n=e.keypoints.findIndex(r=>r.part===t[0]),a=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[a]&&e.keypoints[n].position[0]r&&r.part===t[0]),a=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[a]&&e.keypoints[n].position[1]d&&d.part===t[0]),r=e.keypoints.findIndex(d=>d&&d.part===t[1]),s=e.keypoints.findIndex(d=>d&&d.part===n[0]),i=e.keypoints.findIndex(d=>d&&d.part===n[1]);if(!e.keypoints[s]||!e.keypoints[i])continue;let o=e.keypoints[a]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[a].position[0]),Math.abs(e.keypoints[i].position[0]-e.keypoints[a].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[i].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(o[0]>o[1]||l[0]>l[1]){let d=e.keypoints[a];e.keypoints[a]=e.keypoints[r],e.keypoints[r]=d}}}function xI(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=Sa(e,ga.padding),n.resize=Me.resizeBilinear(n.pad,[t,t]);let a=pe(n.resize,"int32");return Object.keys(n).forEach(r=>Q(n[r])),a}function vI(e,t){e.keypoints=e.keypoints.filter(a=>a&&a.position);for(let a of e.keypoints)a.position=[a.position[0]*(t[0]+ga.padding[2][0]+ga.padding[2][1])/t[0]-ga.padding[2][0],a.position[1]*(t[1]+ga.padding[1][0]+ga.padding[1][1])/t[1]-ga.padding[1][0]],a.positionRaw=[a.position[0]/t[0],a.position[1]/t[1]];let n=Oo(e.keypoints.map(a=>a.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var Nn,Xf=0,e5=Number.MAX_SAFE_INTEGER,_o={boxes:[],bodies:[],last:0};async function wI(e){return ye.initial&&(Nn=null),Nn?e.debug&&se("cached model:",Nn.modelUrl):(Gu(["size"],e),Nn=await et(tt(e.modelBasePath,e.body.modelPath||"")),!Nn||!Nn.modelUrl?se("load model failed:",e.body.modelPath):e.debug&&se("load model:",Nn.modelUrl)),Xf=Nn.inputs[0].shape?Nn.inputs[0].shape[2]:0,Xf===-1&&(Xf=256),Nn}async function bde(e,t,n,a){let r=e[0][0],s=[],i=0;for(let p=0;pt.body.minConfidence){let c=[(a[3]-a[1])*r[p][1]+a[1],(a[2]-a[0])*r[p][0]+a[0]];s.push({score:Math.round(100*i)/100,part:Hf[p],positionRaw:c,position:[Math.round((n.shape[2]||0)*c[0]),Math.round((n.shape[1]||0)*c[1])]})}i=s.reduce((p,c)=>c.score>p?c.score:p,0);let o=[],l=Oo(s.map(p=>p.position),[n.shape[2],n.shape[1]]),d={};for(let[p,c]of Object.entries(qf)){let h=[];for(let f=0;fy.part===c[f]),g=s.find(y=>y.part===c[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}d[p]=h}let u={id:0,score:i,box:l.box,boxRaw:l.boxRaw,keypoints:s,annotations:d};return Qx(u),o.push(u),o}async function vde(e,t,n,a){let r=[];for(let s=0;st.body.minConfidence){let l=[];for(let c=0;c<17;c++){let h=i[3*c+2];if(h>t.body.minConfidence){let f=[(a[3]-a[1])*i[3*c+1]+a[1],(a[2]-a[0])*i[3*c+0]+a[0]];l.push({part:Hf[c],score:Math.round(100*h)/100,positionRaw:f,position:[Math.round((n.shape[2]||0)*f[0]),Math.round((n.shape[1]||0)*f[1])]})}}let d=Oo(l.map(c=>c.position),[n.shape[2],n.shape[1]]),u={};for(let[c,h]of Object.entries(qf)){let f=[];for(let m=0;mA.part===h[m]),y=l.find(A=>A.part===h[m+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([g.position,y.position])}u[c]=f}let p={id:s,score:o,box:d.box,boxRaw:d.boxRaw,keypoints:[...l],annotations:u};Qx(p),r.push(p)}}return r.sort((s,i)=>i.score-s.score),r.length>t.body.maxDetected&&(r.length=t.body.maxDetected),r}async function t5(e,t){if(!Nn||!(Nn==null?void 0:Nn.inputs[0].shape))return[];t.skipAllowed||(_o.boxes.length=0),e5++;let n=(t.body.skipTime||0)>he()-_o.last,a=e5<(t.body.skipFrames||0);return t.skipAllowed&&n&&a?_o.bodies:new Promise(async r=>{let s={};e5=0,s.input=bI(e,Xf),s.res=await(Nn==null?void 0:Nn.predict(s.input)),_o.last=he();let i=await s.res.array();_o.bodies=s.res.shape[2]===17?await bde(i,t,e,[0,0,1,1]):await vde(i,t,e,[0,0,1,1]);for(let o of _o.bodies)vI(o,[e.shape[2]||1,e.shape[1]||1]),xI(o.keypoints);Object.keys(s).forEach(o=>Q(s[o])),r(_o.bodies)})}var ya,Kf=[],kI=0,n5=Number.MAX_SAFE_INTEGER,Zf=2.5;async function II(e){if(!ya||ye.initial){ya=await et(tt(e.modelBasePath,e.object.modelPath||""));let t=Object.values(ya.modelSignature.inputs);if(ya.inputSize=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):null,!ya.inputSize)throw new Error(`cannot determine model inputSize: ${e.object.modelPath}`);!ya||!ya.modelUrl?se("load model failed:",e.object.modelPath):e.debug&&se("load model:",ya.modelUrl)}else e.debug&&se("cached model:",ya.modelUrl);return ya}async function wde(e,t,n,a){let r=0,s=[];for(let d of[1,2,4])G(async()=>{var g,y;let u=d*13,p=(g=e.find(A=>A.shape[1]===u**2&&A.shape[2]===ju.length))==null?void 0:g.squeeze(),c=(y=e.find(A=>A.shape[1]===u**2&&A.shape[2]a.object.minConfidence&&x!==61){let v=(.5+Math.trunc(A%u))/u,k=(.5+Math.trunc(A/u))/u,T=f[A].map(j=>j*(u/d/t)),[C,E]=[v-Zf/d*T[0],k-Zf/d*T[1]],[O,D]=[v+Zf/d*T[2]-C,k+Zf/d*T[3]-E],S=[C,E,O,D];S=S.map(j=>Math.max(0,Math.min(j,1)));let P=[S[0]*n[0],S[1]*n[1],S[2]*n[0],S[3]*n[1]],_={id:r++,score:Math.round(100*b)/100,class:x+1,label:ju[x].label,box:P.map(j=>Math.trunc(j)),boxRaw:S};s.push(_)}}});e.forEach(d=>Q(d));let i=s.map(d=>[d.boxRaw[1],d.boxRaw[0],d.boxRaw[3],d.boxRaw[2]]),o=s.map(d=>d.score),l=[];if(i&&i.length>0){let d=await Me.nonMaxSuppressionAsync(i,o,a.object.maxDetected,a.object.iouThreshold,a.object.minConfidence);l=await d.data(),Q(d)}return s=s.filter((d,u)=>l.includes(u)).sort((d,u)=>u.score-d.score),s}async function a5(e,t){let n=(t.object.skipTime||0)>he()-kI,a=n5<(t.object.skipFrames||0);return t.skipAllowed&&n&&a&&Kf.length>0?(n5++,Kf):(n5=0,!ye.kernels.includes("mod")||!ye.kernels.includes("sparsetodense")?Kf:new Promise(async r=>{let s=[e.shape[2],e.shape[1]],i=Me.resizeBilinear(e,[ya.inputSize,ya.inputSize],!1),o=fe(i,255),l=o.transpose([0,3,1,2]);Q(o),Q(i);let d;t.object.enabled&&(d=await ya.predict(l)),kI=he(),Q(l);let u=await wde(d,ya.inputSize,s,t);Kf=u,r(u)}))}var nc=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],kde=nc.length,ac=nc.reduce((e,t,n)=>(e[t]=n,e),{}),Ide=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],nhe=Ide.map(([e,t])=>[ac[e],ac[t]]),SI=[["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 NI(e){let t=e.reduce(({maxX:n,maxY:a,minX:r,minY:s},{position:{x:i,y:o}})=>({maxX:Math.max(n,i),maxY:Math.max(a,o),minX:Math.min(r,i),minY:Math.min(s,o)}),{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 TI(e,[t,n],[a,r]){let s=t/a,i=n/r,o=(d,u)=>({id:u,score:d.score,boxRaw:[d.box[0]/r,d.box[1]/a,d.box[2]/r,d.box[3]/a],box:[Math.trunc(d.box[0]*i),Math.trunc(d.box[1]*s),Math.trunc(d.box[2]*i),Math.trunc(d.box[3]*s)],keypoints:d.keypoints.map(({score:p,part:c,position:h})=>({score:p,part:c,position:[Math.trunc(h.x*i),Math.trunc(h.y*s)],positionRaw:[h.x/a,h.y/a]}))});return e.map((d,u)=>o(d,u))}var r5=class{constructor(t,n){ce(this,"priorityQueue");ce(this,"numberOfElements");ce(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 CI(e,t,n,a){let r=n-e,s=a-t;return r*r+s*s}function l5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var Aa,Sde=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Yf=1,Xu=16,Nde=50**2;function EI(e,t,n,a,r,s,i=2){let o=y=>({y:s.get(y.y,y.x,e),x:s.get(y.y,y.x,s.shape[2]/2+e)}),l=(y,A,x)=>({y:o5(Math.round(y.y/Xu),0,A-1),x:o5(Math.round(y.x/Xu),0,x-1)}),[d,u]=a.shape,p=l(t.position,d,u),c=o(p),f=l5(t.position,c);for(let y=0;y[ac[c],ac[h]]),i=s.map(([,c])=>c),o=s.map(([c])=>c),l=t.shape[2],d=i.length,u=new Array(l),p=i5(e.part,Xu,n);u[e.part.id]={score:e.score,part:nc[e.part.id],position:p};for(let c=d-1;c>=0;--c){let h=i[c],f=o[c];u[h]&&!u[f]&&(u[f]=EI(c,u[h],f,t,n,r))}for(let c=0;ct){o=!1;break}if(!o)break}return o}function Ede(e,t){let[n,a,r]=t.shape,s=new r5(n*a*r,({score:i})=>i);for(let i=0;i{var i;let s=(i=r[a])==null?void 0:i.position;return s?CI(n,t,s.y,s.x)<=Nde:!1})}function Rde(e,t){return t.reduce((a,{position:r,score:s},i)=>(RI(e,r,i)||(a+=s),a),0)/t.length}function Mde(e,t,n,a,r,s){let i=[],o=Ede(s,t);for(;i.lengthh.score>s);let p=Rde(i,u),c=NI(u);p>s&&i.push({keypoints:u,box:c,score:Math.round(100*p)/100})}return i}async function u5(e,t){let n=G(()=>{if(!Aa.inputs[0].shape)return[];let i=Me.resizeBilinear(e,[Aa.inputs[0].shape[2],Aa.inputs[0].shape[1]]),o=Ae(fe(pe(i,"float32"),127.5),1),d=Aa.execute(o,Sde).map(u=>st(u,[0]));return d[1]=d[1].sigmoid(),d}),a=await Promise.all(n.map(i=>i.buffer()));for(let i of n)Q(i);let r=await Mde(a[0],a[1],a[2],a[3],t.body.maxDetected,t.body.minConfidence);return Aa.inputs[0].shape?TI(r,[e.shape[1],e.shape[2]],[Aa.inputs[0].shape[2],Aa.inputs[0].shape[1]]):[]}async function MI(e){return!Aa||ye.initial?(Aa=await et(tt(e.modelBasePath,e.body.modelPath||"")),!Aa||!Aa.modelUrl?se("load model failed:",e.body.modelPath):e.debug&&se("load model:",Aa.modelUrl)):e.debug&&se("cached model:",Aa.modelUrl),Aa}var Da,d5=!1;async function p5(e){return!Da||ye.initial?(Da=await et(tt(e.modelBasePath,e.segmentation.modelPath||"")),!Da||!Da.modelUrl?se("load model failed:",e.segmentation.modelPath):e.debug&&se("load model:",Da.modelUrl)):e.debug&&se("cached model:",Da.modelUrl),Da}async function FI(e,t,n){var m,g;if(d5)return{data:[],canvas:null,alpha:null};d5=!0,Da||await p5(n);let a=Uu(e,n),r=((m=a.canvas)==null?void 0:m.width)||0,s=((g=a.canvas)==null?void 0:g.height)||0;if(!a.tensor)return{data:[],canvas:null,alpha:null};let i={};i.resize=Me.resizeBilinear(a.tensor,[Da.inputs[0].shape?Da.inputs[0].shape[1]:0,Da.inputs[0].shape?Da.inputs[0].shape[2]:0],!1),Q(a.tensor),i.norm=fe(i.resize,255),i.res=Da.predict(i.norm),i.squeeze=st(i.res,0),i.squeeze.shape[2]===2?(i.softmax=lo(i.squeeze),[i.bg,i.fg]=Mn(i.softmax,2),i.expand=Wt(i.fg,2),i.pad=Wt(i.expand,0),i.crop=Me.cropAndResize(i.pad,[[0,0,.5,.5]],[0],[r,s]),i.data=st(i.crop,0)):i.data=Me.resizeBilinear(i.squeeze,[s,r]);let o=Array.from(await i.data.data());if(ye.node&&!ye.Canvas&&typeof ImageData=="undefined")return n.debug&&se("canvas support missing"),Object.keys(i).forEach(y=>Q(i[y])),{data:o,canvas:null,alpha:null};let l=zn(r,s);await za.toPixels(i.data,l);let d=l.getContext("2d");n.segmentation.blur&&n.segmentation.blur>0&&(d.filter=`blur(${n.segmentation.blur}px)`);let u=d.getImageData(0,0,r,s),p=zn(r,s),c=p.getContext("2d");a.canvas&&c.drawImage(a.canvas,0,0),c.globalCompositeOperation="darken",n.segmentation.blur&&n.segmentation.blur>0&&(c.filter=`blur(${n.segmentation.blur}px)`),c.drawImage(l,0,0),c.globalCompositeOperation="source-over",c.filter="none";let h=c.getImageData(0,0,r,s);for(let y=0;yQ(i[y])),d5=!1,{data:o,canvas:f||p,alpha:l}}var c5=class{constructor(){ce(this,"age",null);ce(this,"agegenderrace",null);ce(this,"blazeposedetect",null);ce(this,"blazepose",null);ce(this,"centernet",null);ce(this,"efficientpose",null);ce(this,"embedding",null);ce(this,"emotion",null);ce(this,"facedetect",null);ce(this,"faceiris",null);ce(this,"facemesh",null);ce(this,"faceres",null);ce(this,"gender",null);ce(this,"handpose",null);ce(this,"handskeleton",null);ce(this,"handtrack",null);ce(this,"movenet",null);ce(this,"nanodet",null);ce(this,"posenet",null);ce(this,"segmentation",null);ce(this,"antispoof",null)}};function h5(e){for(let t of Object.keys(e.models))e.models[t]=null}async function DI(e){var t,n,a,r,s,i,o,l,d,u,p,c,h,f,m,g,y,A,x,b,v,k,T,C,E,O,D,S,P,_,j;ye.initial&&h5(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 jx(e.config)),!e.models.handskeleton&&e.config.hand.landmarks&&((r=(a=e.config.hand.detector)==null?void 0:a.modelPath)==null?void 0:r.includes("handdetect"))&&([e.models.handpose,e.models.handskeleton]=await jx(e.config))),e.config.face.enabled&&!e.models.facedetect&&(e.models.facedetect=x9(e.config)),e.config.face.enabled&&((s=e.config.face.mesh)==null?void 0:s.enabled)&&!e.models.facemesh&&(e.models.facemesh=W9(e.config)),e.config.face.enabled&&((i=e.config.face.iris)==null?void 0:i.enabled)&&!e.models.faceiris&&(e.models.faceiris=F9(e.config)),e.config.face.enabled&&((o=e.config.face.antispoof)==null?void 0:o.enabled)&&!e.models.antispoof&&(e.models.antispoof=u9(e.config)),e.config.hand.enabled&&!e.models.handtrack&&((d=(l=e.config.hand.detector)==null?void 0:l.modelPath)==null?void 0:d.includes("handtrack"))&&(e.models.handtrack=gI(e.config)),e.config.hand.enabled&&e.config.hand.landmarks&&!e.models.handskeleton&&((p=(u=e.config.hand.detector)==null?void 0:u.modelPath)==null?void 0:p.includes("handtrack"))&&(e.models.handskeleton=yI(e.config)),e.config.body.enabled&&!e.models.posenet&&((h=(c=e.config.body)==null?void 0:c.modelPath)==null?void 0:h.includes("posenet"))&&(e.models.posenet=MI(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((m=(f=e.config.body)==null?void 0:f.modelPath)==null?void 0:m.includes("efficientpose"))&&(e.models.efficientpose=Cx(e.config)),e.config.body.enabled&&!e.models.blazepose&&((y=(g=e.config.body)==null?void 0:g.modelPath)==null?void 0:y.includes("blazepose"))&&(e.models.blazepose=I9(e.config)),e.config.body.enabled&&!e.models.blazeposedetect&&((A=e.config.body.detector)==null?void 0:A.modelPath)&&((b=(x=e.config.body)==null?void 0:x.modelPath)==null?void 0:b.includes("blazepose"))&&(e.models.blazeposedetect=k9(e.config)),e.config.body.enabled&&!e.models.efficientpose&&((k=(v=e.config.body)==null?void 0:v.modelPath)==null?void 0:k.includes("efficientpose"))&&(e.models.efficientpose=Cx(e.config)),e.config.body.enabled&&!e.models.movenet&&((C=(T=e.config.body)==null?void 0:T.modelPath)==null?void 0:C.includes("movenet"))&&(e.models.movenet=wI(e.config)),e.config.object.enabled&&!e.models.nanodet&&((O=(E=e.config.object)==null?void 0:E.modelPath)==null?void 0:O.includes("nanodet"))&&(e.models.nanodet=II(e.config)),e.config.object.enabled&&!e.models.centernet&&((S=(D=e.config.object)==null?void 0:D.modelPath)==null?void 0:S.includes("centernet"))&&(e.models.centernet=T9(e.config)),e.config.face.enabled&&((P=e.config.face.emotion)==null?void 0:P.enabled)&&!e.models.emotion&&(e.models.emotion=M9(e.config)),e.config.face.enabled&&((_=e.config.face.description)==null?void 0:_.enabled)&&!e.models.faceres&&(e.models.faceres=G9(e.config)),e.config.segmentation.enabled&&!e.models.segmentation&&(e.models.segmentation=p5(e.config)),e.config.face.enabled&&((j=e.config.face.agegenderrace)==null?void 0:j.enabled)&&!e.models.agegenderrace&&(e.models.agegenderrace=i9(e.config));for await(let q of Object.keys(e.models))e.models[q]&&typeof e.models[q]!="undefined"&&(e.models[q]=await e.models[q])}async function $I(e){let t=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"];for(let n of Object.keys(e.models))if(e.models[n]){let a=[];Array.isArray(e.models[n])?a=e.models[n].filter(r=>r!==null).map(r=>r&&r.executor?r:r.model):a=[e.models[n]];for(let r of a){if(!r){e.config.debug&&se("model marked as loaded but not defined:",n);continue}let s=[],i=r==null?void 0:r.executor;if(i&&i.graph.nodes)for(let l of Object.values(i.graph.nodes)){let d=l.op.toLowerCase();s.includes(d)||s.push(d)}else!i&&e.config.debug&&se("model signature not determined:",n);let o=[];for(let l of s)!t.includes(l)&&!e.env.kernels.includes(l)&&!e.env.kernels.includes(l.replace("_",""))&&!e.env.kernels.includes(l.replace("native",""))&&!e.env.kernels.includes(l.replace("v2",""))&&o.push(l);o.length>0&&e.config.debug&&se("model validation:",n,o)}}}var Ot={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 Fde(){let e=Ot.gl;!e||(Ot.extensions=e.getSupportedExtensions())}async function OI(e){var t;if(e.config.backend==="humangl"&&(Ot.name in sa().registry&&(!Ot.gl||!Ot.gl.getParameter(Ot.gl.VERSION))&&(se("error: humangl backend invalid context"),h5(e)),!fg(Ot.name))){try{Ot.canvas=await zn(100,100)}catch(a){se("error: cannot create canvas:",a);return}try{Ot.gl=(t=Ot.canvas)==null?void 0:t.getContext("webgl2",Ot.webGLattr),Ot.canvas&&(Ot.canvas.addEventListener("webglcontextlost",async a=>{throw se("error: humangl:",a.type),se("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("browser webgl error")}),Ot.canvas.addEventListener("webglcontextrestored",a=>{se("error: humangl context restored:",a)}),Ot.canvas.addEventListener("webglcontextcreationerror",a=>{se("error: humangl context create:",a)}))}catch(a){se("error: cannot get WebGL context:",a);return}try{of(2,Ot.gl)}catch(a){se("error: cannot set WebGL context:",a);return}try{let a=new gf(Ot.gl);au(Ot.name,()=>new Pu(a),Ot.priority)}catch(a){se("error: cannot register WebGL backend:",a);return}try{$r("webgl").forEach(r=>{let s={...r,backendName:Ot.name};cs(s)})}catch(a){se("error: cannot update WebGL backend registration:",a);return}let n=mr().getGPGPUContext?mr().getGPGPUContext().gl:null;if(n)se(`humangl webgl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`);else{se("error: no current gl context:",n,Ot.gl);return}try{cr.set("WEBGL_VERSION",2)}catch(a){se("error: cannot set WebGL backend flags:",a);return}Fde(),se("backend registered:",Ot.name)}}async function Jf(e,t=!1){if(e.state="backend",t||ye.initial||e.config.backend&&e.config.backend.length>0&&Ya()!==e.config.backend){let n=he();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&se("running inside web worker"),ye.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&se("override: backend set to tensorflow while running in browser"),e.config.backend="humangl"),ye.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&se(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),ye.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")se("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="humangl";else{let r=await navigator.gpu.requestAdapter();e.config.debug&&se("enumerated webgpu adapter:",r)}e.config.backend==="humangl"&&await OI(e);let a=Object.keys(sa().registryFactory);if(e.config.debug&&se("available backends:",a),a.includes(e.config.backend)||(se(`error: backend ${e.config.backend} not found in registry`),e.config.backend=ye.node?"tensorflow":"webgl",e.config.debug&&se(`override: setting backend ${e.config.backend}`)),e.config.debug&&se("setting backend:",e.config.backend),e.config.backend==="wasm"){if(e.config.debug&&se("wasm path:",e.config.wasmPath),typeof(Ro==null?void 0:Ro.setWasmPaths)!="undefined")await X8(e.config.wasmPath);else throw new Error("wasm backend is not loaded");let r=await ne().getAsync("WASM_HAS_SIMD_SUPPORT"),s=await ne().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");e.config.debug&&se(`wasm execution: ${r?"SIMD":"no SIMD"} ${s?"multithreaded":"singlethreaded"}`),e.config.debug&&!r&&se("warning: wasm simd support is not enabled")}try{await e3(e.config.backend),await Dh()}catch(r){return se("error: cannot set backend:",e.config.backend,r),!1}}if(Ya()==="humangl"&&(cr.set("CHECK_COMPUTATION_FOR_ERRORS",!1),cr.set("WEBGL_CPU_FORWARD",!0),cr.set("WEBGL_USE_SHAPES_UNIFORMS",!0),cr.set("CPU_HANDOFF_SIZE_THRESHOLD",256),typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(se("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),cr.set("WEBGL_DELETE_TEXTURE_THRESHOLD",0)),mr().getGPGPUContext)){let a=await mr().getGPGPUContext().gl;e.config.debug&&se(`gl version:${a.getParameter(a.VERSION)} renderer:${a.getParameter(a.RENDERER)}`)}Ya()==="webgpu",Qb(),await Dh(),e.performance.backend=Math.trunc(he()-n),e.config.backend=Ya(),ye.updateBackend()}return!0}function Gu(e,t){for(let n of e){let a={kernelName:n,backendName:t.backend,kernelFunc:()=>{t.debug&&se("kernelFunc",n,t.backend)}};cs(a)}ye.kernels=$r(Ya()).map(n=>n.kernelName.toLowerCase())}var Kr={color:"rgba(173, 216, 230, 0.6)",labelColor:"rgba(173, 216, 230, 1)",shadowColor:"black",font:'small-caps 14px "Segoe UI"',lineHeight:18,lineWidth:4,pointSize:2,roundRect:8,drawPoints:!1,drawLabels:!0,drawBoxes:!0,drawGestures:!0,drawPolygons:!0,drawGaze:!0,fillPolygons:!1,useDepth:!0,useCurves:!1},Po=e=>{if(e&&e.getContext)return e.getContext("2d");throw new Error("invalid canvas")},Ku=e=>Math.round(e*180/Math.PI);function f5(e,t,n,a=0,r){e.fillStyle=r.useDepth&&a?`rgba(${127.5+2*a}, ${127.5-2*a}, 255, 0.3)`:r.color,e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function rc(e,t,n,a,r,s){if(e.beginPath(),s.useCurves){let i=(t+t+a)/2,o=(n+n+r)/2;e.ellipse(i,o,a/2,r/2,0,0,2*Math.PI)}else e.lineWidth=s.lineWidth,e.moveTo(t+s.roundRect,n),e.lineTo(t+a-s.roundRect,n),e.quadraticCurveTo(t+a,n,t+a,n+s.roundRect),e.lineTo(t+a,n+r-s.roundRect),e.quadraticCurveTo(t+a,n+r,t+a-s.roundRect,n+r),e.lineTo(t+s.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s.roundRect),e.lineTo(t,n+s.roundRect),e.quadraticCurveTo(t,n,t+s.roundRect,n),e.closePath();e.stroke()}function _I(e,t=[],n){if(!(t===void 0||t.length===0)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let a of t){let r=a[2]||0;e.strokeStyle=n.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:n.color,e.fillStyle=n.useDepth&&r?`rgba(${127.5+2*r}, ${127.5-2*r}, 255, 0.3)`:n.color,e.lineTo(a[0],Math.round(a[1]))}e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function Dde(e,t=[],n){if(!(t===void 0||t.length===0)){if(!n.useCurves||t.length<=2){_I(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let a=0;a1&&l[1].length>0){let d=o[1]>0?`#${o[1]}`:"",u=`${o[0]} ${d}: ${l[1]}`;a.shadowColor&&a.shadowColor!==""&&(r.fillStyle=a.shadowColor,r.fillText(u,8,2+s*a.lineHeight)),r.fillStyle=a.labelColor,r.fillText(u,6,0+s*a.lineHeight),s+=1}}}}async function g5(e,t,n){var s,i,o,l,d;let a=kn(Kr,n);if(!t||!e)return;let r=Po(e);for(let u of t){if(r.font=a.font,r.strokeStyle=a.color,r.fillStyle=a.color,a.drawBoxes&&rc(r,u.box[0],u.box[1],u.box[2],u.box[3],a),a.drawLabels){let p=[];if(p.push(`face: ${Math.trunc(100*u.score)}%`),u.genderScore&&p.push(`${u.gender||""} ${Math.trunc(100*u.genderScore)}%`),u.age&&p.push(`age: ${u.age||""}`),u.iris&&p.push(`distance: ${u.iris}`),u.real&&p.push(`real: ${Math.trunc(100*u.real)}%`),u.emotion&&u.emotion.length>0){let c=u.emotion.map(h=>`${Math.trunc(100*h.score)}% ${h.emotion}`);c.length>3&&(c.length=3),p.push(c.join(" "))}u.rotation&&u.rotation.angle&&u.rotation.gaze&&(u.rotation.angle.roll&&p.push(`roll: ${Ku(u.rotation.angle.roll)}\xB0 yaw:${Ku(u.rotation.angle.yaw)}\xB0 pitch:${Ku(u.rotation.angle.pitch)}\xB0`),u.rotation.gaze.bearing&&p.push(`gaze: ${Ku(u.rotation.gaze.bearing)}\xB0`)),p.length===0&&p.push("face"),r.fillStyle=a.color;for(let c=p.length-1;c>=0;c--){let h=Math.max(u.box[0],0),f=c*a.lineHeight+u.box[1];a.shadowColor&&a.shadowColor!==""&&(r.fillStyle=a.shadowColor,r.fillText(p[c],h+5,f+16)),r.fillStyle=a.labelColor,r.fillText(p[c],h+4,f+15)}}if(r.lineWidth=1,u.mesh&&u.mesh.length>0){if(a.drawPoints)for(let p of u.mesh)f5(r,p[0],p[1],p[2],a);if(a.drawPolygons){if(r.lineWidth=1,u.mesh.length>450)for(let p=0;pu.mesh[h]);_I(r,c,a)}if(u.annotations&&u.annotations.leftEyeIris&&u.annotations.leftEyeIris[0]){r.strokeStyle=a.useDepth?"rgba(255, 200, 255, 0.3)":a.color,r.beginPath();let p=Math.abs(u.annotations.leftEyeIris[3][0]-u.annotations.leftEyeIris[1][0])/2,c=Math.abs(u.annotations.leftEyeIris[4][1]-u.annotations.leftEyeIris[2][1])/2;r.ellipse(u.annotations.leftEyeIris[0][0],u.annotations.leftEyeIris[0][1],p,c,0,0,2*Math.PI),r.stroke(),a.fillPolygons&&(r.fillStyle=a.useDepth?"rgba(255, 255, 200, 0.3)":a.color,r.fill())}if(u.annotations&&u.annotations.rightEyeIris&&u.annotations.rightEyeIris[0]){r.strokeStyle=a.useDepth?"rgba(255, 200, 255, 0.3)":a.color,r.beginPath();let p=Math.abs(u.annotations.rightEyeIris[3][0]-u.annotations.rightEyeIris[1][0])/2,c=Math.abs(u.annotations.rightEyeIris[4][1]-u.annotations.rightEyeIris[2][1])/2;r.ellipse(u.annotations.rightEyeIris[0][0],u.annotations.rightEyeIris[0][1],p,c,0,0,2*Math.PI),r.stroke(),a.fillPolygons&&(r.fillStyle=a.useDepth?"rgba(255, 255, 200, 0.3)":a.color,r.fill())}if(a.drawGaze&&((s=u.rotation)==null?void 0:s.angle)){r.strokeStyle="pink";let p=u.box[0]+u.box[2]/2-u.box[3]*Ku(u.rotation.angle.yaw)/90,c=u.box[1]+u.box[3]/2+u.box[2]*Ku(u.rotation.angle.pitch)/90,h=new Path2D(` M ${u.box[0]+u.box[2]/2} ${u.box[1]} C ${p} ${u.box[1]}, diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index f7f4c3ca..7603786c 100644 --- a/dist/human.node-gpu.js +++ b/dist/human.node-gpu.js @@ -1291,7 +1291,7 @@ var env = new Env(); var tf28 = __toModule(require_tfjs_esm()); // package.json -var version = "2.4.0"; +var version = "2.4.1"; // src/tfjs/humangl.ts var tf24 = __toModule(require_tfjs_esm()); diff --git a/dist/human.node-wasm.js b/dist/human.node-wasm.js index b00a208a..34e9a151 100644 --- a/dist/human.node-wasm.js +++ b/dist/human.node-wasm.js @@ -1292,7 +1292,7 @@ var env = new Env(); var tf28 = __toModule(require_tfjs_esm()); // package.json -var version = "2.4.0"; +var version = "2.4.1"; // src/tfjs/humangl.ts var tf24 = __toModule(require_tfjs_esm()); diff --git a/dist/human.node.js b/dist/human.node.js index 58099a03..4d040511 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -1291,7 +1291,7 @@ var env = new Env(); var tf28 = __toModule(require_tfjs_esm()); // package.json -var version = "2.4.0"; +var version = "2.4.1"; // src/tfjs/humangl.ts var tf24 = __toModule(require_tfjs_esm()); diff --git a/package.json b/package.json index f2e6be0d..82267f1e 100644 --- a/package.json +++ b/package.json @@ -67,8 +67,8 @@ "@tensorflow/tfjs-node": "^3.10.0", "@tensorflow/tfjs-node-gpu": "^3.10.0", "@types/node": "^16.11.5", - "@typescript-eslint/eslint-plugin": "^5.1.0", - "@typescript-eslint/parser": "^5.1.0", + "@typescript-eslint/eslint-plugin": "^5.2.0", + "@typescript-eslint/parser": "^5.2.0", "@vladmandic/build": "^0.6.3", "@vladmandic/pilogger": "^0.3.3", "canvas": "^2.8.0", diff --git a/test/build.log b/test/build.log index 42c9d2e9..af6fd871 100644 --- a/test/build.log +++ b/test/build.log @@ -1,204 +1,26 @@ -2021-10-25 13:02:59 INFO:  @vladmandic/human version 2.4.0 -2021-10-25 13:02:59 INFO:  User: vlado Platform: linux Arch: x64 Node: v17.0.1 -2021-10-25 13:02:59 INFO:  Application: {"name":"@vladmandic/human","version":"2.4.0"} -2021-10-25 13:02:59 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2021-10-25 13:02:59 INFO:  Toolchain: {"build":"0.6.3","esbuild":"0.13.9","typescript":"4.4.4","typedoc":"0.22.7","eslint":"8.1.0"} -2021-10-25 13:02:59 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2021-10-25 13:02:59 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2021-10-25 13:02:59 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":1275} -2021-10-25 13:02:59 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":55,"inputBytes":524815,"outputBytes":438967} -2021-10-25 13:02:59 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":1283} -2021-10-25 13:02:59 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":55,"inputBytes":524823,"outputBytes":438971} -2021-10-25 13:02:59 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":1350} -2021-10-25 13:02:59 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":55,"inputBytes":524890,"outputBytes":439043} -2021-10-25 13:02:59 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1652} -2021-10-25 13:02:59 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2323,"outputBytes":973} -2021-10-25 13:02:59 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":55,"inputBytes":524513,"outputBytes":440910} -2021-10-25 13:02:59 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2572202,"outputBytes":2491625} -2021-10-25 13:03:00 STATE: Compile: {"name":"human/browser/esm/custom","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.custom.esm.js","files":55,"inputBytes":3015165,"outputBytes":1607407} -2021-10-25 13:03:01 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":2323,"outputBytes":1155160} -2021-10-25 13:03:01 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":1678700,"outputBytes":1431091} -2021-10-25 13:03:02 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":1678700,"outputBytes":1879499} -2021-10-25 13:03:20 STATE: Typings: {"input":"src/human.ts","output":"types","files":96} -2021-10-25 13:03:27 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":48,"generated":true} -2021-10-25 13:04:11 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":91,"errors":0,"warnings":0} -2021-10-25 13:04:11 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2021-10-25 13:04:11 INFO:  Done... -2021-10-25 13:04:16 INFO:  @vladmandic/human version 2.4.0 -2021-10-25 13:04:16 INFO:  User: vlado Platform: linux Arch: x64 Node: v17.0.1 -2021-10-25 13:04:16 INFO:  Application: {"name":"@vladmandic/human","version":"2.4.0"} -2021-10-25 13:04:16 INFO:  Environment: {"profile":"development","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2021-10-25 13:04:16 INFO:  Toolchain: {"build":"0.6.3","esbuild":"0.13.9","typescript":"4.4.4","typedoc":"0.22.7","eslint":"8.1.0"} -2021-10-25 13:04:16 INFO:  Build: {"profile":"development","steps":["serve","watch","compile"]} -2021-10-25 13:04:16 ERROR: WebServer HTTP: listen EADDRINUSE: address already in use :::10030 -2021-10-25 13:04:16 ERROR: WebServer HTTPS: listen EADDRINUSE: address already in use :::10031 -2021-10-25 13:04:17 STATE: Watch: {"locations":["src/**","README.md","src/**/*","tfjs/**/*"]} -2021-10-25 13:04:17 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":1275} -2021-10-25 13:04:17 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":55,"inputBytes":524815,"outputBytes":438967} -2021-10-25 13:04:17 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":1283} -2021-10-25 13:04:17 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":55,"inputBytes":524823,"outputBytes":438971} -2021-10-25 13:04:17 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":1350} -2021-10-25 13:04:17 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":55,"inputBytes":524890,"outputBytes":439043} -2021-10-25 13:04:17 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1652} -2021-10-25 13:04:17 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2323,"outputBytes":973} -2021-10-25 13:04:17 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":55,"inputBytes":524513,"outputBytes":440910} -2021-10-25 13:04:17 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2572202,"outputBytes":2491625} -2021-10-25 13:04:18 STATE: Compile: {"name":"human/browser/esm/custom","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.custom.esm.js","files":55,"inputBytes":3015165,"outputBytes":1607407} -2021-10-25 13:04:19 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":2323,"outputBytes":1155160} -2021-10-25 13:04:26 INFO:  @vladmandic/human version 2.4.0 -2021-10-25 13:04:26 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 -2021-10-25 13:04:26 INFO:  Application: {"name":"@vladmandic/human","version":"2.4.0"} -2021-10-25 13:04:26 INFO:  Environment: {"profile":"development","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2021-10-25 13:04:26 INFO:  Toolchain: {"build":"0.6.3","esbuild":"0.13.9","typescript":"4.4.4","typedoc":"0.22.7","eslint":"8.1.0"} -2021-10-25 13:04:26 INFO:  Build: {"profile":"development","steps":["serve","watch","compile"]} -2021-10-25 13:04:26 STATE: WebServer: {"ssl":false,"port":10030,"root":"."} -2021-10-25 13:04:26 STATE: WebServer: {"ssl":true,"port":10031,"root":".","sslKey":"node_modules/@vladmandic/build/cert/https.key","sslCrt":"node_modules/@vladmandic/build/cert/https.crt"} -2021-10-25 13:04:26 STATE: Watch: {"locations":["src/**","README.md","src/**/*","tfjs/**/*"]} -2021-10-25 13:04:26 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":1275} -2021-10-25 13:04:26 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":55,"inputBytes":524815,"outputBytes":438967} -2021-10-25 13:04:26 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":1283} -2021-10-25 13:04:26 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":55,"inputBytes":524823,"outputBytes":438971} -2021-10-25 13:04:26 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":1350} -2021-10-25 13:04:26 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":55,"inputBytes":524890,"outputBytes":439043} -2021-10-25 13:04:26 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1652} -2021-10-25 13:04:26 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2323,"outputBytes":973} -2021-10-25 13:04:26 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":55,"inputBytes":524513,"outputBytes":440910} -2021-10-25 13:04:27 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2572202,"outputBytes":2491625} -2021-10-25 13:04:27 STATE: Compile: {"name":"human/browser/esm/custom","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.custom.esm.js","files":55,"inputBytes":3015165,"outputBytes":1607407} -2021-10-25 13:04:28 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":2323,"outputBytes":1155160} -2021-10-25 13:04:28 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":1678700,"outputBytes":1431091} -2021-10-25 13:04:29 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":1678700,"outputBytes":1879499} -2021-10-25 13:04:29 INFO:  Listening... -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":42321,"url":"/typedoc/index.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:37 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":42321,"url":"/typedoc/index.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":42321,"url":"/typedoc/index.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:43 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":48289,"url":"/index.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1879499,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:45 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:45 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/manifest+json","size":304,"url":"/manifest.webmanifest","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:45 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":6776056,"url":"/dist/human.esm.js.map","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1816,"url":"/index-worker.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1431091,"url":"/dist/human.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":79038,"url":"/models/blazeface.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":89289,"url":"/models/facemesh.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":122025,"url":"/models/iris.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":602812,"url":"/models/handtrack.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":129116,"url":"/models/handskeleton.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":17980,"url":"/models/emotion.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":71432,"url":"/models/faceres.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":538928,"url":"/models/blazeface.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":2955780,"url":"/models/facemesh.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":2599092,"url":"/models/iris.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":820516,"url":"/models/emotion.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":6978814,"url":"/models/faceres.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":5502280,"url":"/models/handskeleton.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:04:52 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":2964837,"url":"/models/handtrack.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7842,"url":"/?worker=false&async=false&bench=false&draw=true&warmup=full&backend=humangl","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":48289,"url":"/index.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":1879499,"url":"/dist/human.esm.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14222,"url":"/helpers/menu.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10894,"url":"/helpers/gl-bench.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3406,"url":"/helpers/webrtc.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5785,"url":"/helpers/jsonview.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:50 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4115,"url":"/index-pwa.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":79038,"url":"/models/blazeface.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":89289,"url":"/models/facemesh.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":122025,"url":"/models/iris.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":602812,"url":"/models/handtrack.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":129116,"url":"/models/handskeleton.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":161813,"url":"/models/movenet-lightning.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":17980,"url":"/models/emotion.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/json","size":71432,"url":"/models/faceres.json","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":820516,"url":"/models/emotion.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":538928,"url":"/models/blazeface.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":2955780,"url":"/models/facemesh.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":2599092,"url":"/models/iris.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":6978814,"url":"/models/faceres.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":5502280,"url":"/models/handskeleton.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":4650216,"url":"/models/movenet-lightning.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:05:51 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":2964837,"url":"/models/handtrack.bin","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":42321,"url":"/typedoc/index.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:25 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:27 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":42321,"url":"/typedoc/index.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:27 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:27 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:27 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:27 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:28 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:28 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:28 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:28 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:29 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":3241,"url":"/typedoc/modules/Tensor.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:29 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:29 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:29 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:29 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:29 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:29 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:29 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":3241,"url":"/typedoc/modules/Tensor.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":42321,"url":"/typedoc/index.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:41 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":43240,"url":"/typedoc/classes/Tensor.html","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:41 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":32529,"url":"/typedoc/assets/style.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:41 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":480,"url":"/typedoc/assets/highlight.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:41 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":43055,"url":"/typedoc/assets/main.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:41 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":100244,"url":"/typedoc/assets/search.js","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:41 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":35195,"url":"/typedoc/assets/icons.css","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:41 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":855,"url":"/typedoc/assets/widgets@2x.png","remote":"::ffff:192.168.0.200"} -2021-10-25 13:07:41 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":28144,"url":"/typedoc/assets/icons@2x.png","remote":"::ffff:192.168.0.200"} +2021-10-25 13:20:16 INFO:  @vladmandic/human version 2.4.1 +2021-10-25 13:20:16 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 +2021-10-25 13:20:16 INFO:  Application: {"name":"@vladmandic/human","version":"2.4.1"} +2021-10-25 13:20:16 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2021-10-25 13:20:16 INFO:  Toolchain: {"build":"0.6.3","esbuild":"0.13.9","typescript":"4.4.4","typedoc":"0.22.7","eslint":"8.1.0"} +2021-10-25 13:20:16 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2021-10-25 13:20:16 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2021-10-25 13:20:16 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":1275} +2021-10-25 13:20:16 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":55,"inputBytes":524815,"outputBytes":438967} +2021-10-25 13:20:16 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":1283} +2021-10-25 13:20:16 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":55,"inputBytes":524823,"outputBytes":438971} +2021-10-25 13:20:16 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":1350} +2021-10-25 13:20:16 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":55,"inputBytes":524890,"outputBytes":439043} +2021-10-25 13:20:16 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1652} +2021-10-25 13:20:16 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2323,"outputBytes":973} +2021-10-25 13:20:16 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":55,"inputBytes":524513,"outputBytes":440910} +2021-10-25 13:20:17 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2572202,"outputBytes":2491625} +2021-10-25 13:20:17 STATE: Compile: {"name":"human/browser/esm/custom","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.custom.esm.js","files":55,"inputBytes":3015165,"outputBytes":1607407} +2021-10-25 13:20:17 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":2323,"outputBytes":1155160} +2021-10-25 13:20:18 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":1678700,"outputBytes":1431091} +2021-10-25 13:20:18 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":1678700,"outputBytes":1879499} +2021-10-25 13:20:29 STATE: Typings: {"input":"src/human.ts","output":"types","files":96} +2021-10-25 13:20:34 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":48,"generated":true} +2021-10-25 13:21:01 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":91,"errors":0,"warnings":0} +2021-10-25 13:21:01 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2021-10-25 13:21:01 INFO:  Done... diff --git a/test/test-main.js b/test/test-main.js index 7cacb83e..269f27f8 100644 --- a/test/test-main.js +++ b/test/test-main.js @@ -240,7 +240,7 @@ async function test(Human, inputConfig) { res1 = human.similarity(desc1, desc1); res2 = human.similarity(desc1, desc2); res3 = human.similarity(desc1, desc3); - if (res1 < 1 || res2 < 0.9 || res3 < 0.85) log('error', 'failed: face similarity ', { similarity: [res1, res2, res3], descriptors: [desc1?.length, desc2?.length, desc3?.length] }); + if (res1 < 1 || res2 < 0.55 || res3 < 0.5) log('error', 'failed: face similarity', { similarity: [res1, res2, res3], descriptors: [desc1?.length, desc2?.length, desc3?.length] }); else log('state', 'passed: face similarity', { similarity: [res1, res2, res3], descriptors: [desc1?.length, desc2?.length, desc3?.length] }); // test face matching @@ -252,7 +252,7 @@ async function test(Human, inputConfig) { res1 = human.match(desc1, arr); res2 = human.match(desc2, arr); res3 = human.match(desc3, arr); - if (res1.index !== 4 || res2.index !== 4 || res3.index !== 4) log('error', 'failed: face match ', res1, res2, res3); + if (res1.index !== 4 || res2.index !== 4 || res3.index !== 4) log('error', 'failed: face match', res1, res2, res3); else log('state', 'passed: face match', { first: { index: res1.index, similarity: res1.similarity } }, { second: { index: res2.index, similarity: res2.similarity } }, { third: { index: res3.index, similarity: res3.similarity } }); // test object detection diff --git a/test/test.log b/test/test.log index 75e136ea..7cbb262a 100644 --- a/test/test.log +++ b/test/test.log @@ -1,509 +1,509 @@ -2021-10-23 09:36:39 INFO:  @vladmandic/human version 2.4.0 -2021-10-23 09:36:39 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 -2021-10-23 09:36:39 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2021-10-23 09:36:39 INFO:  demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"] -2021-10-23 09:36:39 INFO:  -2021-10-23 09:36:39 INFO:  test-node.js start -2021-10-23 09:36:40 STATE: test-node.js passed: configuration default validation [] -2021-10-23 09:36:40 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-23 09:36:41 STATE: test-node.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}] -2021-10-23 09:36:41 STATE: test-node.js passed: create human -2021-10-23 09:36:41 INFO:  test-node.js human version: 2.4.0 -2021-10-23 09:36:41 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-23 09:36:41 INFO:  test-node.js tfjs version: 3.10.0 -2021-10-23 09:36:41 STATE: test-node.js passed: set backend: tensorflow -2021-10-23 09:36:41 STATE: test-node.js tensors 1920 -2021-10-23 09:36:41 STATE: test-node.js passed: load models -2021-10-23 09:36:41 STATE: test-node.js result: defined models: 21 loaded models: 10 -2021-10-23 09:36:41 STATE: test-node.js passed: warmup: none default -2021-10-23 09:36:41 STATE: test-node.js passed: warmup none result match -2021-10-23 09:36:41 STATE: test-node.js event: image -2021-10-23 09:36:43 STATE: test-node.js event: detect -2021-10-23 09:36:43 STATE: test-node.js event: warmup -2021-10-23 09:36:43 STATE: test-node.js passed: warmup: face default -2021-10-23 09:36:43 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2021-10-23 09:36:43 DATA:  test-node.js result: performance: load: 457 total: 1995 -2021-10-23 09:36:43 STATE: test-node.js passed: warmup face result match -2021-10-23 09:36:43 STATE: test-node.js event: image -2021-10-23 09:36:44 STATE: test-node.js event: detect -2021-10-23 09:36:44 STATE: test-node.js event: warmup -2021-10-23 09:36:44 STATE: test-node.js passed: warmup: body default -2021-10-23 09:36:44 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:36:44 DATA:  test-node.js result: performance: load: 457 total: 1369 -2021-10-23 09:36:44 STATE: test-node.js passed: warmup body result match -2021-10-23 09:36:44 INFO:  test-node.js test default -2021-10-23 09:36:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:36:45 STATE: test-node.js event: image -2021-10-23 09:36:47 STATE: test-node.js event: detect -2021-10-23 09:36:47 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:36:47 DATA:  test-node.js result: performance: load: 457 total: 1350 -2021-10-23 09:36:47 STATE: test-node.js passed: default result face match -2021-10-23 09:36:47 INFO:  test-node.js test sync -2021-10-23 09:36:48 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:36:48 STATE: test-node.js event: image -2021-10-23 09:36:49 STATE: test-node.js event: detect -2021-10-23 09:36:49 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:36:49 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:36:49 DATA:  test-node.js result: performance: load: 457 total: 1354 -2021-10-23 09:36:49 STATE: test-node.js passed: default sync -2021-10-23 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:36:49 STATE: test-node.js passed: image input null [1,256,256,3] -2021-10-23 09:36:49 STATE: test-node.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-23 09:36:49 INFO:  test-node.js test face similarity -2021-10-23 09:36:49 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:36:49 STATE: test-node.js event: image -2021-10-23 09:36:50 STATE: test-node.js event: detect -2021-10-23 09:36:50 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:36:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2021-10-23 09:36:50 DATA:  test-node.js result: performance: load: 457 total: 1238 -2021-10-23 09:36:51 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:36:51 STATE: test-node.js event: image -2021-10-23 09:36:53 STATE: test-node.js event: detect -2021-10-23 09:36:53 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:36:53 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:36:53 DATA:  test-node.js result: performance: load: 457 total: 1438 -2021-10-23 09:36:53 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:36:53 STATE: test-node.js event: image -2021-10-23 09:36:54 STATE: test-node.js event: detect -2021-10-23 09:36:54 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:36:54 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2021-10-23 09:36:54 DATA:  test-node.js result: performance: load: 457 total: 1084 -2021-10-23 09:36:54 STATE: test-node.js passed: face descriptor -2021-10-23 09:36:54 STATE: test-node.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} -2021-10-23 09:36:54 INFO:  test-node.js test face matching -2021-10-23 09:36:54 STATE: test-node.js passed: face database 57 -2021-10-23 09:36:54 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}} -2021-10-23 09:36:54 INFO:  test-node.js test object -2021-10-23 09:36:55 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:36:55 STATE: test-node.js event: image -2021-10-23 09:36:56 STATE: test-node.js event: detect -2021-10-23 09:36:56 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:36:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:36:56 DATA:  test-node.js result: performance: load: 457 total: 1231 -2021-10-23 09:36:56 STATE: test-node.js passed: object result match -2021-10-23 09:36:56 INFO:  test-node.js test sensitive -2021-10-23 09:36:57 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:36:57 STATE: test-node.js event: image -2021-10-23 09:36:59 STATE: test-node.js event: detect -2021-10-23 09:36:59 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:36:59 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:36:59 DATA:  test-node.js result: performance: load: 457 total: 1408 -2021-10-23 09:36:59 STATE: test-node.js passed: sensitive result match -2021-10-23 09:36:59 STATE: test-node.js passed: sensitive face result match -2021-10-23 09:36:59 STATE: test-node.js passed: sensitive face emotion result mismatch 4 -2021-10-23 09:36:59 STATE: test-node.js passed: sensitive body result match -2021-10-23 09:36:59 STATE: test-node.js passed: sensitive hand result match -2021-10-23 09:36:59 INFO:  test-node.js test detectors -2021-10-23 09:37:00 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:00 STATE: test-node.js event: image -2021-10-23 09:37:01 STATE: test-node.js event: detect -2021-10-23 09:37:01 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:01 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:01 DATA:  test-node.js result: performance: load: 457 total: 867 -2021-10-23 09:37:01 STATE: test-node.js passed: detector result face match -2021-10-23 09:37:01 STATE: test-node.js passed: detector result hand match -2021-10-23 09:37:01 STATE: test-node.js event: image -2021-10-23 09:37:02 STATE: test-node.js event: detect -2021-10-23 09:37:02 STATE: test-node.js passed: detect: random default -2021-10-23 09:37:02 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2021-10-23 09:37:02 DATA:  test-node.js result: performance: load: 457 total: 843 -2021-10-23 09:37:02 INFO:  test-node.js test: first instance -2021-10-23 09:37:02 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:03 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:03 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:03 DATA:  test-node.js result: performance: load: 4 total: 816 -2021-10-23 09:37:03 INFO:  test-node.js test: second instance -2021-10-23 09:37:03 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:04 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:04 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:04 DATA:  test-node.js result: performance: load: 2 total: 819 -2021-10-23 09:37:04 INFO:  test-node.js test: concurrent -2021-10-23 09:37:04 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:37:04 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:37:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:06 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:06 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:07 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:07 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:37:08 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:08 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:09 STATE: test-node.js event: image -2021-10-23 09:37:09 STATE: test-node.js event: image -2021-10-23 09:37:09 STATE: test-node.js event: image -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 1367 total: 8866 -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 1367 total: 8866 -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 1367 total: 8870 -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 1367 total: 8870 -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 1367 total: 8870 -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 1367 total: 8870 -2021-10-23 09:37:16 STATE: test-node.js event: detect -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 2769 total: 7506 -2021-10-23 09:37:16 STATE: test-node.js event: detect -2021-10-23 09:37:16 STATE: test-node.js event: detect -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 2769 total: 7506 -2021-10-23 09:37:16 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:16 DATA:  test-node.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:16 DATA:  test-node.js result: performance: load: 2769 total: 7506 -2021-10-23 09:37:16 STATE: test-node.js event: image -2021-10-23 09:37:16 STATE: test-node.js event: detect -2021-10-23 09:37:16 STATE: test-node.js passed: monkey patch -2021-10-23 09:37:17 STATE: test-node.js passed: segmentation [65536] -2021-10-23 09:37:17 STATE: test-node.js passeed: equal usage -2021-10-23 09:37:17 INFO:  test-node.js events: {"image":15,"detect":15,"warmup":2} -2021-10-23 09:37:17 INFO:  test-node.js tensors 1924 -2021-10-23 09:37:17 INFO:  test-node.js test complete: 36160 ms -2021-10-23 09:37:17 INFO:  -2021-10-23 09:37:17 INFO:  test-node-gpu.js start -2021-10-23 09:37:18 STATE: test-node-gpu.js passed: configuration default validation [] -2021-10-23 09:37:18 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-23 09:37:19 STATE: test-node-gpu.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}] -2021-10-23 09:37:19 STATE: test-node-gpu.js passed: create human -2021-10-23 09:37:19 INFO:  test-node-gpu.js human version: 2.4.0 -2021-10-23 09:37:19 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-23 09:37:19 INFO:  test-node-gpu.js tfjs version: 3.10.0 -2021-10-23 09:37:19 STATE: test-node-gpu.js passed: set backend: tensorflow -2021-10-23 09:37:19 STATE: test-node-gpu.js tensors 1920 -2021-10-23 09:37:19 STATE: test-node-gpu.js passed: load models -2021-10-23 09:37:19 STATE: test-node-gpu.js result: defined models: 21 loaded models: 10 -2021-10-23 09:37:19 STATE: test-node-gpu.js passed: warmup: none default -2021-10-23 09:37:19 STATE: test-node-gpu.js passed: warmup none result match -2021-10-23 09:37:19 STATE: test-node-gpu.js event: image -2021-10-23 09:37:21 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:21 STATE: test-node-gpu.js event: warmup -2021-10-23 09:37:21 STATE: test-node-gpu.js passed: warmup: face default -2021-10-23 09:37:21 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2021-10-23 09:37:21 DATA:  test-node-gpu.js result: performance: load: 403 total: 1854 -2021-10-23 09:37:21 STATE: test-node-gpu.js passed: warmup face result match -2021-10-23 09:37:21 STATE: test-node-gpu.js event: image -2021-10-23 09:37:22 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:22 STATE: test-node-gpu.js event: warmup -2021-10-23 09:37:22 STATE: test-node-gpu.js passed: warmup: body default -2021-10-23 09:37:22 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:22 DATA:  test-node-gpu.js result: performance: load: 403 total: 1337 -2021-10-23 09:37:22 STATE: test-node-gpu.js passed: warmup body result match -2021-10-23 09:37:22 INFO:  test-node-gpu.js test default -2021-10-23 09:37:23 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:23 STATE: test-node-gpu.js event: image -2021-10-23 09:37:24 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:24 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:24 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:24 DATA:  test-node-gpu.js result: performance: load: 403 total: 1261 -2021-10-23 09:37:24 STATE: test-node-gpu.js passed: default result face match -2021-10-23 09:37:24 INFO:  test-node-gpu.js test sync -2021-10-23 09:37:25 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:25 STATE: test-node-gpu.js event: image -2021-10-23 09:37:27 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:27 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:27 DATA:  test-node-gpu.js result: performance: load: 403 total: 1371 -2021-10-23 09:37:27 STATE: test-node-gpu.js passed: default sync -2021-10-23 09:37:27 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:37:27 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2021-10-23 09:37:27 STATE: test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-23 09:37:27 INFO:  test-node-gpu.js test face similarity -2021-10-23 09:37:27 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:37:27 STATE: test-node-gpu.js event: image -2021-10-23 09:37:28 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:28 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:37:28 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2021-10-23 09:37:28 DATA:  test-node-gpu.js result: performance: load: 403 total: 1227 -2021-10-23 09:37:29 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:29 STATE: test-node-gpu.js event: image -2021-10-23 09:37:30 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:30 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:30 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:30 DATA:  test-node-gpu.js result: performance: load: 403 total: 1254 -2021-10-23 09:37:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:31 STATE: test-node-gpu.js event: image -2021-10-23 09:37:32 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:32 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:32 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2021-10-23 09:37:32 DATA:  test-node-gpu.js result: performance: load: 403 total: 1049 -2021-10-23 09:37:32 STATE: test-node-gpu.js passed: face descriptor -2021-10-23 09:37:32 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} -2021-10-23 09:37:32 INFO:  test-node-gpu.js test face matching -2021-10-23 09:37:32 STATE: test-node-gpu.js passed: face database 57 -2021-10-23 09:37:32 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}} -2021-10-23 09:37:32 INFO:  test-node-gpu.js test object -2021-10-23 09:37:33 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:33 STATE: test-node-gpu.js event: image -2021-10-23 09:37:34 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:34 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:34 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:34 DATA:  test-node-gpu.js result: performance: load: 403 total: 1233 -2021-10-23 09:37:34 STATE: test-node-gpu.js passed: object result match -2021-10-23 09:37:34 INFO:  test-node-gpu.js test sensitive -2021-10-23 09:37:35 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:35 STATE: test-node-gpu.js event: image -2021-10-23 09:37:36 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:36 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:36 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:36 DATA:  test-node-gpu.js result: performance: load: 403 total: 1404 -2021-10-23 09:37:36 STATE: test-node-gpu.js passed: sensitive result match -2021-10-23 09:37:36 STATE: test-node-gpu.js passed: sensitive face result match -2021-10-23 09:37:36 STATE: test-node-gpu.js passed: sensitive face emotion result mismatch 4 -2021-10-23 09:37:36 STATE: test-node-gpu.js passed: sensitive body result match -2021-10-23 09:37:36 STATE: test-node-gpu.js passed: sensitive hand result match -2021-10-23 09:37:36 INFO:  test-node-gpu.js test detectors -2021-10-23 09:37:37 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:37 STATE: test-node-gpu.js event: image -2021-10-23 09:37:38 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:38 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:38 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:38 DATA:  test-node-gpu.js result: performance: load: 403 total: 853 -2021-10-23 09:37:38 STATE: test-node-gpu.js passed: detector result face match -2021-10-23 09:37:38 STATE: test-node-gpu.js passed: detector result hand match -2021-10-23 09:37:38 STATE: test-node-gpu.js event: image -2021-10-23 09:37:39 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:39 STATE: test-node-gpu.js passed: detect: random default -2021-10-23 09:37:39 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2021-10-23 09:37:39 DATA:  test-node-gpu.js result: performance: load: 403 total: 799 -2021-10-23 09:37:39 INFO:  test-node-gpu.js test: first instance -2021-10-23 09:37:39 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:40 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:40 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:40 DATA:  test-node-gpu.js result: performance: load: 5 total: 826 -2021-10-23 09:37:40 INFO:  test-node-gpu.js test: second instance -2021-10-23 09:37:41 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:41 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:41 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:41 DATA:  test-node-gpu.js result: performance: load: 2 total: 779 -2021-10-23 09:37:41 INFO:  test-node-gpu.js test: concurrent -2021-10-23 09:37:41 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:37:41 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:37:42 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:44 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:44 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:44 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-23 09:37:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-23 09:37:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-23 09:37:46 STATE: test-node-gpu.js event: image -2021-10-23 09:37:46 STATE: test-node-gpu.js event: image -2021-10-23 09:37:46 STATE: test-node-gpu.js event: image -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 1339 total: 8652 -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 1339 total: 8652 -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 1339 total: 8656 -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 1339 total: 8656 -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 1339 total: 8656 -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 1339 total: 8656 -2021-10-23 09:37:53 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 2734 total: 7318 -2021-10-23 09:37:53 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:53 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 2734 total: 7318 -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-23 09:37:53 DATA:  test-node-gpu.js result: performance: load: 2734 total: 7318 -2021-10-23 09:37:53 STATE: test-node-gpu.js event: image -2021-10-23 09:37:53 STATE: test-node-gpu.js event: detect -2021-10-23 09:37:53 STATE: test-node-gpu.js passed: monkey patch -2021-10-23 09:37:54 STATE: test-node-gpu.js passed: segmentation [65536] -2021-10-23 09:37:54 STATE: test-node-gpu.js passeed: equal usage -2021-10-23 09:37:54 INFO:  test-node-gpu.js events: {"image":15,"detect":15,"warmup":2} -2021-10-23 09:37:54 INFO:  test-node-gpu.js tensors 1924 -2021-10-23 09:37:54 INFO:  test-node-gpu.js test complete: 35331 ms -2021-10-23 09:37:54 INFO:  -2021-10-23 09:37:54 INFO:  test-node-wasm.js start -2021-10-23 09:37:55 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2021-10-23 09:37:55 STATE: test-node-wasm.js passed: configuration default validation [] -2021-10-23 09:37:55 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-23 09:37:58 STATE: test-node-wasm.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}] -2021-10-23 09:37:58 STATE: test-node-wasm.js passed: create human -2021-10-23 09:37:58 INFO:  test-node-wasm.js human version: 2.4.0 -2021-10-23 09:37:58 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-23 09:37:58 INFO:  test-node-wasm.js tfjs version: 3.10.0 -2021-10-23 09:37:58 STATE: test-node-wasm.js passed: set backend: wasm -2021-10-23 09:37:58 STATE: test-node-wasm.js tensors 1920 -2021-10-23 09:37:58 STATE: test-node-wasm.js passed: load models -2021-10-23 09:37:58 STATE: test-node-wasm.js result: defined models: 21 loaded models: 10 -2021-10-23 09:37:58 STATE: test-node-wasm.js passed: warmup: none default -2021-10-23 09:37:58 STATE: test-node-wasm.js passed: warmup none result match -2021-10-23 09:37:58 STATE: test-node-wasm.js event: image -2021-10-23 09:38:00 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:00 STATE: test-node-wasm.js event: warmup -2021-10-23 09:38:00 STATE: test-node-wasm.js passed: warmup: face default -2021-10-23 09:38:00 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":3} -2021-10-23 09:38:00 DATA:  test-node-wasm.js result: performance: load: 3713 total: 1331 -2021-10-23 09:38:00 ERROR: test-node-wasm.js failed: warmup face result mismatch 1 1 1 5 -2021-10-23 09:38:00 STATE: test-node-wasm.js event: image -2021-10-23 09:38:01 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:01 STATE: test-node-wasm.js event: warmup -2021-10-23 09:38:01 STATE: test-node-wasm.js passed: warmup: body default -2021-10-23 09:38:01 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:01 DATA:  test-node-wasm.js result: performance: load: 3713 total: 968 -2021-10-23 09:38:01 STATE: test-node-wasm.js passed: warmup body result match -2021-10-23 09:38:01 INFO:  test-node-wasm.js test default -2021-10-23 09:38:03 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:03 STATE: test-node-wasm.js event: image -2021-10-23 09:38:04 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:04 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:04 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:04 DATA:  test-node-wasm.js result: performance: load: 3713 total: 1007 -2021-10-23 09:38:04 STATE: test-node-wasm.js passed: default result face match -2021-10-23 09:38:04 INFO:  test-node-wasm.js test sync -2021-10-23 09:38:06 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:06 STATE: test-node-wasm.js event: image -2021-10-23 09:38:07 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:07 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:07 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:07 DATA:  test-node-wasm.js result: performance: load: 3713 total: 998 -2021-10-23 09:38:07 STATE: test-node-wasm.js passed: default sync -2021-10-23 09:38:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-23 09:38:07 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2021-10-23 09:38:07 STATE: test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-23 09:38:07 INFO:  test-node-wasm.js test face similarity -2021-10-23 09:38:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-23 09:38:07 STATE: test-node-wasm.js event: image -2021-10-23 09:38:08 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:38:08 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.4,"gender":"female"} {} {"score":0.47,"keypoints":3} -2021-10-23 09:38:08 DATA:  test-node-wasm.js result: performance: load: 3713 total: 841 -2021-10-23 09:38:10 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:10 STATE: test-node-wasm.js event: image -2021-10-23 09:38:11 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:11 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:11 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:11 DATA:  test-node-wasm.js result: performance: load: 3713 total: 994 -2021-10-23 09:38:12 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-23 09:38:12 STATE: test-node-wasm.js event: image -2021-10-23 09:38:13 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:13 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:38:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 5 object: 0 person: 1 {"score":1,"age":29.5,"gender":"female"} {} {"score":0.75,"keypoints":7} -2021-10-23 09:38:13 DATA:  test-node-wasm.js result: performance: load: 3713 total: 750 -2021-10-23 09:38:13 STATE: test-node-wasm.js passed: face descriptor -2021-10-23 09:38:13 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.9040641336882139,0.895983704095898],"descriptors":[1024,1024,1024]} -2021-10-23 09:38:13 INFO:  test-node-wasm.js test face matching -2021-10-23 09:38:13 STATE: test-node-wasm.js passed: face database 57 -2021-10-23 09:38:13 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.9902354470817274}} {"second":{"index":4,"similarity":0.9045213429149392}} {"third":{"index":4,"similarity":0.8965257196777969}} -2021-10-23 09:38:13 INFO:  test-node-wasm.js test object -2021-10-23 09:38:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:15 STATE: test-node-wasm.js event: image -2021-10-23 09:38:16 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:16 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:16 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:16 DATA:  test-node-wasm.js result: performance: load: 3713 total: 992 -2021-10-23 09:38:16 ERROR: test-node-wasm.js failed: object result mismatch 0 -2021-10-23 09:38:16 INFO:  test-node-wasm.js test sensitive -2021-10-23 09:38:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:18 STATE: test-node-wasm.js event: image -2021-10-23 09:38:19 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:19 DATA:  test-node-wasm.js result: performance: load: 3713 total: 1156 -2021-10-23 09:38:19 STATE: test-node-wasm.js passed: sensitive result match -2021-10-23 09:38:19 STATE: test-node-wasm.js passed: sensitive face result match -2021-10-23 09:38:19 ERROR: test-node-wasm.js failed: sensitive face emotion result mismatch 3 -2021-10-23 09:38:19 STATE: test-node-wasm.js passed: sensitive body result match -2021-10-23 09:38:19 STATE: test-node-wasm.js passed: sensitive hand result match -2021-10-23 09:38:19 INFO:  test-node-wasm.js test detectors -2021-10-23 09:38:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:21 STATE: test-node-wasm.js event: image -2021-10-23 09:38:21 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:21 DATA:  test-node-wasm.js result: performance: load: 3713 total: 426 -2021-10-23 09:38:21 STATE: test-node-wasm.js passed: detector result face match -2021-10-23 09:38:21 STATE: test-node-wasm.js passed: detector result hand match -2021-10-23 09:38:21 STATE: test-node-wasm.js event: image -2021-10-23 09:38:22 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:22 STATE: test-node-wasm.js passed: detect: random default -2021-10-23 09:38:22 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 2 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2021-10-23 09:38:22 DATA:  test-node-wasm.js result: performance: load: 3713 total: 400 -2021-10-23 09:38:22 INFO:  test-node-wasm.js test: first instance -2021-10-23 09:38:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-23 09:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16} -2021-10-23 09:38:23 DATA:  test-node-wasm.js result: performance: load: 2 total: 397 -2021-10-23 09:38:23 INFO:  test-node-wasm.js test: second instance -2021-10-23 09:38:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-23 09:38:24 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:38:24 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16} -2021-10-23 09:38:24 DATA:  test-node-wasm.js result: performance: load: 3 total: 399 -2021-10-23 09:38:24 INFO:  test-node-wasm.js test: concurrent -2021-10-23 09:38:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-23 09:38:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-23 09:38:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-23 09:38:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-23 09:38:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-23 09:38:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-23 09:38:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-23 09:38:33 STATE: test-node-wasm.js event: image -2021-10-23 09:38:33 STATE: test-node-wasm.js event: image -2021-10-23 09:38:33 STATE: test-node-wasm.js event: image -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 2764 total: 6558 -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 0 person: 2 {"score":0.96} {} {"score":0.75,"keypoints":16} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 2764 total: 6558 -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 0 person: 1 {"score":0.91} {} {"score":0.47,"keypoints":17} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 2764 total: 6560 -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 0 person: 2 {"score":0.91} {} {"score":0.47,"keypoints":17} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 2764 total: 6560 -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 2764 total: 6560 -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 2764 total: 6560 -2021-10-23 09:38:36 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 0 person: 5 {"score":0.96} {} {"score":0.75,"keypoints":16} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 5445 total: 3797 -2021-10-23 09:38:36 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:36 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 0 person: 3 {"score":0.96} {} {"score":0.47,"keypoints":17} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 5445 total: 3798 -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 0 person: 4 {"score":0.96} {} {"score":0.92,"keypoints":17} -2021-10-23 09:38:36 DATA:  test-node-wasm.js result: performance: load: 5445 total: 3798 -2021-10-23 09:38:36 STATE: test-node-wasm.js event: image -2021-10-23 09:38:36 STATE: test-node-wasm.js event: detect -2021-10-23 09:38:36 STATE: test-node-wasm.js passed: monkey patch -2021-10-23 09:38:37 STATE: test-node-wasm.js passed: segmentation [65536] -2021-10-23 09:38:37 STATE: test-node-wasm.js passeed: equal usage -2021-10-23 09:38:37 INFO:  test-node-wasm.js events: {"image":15,"detect":15,"warmup":2} -2021-10-23 09:38:37 INFO:  test-node-wasm.js tensors 1926 -2021-10-23 09:38:37 INFO:  test-node-wasm.js test complete: 41946 ms -2021-10-23 09:38:37 INFO:  -2021-10-23 09:38:37 INFO:  failed [{"test":"test-node-wasm.js","data":["error",["failed: warmup face result mismatch",1,1,1,5]]},{"test":"test-node-wasm.js","data":["error",["failed: object result mismatch",0]]},{"test":"test-node-wasm.js","data":["error",["failed: sensitive face emotion result mismatch",3]]}] -2021-10-23 09:38:37 INFO:  status: {"test-node.js":{"passed":70,"failed":0},"test-node-gpu.js":{"passed":70,"failed":0},"test-node-wasm.js":{"passed":68,"failed":3}} +2021-10-25 13:27:33 INFO:  @vladmandic/human version 2.4.1 +2021-10-25 13:27:33 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 +2021-10-25 13:27:33 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2021-10-25 13:27:33 INFO:  demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"] +2021-10-25 13:27:33 INFO:  +2021-10-25 13:27:33 INFO:  test-node.js start +2021-10-25 13:27:33 STATE: test-node.js passed: configuration default validation [] +2021-10-25 13:27:33 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-25 13:27:33 STATE: test-node.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}] +2021-10-25 13:27:33 STATE: test-node.js passed: create human +2021-10-25 13:27:33 INFO:  test-node.js human version: 2.4.1 +2021-10-25 13:27:33 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-25 13:27:33 INFO:  test-node.js tfjs version: 3.10.0 +2021-10-25 13:27:33 STATE: test-node.js passed: set backend: tensorflow +2021-10-25 13:27:33 STATE: test-node.js tensors 1920 +2021-10-25 13:27:33 STATE: test-node.js passed: load models +2021-10-25 13:27:33 STATE: test-node.js result: defined models: 21 loaded models: 10 +2021-10-25 13:27:33 STATE: test-node.js passed: warmup: none default +2021-10-25 13:27:33 STATE: test-node.js passed: warmup none result match +2021-10-25 13:27:33 STATE: test-node.js event: image +2021-10-25 13:27:34 STATE: test-node.js event: detect +2021-10-25 13:27:34 STATE: test-node.js event: warmup +2021-10-25 13:27:34 STATE: test-node.js passed: warmup: face default +2021-10-25 13:27:34 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2021-10-25 13:27:34 DATA:  test-node.js result: performance: load: 263 total: 711 +2021-10-25 13:27:34 STATE: test-node.js passed: warmup face result match +2021-10-25 13:27:34 STATE: test-node.js event: image +2021-10-25 13:27:35 STATE: test-node.js event: detect +2021-10-25 13:27:35 STATE: test-node.js event: warmup +2021-10-25 13:27:35 STATE: test-node.js passed: warmup: body default +2021-10-25 13:27:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:35 DATA:  test-node.js result: performance: load: 263 total: 592 +2021-10-25 13:27:35 STATE: test-node.js passed: warmup body result match +2021-10-25 13:27:35 INFO:  test-node.js test default +2021-10-25 13:27:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:35 STATE: test-node.js event: image +2021-10-25 13:27:36 STATE: test-node.js event: detect +2021-10-25 13:27:36 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:36 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:36 DATA:  test-node.js result: performance: load: 263 total: 561 +2021-10-25 13:27:36 STATE: test-node.js passed: default result face match +2021-10-25 13:27:36 INFO:  test-node.js test sync +2021-10-25 13:27:36 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:36 STATE: test-node.js event: image +2021-10-25 13:27:37 STATE: test-node.js event: detect +2021-10-25 13:27:37 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:37 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:37 DATA:  test-node.js result: performance: load: 263 total: 542 +2021-10-25 13:27:37 STATE: test-node.js passed: default sync +2021-10-25 13:27:37 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:27:37 STATE: test-node.js passed: image input null [1,256,256,3] +2021-10-25 13:27:37 STATE: test-node.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-25 13:27:37 INFO:  test-node.js test face similarity +2021-10-25 13:27:37 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:27:37 STATE: test-node.js event: image +2021-10-25 13:27:38 STATE: test-node.js event: detect +2021-10-25 13:27:38 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:27:38 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2021-10-25 13:27:38 DATA:  test-node.js result: performance: load: 263 total: 526 +2021-10-25 13:27:38 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:38 STATE: test-node.js event: image +2021-10-25 13:27:39 STATE: test-node.js event: detect +2021-10-25 13:27:39 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:39 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:39 DATA:  test-node.js result: performance: load: 263 total: 526 +2021-10-25 13:27:39 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:27:39 STATE: test-node.js event: image +2021-10-25 13:27:39 STATE: test-node.js event: detect +2021-10-25 13:27:39 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:27:39 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2021-10-25 13:27:39 DATA:  test-node.js result: performance: load: 263 total: 451 +2021-10-25 13:27:39 STATE: test-node.js passed: face descriptor +2021-10-25 13:27:39 STATE: test-node.js passed: face similarity {"similarity":[1,0.5617466241063369,0.5402186421087815],"descriptors":[1024,1024,1024]} +2021-10-25 13:27:39 INFO:  test-node.js test face matching +2021-10-25 13:27:39 STATE: test-node.js passed: face database 57 +2021-10-25 13:27:39 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.7931148154915015}} {"second":{"index":4,"similarity":0.5655402518331422}} {"third":{"index":4,"similarity":0.5621635689797688}} +2021-10-25 13:27:39 INFO:  test-node.js test object +2021-10-25 13:27:40 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:40 STATE: test-node.js event: image +2021-10-25 13:27:41 STATE: test-node.js event: detect +2021-10-25 13:27:41 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:41 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:41 DATA:  test-node.js result: performance: load: 263 total: 565 +2021-10-25 13:27:41 STATE: test-node.js passed: object result match +2021-10-25 13:27:41 INFO:  test-node.js test sensitive +2021-10-25 13:27:41 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:41 STATE: test-node.js event: image +2021-10-25 13:27:42 STATE: test-node.js event: detect +2021-10-25 13:27:42 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:42 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:42 DATA:  test-node.js result: performance: load: 263 total: 688 +2021-10-25 13:27:42 STATE: test-node.js passed: sensitive result match +2021-10-25 13:27:42 STATE: test-node.js passed: sensitive face result match +2021-10-25 13:27:42 STATE: test-node.js passed: sensitive face emotion result mismatch 4 +2021-10-25 13:27:42 STATE: test-node.js passed: sensitive body result match +2021-10-25 13:27:42 STATE: test-node.js passed: sensitive hand result match +2021-10-25 13:27:42 INFO:  test-node.js test detectors +2021-10-25 13:27:42 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:42 STATE: test-node.js event: image +2021-10-25 13:27:43 STATE: test-node.js event: detect +2021-10-25 13:27:43 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:43 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:43 DATA:  test-node.js result: performance: load: 263 total: 354 +2021-10-25 13:27:43 STATE: test-node.js passed: detector result face match +2021-10-25 13:27:43 STATE: test-node.js passed: detector result hand match +2021-10-25 13:27:43 STATE: test-node.js event: image +2021-10-25 13:27:43 STATE: test-node.js event: detect +2021-10-25 13:27:43 STATE: test-node.js passed: detect: random default +2021-10-25 13:27:43 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.08,"keypoints":15} +2021-10-25 13:27:43 DATA:  test-node.js result: performance: load: 263 total: 336 +2021-10-25 13:27:43 INFO:  test-node.js test: first instance +2021-10-25 13:27:44 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:27:44 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:27:44 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:27:44 DATA:  test-node.js result: performance: load: 2 total: 345 +2021-10-25 13:27:44 INFO:  test-node.js test: second instance +2021-10-25 13:27:44 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:27:44 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:27:44 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:27:44 DATA:  test-node.js result: performance: load: 2 total: 344 +2021-10-25 13:27:44 INFO:  test-node.js test: concurrent +2021-10-25 13:27:44 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:27:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:27:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:46 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:46 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:27:46 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:27:46 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:27:47 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:47 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:27:47 STATE: test-node.js event: image +2021-10-25 13:27:47 STATE: test-node.js event: image +2021-10-25 13:27:47 STATE: test-node.js event: image +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 889 total: 3990 +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 889 total: 3990 +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 889 total: 3993 +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 889 total: 3993 +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 889 total: 3993 +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 889 total: 3993 +2021-10-25 13:27:50 STATE: test-node.js event: detect +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 1690 total: 3103 +2021-10-25 13:27:50 STATE: test-node.js event: detect +2021-10-25 13:27:50 STATE: test-node.js event: detect +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 1690 total: 3104 +2021-10-25 13:27:50 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:50 DATA:  test-node.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:50 DATA:  test-node.js result: performance: load: 1690 total: 3104 +2021-10-25 13:27:50 STATE: test-node.js event: image +2021-10-25 13:27:50 STATE: test-node.js event: detect +2021-10-25 13:27:50 STATE: test-node.js passed: monkey patch +2021-10-25 13:27:51 STATE: test-node.js passed: segmentation [65536] +2021-10-25 13:27:51 STATE: test-node.js passeed: equal usage +2021-10-25 13:27:51 INFO:  test-node.js events: {"image":15,"detect":15,"warmup":2} +2021-10-25 13:27:51 INFO:  test-node.js tensors 1924 +2021-10-25 13:27:51 INFO:  test-node.js test complete: 17451 ms +2021-10-25 13:27:51 INFO:  +2021-10-25 13:27:51 INFO:  test-node-gpu.js start +2021-10-25 13:27:51 STATE: test-node-gpu.js passed: configuration default validation [] +2021-10-25 13:27:51 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-25 13:27:51 STATE: test-node-gpu.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}] +2021-10-25 13:27:51 STATE: test-node-gpu.js passed: create human +2021-10-25 13:27:51 INFO:  test-node-gpu.js human version: 2.4.1 +2021-10-25 13:27:51 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-25 13:27:51 INFO:  test-node-gpu.js tfjs version: 3.10.0 +2021-10-25 13:27:51 STATE: test-node-gpu.js passed: set backend: tensorflow +2021-10-25 13:27:51 STATE: test-node-gpu.js tensors 1920 +2021-10-25 13:27:51 STATE: test-node-gpu.js passed: load models +2021-10-25 13:27:51 STATE: test-node-gpu.js result: defined models: 21 loaded models: 10 +2021-10-25 13:27:51 STATE: test-node-gpu.js passed: warmup: none default +2021-10-25 13:27:51 STATE: test-node-gpu.js passed: warmup none result match +2021-10-25 13:27:51 STATE: test-node-gpu.js event: image +2021-10-25 13:27:52 STATE: test-node-gpu.js event: detect +2021-10-25 13:27:52 STATE: test-node-gpu.js event: warmup +2021-10-25 13:27:52 STATE: test-node-gpu.js passed: warmup: face default +2021-10-25 13:27:52 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2021-10-25 13:27:52 DATA:  test-node-gpu.js result: performance: load: 264 total: 714 +2021-10-25 13:27:52 STATE: test-node-gpu.js passed: warmup face result match +2021-10-25 13:27:52 STATE: test-node-gpu.js event: image +2021-10-25 13:27:53 STATE: test-node-gpu.js event: detect +2021-10-25 13:27:53 STATE: test-node-gpu.js event: warmup +2021-10-25 13:27:53 STATE: test-node-gpu.js passed: warmup: body default +2021-10-25 13:27:53 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:53 DATA:  test-node-gpu.js result: performance: load: 264 total: 596 +2021-10-25 13:27:53 STATE: test-node-gpu.js passed: warmup body result match +2021-10-25 13:27:53 INFO:  test-node-gpu.js test default +2021-10-25 13:27:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:53 STATE: test-node-gpu.js event: image +2021-10-25 13:27:54 STATE: test-node-gpu.js event: detect +2021-10-25 13:27:54 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:54 DATA:  test-node-gpu.js result: performance: load: 264 total: 558 +2021-10-25 13:27:54 STATE: test-node-gpu.js passed: default result face match +2021-10-25 13:27:54 INFO:  test-node-gpu.js test sync +2021-10-25 13:27:54 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:54 STATE: test-node-gpu.js event: image +2021-10-25 13:27:55 STATE: test-node-gpu.js event: detect +2021-10-25 13:27:55 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:55 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:55 DATA:  test-node-gpu.js result: performance: load: 264 total: 546 +2021-10-25 13:27:55 STATE: test-node-gpu.js passed: default sync +2021-10-25 13:27:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:27:55 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2021-10-25 13:27:55 STATE: test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-25 13:27:55 INFO:  test-node-gpu.js test face similarity +2021-10-25 13:27:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:27:55 STATE: test-node-gpu.js event: image +2021-10-25 13:27:55 STATE: test-node-gpu.js event: detect +2021-10-25 13:27:55 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:27:55 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2021-10-25 13:27:55 DATA:  test-node-gpu.js result: performance: load: 264 total: 517 +2021-10-25 13:27:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:56 STATE: test-node-gpu.js event: image +2021-10-25 13:27:57 STATE: test-node-gpu.js event: detect +2021-10-25 13:27:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:57 DATA:  test-node-gpu.js result: performance: load: 264 total: 530 +2021-10-25 13:27:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:27:57 STATE: test-node-gpu.js event: image +2021-10-25 13:27:57 STATE: test-node-gpu.js event: detect +2021-10-25 13:27:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:27:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2021-10-25 13:27:57 DATA:  test-node-gpu.js result: performance: load: 264 total: 457 +2021-10-25 13:27:57 STATE: test-node-gpu.js passed: face descriptor +2021-10-25 13:27:57 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.5617466241063369,0.5402186421087815],"descriptors":[1024,1024,1024]} +2021-10-25 13:27:57 INFO:  test-node-gpu.js test face matching +2021-10-25 13:27:57 STATE: test-node-gpu.js passed: face database 57 +2021-10-25 13:27:57 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7931148154915015}} {"second":{"index":4,"similarity":0.5655402518331422}} {"third":{"index":4,"similarity":0.5621635689797688}} +2021-10-25 13:27:57 INFO:  test-node-gpu.js test object +2021-10-25 13:27:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:58 STATE: test-node-gpu.js event: image +2021-10-25 13:27:58 STATE: test-node-gpu.js event: detect +2021-10-25 13:27:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:27:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:27:58 DATA:  test-node-gpu.js result: performance: load: 264 total: 524 +2021-10-25 13:27:58 STATE: test-node-gpu.js passed: object result match +2021-10-25 13:27:58 INFO:  test-node-gpu.js test sensitive +2021-10-25 13:27:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:27:59 STATE: test-node-gpu.js event: image +2021-10-25 13:28:00 STATE: test-node-gpu.js event: detect +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:28:00 DATA:  test-node-gpu.js result: performance: load: 264 total: 592 +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: sensitive result match +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: sensitive face result match +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: sensitive face emotion result mismatch 4 +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: sensitive body result match +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: sensitive hand result match +2021-10-25 13:28:00 INFO:  test-node-gpu.js test detectors +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:28:00 STATE: test-node-gpu.js event: image +2021-10-25 13:28:00 STATE: test-node-gpu.js event: detect +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:28:00 DATA:  test-node-gpu.js result: performance: load: 264 total: 348 +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: detector result face match +2021-10-25 13:28:00 STATE: test-node-gpu.js passed: detector result hand match +2021-10-25 13:28:01 STATE: test-node-gpu.js event: image +2021-10-25 13:28:01 STATE: test-node-gpu.js event: detect +2021-10-25 13:28:01 STATE: test-node-gpu.js passed: detect: random default +2021-10-25 13:28:01 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} +2021-10-25 13:28:01 DATA:  test-node-gpu.js result: performance: load: 264 total: 335 +2021-10-25 13:28:01 INFO:  test-node-gpu.js test: first instance +2021-10-25 13:28:01 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:28:01 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:01 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:28:01 DATA:  test-node-gpu.js result: performance: load: 2 total: 347 +2021-10-25 13:28:01 INFO:  test-node-gpu.js test: second instance +2021-10-25 13:28:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:28:02 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:02 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:28:02 DATA:  test-node-gpu.js result: performance: load: 1 total: 348 +2021-10-25 13:28:02 INFO:  test-node-gpu.js test: concurrent +2021-10-25 13:28:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:28:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:28:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:28:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:28:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:28:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:28:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-25 13:28:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-25 13:28:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-25 13:28:05 STATE: test-node-gpu.js event: image +2021-10-25 13:28:05 STATE: test-node-gpu.js event: image +2021-10-25 13:28:05 STATE: test-node-gpu.js event: image +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 847 total: 4007 +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 847 total: 4007 +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 847 total: 4010 +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 847 total: 4010 +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 847 total: 4010 +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 847 total: 4010 +2021-10-25 13:28:08 STATE: test-node-gpu.js event: detect +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 1643 total: 3163 +2021-10-25 13:28:08 STATE: test-node-gpu.js event: detect +2021-10-25 13:28:08 STATE: test-node-gpu.js event: detect +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 1643 total: 3163 +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-25 13:28:08 DATA:  test-node-gpu.js result: performance: load: 1643 total: 3163 +2021-10-25 13:28:08 STATE: test-node-gpu.js event: image +2021-10-25 13:28:08 STATE: test-node-gpu.js event: detect +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: monkey patch +2021-10-25 13:28:08 STATE: test-node-gpu.js passed: segmentation [65536] +2021-10-25 13:28:08 STATE: test-node-gpu.js passeed: equal usage +2021-10-25 13:28:08 INFO:  test-node-gpu.js events: {"image":15,"detect":15,"warmup":2} +2021-10-25 13:28:08 INFO:  test-node-gpu.js tensors 1924 +2021-10-25 13:28:08 INFO:  test-node-gpu.js test complete: 17184 ms +2021-10-25 13:28:08 INFO:  +2021-10-25 13:28:08 INFO:  test-node-wasm.js start +2021-10-25 13:28:09 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2021-10-25 13:28:09 STATE: test-node-wasm.js passed: configuration default validation [] +2021-10-25 13:28:09 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-25 13:28:12 STATE: test-node-wasm.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}] +2021-10-25 13:28:12 STATE: test-node-wasm.js passed: create human +2021-10-25 13:28:12 INFO:  test-node-wasm.js human version: 2.4.1 +2021-10-25 13:28:12 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-25 13:28:12 INFO:  test-node-wasm.js tfjs version: 3.10.0 +2021-10-25 13:28:12 STATE: test-node-wasm.js passed: set backend: wasm +2021-10-25 13:28:12 STATE: test-node-wasm.js tensors 1920 +2021-10-25 13:28:12 STATE: test-node-wasm.js passed: load models +2021-10-25 13:28:12 STATE: test-node-wasm.js result: defined models: 21 loaded models: 10 +2021-10-25 13:28:12 STATE: test-node-wasm.js passed: warmup: none default +2021-10-25 13:28:12 STATE: test-node-wasm.js passed: warmup none result match +2021-10-25 13:28:12 STATE: test-node-wasm.js event: image +2021-10-25 13:28:13 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:13 STATE: test-node-wasm.js event: warmup +2021-10-25 13:28:13 STATE: test-node-wasm.js passed: warmup: face default +2021-10-25 13:28:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":3} +2021-10-25 13:28:13 DATA:  test-node-wasm.js result: performance: load: 3329 total: 832 +2021-10-25 13:28:13 ERROR: test-node-wasm.js failed: warmup face result mismatch 1 1 1 5 +2021-10-25 13:28:13 STATE: test-node-wasm.js event: image +2021-10-25 13:28:13 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:13 STATE: test-node-wasm.js event: warmup +2021-10-25 13:28:13 STATE: test-node-wasm.js passed: warmup: body default +2021-10-25 13:28:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:13 DATA:  test-node-wasm.js result: performance: load: 3329 total: 561 +2021-10-25 13:28:13 STATE: test-node-wasm.js passed: warmup body result match +2021-10-25 13:28:13 INFO:  test-node-wasm.js test default +2021-10-25 13:28:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:15 STATE: test-node-wasm.js event: image +2021-10-25 13:28:15 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:15 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:15 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:15 DATA:  test-node-wasm.js result: performance: load: 3329 total: 601 +2021-10-25 13:28:15 STATE: test-node-wasm.js passed: default result face match +2021-10-25 13:28:15 INFO:  test-node-wasm.js test sync +2021-10-25 13:28:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:17 STATE: test-node-wasm.js event: image +2021-10-25 13:28:17 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:17 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:17 DATA:  test-node-wasm.js result: performance: load: 3329 total: 612 +2021-10-25 13:28:17 STATE: test-node-wasm.js passed: default sync +2021-10-25 13:28:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-25 13:28:17 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2021-10-25 13:28:17 STATE: test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-25 13:28:17 INFO:  test-node-wasm.js test face similarity +2021-10-25 13:28:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-25 13:28:17 STATE: test-node-wasm.js event: image +2021-10-25 13:28:18 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:28:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.4,"gender":"female"} {} {"score":0.47,"keypoints":3} +2021-10-25 13:28:18 DATA:  test-node-wasm.js result: performance: load: 3329 total: 520 +2021-10-25 13:28:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:19 STATE: test-node-wasm.js event: image +2021-10-25 13:28:20 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:20 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:20 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:20 DATA:  test-node-wasm.js result: performance: load: 3329 total: 605 +2021-10-25 13:28:20 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-25 13:28:20 STATE: test-node-wasm.js event: image +2021-10-25 13:28:21 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 5 object: 0 person: 1 {"score":1,"age":29.5,"gender":"female"} {} {"score":0.75,"keypoints":7} +2021-10-25 13:28:21 DATA:  test-node-wasm.js result: performance: load: 3329 total: 476 +2021-10-25 13:28:21 STATE: test-node-wasm.js passed: face descriptor +2021-10-25 13:28:21 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5709617628930286,0.5348249831813904],"descriptors":[1024,1024,1024]} +2021-10-25 13:28:21 INFO:  test-node-wasm.js test face matching +2021-10-25 13:28:21 STATE: test-node-wasm.js passed: face database 57 +2021-10-25 13:28:21 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.9563315918096965}} {"second":{"index":4,"similarity":0.5730064647148242}} {"third":{"index":4,"similarity":0.53724895055337}} +2021-10-25 13:28:21 INFO:  test-node-wasm.js test object +2021-10-25 13:28:22 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:22 STATE: test-node-wasm.js event: image +2021-10-25 13:28:23 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:23 DATA:  test-node-wasm.js result: performance: load: 3329 total: 644 +2021-10-25 13:28:23 ERROR: test-node-wasm.js failed: object result mismatch 0 +2021-10-25 13:28:23 INFO:  test-node-wasm.js test sensitive +2021-10-25 13:28:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:24 STATE: test-node-wasm.js event: image +2021-10-25 13:28:25 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:25 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:25 DATA:  test-node-wasm.js result: performance: load: 3329 total: 766 +2021-10-25 13:28:25 STATE: test-node-wasm.js passed: sensitive result match +2021-10-25 13:28:25 STATE: test-node-wasm.js passed: sensitive face result match +2021-10-25 13:28:25 ERROR: test-node-wasm.js failed: sensitive face emotion result mismatch 3 +2021-10-25 13:28:25 STATE: test-node-wasm.js passed: sensitive body result match +2021-10-25 13:28:25 STATE: test-node-wasm.js passed: sensitive hand result match +2021-10-25 13:28:25 INFO:  test-node-wasm.js test detectors +2021-10-25 13:28:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:26 STATE: test-node-wasm.js event: image +2021-10-25 13:28:26 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:26 DATA:  test-node-wasm.js result: performance: load: 3329 total: 242 +2021-10-25 13:28:26 STATE: test-node-wasm.js passed: detector result face match +2021-10-25 13:28:26 STATE: test-node-wasm.js passed: detector result hand match +2021-10-25 13:28:26 STATE: test-node-wasm.js event: image +2021-10-25 13:28:27 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:27 STATE: test-node-wasm.js passed: detect: random default +2021-10-25 13:28:27 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.08,"keypoints":15} +2021-10-25 13:28:27 DATA:  test-node-wasm.js result: performance: load: 3329 total: 217 +2021-10-25 13:28:27 INFO:  test-node-wasm.js test: first instance +2021-10-25 13:28:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-25 13:28:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16} +2021-10-25 13:28:27 DATA:  test-node-wasm.js result: performance: load: 2 total: 266 +2021-10-25 13:28:27 INFO:  test-node-wasm.js test: second instance +2021-10-25 13:28:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-25 13:28:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16} +2021-10-25 13:28:28 DATA:  test-node-wasm.js result: performance: load: 2 total: 271 +2021-10-25 13:28:28 INFO:  test-node-wasm.js test: concurrent +2021-10-25 13:28:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-25 13:28:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-25 13:28:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-25 13:28:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-25 13:28:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-25 13:28:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-25 13:28:34 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-25 13:28:34 STATE: test-node-wasm.js event: image +2021-10-25 13:28:34 STATE: test-node-wasm.js event: image +2021-10-25 13:28:34 STATE: test-node-wasm.js event: image +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 1824 total: 3907 +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 0 person: 2 {"score":0.96} {} {"score":0.75,"keypoints":16} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 1824 total: 3907 +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 0 person: 1 {"score":0.91} {} {"score":0.47,"keypoints":17} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 1824 total: 3908 +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 0 person: 2 {"score":0.91} {} {"score":0.47,"keypoints":17} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 1824 total: 3908 +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 1824 total: 3908 +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 1824 total: 3908 +2021-10-25 13:28:36 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 0 person: 5 {"score":0.96} {} {"score":0.75,"keypoints":16} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 3824 total: 2084 +2021-10-25 13:28:36 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:36 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 0 person: 3 {"score":0.96} {} {"score":0.47,"keypoints":17} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 3824 total: 2085 +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 0 person: 4 {"score":0.96} {} {"score":0.92,"keypoints":17} +2021-10-25 13:28:36 DATA:  test-node-wasm.js result: performance: load: 3824 total: 2085 +2021-10-25 13:28:36 STATE: test-node-wasm.js event: image +2021-10-25 13:28:36 STATE: test-node-wasm.js event: detect +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: monkey patch +2021-10-25 13:28:36 STATE: test-node-wasm.js passed: segmentation [65536] +2021-10-25 13:28:36 STATE: test-node-wasm.js passeed: equal usage +2021-10-25 13:28:36 INFO:  test-node-wasm.js events: {"image":15,"detect":15,"warmup":2} +2021-10-25 13:28:36 INFO:  test-node-wasm.js tensors 1926 +2021-10-25 13:28:36 INFO:  test-node-wasm.js test complete: 27661 ms +2021-10-25 13:28:36 INFO:  +2021-10-25 13:28:36 INFO:  failed [{"test":"test-node-wasm.js","data":["error",["failed: warmup face result mismatch",1,1,1,5]]},{"test":"test-node-wasm.js","data":["error",["failed: object result mismatch",0]]},{"test":"test-node-wasm.js","data":["error",["failed: sensitive face emotion result mismatch",3]]}] +2021-10-25 13:28:36 INFO:  status: {"test-node.js":{"passed":70,"failed":0},"test-node-gpu.js":{"passed":70,"failed":0},"test-node-wasm.js":{"passed":68,"failed":3}} diff --git a/typedoc/classes/Env.html b/typedoc/classes/Env.html index b0e91c22..76894d6b 100644 --- a/typedoc/classes/Env.html +++ b/typedoc/classes/Env.html @@ -1,4 +1,4 @@ -Env | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu
+Env | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Env class that holds detected capabilities

Hierarchy

  • Env

Index

Constructors

constructor

Properties

Canvas

Canvas: undefined

MonkeyPatch for Canvas

diff --git a/typedoc/classes/Human.html b/typedoc/classes/Human.html index aa3ab79d..dbcd4348 100644 --- a/typedoc/classes/Human.html +++ b/typedoc/classes/Human.html @@ -1,4 +1,4 @@ -Human | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu
+Human | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Human* library main class

All methods and properties are available only as members of Human class

Events

Events: "create" | "load" | "image" | "result" | "warmup" | "error"

Events dispatched by human.events

  • create: triggered when Human object is instantiated
  • @@ -59,13 +59,13 @@
  • result: triggered when detection is complete
  • warmup: triggered when warmup is complete
-

ExternalCanvas

ExternalCanvas: typeof Canvas
+

ExternalCanvas

ExternalCanvas: typeof Canvas

Defines possible externally defined canvas

FaceGesture

FaceGesture: `facing ${"left" | "center" | "right"}` | `blink ${"left" | "right"} eye` | `mouth ${number}% open` | `head ${"up" | "down"}`

GestureResult

GestureResult: { face: number; gesture: FaceGesture } | { gesture: IrisGesture; iris: number } | { body: number; gesture: BodyGesture } | { gesture: HandGesture; hand: number }

Gesture combined results

-

HandGesture

HandGesture: `${"thumb" | "index" | "middle" | "ring" | "pinky"} forward` | `${"thumb" | "index" | "middle" | "ring" | "pinky"} up` | "victory" | "thumbs up"

ImageObjects

ImageObjects: ImageData | ImageBitmap
+

HandGesture

HandGesture: `${"thumb" | "index" | "middle" | "ring" | "pinky"} forward` | `${"thumb" | "index" | "middle" | "ring" | "pinky"} up` | "victory" | "thumbs up"

ImageObjects

ImageObjects: ImageData | ImageBitmap

Defines all possible image objects

-

Input

+

Input

Defines all possible input types for Human detection

IrisGesture

IrisGesture: "facing center" | `looking ${"left" | "right" | "up" | "down"}` | "looking center"

Point

Point: [number, number, number?]

generic point as [x, y, z?]

diff --git a/typedoc/interfaces/BodyConfig.html b/typedoc/interfaces/BodyConfig.html index fe46c1c5..b0d7b1d5 100644 --- a/typedoc/interfaces/BodyConfig.html +++ b/typedoc/interfaces/BodyConfig.html @@ -1,4 +1,4 @@ -BodyConfig | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu
+BodyConfig | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Configures all body detection specific options

Hierarchy

Index

Properties

Optional detector

detector?: { modelPath: string }

Type declaration

  • modelPath: string
    property

    path to optional body detector model json file

enabled

enabled: boolean
property

is module enabled?

diff --git a/typedoc/interfaces/BodyKeypoint.html b/typedoc/interfaces/BodyKeypoint.html index 39409e7d..cf9fa524 100644 --- a/typedoc/interfaces/BodyKeypoint.html +++ b/typedoc/interfaces/BodyKeypoint.html @@ -1,4 +1,4 @@ -BodyKeypoint | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • BodyKeypoint

Index

Properties

part

part: string
+BodyKeypoint | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • BodyKeypoint

Index

Properties

part

part: string

body part name

position

position: Point

body part position

diff --git a/typedoc/interfaces/BodyResult.html b/typedoc/interfaces/BodyResult.html index 924d2ef8..a1ac4ea0 100644 --- a/typedoc/interfaces/BodyResult.html +++ b/typedoc/interfaces/BodyResult.html @@ -1,4 +1,4 @@ -BodyResult | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu
+BodyResult | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Body results

Hierarchy

  • BodyResult

Index

Properties

annotations

annotations: Record<string, Point[][]>

detected body keypoints combined into annotated parts

diff --git a/typedoc/interfaces/Config.html b/typedoc/interfaces/Config.html index 60fbc6b5..a0027a9b 100644 --- a/typedoc/interfaces/Config.html +++ b/typedoc/interfaces/Config.html @@ -1,4 +1,4 @@ -Config | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu
+Config | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Configuration interface definition for Human library

Contains all configurable parameters

Hierarchy

  • Config

Index

Properties

async

async: boolean
diff --git a/typedoc/interfaces/FaceAntiSpoofConfig.html b/typedoc/interfaces/FaceAntiSpoofConfig.html index 38e8d824..82efb221 100644 --- a/typedoc/interfaces/FaceAntiSpoofConfig.html +++ b/typedoc/interfaces/FaceAntiSpoofConfig.html @@ -1,4 +1,4 @@ -FaceAntiSpoofConfig | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu
+FaceAntiSpoofConfig | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Anti-spoofing part of face configuration

Hierarchy

Index

Properties

enabled

enabled: boolean
property

is module enabled?

modelPath

modelPath: string
property

path to model json file

diff --git a/typedoc/interfaces/FaceConfig.html b/typedoc/interfaces/FaceConfig.html index 7b0ac1e0..495e5979 100644 --- a/typedoc/interfaces/FaceConfig.html +++ b/typedoc/interfaces/FaceConfig.html @@ -1,4 +1,4 @@ -FaceConfig | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu
+FaceConfig | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description

Hierarchy

Index

Properties

antispoof

antispoof: Partial<FaceAntiSpoofConfig>

description

description: Partial<FaceDescriptionConfig>

detector

detector: Partial<FaceDetectorConfig>

emotion

emotion: Partial<FaceEmotionConfig>

enabled

enabled: boolean
property

is module enabled?

iris

iris: Partial<FaceIrisConfig>

mesh

mesh: Partial<FaceMeshConfig>

modelPath

modelPath: string
property

path to model json file

diff --git a/typedoc/interfaces/FaceDescriptionConfig.html b/typedoc/interfaces/FaceDescriptionConfig.html index 3a0f794f..d4d3399d 100644 --- a/typedoc/interfaces/FaceDescriptionConfig.html +++ b/typedoc/interfaces/FaceDescriptionConfig.html @@ -1,4 +1,4 @@ -FaceDescriptionConfig | @vladmandic/human - v2.4.0
Options
All
  • Public
  • Public/Protected
  • All
Menu
+FaceDescriptionConfig | @vladmandic/human - v2.4.1
Options
All
  • Public
  • Public/Protected
  • All
Menu

Description or face embedding part of face configuration