diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b8d7f32..17191ac5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ ### **HEAD -> main** 2022/08/15 mandic00@live.com +- add tensorflow library detection +- fix wasm detection - enumerate additional models - release refresh diff --git a/TODO.md b/TODO.md index b3cc4c3e..1290f357 100644 --- a/TODO.md +++ b/TODO.md @@ -63,8 +63,8 @@ Model is supported using `WebGL` backend in browser - Host models in Models can be directly used without downloading to local storage Example: `modelPath: 'https://vladmandic.github.io/human-models/models/facemesh.json'` -- Host models in **Google Cloud Bucket** - Models can be directly used without downloading to local storage +- Allow hosting models in **Google Cloud Bucket** + Hosted models can be directly used without downloading to local storage Example: `modelPath: 'https://storage.googleapis.com/human-models/facemesh.json'` - Fix **MobileFaceNet** model as alternative for face embedding/descriptor detection Configurable using `config.face.mobilefacenet` config section diff --git a/dist/human.js b/dist/human.js index 337acdf3..f2904aff 100644 --- a/dist/human.js +++ b/dist/human.js @@ -1,10 +1,10 @@ -"use strict";/* +/* Human homepage: author: ' */ -var Human=(()=>{var Bf=Object.defineProperty;var e_=Object.getOwnPropertyDescriptor;var t_=Object.getOwnPropertyNames;var n_=Object.prototype.hasOwnProperty;var s_=(e,t,n)=>t in e?Bf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var la=(e,t)=>{for(var n in t)Bf(e,n,{get:t[n],enumerable:!0})},r_=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of t_(t))!n_.call(e,r)&&r!==n&&Bf(e,r,{get:()=>t[r],enumerable:!(s=e_(t,r))||s.enumerable});return e};var a_=e=>r_(Bf({},"__esModule",{value:!0}),e);var me=(e,t,n)=>(s_(e,typeof t!="symbol"?t+"":t,n),n),hv=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Jd=(e,t,n)=>(hv(e,t,"read from private field"),n?n.call(e):t.get(e)),Qd=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},ep=(e,t,n,s)=>(hv(e,t,"write to private field"),s?s.call(e,n):t.set(e,n),n);var ebe={};la(ebe,{Human:()=>H4,default:()=>H4,defaults:()=>Wa,draw:()=>z4,env:()=>pe,match:()=>G4,models:()=>o1});function oe(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}function fv(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var ue=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function r3(e,t,n="config",s=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")r3(e[r],t[r],r,s);else{let a=e&&typeof e[r]!="undefined";a||s.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let o=e&&typeof e[r]==typeof t[r];a&&!o&&s.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&s.length>0&&oe("invalid configuration",s),s}function Xt(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,s)=>(Object.keys(s||{}).forEach(r=>{let a=n[r],o=s[r];Array.isArray(a)&&Array.isArray(o)?n[r]=a.concat(...o):t(a)&&t(o)?n[r]=Xt(a,o):n[r]=o}),n),{})}var Wa={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var qe={};la(qe,{Abs:()=>ll,Acos:()=>hc,Acosh:()=>fc,AdadeltaOptimizer:()=>X0,AdagradOptimizer:()=>K0,AdamOptimizer:()=>Z0,AdamaxOptimizer:()=>Y0,Add:()=>ba,AddN:()=>ho,All:()=>mc,Any:()=>gc,ArgMax:()=>fo,ArgMin:()=>yc,Asin:()=>Ac,Asinh:()=>xc,Atan:()=>bc,Atan2:()=>wc,Atanh:()=>vc,AvgPool:()=>mo,AvgPool3D:()=>Bp,AvgPool3DGrad:()=>qm,AvgPoolGrad:()=>jm,BackendWasm:()=>jC,BatchMatMul:()=>go,BatchToSpaceND:()=>ul,Bincount:()=>Xm,BroadcastArgs:()=>Km,BroadcastTo:()=>m6,Callback:()=>Nk,CallbackList:()=>D8,Cast:()=>yo,Ceil:()=>Ao,ClipByValue:()=>va,Complex:()=>Wp,ComplexAbs:()=>Vp,Concat:()=>cl,Conv2D:()=>xo,Conv2DBackpropFilter:()=>Zm,Conv2DBackpropInput:()=>bo,Conv3D:()=>Up,Conv3DBackpropFilterV2:()=>Ym,Conv3DBackpropInputV2:()=>Jm,Cos:()=>vo,Cosh:()=>wo,CropAndResize:()=>pl,Cumprod:()=>dl,Cumsum:()=>ko,CustomCallback:()=>P8,DataStorage:()=>Lp,DenseBincount:()=>Qm,DepthToSpace:()=>hl,DepthwiseConv2dNative:()=>Io,DepthwiseConv2dNativeBackpropFilter:()=>e0,DepthwiseConv2dNativeBackpropInput:()=>t0,Diag:()=>n0,Dilation2D:()=>Gp,Dilation2DBackpropFilter:()=>mm,Dilation2DBackpropInput:()=>fm,ENV:()=>Cy,EarlyStopping:()=>Ek,Einsum:()=>Hp,Elu:()=>Co,EluGrad:()=>s0,Environment:()=>h6,Equal:()=>fl,Erf:()=>kc,Exp:()=>To,ExpandDims:()=>ml,Expm1:()=>gl,FFT:()=>r0,Fill:()=>Ic,FlipLeftRight:()=>yl,Floor:()=>No,FloorDiv:()=>Eo,FromPixels:()=>wp,FusedBatchNorm:()=>Ro,FusedConv2D:()=>eo,FusedDepthwiseConv2D:()=>to,GPGPUContext:()=>qu,GatherNd:()=>xl,GatherV2:()=>Al,GraphModel:()=>Fh,Greater:()=>bl,GreaterEqual:()=>_o,History:()=>$8,IFFT:()=>a0,Identity:()=>Do,Imag:()=>jp,InputSpec:()=>rn,IsFinite:()=>Sc,IsInf:()=>Cc,IsNan:()=>Tc,KernelBackend:()=>dc,LRN:()=>qp,LRNGrad:()=>i0,LayerVariable:()=>S8,LayersModel:()=>fa,LeakyRelu:()=>$o,Less:()=>vl,LessEqual:()=>wl,LinSpace:()=>o0,Log:()=>Po,Log1p:()=>Nc,LogSoftmax:()=>y6,LogicalAnd:()=>kl,LogicalNot:()=>Il,LogicalOr:()=>Ec,LogicalXor:()=>g6,LowerBound:()=>Z_,MathBackendWebGL:()=>ld,Max:()=>Fo,MaxPool:()=>Mo,MaxPool3D:()=>Xp,MaxPool3DGrad:()=>u0,MaxPoolGrad:()=>l0,MaxPoolWithArgmax:()=>c0,Maximum:()=>Oo,Mean:()=>zo,Min:()=>Lo,Minimum:()=>Bo,MirrorPad:()=>Wo,Mod:()=>Rc,MomentumOptimizer:()=>J0,Multinomial:()=>d0,Multiply:()=>Vo,Neg:()=>Sl,NonMaxSuppressionV3:()=>Tl,NonMaxSuppressionV4:()=>_c,NonMaxSuppressionV5:()=>Nl,NotEqual:()=>Cl,OP_SCOPE_SUFFIX:()=>Ry,OneHot:()=>Rl,OnesLike:()=>El,Optimizer:()=>Ia,OptimizerConstructors:()=>Va,Pack:()=>_l,PadV2:()=>Uo,Pool:()=>Y_,Pow:()=>Go,Prelu:()=>Ho,Prod:()=>jo,RMSPropOptimizer:()=>Q0,RNN:()=>ea,Range:()=>Dc,Rank:()=>v3,Real:()=>Kp,RealDiv:()=>So,Reciprocal:()=>$c,Reduction:()=>es,Relu:()=>qo,Relu6:()=>Zo,Reshape:()=>Dl,ResizeBilinear:()=>Ko,ResizeBilinearGrad:()=>h0,ResizeNearestNeighbor:()=>Xo,ResizeNearestNeighborGrad:()=>p0,Reverse:()=>$l,RotateWithOffset:()=>ql,Round:()=>Pl,Rsqrt:()=>Yo,SGDOptimizer:()=>kh,ScatterNd:()=>Fl,SearchSorted:()=>f0,Select:()=>Ol,Selu:()=>Pc,Sequential:()=>rc,Sigmoid:()=>Qo,Sign:()=>Fc,Sin:()=>Jo,Sinh:()=>zl,Slice:()=>Ml,Softmax:()=>ni,Softplus:()=>Oc,SpaceToBatchND:()=>Ll,SparseFillEmptyRows:()=>Zp,SparseReshape:()=>Mc,SparseSegmentMean:()=>Yp,SparseSegmentSum:()=>Jp,SparseToDense:()=>Qp,SplitV:()=>Bl,Sqrt:()=>ei,Square:()=>zc,SquaredDifference:()=>si,Step:()=>oi,StridedSlice:()=>Wl,StringNGrams:()=>Lc,StringSplit:()=>eh,StringToHashBucketFast:()=>th,Sub:()=>ri,Sum:()=>ti,SymbolicTensor:()=>Nr,Tan:()=>Vl,Tanh:()=>ai,Tensor:()=>nt,TensorBuffer:()=>fn,Tile:()=>wa,TopK:()=>Ul,Transform:()=>Gl,Transpose:()=>jr,Unique:()=>m0,Unpack:()=>Hl,UnsortedSegmentSum:()=>nh,UpperBound:()=>J_,Variable:()=>Sp,ZerosLike:()=>jl,_FusedMatMul:()=>Qa,abs:()=>tn,acos:()=>Ky,acosh:()=>Zy,add:()=>ce,addN:()=>y0,all:()=>A0,any:()=>Np,argMax:()=>Rs,argMin:()=>Yy,asin:()=>Jy,asinh:()=>Qy,atan:()=>eA,atan2:()=>tA,atanh:()=>nA,avgPool:()=>ch,avgPool3d:()=>rA,backend:()=>Bn,backend_util:()=>T,basicLSTMCell:()=>lw,batchNorm:()=>Vc,batchNorm2d:()=>aA,batchNorm3d:()=>oA,batchNorm4d:()=>iA,batchToSpaceND:()=>dh,bincount:()=>lA,booleanMaskAsync:()=>Uw,broadcastArgs:()=>uw,broadcastTo:()=>Hu,broadcast_util:()=>Kl,browser:()=>Js,buffer:()=>Be,callbacks:()=>nj,cast:()=>ye,ceil:()=>uA,clipByValue:()=>ms,clone:()=>On,complex:()=>ma,concat:()=>Ct,concat1d:()=>cA,concat2d:()=>Zl,concat3d:()=>dA,concat4d:()=>pA,constraints:()=>N8,conv1d:()=>x0,conv2d:()=>ga,conv2dTranspose:()=>b0,conv3d:()=>fA,conv3dTranspose:()=>mA,copyRegisteredKernels:()=>nD,cos:()=>ph,cosh:()=>v0,cosineWindow:()=>U0,cumprod:()=>Ep,cumsum:()=>w0,customGrad:()=>Zr,data:()=>Qk,denseBincount:()=>dw,deprecationWarn:()=>zy,depthToSpace:()=>gA,depthwiseConv2d:()=>Uc,deregisterOp:()=>aj,device_util:()=>oh,diag:()=>pw,dilation2d:()=>yA,disableDeprecationWarnings:()=>E$,dispose:()=>ee,disposeVariables:()=>R$,div:()=>he,divNoNan:()=>AA,dot:()=>xA,dropout:()=>HA,einsum:()=>hw,elu:()=>Gc,enableDebugMode:()=>N$,enableProdMode:()=>My,enclosingPowerOfTwo:()=>jA,engine:()=>sn,env:()=>X,equal:()=>_s,erf:()=>bA,euclideanNorm:()=>kA,exp:()=>Ds,expandDims:()=>Kt,expm1:()=>IA,eye:()=>k0,fft:()=>vh,fill:()=>jc,findBackend:()=>By,findBackendFactory:()=>P$,floor:()=>qc,floorDiv:()=>Wc,forceHalfFloat:()=>p9,fused:()=>tc,gather:()=>Xc,gatherND:()=>qw,gather_util:()=>Vy,getBackend:()=>Ln,getGradient:()=>x3,getKernel:()=>gm,getKernelsForBackend:()=>Xr,getThreadsCount:()=>_me,gpgpu_util:()=>GS,grad:()=>tO,grads:()=>nO,greater:()=>As,greaterEqual:()=>ui,ifft:()=>ec,imag:()=>lh,image:()=>Se,inTopKAsync:()=>Xw,initializers:()=>E8,input:()=>X8,io:()=>Ns,irfft:()=>L0,isFinite:()=>SA,isInf:()=>CA,isNaN:()=>TA,keep:()=>bn,kernel_impls:()=>hr,layers:()=>R8,leakyRelu:()=>hh,less:()=>I0,lessEqual:()=>ci,linalg:()=>KA,linspace:()=>Aw,loadGraphModel:()=>lq,loadGraphModelSync:()=>uq,loadLayersModel:()=>pG,localResponseNormalization:()=>NA,log:()=>$s,log1p:()=>fh,logSigmoid:()=>EA,logSoftmax:()=>C0,logSumExp:()=>T0,logicalAnd:()=>cr,logicalNot:()=>mh,logicalOr:()=>N0,logicalXor:()=>RA,losses:()=>o8,lowerBound:()=>bw,matMul:()=>Qe,math:()=>W6,max:()=>mn,maxPool:()=>gh,maxPool3d:()=>_A,maxPoolWithArgmax:()=>vw,maximum:()=>Qr,mean:()=>Bt,memory:()=>xm,meshgrid:()=>ww,metrics:()=>Sk,min:()=>ya,minimum:()=>Kc,mirrorPad:()=>DA,mod:()=>Jl,model:()=>cG,models:()=>Ck,moments:()=>yh,movingAverage:()=>Gw,mul:()=>L,multiRNNCell:()=>kw,multinomial:()=>Iw,neg:()=>Dt,nextFrame:()=>ZA,norm:()=>Hc,notEqual:()=>el,oneHot:()=>Yu,ones:()=>Es,onesLike:()=>Ps,op:()=>U,outerProduct:()=>Sw,pad:()=>Qs,pad1d:()=>Cw,pad2d:()=>Tw,pad3d:()=>Nw,pad4d:()=>Ew,pool:()=>$A,pow:()=>Aa,prelu:()=>xh,print:()=>Py,prod:()=>PA,profile:()=>_$,rand:()=>Rw,randomGamma:()=>_w,randomNormal:()=>R0,randomStandardNormal:()=>Dw,randomUniform:()=>Zc,range:()=>Qu,ready:()=>Bc,real:()=>Ju,reciprocal:()=>MA,registerBackend:()=>Xl,registerCallbackConstructor:()=>hG,registerGradient:()=>A6,registerKernel:()=>pr,registerOp:()=>rj,regularizers:()=>Tk,relu:()=>Fr,relu6:()=>_0,removeBackend:()=>$$,reshape:()=>G,reverse:()=>Ys,reverse1d:()=>$w,reverse2d:()=>Pw,reverse3d:()=>Fw,reverse4d:()=>Ow,rfft:()=>wh,round:()=>D0,rsqrt:()=>$0,scalar:()=>Ce,scatterND:()=>Hw,scatter_util:()=>Uy,searchSorted:()=>E0,selu:()=>P0,separableConv2d:()=>F0,sequential:()=>dG,serialization:()=>de,setBackend:()=>Ly,setPlatform:()=>F$,setThreadsCount:()=>Rme,setWasmPath:()=>Eme,setWasmPaths:()=>ab,setWebGLContext:()=>v2,setdiff1dAsync:()=>Mw,sigmoid:()=>Cn,sign:()=>zA,signal:()=>a8,sin:()=>O0,sinh:()=>M0,slice:()=>Me,slice1d:()=>bh,slice2d:()=>z0,slice3d:()=>di,slice4d:()=>so,slice_util:()=>Ut,softmax:()=>Ql,softplus:()=>Yl,spaceToBatchND:()=>Ah,sparse:()=>i8,sparseToDense:()=>jw,spectral:()=>r8,split:()=>Zt,sqrt:()=>Nn,square:()=>vt,squaredDifference:()=>B0,squeeze:()=>st,stack:()=>on,step:()=>eu,stridedSlice:()=>LA,string:()=>l8,sub:()=>fe,sum:()=>ke,sumOutType:()=>ah,tan:()=>BA,tanh:()=>Ji,tensor:()=>ct,tensor1d:()=>Ft,tensor2d:()=>lr,tensor3d:()=>Wy,tensor4d:()=>zw,tensor5d:()=>Lw,tensor6d:()=>Bw,tensor_util:()=>Er,test_util:()=>nw,tidy:()=>Y,tile:()=>Xs,time:()=>D$,topk:()=>WA,train:()=>Oi,transpose:()=>et,truncatedNormal:()=>W0,unique:()=>VA,unregisterGradient:()=>tD,unregisterKernel:()=>eD,unsortedSegmentSum:()=>V0,unstack:()=>En,upcastType:()=>Mn,upperBound:()=>Ww,util:()=>v,valueAndGrad:()=>sO,valueAndGrads:()=>rO,variable:()=>UA,variableGrads:()=>xw,version:()=>Hh,version_converter:()=>dq,version_core:()=>Xy,version_layers:()=>A5,version_wasm:()=>Dme,version_webgl:()=>Cne,webgl:()=>Tne,webgl_util:()=>fS,webgpu:()=>xT,where:()=>zn,whereAsync:()=>GA,zeros:()=>Wt,zerosLike:()=>it});var o_=Object.create,vy=Object.defineProperty,i_=Object.getOwnPropertyDescriptor,t6=Object.getOwnPropertyNames,l_=Object.getPrototypeOf,u_=Object.prototype.hasOwnProperty,ln=(e,t)=>function(){return t||(0,e[t6(e)[0]])((t={exports:{}}).exports,t),t.exports},Ue=(e,t)=>{for(var n in t)vy(e,n,{get:t[n],enumerable:!0})},c_=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of t6(t))!u_.call(e,r)&&r!==n&&vy(e,r,{get:()=>t[r],enumerable:!(s=i_(t,r))||s.enumerable});return e},co=(e,t,n)=>(n=e!=null?o_(l_(e)):{},c_(t||!e||!e.__esModule?vy(n,"default",{value:e,enumerable:!0}):n,e)),d_=ln({"node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js"(e,t){t.exports=s;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch($){}function s($,C,F){this.low=$|0,this.high=C|0,this.unsigned=!!F}s.prototype.__isLong__,Object.defineProperty(s.prototype,"__isLong__",{value:!0});function r($){return($&&$.__isLong__)===!0}s.isLong=r;var a={},o={};function i($,C){var F,V,q;return C?($>>>=0,(q=0<=$&&$<256)&&(V=o[$],V)?V:(F=u($,($|0)<0?-1:0,!0),q&&(o[$]=F),F)):($|=0,(q=-128<=$&&$<128)&&(V=a[$],V)?V:(F=u($,$<0?-1:0,!1),q&&(a[$]=F),F))}s.fromInt=i;function l($,C){if(isNaN($))return C?b:A;if(C){if($<0)return b;if($>=g)return _}else{if($<=-y)return P;if($+1>=y)return E}return $<0?l(-$,C).neg():u($%m|0,$/m|0,C)}s.fromNumber=l;function u($,C,F){return new s($,C,F)}s.fromBits=u;var c=Math.pow;function p($,C,F){if($.length===0)throw Error("empty string");if($==="NaN"||$==="Infinity"||$==="+Infinity"||$==="-Infinity")return A;if(typeof C=="number"?(F=C,C=!1):C=!!C,F=F||10,F<2||360)throw Error("interior hyphen");if(V===0)return p($.substring(1),C,F).neg();for(var q=l(c(F,8)),z=A,Z=0;Z<$.length;Z+=8){var J=Math.min(8,$.length-Z),te=parseInt($.substring(Z,Z+J),F);if(J<8){var B=l(c(F,J));z=z.mul(B).add(l(te))}else z=z.mul(q),z=z.add(l(te))}return z.unsigned=C,z}s.fromString=p;function d($,C){return typeof $=="number"?l($,C):typeof $=="string"?p($,C):u($.low,$.high,typeof C=="boolean"?C:$.unsigned)}s.fromValue=d;var h=1<<16,f=1<<24,m=h*h,g=m*m,y=g/2,x=i(f),A=i(0);s.ZERO=A;var b=i(0,!0);s.UZERO=b;var w=i(1);s.ONE=w;var S=i(1,!0);s.UONE=S;var I=i(-1);s.NEG_ONE=I;var E=u(-1,2147483647,!1);s.MAX_VALUE=E;var _=u(-1,-1,!0);s.MAX_UNSIGNED_VALUE=_;var P=u(0,-2147483648,!1);s.MIN_VALUE=P;var R=s.prototype;R.toInt=function(){return this.unsigned?this.low>>>0:this.low},R.toNumber=function(){return this.unsigned?(this.high>>>0)*m+(this.low>>>0):this.high*m+(this.low>>>0)},R.toString=function(C){if(C=C||10,C<2||36>>0,ie=B.toString(C);if(Z=te,Z.isZero())return ie+J;for(;ie.length<6;)ie="0"+ie;J=""+ie+J}},R.getHighBits=function(){return this.high},R.getHighBitsUnsigned=function(){return this.high>>>0},R.getLowBits=function(){return this.low},R.getLowBitsUnsigned=function(){return this.low>>>0},R.getNumBitsAbs=function(){if(this.isNegative())return this.eq(P)?64:this.neg().getNumBitsAbs();for(var C=this.high!=0?this.high:this.low,F=31;F>0&&(C&1<=0},R.isOdd=function(){return(this.low&1)===1},R.isEven=function(){return(this.low&1)===0},R.equals=function(C){return r(C)||(C=d(C)),this.unsigned!==C.unsigned&&this.high>>>31===1&&C.high>>>31===1?!1:this.high===C.high&&this.low===C.low},R.eq=R.equals,R.notEquals=function(C){return!this.eq(C)},R.neq=R.notEquals,R.ne=R.notEquals,R.lessThan=function(C){return this.comp(C)<0},R.lt=R.lessThan,R.lessThanOrEqual=function(C){return this.comp(C)<=0},R.lte=R.lessThanOrEqual,R.le=R.lessThanOrEqual,R.greaterThan=function(C){return this.comp(C)>0},R.gt=R.greaterThan,R.greaterThanOrEqual=function(C){return this.comp(C)>=0},R.gte=R.greaterThanOrEqual,R.ge=R.greaterThanOrEqual,R.compare=function(C){if(r(C)||(C=d(C)),this.eq(C))return 0;var F=this.isNegative(),V=C.isNegative();return F&&!V?-1:!F&&V?1:this.unsigned?C.high>>>0>this.high>>>0||C.high===this.high&&C.low>>>0>this.low>>>0?-1:1:this.sub(C).isNegative()?-1:1},R.comp=R.compare,R.negate=function(){return!this.unsigned&&this.eq(P)?P:this.not().add(w)},R.neg=R.negate,R.add=function(C){r(C)||(C=d(C));var F=this.high>>>16,V=this.high&65535,q=this.low>>>16,z=this.low&65535,Z=C.high>>>16,J=C.high&65535,te=C.low>>>16,B=C.low&65535,ie=0,Q=0,ae=0,le=0;return le+=z+B,ae+=le>>>16,le&=65535,ae+=q+te,Q+=ae>>>16,ae&=65535,Q+=V+J,ie+=Q>>>16,Q&=65535,ie+=F+Z,ie&=65535,u(ae<<16|le,ie<<16|Q,this.unsigned)},R.subtract=function(C){return r(C)||(C=d(C)),this.add(C.neg())},R.sub=R.subtract,R.multiply=function(C){if(this.isZero())return A;if(r(C)||(C=d(C)),n){var F=n.mul(this.low,this.high,C.low,C.high);return u(F,n.get_high(),this.unsigned)}if(C.isZero())return A;if(this.eq(P))return C.isOdd()?P:A;if(C.eq(P))return this.isOdd()?P:A;if(this.isNegative())return C.isNegative()?this.neg().mul(C.neg()):this.neg().mul(C).neg();if(C.isNegative())return this.mul(C.neg()).neg();if(this.lt(x)&&C.lt(x))return l(this.toNumber()*C.toNumber(),this.unsigned);var V=this.high>>>16,q=this.high&65535,z=this.low>>>16,Z=this.low&65535,J=C.high>>>16,te=C.high&65535,B=C.low>>>16,ie=C.low&65535,Q=0,ae=0,le=0,ge=0;return ge+=Z*ie,le+=ge>>>16,ge&=65535,le+=z*ie,ae+=le>>>16,le&=65535,le+=Z*B,ae+=le>>>16,le&=65535,ae+=q*ie,Q+=ae>>>16,ae&=65535,ae+=z*B,Q+=ae>>>16,ae&=65535,ae+=Z*te,Q+=ae>>>16,ae&=65535,Q+=V*ie+q*B+z*te+Z*J,Q&=65535,u(le<<16|ge,Q<<16|ae,this.unsigned)},R.mul=R.multiply,R.divide=function(C){if(r(C)||(C=d(C)),C.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&C.low===-1&&C.high===-1)return this;var F=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,C.low,C.high);return u(F,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:A;var V,q,z;if(this.unsigned){if(C.unsigned||(C=C.toUnsigned()),C.gt(this))return b;if(C.gt(this.shru(1)))return S;z=b}else{if(this.eq(P)){if(C.eq(w)||C.eq(I))return P;if(C.eq(P))return w;var Z=this.shr(1);return V=Z.div(C).shl(1),V.eq(A)?C.isNegative()?w:I:(q=this.sub(C.mul(V)),z=V.add(q.div(C)),z)}else if(C.eq(P))return this.unsigned?b:A;if(this.isNegative())return C.isNegative()?this.neg().div(C.neg()):this.neg().div(C).neg();if(C.isNegative())return this.div(C.neg()).neg();z=A}for(q=this;q.gte(C);){V=Math.max(1,Math.floor(q.toNumber()/C.toNumber()));for(var J=Math.ceil(Math.log(V)/Math.LN2),te=J<=48?1:c(2,J-48),B=l(V),ie=B.mul(C);ie.isNegative()||ie.gt(q);)V-=te,B=l(V,this.unsigned),ie=B.mul(C);B.isZero()&&(B=w),z=z.add(B),q=q.sub(ie)}return z},R.div=R.divide,R.modulo=function(C){if(r(C)||(C=d(C)),n){var F=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,C.low,C.high);return u(F,n.get_high(),this.unsigned)}return this.sub(this.div(C).mul(C))},R.mod=R.modulo,R.rem=R.modulo,R.not=function(){return u(~this.low,~this.high,this.unsigned)},R.and=function(C){return r(C)||(C=d(C)),u(this.low&C.low,this.high&C.high,this.unsigned)},R.or=function(C){return r(C)||(C=d(C)),u(this.low|C.low,this.high|C.high,this.unsigned)},R.xor=function(C){return r(C)||(C=d(C)),u(this.low^C.low,this.high^C.high,this.unsigned)},R.shiftLeft=function(C){return r(C)&&(C=C.toInt()),(C&=63)===0?this:C<32?u(this.low<>>32-C,this.unsigned):u(0,this.low<>>C|this.high<<32-C,this.high>>C,this.unsigned):u(this.high>>C-32,this.high>=0?0:-1,this.unsigned)},R.shr=R.shiftRight,R.shiftRightUnsigned=function(C){if(r(C)&&(C=C.toInt()),C&=63,C===0)return this;var F=this.high;if(C<32){var V=this.low;return u(V>>>C|F<<32-C,F>>>C,this.unsigned)}else return C===32?u(F,0,this.unsigned):u(F>>>C-32,0,this.unsigned)},R.shru=R.shiftRightUnsigned,R.shr_u=R.shiftRightUnsigned,R.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},R.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},R.toBytes=function(C){return C?this.toBytesLE():this.toBytesBE()},R.toBytesLE=function(){var C=this.high,F=this.low;return[F&255,F>>>8&255,F>>>16&255,F>>>24,C&255,C>>>8&255,C>>>16&255,C>>>24]},R.toBytesBE=function(){var C=this.high,F=this.low;return[C>>>24,C>>>16&255,C>>>8&255,C&255,F>>>24,F>>>16&255,F>>>8&255,F&255]},s.fromBytes=function(C,F,V){return V?s.fromBytesLE(C,F):s.fromBytesBE(C,F)},s.fromBytesLE=function(C,F){return new s(C[0]|C[1]<<8|C[2]<<16|C[3]<<24,C[4]|C[5]<<8|C[6]<<16|C[7]<<24,F)},s.fromBytesBE=function(C,F){return new s(C[4]<<24|C[5]<<16|C[6]<<8|C[7],C[0]<<24|C[1]<<16|C[2]<<8|C[3],F)}}}),p_=ln({"(disabled):node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/browser.js"(){}}),h_=ln({"(disabled):util"(){}}),f_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js"(e,t){(function(n,s,r){function a(u){var c=this,p=l();c.next=function(){var d=2091639*c.s0+c.c*23283064365386963e-26;return c.s0=c.s1,c.s1=c.s2,c.s2=d-(c.c=d|0)},c.c=1,c.s0=p(" "),c.s1=p(" "),c.s2=p(" "),c.s0-=p(u),c.s0<0&&(c.s0+=1),c.s1-=p(u),c.s1<0&&(c.s1+=1),c.s2-=p(u),c.s2<0&&(c.s2+=1),p=null}function o(u,c){return c.c=u.c,c.s0=u.s0,c.s1=u.s1,c.s2=u.s2,c}function i(u,c){var p=new a(u),d=c&&c.state,h=p.next;return h.int32=function(){return p.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,d&&(typeof d=="object"&&o(d,p),h.state=function(){return o(p,{})}),h}function l(){var u=4022871197,c=function(p){p=String(p);for(var d=0;d>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return c}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.alea=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),m_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js"(e,t){(function(n,s,r){function a(l){var u=this,c="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},l===(l|0)?u.x=l:c+=l;for(var p=0;p>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.xor128=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),g_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js"(e,t){(function(n,s,r){function a(l){var u=this,c="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:c+=l;for(var p=0;p>>4),u.next()}function o(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function i(l,u){var c=new a(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.xorwow=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),y_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js"(e,t){(function(n,s,r){function a(l){var u=this;u.next=function(){var p=u.x,d=u.i,h,f,m;return h=p[d],h^=h>>>7,f=h^h<<24,h=p[d+1&7],f^=h^h>>>10,h=p[d+3&7],f^=h^h>>>3,h=p[d+4&7],f^=h^h<<7,h=p[d+7&7],h=h^h<<13,f^=h^h<<9,p[d]=f,u.i=d+1&7,f};function c(p,d){var h,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,h=0;h0;--h)p.next()}c(u,l)}function o(l,u){return u.x=l.x.slice(),u.i=l.i,u}function i(l,u){l==null&&(l=+new Date);var c=new a(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(p.x&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.xorshift7=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),A_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js"(e,t){(function(n,s,r){function a(l){var u=this;u.next=function(){var p=u.w,d=u.X,h=u.i,f,m;return u.w=p=p+1640531527|0,m=d[h+34&127],f=d[h=h+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[h]=m^f,u.i=h,m+(p^p>>>16)|0};function c(p,d){var h,f,m,g,y,x=[],A=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,A=Math.max(A,d.length)),m=0,g=-32;g>>15,f^=f<<4,f^=f>>>13,g>=0&&(y=y+1640531527|0,h=x[g&127]^=f+y,m=h==0?m+1:0);for(m>=128&&(x[(d&&d.length||0)&127]=-1),m=127,g=4*128;g>0;--g)f=x[m+34&127],h=x[m=m+1&127],f^=f<<13,h^=h<<17,f^=f>>>15,h^=h>>>12,x[m]=f^h;p.w=y,p.X=x,p.i=m}c(u,l)}function o(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function i(l,u){l==null&&(l=+new Date);var c=new a(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(p.X&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.xor4096=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),x_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js"(e,t){(function(n,s,r){function a(l){var u=this,c="";u.next=function(){var d=u.b,h=u.c,f=u.d,m=u.a;return d=d<<25^d>>>7^h,h=h-f|0,f=f<<24^f>>>8^m,m=m-d|0,u.b=d=d<<20^d>>>12^h,u.c=h=h-f|0,u.d=f<<16^h>>>16^m,u.a=m-d|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):c+=l;for(var p=0;p>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.tychei=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),b_=ln({"(disabled):crypto"(){}}),v_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js"(e,t){(function(n,s,r){var a=256,o=6,i=52,l="random",u=r.pow(a,o),c=r.pow(2,i),p=c*2,d=a-1,h;function f(w,S,I){var E=[];S=S==!0?{entropy:!0}:S||{};var _=x(y(S.entropy?[w,b(s)]:w==null?A():w,3),E),P=new m(E),R=function(){for(var $=P.g(o),C=u,F=0;$=p;)$/=2,C/=2,F>>>=1;return($+F)/C};return R.int32=function(){return P.g(4)|0},R.quick=function(){return P.g(4)/4294967296},R.double=R,x(b(P.S),s),(S.pass||I||function($,C,F,V){return V&&(V.S&&g(V,P),$.state=function(){return g(P,{})}),F?(r[l]=$,C):$})(R,_,"global"in S?S.global:this==r,S.state)}function m(w){var S,I=w.length,E=this,_=0,P=E.i=E.j=0,R=E.S=[];for(I||(w=[I++]);_{var s=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(s=s||__filename),function(r){r=r||{};function a(){return Pe.buffer!=Kn&&xr(Pe.buffer),af}function o(){return Pe.buffer!=Kn&&xr(Pe.buffer),of}function i(){return Pe.buffer!=Kn&&xr(Pe.buffer),Bd}function l(){return Pe.buffer!=Kn&&xr(Pe.buffer),lf}function u(){return Pe.buffer!=Kn&&xr(Pe.buffer),uf}function c(){return Pe.buffer!=Kn&&xr(Pe.buffer),cf}function p(){return Pe.buffer!=Kn&&xr(Pe.buffer),df}var d=typeof r!="undefined"?r:{},h,f;d.ready=new Promise(function(N,O){h=N,f=O});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},d),y=[],x="./this.program",A=(N,O)=>{throw O},b=typeof window=="object",w=typeof importScripts=="function",S=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",I=d.ENVIRONMENT_IS_PTHREAD||!1,E="";function _(N){return d.locateFile?d.locateFile(N,E):E+N}var P,R,$,C;function F(N){if(N instanceof Zd)return;B("exiting due to exception: "+N)}var V,q,z;if(S){w?E=dm().dirname(E)+"/":E=__dirname+"/",z=()=>{q||(V=wy(),q=dm())},P=function(H,ne){return z(),H=q.normalize(H),V.readFileSync(H,ne?void 0:"utf8")},$=O=>{var H=P(O,!0);return H.buffer||(H=new Uint8Array(H)),H},R=(O,H,ne)=>{z(),O=q.normalize(O),V.readFile(O,function(Ae,ve){Ae?ne(Ae):H(ve.buffer)})},process.argv.length>1&&(x=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(O){if(!(O instanceof Zd))throw O}),process.on("unhandledRejection",function(O){throw O}),A=(O,H)=>{if(Ni())throw process.exitCode=O,H;F(H),process.exit(O)},d.inspect=function(){return"[Emscripten Module object]"};let N;try{N=w_()}catch(O){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),O}global.Worker=N.Worker}else(b||w)&&(w?E=self.location.href:typeof document!="undefined"&&document.currentScript&&(E=document.currentScript.src),typeof s!="undefined"&&s&&(E=s),E.indexOf("blob:")!==0?E=E.substr(0,E.replace(/[?#].*/,"").lastIndexOf("/")+1):E="",S||(P=N=>{var O=new XMLHttpRequest;return O.open("GET",N,!1),O.send(null),O.responseText},w&&($=N=>{var O=new XMLHttpRequest;return O.open("GET",N,!1),O.responseType="arraybuffer",O.send(null),new Uint8Array(O.response)}),R=(N,O,H)=>{var ne=new XMLHttpRequest;ne.open("GET",N,!0),ne.responseType="arraybuffer",ne.onload=()=>{if(ne.status==200||ne.status==0&&ne.response){O(ne.response);return}H()},ne.onerror=H,ne.send(null)}),C=N=>document.title=N);S&&typeof performance=="undefined"&&(global.performance=k_().performance);var Z=console.log.bind(console),J=console.warn.bind(console);S&&(z(),Z=N=>V.writeSync(1,N+` +"use strict";var Human=(()=>{var Bf=Object.defineProperty;var e_=Object.getOwnPropertyDescriptor;var t_=Object.getOwnPropertyNames;var n_=Object.prototype.hasOwnProperty;var s_=(e,t,n)=>t in e?Bf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var la=(e,t)=>{for(var n in t)Bf(e,n,{get:t[n],enumerable:!0})},r_=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of t_(t))!n_.call(e,r)&&r!==n&&Bf(e,r,{get:()=>t[r],enumerable:!(s=e_(t,r))||s.enumerable});return e};var a_=e=>r_(Bf({},"__esModule",{value:!0}),e);var me=(e,t,n)=>(s_(e,typeof t!="symbol"?t+"":t,n),n),hv=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Jd=(e,t,n)=>(hv(e,t,"read from private field"),n?n.call(e):t.get(e)),Qd=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},ep=(e,t,n,s)=>(hv(e,t,"write to private field"),s?s.call(e,n):t.set(e,n),n);var ebe={};la(ebe,{Human:()=>H4,default:()=>H4,defaults:()=>Wa,draw:()=>z4,env:()=>pe,match:()=>G4,models:()=>o1});function oe(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}function fv(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var ue=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function r3(e,t,n="config",s=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")r3(e[r],t[r],r,s);else{let a=e&&typeof e[r]!="undefined";a||s.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let o=e&&typeof e[r]==typeof t[r];a&&!o&&s.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&s.length>0&&oe("invalid configuration",s),s}function Xt(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,s)=>(Object.keys(s||{}).forEach(r=>{let a=n[r],o=s[r];Array.isArray(a)&&Array.isArray(o)?n[r]=a.concat(...o):t(a)&&t(o)?n[r]=Xt(a,o):n[r]=o}),n),{})}var Wa={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var qe={};la(qe,{Abs:()=>ll,Acos:()=>hc,Acosh:()=>fc,AdadeltaOptimizer:()=>X0,AdagradOptimizer:()=>K0,AdamOptimizer:()=>Z0,AdamaxOptimizer:()=>Y0,Add:()=>ba,AddN:()=>ho,All:()=>mc,Any:()=>gc,ArgMax:()=>fo,ArgMin:()=>yc,Asin:()=>Ac,Asinh:()=>xc,Atan:()=>bc,Atan2:()=>wc,Atanh:()=>vc,AvgPool:()=>mo,AvgPool3D:()=>Bp,AvgPool3DGrad:()=>qm,AvgPoolGrad:()=>jm,BackendWasm:()=>jC,BatchMatMul:()=>go,BatchToSpaceND:()=>ul,Bincount:()=>Xm,BroadcastArgs:()=>Km,BroadcastTo:()=>m6,Callback:()=>Nk,CallbackList:()=>D8,Cast:()=>yo,Ceil:()=>Ao,ClipByValue:()=>va,Complex:()=>Wp,ComplexAbs:()=>Vp,Concat:()=>cl,Conv2D:()=>xo,Conv2DBackpropFilter:()=>Zm,Conv2DBackpropInput:()=>bo,Conv3D:()=>Up,Conv3DBackpropFilterV2:()=>Ym,Conv3DBackpropInputV2:()=>Jm,Cos:()=>vo,Cosh:()=>wo,CropAndResize:()=>pl,Cumprod:()=>dl,Cumsum:()=>ko,CustomCallback:()=>P8,DataStorage:()=>Lp,DenseBincount:()=>Qm,DepthToSpace:()=>hl,DepthwiseConv2dNative:()=>Io,DepthwiseConv2dNativeBackpropFilter:()=>e0,DepthwiseConv2dNativeBackpropInput:()=>t0,Diag:()=>n0,Dilation2D:()=>Gp,Dilation2DBackpropFilter:()=>mm,Dilation2DBackpropInput:()=>fm,ENV:()=>Cy,EarlyStopping:()=>Ek,Einsum:()=>Hp,Elu:()=>Co,EluGrad:()=>s0,Environment:()=>h6,Equal:()=>fl,Erf:()=>kc,Exp:()=>To,ExpandDims:()=>ml,Expm1:()=>gl,FFT:()=>r0,Fill:()=>Ic,FlipLeftRight:()=>yl,Floor:()=>No,FloorDiv:()=>Eo,FromPixels:()=>wp,FusedBatchNorm:()=>Ro,FusedConv2D:()=>eo,FusedDepthwiseConv2D:()=>to,GPGPUContext:()=>qu,GatherNd:()=>xl,GatherV2:()=>Al,GraphModel:()=>Fh,Greater:()=>bl,GreaterEqual:()=>_o,History:()=>$8,IFFT:()=>a0,Identity:()=>Do,Imag:()=>jp,InputSpec:()=>rn,IsFinite:()=>Sc,IsInf:()=>Cc,IsNan:()=>Tc,KernelBackend:()=>dc,LRN:()=>qp,LRNGrad:()=>i0,LayerVariable:()=>S8,LayersModel:()=>fa,LeakyRelu:()=>$o,Less:()=>vl,LessEqual:()=>wl,LinSpace:()=>o0,Log:()=>Po,Log1p:()=>Nc,LogSoftmax:()=>y6,LogicalAnd:()=>kl,LogicalNot:()=>Il,LogicalOr:()=>Ec,LogicalXor:()=>g6,LowerBound:()=>Z_,MathBackendWebGL:()=>ld,Max:()=>Fo,MaxPool:()=>Mo,MaxPool3D:()=>Xp,MaxPool3DGrad:()=>u0,MaxPoolGrad:()=>l0,MaxPoolWithArgmax:()=>c0,Maximum:()=>Oo,Mean:()=>zo,Min:()=>Lo,Minimum:()=>Bo,MirrorPad:()=>Wo,Mod:()=>Rc,MomentumOptimizer:()=>J0,Multinomial:()=>d0,Multiply:()=>Vo,Neg:()=>Sl,NonMaxSuppressionV3:()=>Tl,NonMaxSuppressionV4:()=>_c,NonMaxSuppressionV5:()=>Nl,NotEqual:()=>Cl,OP_SCOPE_SUFFIX:()=>Ry,OneHot:()=>Rl,OnesLike:()=>El,Optimizer:()=>Ia,OptimizerConstructors:()=>Va,Pack:()=>_l,PadV2:()=>Uo,Pool:()=>Y_,Pow:()=>Go,Prelu:()=>Ho,Prod:()=>jo,RMSPropOptimizer:()=>Q0,RNN:()=>ea,Range:()=>Dc,Rank:()=>v3,Real:()=>Kp,RealDiv:()=>So,Reciprocal:()=>$c,Reduction:()=>es,Relu:()=>qo,Relu6:()=>Zo,Reshape:()=>Dl,ResizeBilinear:()=>Ko,ResizeBilinearGrad:()=>h0,ResizeNearestNeighbor:()=>Xo,ResizeNearestNeighborGrad:()=>p0,Reverse:()=>$l,RotateWithOffset:()=>ql,Round:()=>Pl,Rsqrt:()=>Yo,SGDOptimizer:()=>kh,ScatterNd:()=>Fl,SearchSorted:()=>f0,Select:()=>Ol,Selu:()=>Pc,Sequential:()=>rc,Sigmoid:()=>Qo,Sign:()=>Fc,Sin:()=>Jo,Sinh:()=>zl,Slice:()=>Ml,Softmax:()=>ni,Softplus:()=>Oc,SpaceToBatchND:()=>Ll,SparseFillEmptyRows:()=>Zp,SparseReshape:()=>Mc,SparseSegmentMean:()=>Yp,SparseSegmentSum:()=>Jp,SparseToDense:()=>Qp,SplitV:()=>Bl,Sqrt:()=>ei,Square:()=>zc,SquaredDifference:()=>si,Step:()=>oi,StridedSlice:()=>Wl,StringNGrams:()=>Lc,StringSplit:()=>eh,StringToHashBucketFast:()=>th,Sub:()=>ri,Sum:()=>ti,SymbolicTensor:()=>Nr,Tan:()=>Vl,Tanh:()=>ai,Tensor:()=>nt,TensorBuffer:()=>fn,Tile:()=>wa,TopK:()=>Ul,Transform:()=>Gl,Transpose:()=>jr,Unique:()=>m0,Unpack:()=>Hl,UnsortedSegmentSum:()=>nh,UpperBound:()=>J_,Variable:()=>Sp,ZerosLike:()=>jl,_FusedMatMul:()=>Qa,abs:()=>tn,acos:()=>Ky,acosh:()=>Zy,add:()=>ce,addN:()=>y0,all:()=>A0,any:()=>Np,argMax:()=>Rs,argMin:()=>Yy,asin:()=>Jy,asinh:()=>Qy,atan:()=>eA,atan2:()=>tA,atanh:()=>nA,avgPool:()=>ch,avgPool3d:()=>rA,backend:()=>Bn,backend_util:()=>T,basicLSTMCell:()=>lw,batchNorm:()=>Vc,batchNorm2d:()=>aA,batchNorm3d:()=>oA,batchNorm4d:()=>iA,batchToSpaceND:()=>dh,bincount:()=>lA,booleanMaskAsync:()=>Uw,broadcastArgs:()=>uw,broadcastTo:()=>Hu,broadcast_util:()=>Kl,browser:()=>Js,buffer:()=>Be,callbacks:()=>nj,cast:()=>ye,ceil:()=>uA,clipByValue:()=>ms,clone:()=>On,complex:()=>ma,concat:()=>Ct,concat1d:()=>cA,concat2d:()=>Zl,concat3d:()=>dA,concat4d:()=>pA,constraints:()=>N8,conv1d:()=>x0,conv2d:()=>ga,conv2dTranspose:()=>b0,conv3d:()=>fA,conv3dTranspose:()=>mA,copyRegisteredKernels:()=>nD,cos:()=>ph,cosh:()=>v0,cosineWindow:()=>U0,cumprod:()=>Ep,cumsum:()=>w0,customGrad:()=>Zr,data:()=>Qk,denseBincount:()=>dw,deprecationWarn:()=>zy,depthToSpace:()=>gA,depthwiseConv2d:()=>Uc,deregisterOp:()=>aj,device_util:()=>oh,diag:()=>pw,dilation2d:()=>yA,disableDeprecationWarnings:()=>E$,dispose:()=>ee,disposeVariables:()=>R$,div:()=>he,divNoNan:()=>AA,dot:()=>xA,dropout:()=>HA,einsum:()=>hw,elu:()=>Gc,enableDebugMode:()=>N$,enableProdMode:()=>My,enclosingPowerOfTwo:()=>jA,engine:()=>sn,env:()=>X,equal:()=>_s,erf:()=>bA,euclideanNorm:()=>kA,exp:()=>Ds,expandDims:()=>Kt,expm1:()=>IA,eye:()=>k0,fft:()=>vh,fill:()=>jc,findBackend:()=>By,findBackendFactory:()=>P$,floor:()=>qc,floorDiv:()=>Wc,forceHalfFloat:()=>p9,fused:()=>tc,gather:()=>Xc,gatherND:()=>qw,gather_util:()=>Vy,getBackend:()=>Ln,getGradient:()=>x3,getKernel:()=>gm,getKernelsForBackend:()=>Xr,getThreadsCount:()=>_me,gpgpu_util:()=>GS,grad:()=>tO,grads:()=>nO,greater:()=>As,greaterEqual:()=>ui,ifft:()=>ec,imag:()=>lh,image:()=>Se,inTopKAsync:()=>Xw,initializers:()=>E8,input:()=>X8,io:()=>Ns,irfft:()=>L0,isFinite:()=>SA,isInf:()=>CA,isNaN:()=>TA,keep:()=>bn,kernel_impls:()=>hr,layers:()=>R8,leakyRelu:()=>hh,less:()=>I0,lessEqual:()=>ci,linalg:()=>KA,linspace:()=>Aw,loadGraphModel:()=>lq,loadGraphModelSync:()=>uq,loadLayersModel:()=>pG,localResponseNormalization:()=>NA,log:()=>$s,log1p:()=>fh,logSigmoid:()=>EA,logSoftmax:()=>C0,logSumExp:()=>T0,logicalAnd:()=>cr,logicalNot:()=>mh,logicalOr:()=>N0,logicalXor:()=>RA,losses:()=>o8,lowerBound:()=>bw,matMul:()=>Qe,math:()=>W6,max:()=>mn,maxPool:()=>gh,maxPool3d:()=>_A,maxPoolWithArgmax:()=>vw,maximum:()=>Qr,mean:()=>Bt,memory:()=>xm,meshgrid:()=>ww,metrics:()=>Sk,min:()=>ya,minimum:()=>Kc,mirrorPad:()=>DA,mod:()=>Jl,model:()=>cG,models:()=>Ck,moments:()=>yh,movingAverage:()=>Gw,mul:()=>L,multiRNNCell:()=>kw,multinomial:()=>Iw,neg:()=>Dt,nextFrame:()=>ZA,norm:()=>Hc,notEqual:()=>el,oneHot:()=>Yu,ones:()=>Es,onesLike:()=>Ps,op:()=>U,outerProduct:()=>Sw,pad:()=>Qs,pad1d:()=>Cw,pad2d:()=>Tw,pad3d:()=>Nw,pad4d:()=>Ew,pool:()=>$A,pow:()=>Aa,prelu:()=>xh,print:()=>Py,prod:()=>PA,profile:()=>_$,rand:()=>Rw,randomGamma:()=>_w,randomNormal:()=>R0,randomStandardNormal:()=>Dw,randomUniform:()=>Zc,range:()=>Qu,ready:()=>Bc,real:()=>Ju,reciprocal:()=>MA,registerBackend:()=>Xl,registerCallbackConstructor:()=>hG,registerGradient:()=>A6,registerKernel:()=>pr,registerOp:()=>rj,regularizers:()=>Tk,relu:()=>Fr,relu6:()=>_0,removeBackend:()=>$$,reshape:()=>G,reverse:()=>Ys,reverse1d:()=>$w,reverse2d:()=>Pw,reverse3d:()=>Fw,reverse4d:()=>Ow,rfft:()=>wh,round:()=>D0,rsqrt:()=>$0,scalar:()=>Ce,scatterND:()=>Hw,scatter_util:()=>Uy,searchSorted:()=>E0,selu:()=>P0,separableConv2d:()=>F0,sequential:()=>dG,serialization:()=>de,setBackend:()=>Ly,setPlatform:()=>F$,setThreadsCount:()=>Rme,setWasmPath:()=>Eme,setWasmPaths:()=>ab,setWebGLContext:()=>v2,setdiff1dAsync:()=>Mw,sigmoid:()=>Cn,sign:()=>zA,signal:()=>a8,sin:()=>O0,sinh:()=>M0,slice:()=>Me,slice1d:()=>bh,slice2d:()=>z0,slice3d:()=>di,slice4d:()=>so,slice_util:()=>Ut,softmax:()=>Ql,softplus:()=>Yl,spaceToBatchND:()=>Ah,sparse:()=>i8,sparseToDense:()=>jw,spectral:()=>r8,split:()=>Zt,sqrt:()=>Nn,square:()=>vt,squaredDifference:()=>B0,squeeze:()=>st,stack:()=>on,step:()=>eu,stridedSlice:()=>LA,string:()=>l8,sub:()=>fe,sum:()=>ke,sumOutType:()=>ah,tan:()=>BA,tanh:()=>Ji,tensor:()=>ct,tensor1d:()=>Ft,tensor2d:()=>lr,tensor3d:()=>Wy,tensor4d:()=>zw,tensor5d:()=>Lw,tensor6d:()=>Bw,tensor_util:()=>Er,test_util:()=>nw,tidy:()=>Y,tile:()=>Xs,time:()=>D$,topk:()=>WA,train:()=>Oi,transpose:()=>et,truncatedNormal:()=>W0,unique:()=>VA,unregisterGradient:()=>tD,unregisterKernel:()=>eD,unsortedSegmentSum:()=>V0,unstack:()=>En,upcastType:()=>Mn,upperBound:()=>Ww,util:()=>v,valueAndGrad:()=>sO,valueAndGrads:()=>rO,variable:()=>UA,variableGrads:()=>xw,version:()=>Hh,version_converter:()=>dq,version_core:()=>Xy,version_layers:()=>A5,version_wasm:()=>Dme,version_webgl:()=>Cne,webgl:()=>Tne,webgl_util:()=>fS,webgpu:()=>xT,where:()=>zn,whereAsync:()=>GA,zeros:()=>Wt,zerosLike:()=>it});var o_=Object.create,vy=Object.defineProperty,i_=Object.getOwnPropertyDescriptor,t6=Object.getOwnPropertyNames,l_=Object.getPrototypeOf,u_=Object.prototype.hasOwnProperty,ln=(e,t)=>function(){return t||(0,e[t6(e)[0]])((t={exports:{}}).exports,t),t.exports},Ue=(e,t)=>{for(var n in t)vy(e,n,{get:t[n],enumerable:!0})},c_=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of t6(t))!u_.call(e,r)&&r!==n&&vy(e,r,{get:()=>t[r],enumerable:!(s=i_(t,r))||s.enumerable});return e},co=(e,t,n)=>(n=e!=null?o_(l_(e)):{},c_(t||!e||!e.__esModule?vy(n,"default",{value:e,enumerable:!0}):n,e)),d_=ln({"node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js"(e,t){t.exports=s;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch($){}function s($,C,F){this.low=$|0,this.high=C|0,this.unsigned=!!F}s.prototype.__isLong__,Object.defineProperty(s.prototype,"__isLong__",{value:!0});function r($){return($&&$.__isLong__)===!0}s.isLong=r;var a={},o={};function i($,C){var F,V,q;return C?($>>>=0,(q=0<=$&&$<256)&&(V=o[$],V)?V:(F=u($,($|0)<0?-1:0,!0),q&&(o[$]=F),F)):($|=0,(q=-128<=$&&$<128)&&(V=a[$],V)?V:(F=u($,$<0?-1:0,!1),q&&(a[$]=F),F))}s.fromInt=i;function l($,C){if(isNaN($))return C?b:A;if(C){if($<0)return b;if($>=g)return _}else{if($<=-y)return P;if($+1>=y)return E}return $<0?l(-$,C).neg():u($%m|0,$/m|0,C)}s.fromNumber=l;function u($,C,F){return new s($,C,F)}s.fromBits=u;var c=Math.pow;function p($,C,F){if($.length===0)throw Error("empty string");if($==="NaN"||$==="Infinity"||$==="+Infinity"||$==="-Infinity")return A;if(typeof C=="number"?(F=C,C=!1):C=!!C,F=F||10,F<2||360)throw Error("interior hyphen");if(V===0)return p($.substring(1),C,F).neg();for(var q=l(c(F,8)),z=A,Z=0;Z<$.length;Z+=8){var J=Math.min(8,$.length-Z),te=parseInt($.substring(Z,Z+J),F);if(J<8){var B=l(c(F,J));z=z.mul(B).add(l(te))}else z=z.mul(q),z=z.add(l(te))}return z.unsigned=C,z}s.fromString=p;function d($,C){return typeof $=="number"?l($,C):typeof $=="string"?p($,C):u($.low,$.high,typeof C=="boolean"?C:$.unsigned)}s.fromValue=d;var h=1<<16,f=1<<24,m=h*h,g=m*m,y=g/2,x=i(f),A=i(0);s.ZERO=A;var b=i(0,!0);s.UZERO=b;var w=i(1);s.ONE=w;var S=i(1,!0);s.UONE=S;var I=i(-1);s.NEG_ONE=I;var E=u(-1,2147483647,!1);s.MAX_VALUE=E;var _=u(-1,-1,!0);s.MAX_UNSIGNED_VALUE=_;var P=u(0,-2147483648,!1);s.MIN_VALUE=P;var R=s.prototype;R.toInt=function(){return this.unsigned?this.low>>>0:this.low},R.toNumber=function(){return this.unsigned?(this.high>>>0)*m+(this.low>>>0):this.high*m+(this.low>>>0)},R.toString=function(C){if(C=C||10,C<2||36>>0,ie=B.toString(C);if(Z=te,Z.isZero())return ie+J;for(;ie.length<6;)ie="0"+ie;J=""+ie+J}},R.getHighBits=function(){return this.high},R.getHighBitsUnsigned=function(){return this.high>>>0},R.getLowBits=function(){return this.low},R.getLowBitsUnsigned=function(){return this.low>>>0},R.getNumBitsAbs=function(){if(this.isNegative())return this.eq(P)?64:this.neg().getNumBitsAbs();for(var C=this.high!=0?this.high:this.low,F=31;F>0&&(C&1<=0},R.isOdd=function(){return(this.low&1)===1},R.isEven=function(){return(this.low&1)===0},R.equals=function(C){return r(C)||(C=d(C)),this.unsigned!==C.unsigned&&this.high>>>31===1&&C.high>>>31===1?!1:this.high===C.high&&this.low===C.low},R.eq=R.equals,R.notEquals=function(C){return!this.eq(C)},R.neq=R.notEquals,R.ne=R.notEquals,R.lessThan=function(C){return this.comp(C)<0},R.lt=R.lessThan,R.lessThanOrEqual=function(C){return this.comp(C)<=0},R.lte=R.lessThanOrEqual,R.le=R.lessThanOrEqual,R.greaterThan=function(C){return this.comp(C)>0},R.gt=R.greaterThan,R.greaterThanOrEqual=function(C){return this.comp(C)>=0},R.gte=R.greaterThanOrEqual,R.ge=R.greaterThanOrEqual,R.compare=function(C){if(r(C)||(C=d(C)),this.eq(C))return 0;var F=this.isNegative(),V=C.isNegative();return F&&!V?-1:!F&&V?1:this.unsigned?C.high>>>0>this.high>>>0||C.high===this.high&&C.low>>>0>this.low>>>0?-1:1:this.sub(C).isNegative()?-1:1},R.comp=R.compare,R.negate=function(){return!this.unsigned&&this.eq(P)?P:this.not().add(w)},R.neg=R.negate,R.add=function(C){r(C)||(C=d(C));var F=this.high>>>16,V=this.high&65535,q=this.low>>>16,z=this.low&65535,Z=C.high>>>16,J=C.high&65535,te=C.low>>>16,B=C.low&65535,ie=0,Q=0,ae=0,le=0;return le+=z+B,ae+=le>>>16,le&=65535,ae+=q+te,Q+=ae>>>16,ae&=65535,Q+=V+J,ie+=Q>>>16,Q&=65535,ie+=F+Z,ie&=65535,u(ae<<16|le,ie<<16|Q,this.unsigned)},R.subtract=function(C){return r(C)||(C=d(C)),this.add(C.neg())},R.sub=R.subtract,R.multiply=function(C){if(this.isZero())return A;if(r(C)||(C=d(C)),n){var F=n.mul(this.low,this.high,C.low,C.high);return u(F,n.get_high(),this.unsigned)}if(C.isZero())return A;if(this.eq(P))return C.isOdd()?P:A;if(C.eq(P))return this.isOdd()?P:A;if(this.isNegative())return C.isNegative()?this.neg().mul(C.neg()):this.neg().mul(C).neg();if(C.isNegative())return this.mul(C.neg()).neg();if(this.lt(x)&&C.lt(x))return l(this.toNumber()*C.toNumber(),this.unsigned);var V=this.high>>>16,q=this.high&65535,z=this.low>>>16,Z=this.low&65535,J=C.high>>>16,te=C.high&65535,B=C.low>>>16,ie=C.low&65535,Q=0,ae=0,le=0,ge=0;return ge+=Z*ie,le+=ge>>>16,ge&=65535,le+=z*ie,ae+=le>>>16,le&=65535,le+=Z*B,ae+=le>>>16,le&=65535,ae+=q*ie,Q+=ae>>>16,ae&=65535,ae+=z*B,Q+=ae>>>16,ae&=65535,ae+=Z*te,Q+=ae>>>16,ae&=65535,Q+=V*ie+q*B+z*te+Z*J,Q&=65535,u(le<<16|ge,Q<<16|ae,this.unsigned)},R.mul=R.multiply,R.divide=function(C){if(r(C)||(C=d(C)),C.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&C.low===-1&&C.high===-1)return this;var F=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,C.low,C.high);return u(F,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:A;var V,q,z;if(this.unsigned){if(C.unsigned||(C=C.toUnsigned()),C.gt(this))return b;if(C.gt(this.shru(1)))return S;z=b}else{if(this.eq(P)){if(C.eq(w)||C.eq(I))return P;if(C.eq(P))return w;var Z=this.shr(1);return V=Z.div(C).shl(1),V.eq(A)?C.isNegative()?w:I:(q=this.sub(C.mul(V)),z=V.add(q.div(C)),z)}else if(C.eq(P))return this.unsigned?b:A;if(this.isNegative())return C.isNegative()?this.neg().div(C.neg()):this.neg().div(C).neg();if(C.isNegative())return this.div(C.neg()).neg();z=A}for(q=this;q.gte(C);){V=Math.max(1,Math.floor(q.toNumber()/C.toNumber()));for(var J=Math.ceil(Math.log(V)/Math.LN2),te=J<=48?1:c(2,J-48),B=l(V),ie=B.mul(C);ie.isNegative()||ie.gt(q);)V-=te,B=l(V,this.unsigned),ie=B.mul(C);B.isZero()&&(B=w),z=z.add(B),q=q.sub(ie)}return z},R.div=R.divide,R.modulo=function(C){if(r(C)||(C=d(C)),n){var F=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,C.low,C.high);return u(F,n.get_high(),this.unsigned)}return this.sub(this.div(C).mul(C))},R.mod=R.modulo,R.rem=R.modulo,R.not=function(){return u(~this.low,~this.high,this.unsigned)},R.and=function(C){return r(C)||(C=d(C)),u(this.low&C.low,this.high&C.high,this.unsigned)},R.or=function(C){return r(C)||(C=d(C)),u(this.low|C.low,this.high|C.high,this.unsigned)},R.xor=function(C){return r(C)||(C=d(C)),u(this.low^C.low,this.high^C.high,this.unsigned)},R.shiftLeft=function(C){return r(C)&&(C=C.toInt()),(C&=63)===0?this:C<32?u(this.low<>>32-C,this.unsigned):u(0,this.low<>>C|this.high<<32-C,this.high>>C,this.unsigned):u(this.high>>C-32,this.high>=0?0:-1,this.unsigned)},R.shr=R.shiftRight,R.shiftRightUnsigned=function(C){if(r(C)&&(C=C.toInt()),C&=63,C===0)return this;var F=this.high;if(C<32){var V=this.low;return u(V>>>C|F<<32-C,F>>>C,this.unsigned)}else return C===32?u(F,0,this.unsigned):u(F>>>C-32,0,this.unsigned)},R.shru=R.shiftRightUnsigned,R.shr_u=R.shiftRightUnsigned,R.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},R.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},R.toBytes=function(C){return C?this.toBytesLE():this.toBytesBE()},R.toBytesLE=function(){var C=this.high,F=this.low;return[F&255,F>>>8&255,F>>>16&255,F>>>24,C&255,C>>>8&255,C>>>16&255,C>>>24]},R.toBytesBE=function(){var C=this.high,F=this.low;return[C>>>24,C>>>16&255,C>>>8&255,C&255,F>>>24,F>>>16&255,F>>>8&255,F&255]},s.fromBytes=function(C,F,V){return V?s.fromBytesLE(C,F):s.fromBytesBE(C,F)},s.fromBytesLE=function(C,F){return new s(C[0]|C[1]<<8|C[2]<<16|C[3]<<24,C[4]|C[5]<<8|C[6]<<16|C[7]<<24,F)},s.fromBytesBE=function(C,F){return new s(C[4]<<24|C[5]<<16|C[6]<<8|C[7],C[0]<<24|C[1]<<16|C[2]<<8|C[3],F)}}}),p_=ln({"(disabled):node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/browser.js"(){}}),h_=ln({"(disabled):util"(){}}),f_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js"(e,t){(function(n,s,r){function a(u){var c=this,p=l();c.next=function(){var d=2091639*c.s0+c.c*23283064365386963e-26;return c.s0=c.s1,c.s1=c.s2,c.s2=d-(c.c=d|0)},c.c=1,c.s0=p(" "),c.s1=p(" "),c.s2=p(" "),c.s0-=p(u),c.s0<0&&(c.s0+=1),c.s1-=p(u),c.s1<0&&(c.s1+=1),c.s2-=p(u),c.s2<0&&(c.s2+=1),p=null}function o(u,c){return c.c=u.c,c.s0=u.s0,c.s1=u.s1,c.s2=u.s2,c}function i(u,c){var p=new a(u),d=c&&c.state,h=p.next;return h.int32=function(){return p.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,d&&(typeof d=="object"&&o(d,p),h.state=function(){return o(p,{})}),h}function l(){var u=4022871197,c=function(p){p=String(p);for(var d=0;d>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return c}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.alea=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),m_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js"(e,t){(function(n,s,r){function a(l){var u=this,c="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},l===(l|0)?u.x=l:c+=l;for(var p=0;p>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.xor128=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),g_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js"(e,t){(function(n,s,r){function a(l){var u=this,c="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:c+=l;for(var p=0;p>>4),u.next()}function o(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function i(l,u){var c=new a(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.xorwow=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),y_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js"(e,t){(function(n,s,r){function a(l){var u=this;u.next=function(){var p=u.x,d=u.i,h,f,m;return h=p[d],h^=h>>>7,f=h^h<<24,h=p[d+1&7],f^=h^h>>>10,h=p[d+3&7],f^=h^h>>>3,h=p[d+4&7],f^=h^h<<7,h=p[d+7&7],h=h^h<<13,f^=h^h<<9,p[d]=f,u.i=d+1&7,f};function c(p,d){var h,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,h=0;h0;--h)p.next()}c(u,l)}function o(l,u){return u.x=l.x.slice(),u.i=l.i,u}function i(l,u){l==null&&(l=+new Date);var c=new a(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(p.x&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.xorshift7=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),A_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js"(e,t){(function(n,s,r){function a(l){var u=this;u.next=function(){var p=u.w,d=u.X,h=u.i,f,m;return u.w=p=p+1640531527|0,m=d[h+34&127],f=d[h=h+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[h]=m^f,u.i=h,m+(p^p>>>16)|0};function c(p,d){var h,f,m,g,y,x=[],A=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,A=Math.max(A,d.length)),m=0,g=-32;g>>15,f^=f<<4,f^=f>>>13,g>=0&&(y=y+1640531527|0,h=x[g&127]^=f+y,m=h==0?m+1:0);for(m>=128&&(x[(d&&d.length||0)&127]=-1),m=127,g=4*128;g>0;--g)f=x[m+34&127],h=x[m=m+1&127],f^=f<<13,h^=h<<17,f^=f>>>15,h^=h>>>12,x[m]=f^h;p.w=y,p.X=x,p.i=m}c(u,l)}function o(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function i(l,u){l==null&&(l=+new Date);var c=new a(l),p=u&&u.state,d=function(){return(c.next()>>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(p.X&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.xor4096=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),x_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js"(e,t){(function(n,s,r){function a(l){var u=this,c="";u.next=function(){var d=u.b,h=u.c,f=u.d,m=u.a;return d=d<<25^d>>>7^h,h=h-f|0,f=f<<24^f>>>8^m,m=m-d|0,u.b=d=d<<20^d>>>12^h,u.c=h=h-f|0,u.d=f<<16^h>>>16^m,u.a=m-d|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):c+=l;for(var p=0;p>>0)/4294967296};return d.double=function(){do var h=c.next()>>>11,f=(c.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=c.next,d.quick=d,p&&(typeof p=="object"&&o(p,c),d.state=function(){return o(c,{})}),d}s&&s.exports?s.exports=i:r&&r.amd?r(function(){return i}):this.tychei=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),b_=ln({"(disabled):crypto"(){}}),v_=ln({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js"(e,t){(function(n,s,r){var a=256,o=6,i=52,l="random",u=r.pow(a,o),c=r.pow(2,i),p=c*2,d=a-1,h;function f(w,S,I){var E=[];S=S==!0?{entropy:!0}:S||{};var _=x(y(S.entropy?[w,b(s)]:w==null?A():w,3),E),P=new m(E),R=function(){for(var $=P.g(o),C=u,F=0;$=p;)$/=2,C/=2,F>>>=1;return($+F)/C};return R.int32=function(){return P.g(4)|0},R.quick=function(){return P.g(4)/4294967296},R.double=R,x(b(P.S),s),(S.pass||I||function($,C,F,V){return V&&(V.S&&g(V,P),$.state=function(){return g(P,{})}),F?(r[l]=$,C):$})(R,_,"global"in S?S.global:this==r,S.state)}function m(w){var S,I=w.length,E=this,_=0,P=E.i=E.j=0,R=E.S=[];for(I||(w=[I++]);_{var s=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(s=s||__filename),function(r){r=r||{};function a(){return Pe.buffer!=Kn&&xr(Pe.buffer),af}function o(){return Pe.buffer!=Kn&&xr(Pe.buffer),of}function i(){return Pe.buffer!=Kn&&xr(Pe.buffer),Bd}function l(){return Pe.buffer!=Kn&&xr(Pe.buffer),lf}function u(){return Pe.buffer!=Kn&&xr(Pe.buffer),uf}function c(){return Pe.buffer!=Kn&&xr(Pe.buffer),cf}function p(){return Pe.buffer!=Kn&&xr(Pe.buffer),df}var d=typeof r!="undefined"?r:{},h,f;d.ready=new Promise(function(N,O){h=N,f=O});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},d),y=[],x="./this.program",A=(N,O)=>{throw O},b=typeof window=="object",w=typeof importScripts=="function",S=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",I=d.ENVIRONMENT_IS_PTHREAD||!1,E="";function _(N){return d.locateFile?d.locateFile(N,E):E+N}var P,R,$,C;function F(N){if(N instanceof Zd)return;B("exiting due to exception: "+N)}var V,q,z;if(S){w?E=dm().dirname(E)+"/":E=__dirname+"/",z=()=>{q||(V=wy(),q=dm())},P=function(H,ne){return z(),H=q.normalize(H),V.readFileSync(H,ne?void 0:"utf8")},$=O=>{var H=P(O,!0);return H.buffer||(H=new Uint8Array(H)),H},R=(O,H,ne)=>{z(),O=q.normalize(O),V.readFile(O,function(Ae,ve){Ae?ne(Ae):H(ve.buffer)})},process.argv.length>1&&(x=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(O){if(!(O instanceof Zd))throw O}),process.on("unhandledRejection",function(O){throw O}),A=(O,H)=>{if(Ni())throw process.exitCode=O,H;F(H),process.exit(O)},d.inspect=function(){return"[Emscripten Module object]"};let N;try{N=w_()}catch(O){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),O}global.Worker=N.Worker}else(b||w)&&(w?E=self.location.href:typeof document!="undefined"&&document.currentScript&&(E=document.currentScript.src),typeof s!="undefined"&&s&&(E=s),E.indexOf("blob:")!==0?E=E.substr(0,E.replace(/[?#].*/,"").lastIndexOf("/")+1):E="",S||(P=N=>{var O=new XMLHttpRequest;return O.open("GET",N,!1),O.send(null),O.responseText},w&&($=N=>{var O=new XMLHttpRequest;return O.open("GET",N,!1),O.responseType="arraybuffer",O.send(null),new Uint8Array(O.response)}),R=(N,O,H)=>{var ne=new XMLHttpRequest;ne.open("GET",N,!0),ne.responseType="arraybuffer",ne.onload=()=>{if(ne.status==200||ne.status==0&&ne.response){O(ne.response);return}H()},ne.onerror=H,ne.send(null)}),C=N=>document.title=N);S&&typeof performance=="undefined"&&(global.performance=k_().performance);var Z=console.log.bind(console),J=console.warn.bind(console);S&&(z(),Z=N=>V.writeSync(1,N+` `),J=N=>V.writeSync(2,N+` `));var te=d.print||Z,B=d.printErr||J;Object.assign(d,g),g=null,d.arguments&&(y=d.arguments),d.thisProgram&&(x=d.thisProgram),d.quit&&(A=d.quit);var ie=4;function Q(N){Q.shown||(Q.shown={}),Q.shown[N]||(Q.shown[N]=1,B(N))}function ae(N,O){if(typeof WebAssembly.Function=="function"){for(var H={i:"i32",j:"i64",f:"f32",d:"f64"},ne={parameters:[],results:O[0]=="v"?[]:[H[O[0]]]},Ae=1;Ae{_e=N},je=Atomics.load,ot=Atomics.store,pt=Atomics.compareExchange,ht;d.wasmBinary&&(ht=d.wasmBinary);var At=d.noExitRuntime||!0;typeof WebAssembly!="object"&&ku("no native wasm support detected");var Pe,Tt,It=!1,jn;function Qt(N,O){N||ku(O)}function vs(N){var O=d["_"+N];return O}function pn(N,O,H,ne,Ae){var ve={string:function(Is){var $u=0;if(Is!=null&&Is!==0){var pv=(Is.length<<2)+1;$u=Du(pv),oa(Is,$u,pv)}return $u},array:function(Is){var $u=Du(Is.length);return ia(Is,$u),$u}};function Ne(Is){return O==="string"?Xn(Is):O==="boolean"?Boolean(Is):Is}var ze=vs(N),Lt=[],kr=0;if(ne)for(var Ir=0;Ir(H.buffer instanceof SharedArrayBuffer&&(H=new Uint8Array(H)),O.decode.call(O,H))}var Pn=typeof TextDecoder!="undefined"?new ks("utf8"):void 0;function Gs(N,O,H){for(var ne=O+H,Ae=O;N[Ae]&&!(Ae>=ne);)++Ae;if(Ae-O>16&&N.subarray&&Pn)return Pn.decode(N.subarray(O,Ae));for(var ve="";O>10,56320|kr&1023)}}return ve}function Xn(N,O){return N?Gs(o(),N,O):""}function aa(N,O,H,ne){if(!(ne>0))return 0;for(var Ae=H,ve=H+ne-1,Ne=0;Ne=55296&&ze<=57343){var Lt=N.charCodeAt(++Ne);ze=65536+((ze&1023)<<10)|Lt&1023}if(ze<=127){if(H>=ve)break;O[H++]=ze}else if(ze<=2047){if(H+1>=ve)break;O[H++]=192|ze>>6,O[H++]=128|ze&63}else if(ze<=65535){if(H+2>=ve)break;O[H++]=224|ze>>12,O[H++]=128|ze>>6&63,O[H++]=128|ze&63}else{if(H+3>=ve)break;O[H++]=240|ze>>18,O[H++]=128|ze>>12&63,O[H++]=128|ze>>6&63,O[H++]=128|ze&63}}return O[H]=0,H-Ae}function oa(N,O,H){return aa(N,o(),O,H)}function bu(N){for(var O=0,H=0;H=55296&&ne<=57343&&(ne=65536+((ne&1023)<<10)|N.charCodeAt(++H)&1023),ne<=127?++O:ne<=2047?O+=2:ne<=65535?O+=3:O+=4}return O}var Ma=typeof TextDecoder!="undefined"?new ks("utf-16le"):void 0;function ia(N,O){a().set(N,O)}function Ld(N,O,H){for(var ne=0;ne>0]=N.charCodeAt(ne);H||(a()[O>>0]=0)}function vu(N,O){return N%O>0&&(N+=O-N%O),N}var Kn,af,of,Bd,lf,uf,j4,cf,df;I&&(Kn=d.buffer);function xr(N){Kn=N,d.HEAP8=af=new Int8Array(N),d.HEAP16=Bd=new Int16Array(N),d.HEAP32=uf=new Int32Array(N),d.HEAPU8=of=new Uint8Array(N),d.HEAPU16=lf=new Uint16Array(N),d.HEAPU32=j4=new Uint32Array(N),d.HEAPF32=cf=new Float32Array(N),d.HEAPF64=df=new Float64Array(N)}var pf=d.INITIAL_MEMORY||16777216;if(I)Pe=d.wasmMemory,Kn=d.buffer;else if(d.wasmMemory)Pe=d.wasmMemory;else if(Pe=new WebAssembly.Memory({initial:pf/65536,maximum:32768,shared:!0}),!(Pe.buffer instanceof SharedArrayBuffer))throw B("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),S&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");Pe&&(Kn=Pe.buffer),pf=Kn.byteLength,xr(Kn);var Hs,wu=[],za=[],k1=[],hf=[],Ti=!1,I1=!1,ff=0;function Ni(){return At||ff>0}function Zn(){if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)q4(d.preRun.shift());Af(wu)}function Wd(){Ti=!0,!I&&Af(za)}function S1(){I||(Le.terminateAllThreads(),I1=!0)}function C1(){if(!I){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)Vd(d.postRun.shift());Af(hf)}}function q4(N){wu.unshift(N)}function X4(N){za.unshift(N)}function Vd(N){hf.unshift(N)}var La=0,mf=null,br=null;function Ud(N){La++,d.monitorRunDependencies&&d.monitorRunDependencies(La)}function K4(N){if(La--,d.monitorRunDependencies&&d.monitorRunDependencies(La),La==0&&(mf!==null&&(clearInterval(mf),mf=null),br)){var O=br;br=null,O()}}d.preloadedImages={},d.preloadedAudios={};function ku(N){I?postMessage({cmd:"onAbort",arg:N}):d.onAbort&&d.onAbort(N),N="Aborted("+N+")",B(N),It=!0,jn=1,N+=". Build with -s ASSERTIONS=1 for more info.";var O=new WebAssembly.RuntimeError(N);throw f(O),O}var T1="data:application/octet-stream;base64,";function Gd(N){return N.startsWith(T1)}function gf(N){return N.startsWith("file://")}var Yn;Yn="tfjs-backend-wasm-threaded-simd.wasm",Gd(Yn)||(Yn=_(Yn));function yf(N){try{if(N==Yn&&ht)return new Uint8Array(ht);if($)return $(N);throw"both async and sync fetching of the wasm failed"}catch(O){ku(O)}}function Iu(){if(!ht&&(b||w)){if(typeof fetch=="function"&&!gf(Yn))return fetch(Yn,{credentials:"same-origin"}).then(function(N){if(!N.ok)throw"failed to load wasm binary file at '"+Yn+"'";return N.arrayBuffer()}).catch(function(){return yf(Yn)});if(R)return new Promise(function(N,O){R(Yn,function(H){N(new Uint8Array(H))},O)})}return Promise.resolve().then(function(){return yf(Yn)})}function N1(){var N={env:Rf,wasi_snapshot_preview1:Rf};function O(Ne,ze){var Lt=Ne.exports;if(d.asm=Lt,F1(d.asm.emscripten_tls_init),Hs=d.asm.__indirect_function_table,X4(d.asm.__wasm_call_ctors),Tt=ze,!I){var kr=Le.unusedWorkers.length;Le.unusedWorkers.forEach(function(Ir){Le.loadWasmModuleToWorker(Ir,function(){--kr||K4("wasm-instantiate")})})}}I||Ud("wasm-instantiate");function H(Ne){O(Ne.instance,Ne.module)}function ne(Ne){return Iu().then(function(ze){return WebAssembly.instantiate(ze,N)}).then(function(ze){return ze}).then(Ne,function(ze){B("failed to asynchronously prepare wasm: "+ze),ku(ze)})}function Ae(){return!ht&&typeof WebAssembly.instantiateStreaming=="function"&&!Gd(Yn)&&!gf(Yn)&&typeof fetch=="function"?fetch(Yn,{credentials:"same-origin"}).then(function(Ne){var ze=WebAssembly.instantiateStreaming(Ne,N);return ze.then(H,function(Lt){return B("wasm streaming compile failed: "+Lt),B("falling back to ArrayBuffer instantiation"),ne(H)})}):ne(H)}if(d.instantiateWasm)try{var ve=d.instantiateWasm(N,O);return ve}catch(Ne){return B("Module.instantiateWasm callback failed with error: "+Ne),!1}return Ae().catch(f),{}}var Z4,Y4,E1={};function Af(N){for(;N.length>0;){var O=N.shift();if(typeof O=="function"){O(d);continue}var H=O.func;typeof H=="number"?O.arg===void 0?Cu(H)():Cu(H)(O.arg):H(O.arg===void 0?null:O.arg)}}function Su(N){var O=n3(),H=N();return Ff(O),H}function iR(N){return N}function J4(N){var O=/\b_Z[\w\d_]+/g;return N.replace(O,function(H){var ne=H;return H===ne?H:ne+" ["+H+"]"})}function R1(N){u()[N>>2]=0;var O=Le.pthreads[N];delete Le.pthreads[N],O.worker.terminate(),t3(N),Le.runningWorkers.splice(Le.runningWorkers.indexOf(O.worker),1),O.worker.pthread=void 0}function _1(N){var O=Le.pthreads[N];O.worker.postMessage({cmd:"cancel"})}function xf(N){var O=Le.pthreads[N];if(O){u()[N>>2]=0;var H=O.worker;Le.returnWorkerToPool(H)}}function bf(N){ZR(N)}function D1(N){if(N instanceof Zd||N=="unwind")return jn;A(1,N)}var Le={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],init:function(){I?Le.initWorker():Le.initMainThread()},initMainThread:function(){for(var N=8,O=0;O>2]=0;try{N()}finally{u()[dv>>2]=1}},receiveObjectTransfer:function(N){},threadInit:function(){for(var N in Le.tlsInitFunctions)Le.tlsInitFunctions[N]()},loadWasmModuleToWorker:function(N,O){N.onmessage=H=>{var ne=H.data,Ae=ne.cmd;if(N.pthread&&(Le.currentProxiedOperationCallerThread=N.pthread.threadInfoStruct),ne.targetThread&&ne.targetThread!=Pf()){var ve=Le.pthreads[ne.targetThread];ve?ve.worker.postMessage(ne,ne.transferList):B('Internal error! Worker sent a message "'+Ae+'" to target pthread '+ne.targetThread+", but that thread no longer exists!"),Le.currentProxiedOperationCallerThread=void 0;return}Ae==="processQueuedMainThreadWork"?ov():Ae==="spawnThread"?wf(ne):Ae==="cleanupThread"?xf(ne.thread):Ae==="killThread"?R1(ne.thread):Ae==="cancelThread"?_1(ne.thread):Ae==="loaded"?(N.loaded=!0,O&&O(N),N.runPthread&&(N.runPthread(),delete N.runPthread)):Ae==="print"?te("Thread "+ne.threadId+": "+ne.text):Ae==="printErr"?B("Thread "+ne.threadId+": "+ne.text):Ae==="alert"?alert("Thread "+ne.threadId+": "+ne.text):ne.target==="setimmediate"?N.postMessage(ne):Ae==="onAbort"?d.onAbort&&d.onAbort(ne.arg):B("worker sent an unknown command "+Ae),Le.currentProxiedOperationCallerThread=void 0},N.onerror=H=>{var ne="worker sent an error!";throw B(ne+" "+H.filename+":"+H.lineno+": "+H.message),H},S&&(N.on("message",function(H){N.onmessage({data:H})}),N.on("error",function(H){N.onerror(H)}),N.on("detachedExit",function(){})),N.postMessage({cmd:"load",urlOrBlob:d.mainScriptUrlOrBlob||s,wasmMemory:Pe,wasmModule:Tt})},allocateUnusedWorker:function(){var N=_("tfjs-backend-wasm-threaded-simd.worker.js");Le.unusedWorkers.push(new Worker(N))},getNewWorker:function(){return Le.unusedWorkers.length==0&&(Le.allocateUnusedWorker(),Le.loadWasmModuleToWorker(Le.unusedWorkers[0])),Le.unusedWorkers.pop()}};function $1(){var N=Pf(),O=u()[N+44>>2],H=u()[N+48>>2],ne=O-H;cv(O,ne),Ff(O)}d.establishStackSpace=$1;function vf(N){if(I)return _i(1,0,N);try{bf(N)}catch(O){D1(O)}}var Ei=[];function Cu(N){var O=Ei[N];return O||(N>=Ei.length&&(Ei.length=N+1),Ei[N]=O=Hs.get(N)),O}function P1(N,O){return Cu(N)(O)}d.invokeEntryPoint=P1;function Q4(){var N=new Error;if(!N.stack){try{throw new Error}catch(O){N=O}if(!N.stack)return"(no stack trace available)"}return N.stack.toString()}function F1(N,O,H){Le.tlsInitFunctions.push(N)}function ev(N,O){Hs.set(N,O),Ei[N]=O}var Ri;S?Ri=()=>{var N=process.hrtime();return N[0]*1e3+N[1]/1e6}:I?Ri=()=>performance.now()-d.__performance_now_clock_drift:Ri=()=>performance.now();var O1=!0;function M1(N){return u()[av()>>2]=N,N}function z1(N,O){var H;if(N===0)H=Date.now();else if((N===1||N===4)&&O1)H=Ri();else return M1(28),-1;return u()[O>>2]=H/1e3|0,u()[O+4>>2]=H%1e3*1e3*1e3|0,0}function L1(N,O){return z1(N,O)}function B1(N){iv(N,!w,1,!b),Le.threadInit()}function W1(N){I?postMessage({cmd:"cleanupThread",thread:N}):xf(N)}function wf(N){var O=Le.getNewWorker();if(!O)return 6;Le.runningWorkers.push(O);var H=Le.pthreads[N.pthread_ptr]={worker:O,threadInfoStruct:N.pthread_ptr};O.pthread=H;var ne={cmd:"run",start_routine:N.startRoutine,arg:N.arg,threadInfoStruct:N.pthread_ptr};return O.runPthread=()=>{ne.time=performance.now(),O.postMessage(ne,N.transferList)},O.loaded&&(O.runPthread(),delete O.runPthread),0}function V1(N,O,H,ne){if(typeof SharedArrayBuffer=="undefined")return B("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Ae=[],ve=0;if(I&&(Ae.length===0||ve))return lv(687865856,N,O,H,ne);if(ve)return ve;var Ne={startRoutine:H,pthread_ptr:N,arg:ne,transferList:Ae};return I?(Ne.cmd="spawnThread",postMessage(Ne,Ae),0):wf(Ne)}function U1(){return 2097152}function G1(N,O){if(N==O)postMessage({cmd:"processQueuedMainThreadWork"});else if(I)postMessage({targetThread:N,cmd:"processThreadQueue"});else{var H=Le.pthreads[N],ne=H&&H.worker;if(!ne)return;ne.postMessage({cmd:"processThreadQueue"})}return 1}function H1(){ku("")}function j1(){S||w||Q("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function kf(){return 2147483648}function q1(N,O,H){o().copyWithin(N,O,O+H)}function X1(){return S?I_().cpus().length:navigator.hardwareConcurrency}function _i(N,O){var H=arguments.length-2,ne=arguments;return Su(function(){for(var Ae=H,ve=Du(Ae*8),Ne=ve>>3,ze=0;ze>3,Ae=0;Ae>>16),xr(Pe.buffer),1}catch(O){}}function Y1(N){var O=o().length;if(N=N>>>0,N<=O)return!1;var H=kf();if(N>H)return!1;for(var ne=1;ne<=4;ne*=2){var Ae=O*(1+.2/ne);Ae=Math.min(Ae,N+100663296);var ve=Math.min(H,vu(Math.max(N,Ae),65536)),Ne=Z1(ve);if(Ne)return!0}return!1}var Je={inEventHandler:0,removeAllEventListeners:function(){for(var N=Je.eventHandlers.length-1;N>=0;--N)Je._removeHandler(N);Je.eventHandlers=[],Je.deferredCalls=[]},registerRemoveEventListeners:function(){Je.removeEventListenersRegistered||(k1.push(Je.removeAllEventListeners),Je.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(N,O,H){function ne(Ne,ze){if(Ne.length!=ze.length)return!1;for(var Lt in Ne)if(Ne[Lt]!=ze[Lt])return!1;return!0}for(var Ae in Je.deferredCalls){var ve=Je.deferredCalls[Ae];if(ve.targetFunction==N&&ne(ve.argsList,H))return}Je.deferredCalls.push({targetFunction:N,precedence:O,argsList:H}),Je.deferredCalls.sort(function(Ne,ze){return Ne.precedence>2]=H,u()[ve+4>>2]=ne,u()[ve+8>>2]=Ae,e3(N,637534208,O,ne,ve)})},getTargetThreadForEventCallback:function(N){switch(N){case 1:return 0;case 2:return Le.currentProxiedOperationCallerThread;default:return N}},getNodeNameForTarget:function(N){return N?N==window?"#window":N==screen?"#screen":N&&N.nodeName?N.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function J1(N){var O=bu(N)+1,H=Qg(O);return oa(N,H,O),H}function Q1(N,O,H,ne){Su(function(){var Ae=Du(12),ve=0;O&&(ve=J1(O)),u()[Ae>>2]=ve,u()[Ae+4>>2]=H,u()[Ae+8>>2]=ne,e3(N,657457152,0,ve,Ae)})}function eg(N,O,H,ne){O=O?Xn(O):"",Q1(N,O,H,ne)}function tg(N){return N>2?Xn(N):N}var ng=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function sg(N){N=tg(N);var O=ng[N]||(typeof document!="undefined"?document.querySelector(N):void 0);return O}function jd(N){return sg(N)}function If(N,O,H){var ne=jd(N);if(!ne)return-4;if(ne.canvasSharedPtr&&(u()[ne.canvasSharedPtr>>2]=O,u()[ne.canvasSharedPtr+4>>2]=H),ne.offscreenCanvas||!ne.controlTransferredOffscreen){ne.offscreenCanvas&&(ne=ne.offscreenCanvas);var Ae=!1;if(ne.GLctxObject&&ne.GLctxObject.GLctx){var ve=ne.GLctxObject.GLctx.getParameter(2978);Ae=ve[0]===0&&ve[1]===0&&ve[2]===ne.width&&ve[3]===ne.height}ne.width=O,ne.height=H,Ae&&ne.GLctxObject.GLctx.viewport(0,0,O,H)}else if(ne.canvasSharedPtr){var Ne=u()[ne.canvasSharedPtr+8>>2];return eg(Ne,N,O,H),1}else return-4;return 0}function Sf(N,O,H){return I?_i(2,1,N,O,H):If(N,O,H)}function rg(N,O,H){var ne=jd(N);return ne?If(N,O,H):Sf(N,O,H)}function ag(){throw"unwind"}function og(N){var O=N.getExtension("ANGLE_instanced_arrays");if(O)return N.vertexAttribDivisor=function(H,ne){O.vertexAttribDivisorANGLE(H,ne)},N.drawArraysInstanced=function(H,ne,Ae,ve){O.drawArraysInstancedANGLE(H,ne,Ae,ve)},N.drawElementsInstanced=function(H,ne,Ae,ve,Ne){O.drawElementsInstancedANGLE(H,ne,Ae,ve,Ne)},1}function ig(N){var O=N.getExtension("OES_vertex_array_object");if(O)return N.createVertexArray=function(){return O.createVertexArrayOES()},N.deleteVertexArray=function(H){O.deleteVertexArrayOES(H)},N.bindVertexArray=function(H){O.bindVertexArrayOES(H)},N.isVertexArray=function(H){return O.isVertexArrayOES(H)},1}function lg(N){var O=N.getExtension("WEBGL_draw_buffers");if(O)return N.drawBuffers=function(H,ne){O.drawBuffersWEBGL(H,ne)},1}function ug(N){return!!(N.multiDrawWebgl=N.getExtension("WEBGL_multi_draw"))}var zt={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function(O){zt.lastError||(zt.lastError=O)},getNewId:function(N){for(var O=zt.counter++,H=N.length;H>2]:-1;Ae+=Xn(u()[H+ve*4>>2],Ne<0?void 0:Ne)}return Ae},createContext:function(N,O){N.getContextSafariWebGL2Fixed||(N.getContextSafariWebGL2Fixed=N.getContext,N.getContext=function(Ae,ve){var Ne=N.getContextSafariWebGL2Fixed(Ae,ve);return Ae=="webgl"==Ne instanceof WebGLRenderingContext?Ne:null});var H=N.getContext("webgl",O);if(!H)return 0;var ne=zt.registerContext(H,O);return ne},registerContext:function(N,O){var H=Qg(8);u()[H+4>>2]=Pf();var ne={handle:H,attributes:O,version:O.majorVersion,GLctx:N};return N.canvas&&(N.canvas.GLctxObject=ne),zt.contexts[H]=ne,(typeof O.enableExtensionsByDefault=="undefined"||O.enableExtensionsByDefault)&&zt.initExtensions(ne),H},makeContextCurrent:function(N){return zt.currentContext=zt.contexts[N],d.ctx=Ef=zt.currentContext&&zt.currentContext.GLctx,!(N&&!Ef)},getContext:function(N){return zt.contexts[N]},deleteContext:function(N){zt.currentContext===zt.contexts[N]&&(zt.currentContext=null),typeof Je=="object"&&Je.removeAllHandlersOnTarget(zt.contexts[N].GLctx.canvas),zt.contexts[N]&&zt.contexts[N].GLctx.canvas&&(zt.contexts[N].GLctx.canvas.GLctxObject=void 0),rv(zt.contexts[N].handle),zt.contexts[N]=null},initExtensions:function(N){if(N||(N=zt.currentContext),!N.initExtensionsDone){N.initExtensionsDone=!0;var O=N.GLctx;og(O),ig(O),lg(O),O.disjointTimerQueryExt=O.getExtension("EXT_disjoint_timer_query"),ug(O);var H=O.getSupportedExtensions()||[];H.forEach(function(ne){!ne.includes("lose_context")&&!ne.includes("debug")&&O.getExtension(ne)})}}},cg=["default","low-power","high-performance"];function dg(N,O){var H=O>>2,ne=u()[H+6],Ae={alpha:!!u()[H+0],depth:!!u()[H+1],stencil:!!u()[H+2],antialias:!!u()[H+3],premultipliedAlpha:!!u()[H+4],preserveDrawingBuffer:!!u()[H+5],powerPreference:cg[ne],failIfMajorPerformanceCaveat:!!u()[H+7],majorVersion:u()[H+8],minorVersion:u()[H+9],enableExtensionsByDefault:u()[H+10],explicitSwapControl:u()[H+11],proxyContextToMainThread:u()[H+12],renderViaOffscreenBackBuffer:u()[H+13]},ve=jd(N);if(!ve||Ae.explicitSwapControl)return 0;var Ne=zt.createContext(ve,Ae);return Ne}function pg(N,O){return dg(N,O)}var Tu={mappings:{},buffers:[null,[],[]],printChar:function(N,O){var H=Tu.buffers[N];O===0||O===10?((N===1?te:B)(Gs(H,0)),H.length=0):H.push(O)},varargs:void 0,get:function(){Tu.varargs+=4;var N=u()[Tu.varargs-4>>2];return N},getStr:function(N){var O=Xn(N);return O},get64:function(N,O){return N}};function Cf(N){return I?_i(3,1,N):0}function Tf(N,O,H,ne,Ae){if(I)return _i(4,1,N,O,H,ne,Ae)}function Nf(N,O,H,ne){if(I)return _i(5,1,N,O,H,ne);for(var Ae=0,ve=0;ve>2],ze=u()[O+4>>2];O+=8;for(var Lt=0;Lt>2]=Ae,0}function hg(N){We(N)}Le.init();var Ef,fg=[null,vf,Sf,Cf,Tf,Nf],tv=!1,Rf={__clock_gettime:L1,__emscripten_init_main_thread_js:B1,__emscripten_thread_cleanup:W1,__pthread_create_js:V1,_emscripten_default_pthread_stack_size:U1,_emscripten_notify_thread_queue:G1,abort:H1,emscripten_check_blocking_allowed:j1,emscripten_get_heap_max:kf,emscripten_get_now:Ri,emscripten_memcpy_big:q1,emscripten_num_logical_cores:X1,emscripten_receive_on_main_thread_js:K1,emscripten_resize_heap:Y1,emscripten_set_canvas_element_size:rg,emscripten_unwind_to_js_event_loop:ag,emscripten_webgl_create_context:pg,exit:bf,fd_close:Cf,fd_seek:Tf,fd_write:Nf,memory:Pe||d.wasmMemory,setTempRet0:hg},nv=N1(),mg=d.___wasm_call_ctors=function(){return(mg=d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},gg=d._init=function(){return(gg=d._init=d.asm.init).apply(null,arguments)},yg=d._init_with_threads_count=function(){return(yg=d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},Ag=d._get_threads_count=function(){return(Ag=d._get_threads_count=d.asm.get_threads_count).apply(null,arguments)},xg=d._register_tensor=function(){return(xg=d._register_tensor=d.asm.register_tensor).apply(null,arguments)},bg=d._dispose_data=function(){return(bg=d._dispose_data=d.asm.dispose_data).apply(null,arguments)},vg=d._dispose=function(){return(vg=d._dispose=d.asm.dispose).apply(null,arguments)},wg=d._Abs=function(){return(wg=d._Abs=d.asm.Abs).apply(null,arguments)},kg=d._Add=function(){return(kg=d._Add=d.asm.Add).apply(null,arguments)},Ig=d._AddN=function(){return(Ig=d._AddN=d.asm.AddN).apply(null,arguments)},Sg=d._All=function(){return(Sg=d._All=d.asm.All).apply(null,arguments)},Cg=d._Any=function(){return(Cg=d._Any=d.asm.Any).apply(null,arguments)},Tg=d._ArgMax=function(){return(Tg=d._ArgMax=d.asm.ArgMax).apply(null,arguments)},Ng=d._AvgPool=function(){return(Ng=d._AvgPool=d.asm.AvgPool).apply(null,arguments)},Eg=d._BatchMatMul=function(){return(Eg=d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},Rg=d._Ceil=function(){return(Rg=d._Ceil=d.asm.Ceil).apply(null,arguments)},_g=d._ClipByValue=function(){return(_g=d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},Dg=d._Conv2D=function(){return(Dg=d._Conv2D=d.asm.Conv2D).apply(null,arguments)},$g=d._Conv2DBackpropInput=function(){return($g=d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},Pg=d._Cos=function(){return(Pg=d._Cos=d.asm.Cos).apply(null,arguments)},Fg=d._Cosh=function(){return(Fg=d._Cosh=d.asm.Cosh).apply(null,arguments)},Og=d._CropAndResize=function(){return(Og=d._CropAndResize=d.asm.CropAndResize).apply(null,arguments)},Mg=d._Cumprod=function(){return(Mg=d._Cumprod=d.asm.Cumprod).apply(null,arguments)},zg=d._Cumsum=function(){return(zg=d._Cumsum=d.asm.Cumsum).apply(null,arguments)},Lg=d._DepthToSpace=function(){return(Lg=d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},Bg=d._DepthwiseConv2dNative=function(){return(Bg=d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},Wg=d._Elu=function(){return(Wg=d._Elu=d.asm.Elu).apply(null,arguments)},Vg=d._Equal=function(){return(Vg=d._Equal=d.asm.Equal).apply(null,arguments)},Ug=d._Exp=function(){return(Ug=d._Exp=d.asm.Exp).apply(null,arguments)},Gg=d._FlipLeftRight=function(){return(Gg=d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},Hg=d._Floor=function(){return(Hg=d._Floor=d.asm.Floor).apply(null,arguments)},jg=d._FloorDiv=function(){return(jg=d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},qg=d._FusedBatchNorm=function(){return(qg=d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},Xg=d._FusedConv2D=function(){return(Xg=d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},_f=d._FusedDepthwiseConv2D=function(){return(_f=d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},Df=d._Gather=function(){return(Df=d._Gather=d.asm.Gather).apply(null,arguments)},qd=d._GatherNd=function(){return(qd=d._GatherNd=d.asm.GatherNd).apply(null,arguments)},Kg=d._Greater=function(){return(Kg=d._Greater=d.asm.Greater).apply(null,arguments)},Zg=d._GreaterEqual=function(){return(Zg=d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},Nu=d._LeakyRelu=function(){return(Nu=d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},Xd=d._Less=function(){return(Xd=d._Less=d.asm.Less).apply(null,arguments)},Kd=d._LessEqual=function(){return(Kd=d._LessEqual=d.asm.LessEqual).apply(null,arguments)},sv=d._Log=function(){return(sv=d._Log=d.asm.Log).apply(null,arguments)},Eu=d._LogicalAnd=function(){return(Eu=d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},Ru=d._LogicalNot=function(){return(Ru=d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},Yg=d._LogicalOr=function(){return(Yg=d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},K=d._LogicalXor=function(){return(K=d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},se=d._Max=function(){return(se=d._Max=d.asm.Max).apply(null,arguments)},xe=d._MaxPool=function(){return(xe=d._MaxPool=d.asm.MaxPool).apply(null,arguments)},De=d._Maximum=function(){return(De=d._Maximum=d.asm.Maximum).apply(null,arguments)},ft=d._Mean=function(){return(ft=d._Mean=d.asm.Mean).apply(null,arguments)},yt=d._Min=function(){return(yt=d._Min=d.asm.Min).apply(null,arguments)},tt=d._Minimum=function(){return(tt=d._Minimum=d.asm.Minimum).apply(null,arguments)},Ze=d._MirrorPad=function(){return(Ze=d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},en=d._Multiply=function(){return(en=d._Multiply=d.asm.Multiply).apply(null,arguments)},vr=d._Neg=function(){return(vr=d._Neg=d.asm.Neg).apply(null,arguments)},wr=d._NonMaxSuppressionV3=function(){return(wr=d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},_u=d._NonMaxSuppressionV4=function(){return(_u=d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},Di=d._NonMaxSuppressionV5=function(){return(Di=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},Jg=d._NotEqual=function(){return(Jg=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},Jn=d._OneHot=function(){return(Jn=d._OneHot=d.asm.OneHot).apply(null,arguments)},Ba=d._PadV2=function(){return(Ba=d._PadV2=d.asm.PadV2).apply(null,arguments)},$f=d._Pow=function(){return($f=d._Pow=d.asm.Pow).apply(null,arguments)},lR=d._Prelu=function(){return(lR=d._Prelu=d.asm.Prelu).apply(null,arguments)},uR=d._Prod=function(){return(uR=d._Prod=d.asm.Prod).apply(null,arguments)},cR=d._RealDiv=function(){return(cR=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},dR=d._Relu=function(){return(dR=d._Relu=d.asm.Relu).apply(null,arguments)},pR=d._Relu6=function(){return(pR=d._Relu6=d.asm.Relu6).apply(null,arguments)},hR=d._ResizeBilinear=function(){return(hR=d._ResizeBilinear=d.asm.ResizeBilinear).apply(null,arguments)},fR=d._ResizeNearestNeighbor=function(){return(fR=d._ResizeNearestNeighbor=d.asm.ResizeNearestNeighbor).apply(null,arguments)},mR=d._Reverse=function(){return(mR=d._Reverse=d.asm.Reverse).apply(null,arguments)},gR=d._RotateWithOffset=function(){return(gR=d._RotateWithOffset=d.asm.RotateWithOffset).apply(null,arguments)},yR=d._Round=function(){return(yR=d._Round=d.asm.Round).apply(null,arguments)},AR=d._Rsqrt=function(){return(AR=d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},xR=d._ScatterNd=function(){return(xR=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},bR=d._SelectV2=function(){return(bR=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},vR=d._Sigmoid=function(){return(vR=d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},wR=d._Sin=function(){return(wR=d._Sin=d.asm.Sin).apply(null,arguments)},kR=d._Softmax=function(){return(kR=d._Softmax=d.asm.Softmax).apply(null,arguments)},IR=d._SparseFillEmptyRows=function(){return(IR=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},SR=d._SparseReshape=function(){return(SR=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},CR=d._SparseSegmentReduction=function(){return(CR=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},TR=d._Sqrt=function(){return(TR=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},NR=d._Square=function(){return(NR=d._Square=d.asm.Square).apply(null,arguments)},ER=d._SquaredDifference=function(){return(ER=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},RR=d._Step=function(){return(RR=d._Step=d.asm.Step).apply(null,arguments)},_R=d._StridedSlice=function(){return(_R=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},DR=d._Sub=function(){return(DR=d._Sub=d.asm.Sub).apply(null,arguments)},$R=d._Sum=function(){return($R=d._Sum=d.asm.Sum).apply(null,arguments)},PR=d._Tan=function(){return(PR=d._Tan=d.asm.Tan).apply(null,arguments)},FR=d._Tanh=function(){return(FR=d._Tanh=d.asm.Tanh).apply(null,arguments)},OR=d._Tile=function(){return(OR=d._Tile=d.asm.Tile).apply(null,arguments)},MR=d._TopK=function(){return(MR=d._TopK=d.asm.TopK).apply(null,arguments)},zR=d._Transform=function(){return(zR=d._Transform=d.asm.Transform).apply(null,arguments)},LR=d._Transpose=function(){return(LR=d._Transpose=d.asm.Transpose).apply(null,arguments)},BR=d.__FusedMatMul=function(){return(BR=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},Qg=d._malloc=function(){return(Qg=d._malloc=d.asm.malloc).apply(null,arguments)},rv=d._free=function(){return(rv=d._free=d.asm.free).apply(null,arguments)},WR=d._emscripten_tls_init=function(){return(WR=d._emscripten_tls_init=d.asm.emscripten_tls_init).apply(null,arguments)},av=d.___errno_location=function(){return(av=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},Pf=d._pthread_self=function(){return(Pf=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},ov=d._emscripten_main_thread_process_queued_calls=function(){return(ov=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},VR=d.__emscripten_thread_crashed=function(){return(VR=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},iv=d.__emscripten_thread_init=function(){return(iv=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},UR=d._emscripten_current_thread_process_queued_calls=function(){return(UR=d._emscripten_current_thread_process_queued_calls=d.asm.emscripten_current_thread_process_queued_calls).apply(null,arguments)},GR=d._emscripten_main_browser_thread_id=function(){return(GR=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},HR=d._emscripten_sync_run_in_main_thread_2=function(){return(HR=d._emscripten_sync_run_in_main_thread_2=d.asm.emscripten_sync_run_in_main_thread_2).apply(null,arguments)},lv=d._emscripten_sync_run_in_main_thread_4=function(){return(lv=d._emscripten_sync_run_in_main_thread_4=d.asm.emscripten_sync_run_in_main_thread_4).apply(null,arguments)},uv=d._emscripten_run_in_main_runtime_thread_js=function(){return(uv=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},e3=d._emscripten_dispatch_to_thread_=function(){return(e3=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},t3=d.__emscripten_thread_free_data=function(){return(t3=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},jR=d.__emscripten_thread_exit=function(){return(jR=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},qR=d._memalign=function(){return(qR=d._memalign=d.asm.memalign).apply(null,arguments)},cv=d._emscripten_stack_set_limits=function(){return(cv=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},n3=d.stackSave=function(){return(n3=d.stackSave=d.asm.stackSave).apply(null,arguments)},Ff=d.stackRestore=function(){return(Ff=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},Du=d.stackAlloc=function(){return(Du=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},XR=d.dynCall_iijjiiii=function(){return(XR=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},KR=d.dynCall_jiji=function(){return(KR=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)},dv=d.__emscripten_allow_main_runtime_queued_calls=21672;d.cwrap=qn,d.keepRuntimeAlive=Ni,d.PThread=Le,d.PThread=Le,d.wasmMemory=Pe,d.ExitStatus=Zd;var Of;function Zd(N){this.name="ExitStatus",this.message="Program terminated with exit("+N+")",this.status=N}br=function N(){Of||s3(),Of||(br=N)};function s3(N){if(N=N||y,La>0)return;if(I){h(d),Wd(),postMessage({cmd:"loaded"});return}if(Zn(),La>0)return;function O(){Of||(Of=!0,d.calledRun=!0,!It&&(Wd(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),C1()))}d.setStatus?(d.setStatus("Running..."),setTimeout(function(){setTimeout(function(){d.setStatus("")},1),O()},1)):O()}d.run=s3;function ZR(N,O){if(jn=N,!O&&I)throw vf(N),"unwind";Ni()||S1(),YR(N)}function YR(N){jn=N,Ni()||(Le.terminateAllThreads(),d.onExit&&d.onExit(N),It=!0),A(N,new Zd(N))}if(d.preInit)for(typeof d.preInit=="function"&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.pop()();s3();var Mf;m&&(Mf={uncaughtException:process.listeners("uncaughtException").filter(function(N){return!m.uncaughtException.indexOf(N)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(N){return!m.unhandledRejection.indexOf(N)>-1})});var zf;if(typeof WasmBackendModule!="undefined")zf=WasmBackendModule;else if(typeof r!="undefined")zf=r;else throw new Error("Could not find wasm module in post.js");if(Mf){var JR=zf._dispose;zf._dispose=function(){JR(),Mf.uncaughtException.forEach(function(N){process.removeListener("uncaughtException",N)}),Mf.unhandledRejection.forEach(function(N){process.removeListener("unhandledRejection",N)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}}),C_=ln({"node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_hek32lflchivueqv5i4vgonghu/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js"(e,t){t.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" ");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=((info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports});self.onmessage=(e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["__emscripten_thread_exit"](result)}}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else if(e.data.cmd==="processProxyingQueue"){if(Module["_pthread_self"]()){Module["_emscripten_proxy_execute_queue"](e.data.queue)}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}});`}}),T_=ln({"node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_hek32lflchivueqv5i4vgonghu/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js"(e,t){var n=(()=>{var s=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(s=s||__filename),function(r){r=r||{};var a=typeof r!="undefined"?r:{},o,i;a.ready=new Promise(function(K,se){o=K,i=se});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},a),c=[],p="./this.program",d=(K,se)=>{throw se},h=typeof window=="object",f=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(K){return a.locateFile?a.locateFile(K,g):g+K}var x,A,b,w;function S(K){if(K instanceof Xd)return;R("exiting due to exception: "+K)}var I,E,_;m?(f?g=dm().dirname(g)+"/":g=__dirname+"/",_=()=>{E||(I=wy(),E=dm())},x=function(se,xe){return _(),se=E.normalize(se),I.readFileSync(se,xe?void 0:"utf8")},b=K=>{var se=x(K,!0);return se.buffer||(se=new Uint8Array(se)),se},A=(K,se,xe)=>{_(),K=E.normalize(K),I.readFile(K,function(De,ft){De?xe(De):se(ft.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),c=process.argv.slice(2),process.on("uncaughtException",function(K){if(!(K instanceof Xd))throw K}),process.on("unhandledRejection",function(K){throw K}),d=(K,se)=>{if(Bd())throw process.exitCode=K,se;S(se),process.exit(K)},a.inspect=function(){return"[Emscripten Module object]"}):(h||f)&&(f?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),s&&(g=s),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",x=K=>{var se=new XMLHttpRequest;return se.open("GET",K,!1),se.send(null),se.responseText},f&&(b=K=>{var se=new XMLHttpRequest;return se.open("GET",K,!1),se.responseType="arraybuffer",se.send(null),new Uint8Array(se.response)}),A=(K,se,xe)=>{var De=new XMLHttpRequest;De.open("GET",K,!0),De.responseType="arraybuffer",De.onload=()=>{if(De.status==200||De.status==0&&De.response){se(De.response);return}xe()},De.onerror=xe,De.send(null)},w=K=>document.title=K);var P=a.print||console.log.bind(console),R=a.printErr||console.warn.bind(console);Object.assign(a,u),u=null,a.arguments&&(c=a.arguments),a.thisProgram&&(p=a.thisProgram),a.quit&&(d=a.quit);var $=4;function C(K){C.shown||(C.shown={}),C.shown[K]||(C.shown[K]=1,R(K))}function F(K,se){if(typeof WebAssembly.Function=="function"){for(var xe={i:"i32",j:"i64",f:"f32",d:"f64"},De={parameters:[],results:se[0]=="v"?[]:[xe[se[0]]]},ft=1;ft{J=K},B;a.wasmBinary&&(B=a.wasmBinary);var ie=a.noExitRuntime||!0;typeof WebAssembly!="object"&&Ti("no native wasm support detected");var Q,ae=!1,le;function ge(K,se){K||Ti(se)}function we(K){var se=a["_"+K];return se}function Re(K,se,xe,De,ft){var yt={string:function(Jn){var Ba=0;if(Jn!=null&&Jn!==0){var $f=(Jn.length<<2)+1;Ba=qd($f),At(Jn,Ba,$f)}return Ba},array:function(Jn){var Ba=qd(Jn.length);return It(Jn,Ba),Ba}};function tt(Jn){return se==="string"?pt(Jn):se==="boolean"?Boolean(Jn):Jn}var Ze=we(K),en=[],vr=0;if(De)for(var wr=0;wr=De);)++ft;if(ft-se>16&&K.subarray&&je)return je.decode(K.subarray(se,ft));for(var yt="";se>10,56320|vr&1023)}}return yt}function pt(K,se){return K?ot(qn,K,se):""}function ht(K,se,xe,De){if(!(De>0))return 0;for(var ft=xe,yt=xe+De-1,tt=0;tt=55296&&Ze<=57343){var en=K.charCodeAt(++tt);Ze=65536+((Ze&1023)<<10)|en&1023}if(Ze<=127){if(xe>=yt)break;se[xe++]=Ze}else if(Ze<=2047){if(xe+1>=yt)break;se[xe++]=192|Ze>>6,se[xe++]=128|Ze&63}else if(Ze<=65535){if(xe+2>=yt)break;se[xe++]=224|Ze>>12,se[xe++]=128|Ze>>6&63,se[xe++]=128|Ze&63}else{if(xe+3>=yt)break;se[xe++]=240|Ze>>18,se[xe++]=128|Ze>>12&63,se[xe++]=128|Ze>>6&63,se[xe++]=128|Ze&63}}return se[xe]=0,xe-ft}function At(K,se,xe){return ht(K,qn,se,xe)}function Pe(K){for(var se=0,xe=0;xe=55296&&De<=57343&&(De=65536+((De&1023)<<10)|K.charCodeAt(++xe)&1023),De<=127?++se:De<=2047?se+=2:De<=65535?se+=3:se+=4}return se}var Tt=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function It(K,se){pn.set(K,se)}function jn(K,se,xe){for(var De=0;De>0]=K.charCodeAt(De);xe||(pn[se>>0]=0)}function Qt(K,se){return K%se>0&&(K+=se-K%se),K}var vs,pn,qn,ws,ks,Pn,Gs,Xn,aa;function oa(K){vs=K,a.HEAP8=pn=new Int8Array(K),a.HEAP16=ws=new Int16Array(K),a.HEAP32=Pn=new Int32Array(K),a.HEAPU8=qn=new Uint8Array(K),a.HEAPU16=ks=new Uint16Array(K),a.HEAPU32=Gs=new Uint32Array(K),a.HEAPF32=Xn=new Float32Array(K),a.HEAPF64=aa=new Float64Array(K)}var bu=a.INITIAL_MEMORY||16777216,Ma,ia=[],Ld=[],vu=[],Kn=!1,af=!1,of=0;function Bd(){return ie||of>0}function lf(){if(a.preRun)for(typeof a.preRun=="function"&&(a.preRun=[a.preRun]);a.preRun.length;)df(a.preRun.shift());Vd(ia)}function uf(){Kn=!0,Vd(Ld)}function j4(){af=!0}function cf(){if(a.postRun)for(typeof a.postRun=="function"&&(a.postRun=[a.postRun]);a.postRun.length;)pf(a.postRun.shift());Vd(vu)}function df(K){ia.unshift(K)}function xr(K){Ld.unshift(K)}function pf(K){vu.unshift(K)}var Hs=0,wu=null,za=null;function k1(K){Hs++,a.monitorRunDependencies&&a.monitorRunDependencies(Hs)}function hf(K){if(Hs--,a.monitorRunDependencies&&a.monitorRunDependencies(Hs),Hs==0&&(wu!==null&&(clearInterval(wu),wu=null),za)){var se=za;za=null,se()}}a.preloadedImages={},a.preloadedAudios={};function Ti(K){a.onAbort&&a.onAbort(K),K="Aborted("+K+")",R(K),ae=!0,le=1,K+=". Build with -s ASSERTIONS=1 for more info.";var se=new WebAssembly.RuntimeError(K);throw i(se),se}var I1="data:application/octet-stream;base64,";function ff(K){return K.startsWith(I1)}function Ni(K){return K.startsWith("file://")}var Zn;Zn="tfjs-backend-wasm.wasm",ff(Zn)||(Zn=y(Zn));function Wd(K){try{if(K==Zn&&B)return new Uint8Array(B);if(b)return b(K);throw"both async and sync fetching of the wasm failed"}catch(se){Ti(se)}}function S1(){if(!B&&(h||f)){if(typeof fetch=="function"&&!Ni(Zn))return fetch(Zn,{credentials:"same-origin"}).then(function(K){if(!K.ok)throw"failed to load wasm binary file at '"+Zn+"'";return K.arrayBuffer()}).catch(function(){return Wd(Zn)});if(A)return new Promise(function(K,se){A(Zn,function(xe){K(new Uint8Array(xe))},se)})}return Promise.resolve().then(function(){return Wd(Zn)})}function C1(){var K={env:Su,wasi_snapshot_preview1:Su};function se(tt,Ze){var en=tt.exports;a.asm=en,Q=a.asm.memory,oa(Q.buffer),Ma=a.asm.__indirect_function_table,xr(a.asm.__wasm_call_ctors),hf("wasm-instantiate")}k1("wasm-instantiate");function xe(tt){se(tt.instance)}function De(tt){return S1().then(function(Ze){return WebAssembly.instantiate(Ze,K)}).then(function(Ze){return Ze}).then(tt,function(Ze){R("failed to asynchronously prepare wasm: "+Ze),Ti(Ze)})}function ft(){return!B&&typeof WebAssembly.instantiateStreaming=="function"&&!ff(Zn)&&!Ni(Zn)&&typeof fetch=="function"?fetch(Zn,{credentials:"same-origin"}).then(function(tt){var Ze=WebAssembly.instantiateStreaming(tt,K);return Ze.then(xe,function(en){return R("wasm streaming compile failed: "+en),R("falling back to ArrayBuffer instantiation"),De(xe)})}):De(xe)}if(a.instantiateWasm)try{var yt=a.instantiateWasm(K,se);return yt}catch(tt){return R("Module.instantiateWasm callback failed with error: "+tt),!1}return ft().catch(i),{}}var q4,X4;function Vd(K){for(;K.length>0;){var se=K.shift();if(typeof se=="function"){se(a);continue}var xe=se.func;typeof xe=="number"?se.arg===void 0?Ud(xe)():Ud(xe)(se.arg):xe(se.arg===void 0?null:se.arg)}}function La(K){return K}function mf(K){var se=/\b_Z[\w\d_]+/g;return K.replace(se,function(xe){var De=xe;return xe===De?xe:De+" ["+xe+"]"})}var br=[];function Ud(K){var se=br[K];return se||(K>=br.length&&(br.length=K+1),br[K]=se=Ma.get(K)),se}function K4(){var K=new Error;if(!K.stack){try{throw new Error}catch(se){K=se}if(!K.stack)return"(no stack trace available)"}return K.stack.toString()}function ku(K,se){Ma.set(K,se),br[K]=se}function T1(){Ti("")}function Gd(){return 2147483648}function gf(K,se,xe){qn.copyWithin(K,se,se+xe)}function Yn(K){try{return Q.grow(K-vs.byteLength+65535>>>16),oa(Q.buffer),1}catch(se){}}function yf(K){var se=qn.length;K=K>>>0;var xe=Gd();if(K>xe)return!1;for(var De=1;De<=4;De*=2){var ft=se*(1+.2/De);ft=Math.min(ft,K+100663296);var yt=Math.min(xe,Qt(Math.max(K,ft),65536)),tt=Yn(yt);if(tt)return!0}return!1}var Iu={mappings:{},buffers:[null,[],[]],printChar:function(K,se){var xe=Iu.buffers[K];se===0||se===10?((K===1?P:R)(ot(xe,0)),xe.length=0):xe.push(se)},varargs:void 0,get:function(){Iu.varargs+=4;var K=Pn[Iu.varargs-4>>2];return K},getStr:function(K){var se=pt(K);return se},get64:function(K,se){return K}};function N1(K){return 0}function Z4(K,se,xe,De,ft){}function Y4(K,se,xe,De){for(var ft=0,yt=0;yt>2],Ze=Pn[se+4>>2];se+=8;for(var en=0;en>2]=ft,0}function E1(K){te(K)}var Af=!1,Su={abort:T1,emscripten_get_heap_max:Gd,emscripten_memcpy_big:gf,emscripten_resize_heap:yf,fd_close:N1,fd_seek:Z4,fd_write:Y4,setTempRet0:E1},iR=C1(),J4=a.___wasm_call_ctors=function(){return(J4=a.___wasm_call_ctors=a.asm.__wasm_call_ctors).apply(null,arguments)},R1=a._init=function(){return(R1=a._init=a.asm.init).apply(null,arguments)},_1=a._init_with_threads_count=function(){return(_1=a._init_with_threads_count=a.asm.init_with_threads_count).apply(null,arguments)},xf=a._get_threads_count=function(){return(xf=a._get_threads_count=a.asm.get_threads_count).apply(null,arguments)},bf=a._register_tensor=function(){return(bf=a._register_tensor=a.asm.register_tensor).apply(null,arguments)},D1=a._dispose_data=function(){return(D1=a._dispose_data=a.asm.dispose_data).apply(null,arguments)},Le=a._dispose=function(){return(Le=a._dispose=a.asm.dispose).apply(null,arguments)},$1=a._Abs=function(){return($1=a._Abs=a.asm.Abs).apply(null,arguments)},vf=a._Add=function(){return(vf=a._Add=a.asm.Add).apply(null,arguments)},Ei=a._AddN=function(){return(Ei=a._AddN=a.asm.AddN).apply(null,arguments)},Cu=a._All=function(){return(Cu=a._All=a.asm.All).apply(null,arguments)},P1=a._Any=function(){return(P1=a._Any=a.asm.Any).apply(null,arguments)},Q4=a._ArgMax=function(){return(Q4=a._ArgMax=a.asm.ArgMax).apply(null,arguments)},F1=a._AvgPool=function(){return(F1=a._AvgPool=a.asm.AvgPool).apply(null,arguments)},ev=a._BatchMatMul=function(){return(ev=a._BatchMatMul=a.asm.BatchMatMul).apply(null,arguments)},Ri=a._Ceil=function(){return(Ri=a._Ceil=a.asm.Ceil).apply(null,arguments)},O1=a._ClipByValue=function(){return(O1=a._ClipByValue=a.asm.ClipByValue).apply(null,arguments)},M1=a._Conv2D=function(){return(M1=a._Conv2D=a.asm.Conv2D).apply(null,arguments)},z1=a._Conv2DBackpropInput=function(){return(z1=a._Conv2DBackpropInput=a.asm.Conv2DBackpropInput).apply(null,arguments)},L1=a._Cos=function(){return(L1=a._Cos=a.asm.Cos).apply(null,arguments)},B1=a._Cosh=function(){return(B1=a._Cosh=a.asm.Cosh).apply(null,arguments)},W1=a._CropAndResize=function(){return(W1=a._CropAndResize=a.asm.CropAndResize).apply(null,arguments)},wf=a._Cumprod=function(){return(wf=a._Cumprod=a.asm.Cumprod).apply(null,arguments)},V1=a._Cumsum=function(){return(V1=a._Cumsum=a.asm.Cumsum).apply(null,arguments)},U1=a._DepthToSpace=function(){return(U1=a._DepthToSpace=a.asm.DepthToSpace).apply(null,arguments)},G1=a._DepthwiseConv2dNative=function(){return(G1=a._DepthwiseConv2dNative=a.asm.DepthwiseConv2dNative).apply(null,arguments)},H1=a._Elu=function(){return(H1=a._Elu=a.asm.Elu).apply(null,arguments)},j1=a._Equal=function(){return(j1=a._Equal=a.asm.Equal).apply(null,arguments)},kf=a._Exp=function(){return(kf=a._Exp=a.asm.Exp).apply(null,arguments)},q1=a._FlipLeftRight=function(){return(q1=a._FlipLeftRight=a.asm.FlipLeftRight).apply(null,arguments)},X1=a._Floor=function(){return(X1=a._Floor=a.asm.Floor).apply(null,arguments)},_i=a._FloorDiv=function(){return(_i=a._FloorDiv=a.asm.FloorDiv).apply(null,arguments)},Hd=a._FusedBatchNorm=function(){return(Hd=a._FusedBatchNorm=a.asm.FusedBatchNorm).apply(null,arguments)},K1=a._FusedConv2D=function(){return(K1=a._FusedConv2D=a.asm.FusedConv2D).apply(null,arguments)},Z1=a._FusedDepthwiseConv2D=function(){return(Z1=a._FusedDepthwiseConv2D=a.asm.FusedDepthwiseConv2D).apply(null,arguments)},Y1=a._Gather=function(){return(Y1=a._Gather=a.asm.Gather).apply(null,arguments)},Je=a._GatherNd=function(){return(Je=a._GatherNd=a.asm.GatherNd).apply(null,arguments)},J1=a._Greater=function(){return(J1=a._Greater=a.asm.Greater).apply(null,arguments)},Q1=a._GreaterEqual=function(){return(Q1=a._GreaterEqual=a.asm.GreaterEqual).apply(null,arguments)},eg=a._LeakyRelu=function(){return(eg=a._LeakyRelu=a.asm.LeakyRelu).apply(null,arguments)},tg=a._Less=function(){return(tg=a._Less=a.asm.Less).apply(null,arguments)},ng=a._LessEqual=function(){return(ng=a._LessEqual=a.asm.LessEqual).apply(null,arguments)},sg=a._Log=function(){return(sg=a._Log=a.asm.Log).apply(null,arguments)},jd=a._LogicalAnd=function(){return(jd=a._LogicalAnd=a.asm.LogicalAnd).apply(null,arguments)},If=a._LogicalNot=function(){return(If=a._LogicalNot=a.asm.LogicalNot).apply(null,arguments)},Sf=a._LogicalOr=function(){return(Sf=a._LogicalOr=a.asm.LogicalOr).apply(null,arguments)},rg=a._LogicalXor=function(){return(rg=a._LogicalXor=a.asm.LogicalXor).apply(null,arguments)},ag=a._Max=function(){return(ag=a._Max=a.asm.Max).apply(null,arguments)},og=a._MaxPool=function(){return(og=a._MaxPool=a.asm.MaxPool).apply(null,arguments)},ig=a._Maximum=function(){return(ig=a._Maximum=a.asm.Maximum).apply(null,arguments)},lg=a._Mean=function(){return(lg=a._Mean=a.asm.Mean).apply(null,arguments)},ug=a._Min=function(){return(ug=a._Min=a.asm.Min).apply(null,arguments)},zt=a._Minimum=function(){return(zt=a._Minimum=a.asm.Minimum).apply(null,arguments)},cg=a._MirrorPad=function(){return(cg=a._MirrorPad=a.asm.MirrorPad).apply(null,arguments)},dg=a._Multiply=function(){return(dg=a._Multiply=a.asm.Multiply).apply(null,arguments)},pg=a._Neg=function(){return(pg=a._Neg=a.asm.Neg).apply(null,arguments)},Tu=a._NonMaxSuppressionV3=function(){return(Tu=a._NonMaxSuppressionV3=a.asm.NonMaxSuppressionV3).apply(null,arguments)},Cf=a._NonMaxSuppressionV4=function(){return(Cf=a._NonMaxSuppressionV4=a.asm.NonMaxSuppressionV4).apply(null,arguments)},Tf=a._NonMaxSuppressionV5=function(){return(Tf=a._NonMaxSuppressionV5=a.asm.NonMaxSuppressionV5).apply(null,arguments)},Nf=a._NotEqual=function(){return(Nf=a._NotEqual=a.asm.NotEqual).apply(null,arguments)},hg=a._OneHot=function(){return(hg=a._OneHot=a.asm.OneHot).apply(null,arguments)},Ef=a._PadV2=function(){return(Ef=a._PadV2=a.asm.PadV2).apply(null,arguments)},fg=a._Pow=function(){return(fg=a._Pow=a.asm.Pow).apply(null,arguments)},tv=a._Prelu=function(){return(tv=a._Prelu=a.asm.Prelu).apply(null,arguments)},Rf=a._Prod=function(){return(Rf=a._Prod=a.asm.Prod).apply(null,arguments)},nv=a._RealDiv=function(){return(nv=a._RealDiv=a.asm.RealDiv).apply(null,arguments)},mg=a._Relu=function(){return(mg=a._Relu=a.asm.Relu).apply(null,arguments)},gg=a._Relu6=function(){return(gg=a._Relu6=a.asm.Relu6).apply(null,arguments)},yg=a._ResizeBilinear=function(){return(yg=a._ResizeBilinear=a.asm.ResizeBilinear).apply(null,arguments)},Ag=a._ResizeNearestNeighbor=function(){return(Ag=a._ResizeNearestNeighbor=a.asm.ResizeNearestNeighbor).apply(null,arguments)},xg=a._Reverse=function(){return(xg=a._Reverse=a.asm.Reverse).apply(null,arguments)},bg=a._RotateWithOffset=function(){return(bg=a._RotateWithOffset=a.asm.RotateWithOffset).apply(null,arguments)},vg=a._Round=function(){return(vg=a._Round=a.asm.Round).apply(null,arguments)},wg=a._Rsqrt=function(){return(wg=a._Rsqrt=a.asm.Rsqrt).apply(null,arguments)},kg=a._ScatterNd=function(){return(kg=a._ScatterNd=a.asm.ScatterNd).apply(null,arguments)},Ig=a._SelectV2=function(){return(Ig=a._SelectV2=a.asm.SelectV2).apply(null,arguments)},Sg=a._Sigmoid=function(){return(Sg=a._Sigmoid=a.asm.Sigmoid).apply(null,arguments)},Cg=a._Sin=function(){return(Cg=a._Sin=a.asm.Sin).apply(null,arguments)},Tg=a._Softmax=function(){return(Tg=a._Softmax=a.asm.Softmax).apply(null,arguments)},Ng=a._SparseFillEmptyRows=function(){return(Ng=a._SparseFillEmptyRows=a.asm.SparseFillEmptyRows).apply(null,arguments)},Eg=a._SparseReshape=function(){return(Eg=a._SparseReshape=a.asm.SparseReshape).apply(null,arguments)},Rg=a._SparseSegmentReduction=function(){return(Rg=a._SparseSegmentReduction=a.asm.SparseSegmentReduction).apply(null,arguments)},_g=a._Sqrt=function(){return(_g=a._Sqrt=a.asm.Sqrt).apply(null,arguments)},Dg=a._Square=function(){return(Dg=a._Square=a.asm.Square).apply(null,arguments)},$g=a._SquaredDifference=function(){return($g=a._SquaredDifference=a.asm.SquaredDifference).apply(null,arguments)},Pg=a._Step=function(){return(Pg=a._Step=a.asm.Step).apply(null,arguments)},Fg=a._StridedSlice=function(){return(Fg=a._StridedSlice=a.asm.StridedSlice).apply(null,arguments)},Og=a._Sub=function(){return(Og=a._Sub=a.asm.Sub).apply(null,arguments)},Mg=a._Sum=function(){return(Mg=a._Sum=a.asm.Sum).apply(null,arguments)},zg=a._Tan=function(){return(zg=a._Tan=a.asm.Tan).apply(null,arguments)},Lg=a._Tanh=function(){return(Lg=a._Tanh=a.asm.Tanh).apply(null,arguments)},Bg=a._Tile=function(){return(Bg=a._Tile=a.asm.Tile).apply(null,arguments)},Wg=a._TopK=function(){return(Wg=a._TopK=a.asm.TopK).apply(null,arguments)},Vg=a._Transform=function(){return(Vg=a._Transform=a.asm.Transform).apply(null,arguments)},Ug=a._Transpose=function(){return(Ug=a._Transpose=a.asm.Transpose).apply(null,arguments)},Gg=a.__FusedMatMul=function(){return(Gg=a.__FusedMatMul=a.asm._FusedMatMul).apply(null,arguments)},Hg=a._malloc=function(){return(Hg=a._malloc=a.asm.malloc).apply(null,arguments)},jg=a._free=function(){return(jg=a._free=a.asm.free).apply(null,arguments)},qg=a.___errno_location=function(){return(qg=a.___errno_location=a.asm.__errno_location).apply(null,arguments)},Xg=a._emscripten_main_thread_process_queued_calls=function(){return(Xg=a._emscripten_main_thread_process_queued_calls=a.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},_f=a.stackSave=function(){return(_f=a.stackSave=a.asm.stackSave).apply(null,arguments)},Df=a.stackRestore=function(){return(Df=a.stackRestore=a.asm.stackRestore).apply(null,arguments)},qd=a.stackAlloc=function(){return(qd=a.stackAlloc=a.asm.stackAlloc).apply(null,arguments)},Kg=a.dynCall_iijjiiii=function(){return(Kg=a.dynCall_iijjiiii=a.asm.dynCall_iijjiiii).apply(null,arguments)},Zg=a.dynCall_jiji=function(){return(Zg=a.dynCall_jiji=a.asm.dynCall_jiji).apply(null,arguments)};a.cwrap=_e;var Nu;function Xd(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}za=function K(){Nu||Kd(),Nu||(za=K)};function Kd(K){if(K=K||c,Hs>0||(lf(),Hs>0))return;function se(){Nu||(Nu=!0,a.calledRun=!0,!ae&&(uf(),o(a),a.onRuntimeInitialized&&a.onRuntimeInitialized(),cf()))}a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),se()},1)):se()}a.run=Kd;function sv(K){le=K,Bd()||(a.onExit&&a.onExit(K),ae=!0),d(K,new Xd(K))}if(a.preInit)for(typeof a.preInit=="function"&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();Kd();var Eu;l&&(Eu={uncaughtException:process.listeners("uncaughtException").filter(function(K){return!l.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(K){return!l.unhandledRejection.indexOf(K)>-1})});var Ru;if(typeof r!="undefined")Ru=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Ru=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Eu){var Yg=Ru._dispose;Ru._dispose=function(){Yg(),Eu.uncaughtException.forEach(function(K){process.removeListener("uncaughtException",K)}),Eu.unhandledRejection.forEach(function(K){process.removeListener("unhandledRejection",K)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}}),N_=1e-7,E_=1e-4,Lp=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},dc=class{refCount(e){return js("refCount")}incRef(e){return js("incRef")}timerAvailable(){return!0}time(e){return js("time")}read(e){return js("read")}readSync(e){return js("readSync")}readToGPU(e,t){return js("readToGPU")}numDataIds(){return js("numDataIds")}disposeData(e,t){return js("disposeData")}write(e,t,n){return js("write")}move(e,t,n,s,r){return js("move")}memory(){return js("memory")}floatPrecision(){return js("floatPrecision")}epsilon(){return this.floatPrecision()===32?N_:E_}dispose(){return js("dispose")}};function js(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function s6(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,pm(e,t,n)}function R_(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,s=0;for(;n>0;)s=Math.random()*n|0,n--,pm(e,n,s),pm(t,n,s)}function vp(e,t,n){return Math.max(e,Math.min(t,n))}function __(e){return e%2===0?e:e+1}function pm(e,t,n){let s=e[t];e[t]=e[n],e[n]=s}function D_(e){let t=0;for(let n=0;nn+` Shapes ${e} and ${t} must match`)}function il(e){M(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function Ki(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||Fn(e)&&!n)for(let s=0;s0,n){return new Promise((s,r)=>{let a=0,o=()=>{if(e()){s();return}a++;let i=t(a);if(n!=null&&a>=n){r();return}setTimeout(o,i)};o()})}function B_(e,t){let n=1,s=-1;for(let a=0;a=0)n*=e[a];else if(e[a]===-1){if(s!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${s} and dim ${a}`);s=a}else if(e[a]<0)throw Error(`Shapes can not be < 0. Found ${e[a]} at dim ${a}`);if(s===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let r=e.slice();return r[s]=t/n,r}function dr(e,t){let n=t.length;return e=e==null?t.map((s,r)=>r):[].concat(e),M(e.every(s=>s>=-n&&s`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),M(e.every(s=>Xu(s)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(s=>s<0?n+s:s)}function r6(e,t){let n=[],s=[],r=t!=null&&Array.isArray(t)&&t.length===0,a=t==null||r?null:dr(t,e).sort(),o=0;for(let i=0;ii)&&e[i]===1&&(n.push(e[i]),s.push(i)),a[o]<=i&&o++}e[i]!==1&&(n.push(e[i]),s.push(i))}return{newShape:n,keptDims:s}}function a6(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function o6(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else if(e==="string")n=new Array(t);else throw new Error(`Unknown data type ${e}`);return n}function i6(e,t){for(let n=0;nt+=n.length),t}function Ha(e){return typeof e=="string"||e instanceof String}function c6(e){return typeof e=="boolean"}function d6(e){return typeof e=="number"}function Gm(e){return Array.isArray(e)?Gm(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":d6(e)?"float32":Ha(e)?"string":c6(e)?"bool":"float32"}function Ja(e){return!!(e&&e.constructor&&e.call&&e.apply)}function hm(e,t){for(let n=t;n=0;--s)n[s]=n[s+1]*e[s+1];return n}function p6(e,t,n,s=!1){let r=new Array;if(t.length===1){let a=t[0]*(s?2:1);for(let o=0;ol*u)*(s?2:1);for(let l=0;lr*a)*(n?2:1);if(s===0)return[];if(s!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return p6(0,e,t,n)}function ky(e,t){let n=Hm(e,t);for(let s=0;ss*r,1);if(t==null||t==="float32")return Vu(e,new Float32Array(n));if(t==="int32")return Vu(e,new Int32Array(n));if(t==="bool")return Vu(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function Iy(e){e.forEach(t=>{M(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function U_(e,t,n){if(t===0)return 0;if(t===1)return e[0];let s=e[e.length-1];for(let r=0;r{let[s,r]=n.split(":");this.urlFlags[s]=q_(s,r)})}};function H_(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...s)=>(j_(t,s[0],s[1]),s.join("="))),t}function j_(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function q_(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function X(){return Cy}var Cy=null;function X_(e){Cy=e}var a3;function f6(){if(a3==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");a3=e}return a3}function K_(){let e=f6();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function Ty(e,t){let n=K_();if(n.has(e))return n.get(e);{let s=t();return n.set(e,s),n.get(e)}}var ll="Abs",hc="Acos",fc="Acosh",ba="Add",ho="AddN",mc="All",gc="Any",fo="ArgMax",yc="ArgMin",Ac="Asin",xc="Asinh",bc="Atan",vc="Atanh",wc="Atan2",mo="AvgPool",jm="AvgPoolGrad",Bp="AvgPool3D",qm="AvgPool3DGrad",go="BatchMatMul",ul="BatchToSpaceND",Xm="Bincount",m6="BroadcastTo",Km="BroadcastArgs",yo="Cast",Ao="Ceil",va="ClipByValue",Wp="Complex",Vp="ComplexAbs",cl="Concat",xo="Conv2D",Zm="Conv2DBackpropFilter",bo="Conv2DBackpropInput",Up="Conv3D",Ym="Conv3DBackpropFilterV2",Jm="Conv3DBackpropInputV2",vo="Cos",wo="Cosh",dl="Cumprod",ko="Cumsum",pl="CropAndResize",Qm="DenseBincount",hl="DepthToSpace",Io="DepthwiseConv2dNative",e0="DepthwiseConv2dNativeBackpropFilter",t0="DepthwiseConv2dNativeBackpropInput",n0="Diag",Gp="Dilation2D",fm="Dilation2DBackpropInput",mm="Dilation2DBackpropFilter",So="RealDiv",Hp="Einsum",Co="Elu",s0="EluGrad",kc="Erf",fl="Equal",To="Exp",ml="ExpandDims",gl="Expm1",r0="FFT",Ic="Fill",yl="FlipLeftRight",No="Floor",Eo="FloorDiv",Ro="FusedBatchNorm",Al="GatherV2",xl="GatherNd",bl="Greater",_o="GreaterEqual",Do="Identity",a0="IFFT",jp="Imag",Sc="IsFinite",Cc="IsInf",Tc="IsNan",$o="LeakyRelu",vl="Less",wl="LessEqual",o0="LinSpace",Po="Log",Nc="Log1p",kl="LogicalAnd",Il="LogicalNot",Ec="LogicalOr",g6="LogicalXor",y6="LogSoftmax",Z_="LowerBound",qp="LRN",i0="LRNGrad",Fo="Max",Oo="Maximum",Mo="MaxPool",l0="MaxPoolGrad",Xp="MaxPool3D",u0="MaxPool3DGrad",c0="MaxPoolWithArgmax",zo="Mean",Lo="Min",Bo="Minimum",Wo="MirrorPad",Rc="Mod",d0="Multinomial",Vo="Multiply",Sl="Neg",Cl="NotEqual",Tl="NonMaxSuppressionV3",_c="NonMaxSuppressionV4",Nl="NonMaxSuppressionV5",El="OnesLike",Rl="OneHot",_l="Pack",Uo="PadV2",Y_="Pool",Go="Pow",Ho="Prelu",jo="Prod",Dc="Range",Kp="Real",$c="Reciprocal",qo="Relu",Dl="Reshape",Xo="ResizeNearestNeighbor",p0="ResizeNearestNeighborGrad",Ko="ResizeBilinear",h0="ResizeBilinearGrad",Zo="Relu6",$l="Reverse",Pl="Round",Yo="Rsqrt",Fl="ScatterNd",f0="SearchSorted",Ol="Select",Pc="Selu",Ml="Slice",Jo="Sin",zl="Sinh",Fc="Sign",Qo="Sigmoid",Oc="Softplus",ei="Sqrt",ti="Sum",Ll="SpaceToBatchND",Bl="SplitV",ni="Softmax",Zp="SparseFillEmptyRows",Mc="SparseReshape",Yp="SparseSegmentMean",Jp="SparseSegmentSum",Qp="SparseToDense",si="SquaredDifference",zc="Square",Wl="StridedSlice",Lc="StringNGrams",eh="StringSplit",th="StringToHashBucketFast",ri="Sub",Vl="Tan",ai="Tanh",wa="Tile",Ul="TopK",Gl="Transform",jr="Transpose",m0="Unique",Hl="Unpack",nh="UnsortedSegmentSum",J_="UpperBound",jl="ZerosLike",oi="Step",wp="FromPixels",ql="RotateWithOffset",Qa="_FusedMatMul",eo="FusedConv2D",to="FusedDepthwiseConv2D";function Ga(...e){X().getBool("IS_TEST")||X().getBool("PROD")||console.warn(...e)}function Q_(...e){X().getBool("IS_TEST")||X().getBool("PROD")||console.log(...e)}var Ku=Ty("kernelRegistry",()=>new Map),kp=Ty("gradRegistry",()=>new Map);function gm(e,t){let n=Ny(e,t);return Ku.get(n)}function x3(e){return kp.get(e)}function Xr(e){let t=Ku.entries(),n=[];for(;;){let{done:s,value:r}=t.next();if(s)break;let[a,o]=r,[i]=a.split("_");i===e&&n.push(o)}return n}function pr(e){let{kernelName:t,backendName:n}=e,s=Ny(t,n);Ku.has(s)&&Ga(`The kernel '${t}' for backend '${n}' is already registered`),Ku.set(s,e)}function A6(e){let{kernelName:t}=e;kp.has(t)&&X().getBool("DEBUG")&&Ga(`Overriding the gradient for '${t}'`),kp.set(t,e)}function eD(e,t){let n=Ny(e,t);if(!Ku.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Ku.delete(n)}function tD(e){if(!kp.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);kp.delete(e)}function nD(e,t){Xr(e).forEach(s=>{let r=Object.assign({},s,{backendName:t});pr(r)})}function Ny(e,t){return`${t}_${e}`}var v={};Ue(v,{arraysEqual:()=>po,assert:()=>M,assertNonNegativeIntegerDimensions:()=>Iy,assertNonNull:()=>il,assertShapesMatch:()=>rs,bytesFromStringArray:()=>u6,bytesPerElement:()=>A3,checkConversionForErrors:()=>i6,clamp:()=>vp,computeStrides:()=>pc,createScalarValue:()=>lD,createShuffledIndices:()=>z_,decodeString:()=>ym,distSquared:()=>P_,encodeString:()=>rh,fetch:()=>cD,fingerPrint64:()=>iD,flatten:()=>Ki,getArrayFromDType:()=>o6,getTypedArrayFromDType:()=>a6,hasEncodingLoss:()=>W_,hexToLong:()=>sh,indexToLoc:()=>G_,inferDtype:()=>Gm,inferFromImplicitShape:()=>B_,isBoolean:()=>c6,isFunction:()=>Ja,isInt:()=>Xu,isNumber:()=>d6,isPromise:()=>Sy,isScalarShape:()=>F_,isString:()=>Ha,isTypedArray:()=>Fn,isValidDtype:()=>l6,locToIndex:()=>U_,makeOnesTypedArray:()=>ky,makeZerosNestedTypedArray:()=>V_,makeZerosTypedArray:()=>Hm,nearestDivisor:()=>hm,nearestLargerEven:()=>__,now:()=>Ip,parseAxisParam:()=>dr,randUniform:()=>$_,repeatedTry:()=>L_,rightPad:()=>gp,shuffle:()=>s6,shuffleCombo:()=>R_,sizeFromShape:()=>Et,sizeToSquarishShape:()=>M_,squeezeShape:()=>r6,sum:()=>D_,swap:()=>pm,tanh:()=>O_,toNestedArray:()=>Vu,toTypedArray:()=>g0});var gv=co(d_()),zi=gv.default||gv;function sh(e){return zi.fromString(e,!0,16)}var x6=sh("c3a5c85c97cb3127"),Fi=sh("b492b66fbe98f273"),Qn=sh("9ae16a3b2f90404f");function b3(e){return e.xor(e.shru(47))}function b6(e,t,n){let s=e.slice(t,t+n);return zi.fromBytes(Array.from(s),!0,!0)}function Nt(e,t){return b6(e,t,8)}function yv(e,t){return b6(e,t,4)}function xn(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function Xa(e,t,n=sh("9ddfea08eb382d69")){let s=e.xor(t).mul(n);s=s.xor(s.shru(47));let r=t.xor(s).mul(n);return r=r.xor(r.shru(47)),r=r.mul(n),r}function sD(e,t,n,s,r,a){r=r.add(e),a=xn(a.add(r).add(s),21);let o=r;return r=r.add(t),r=r.add(n),a=a.add(xn(r,44)),[r.add(s),a.add(o)]}function Wf(e,t,n,s){return sD(Nt(e,t),Nt(e,t+8),Nt(e,t+16),Nt(e,t+24),n,s)}function rD(e,t=e.length){if(t>=8){let n=Qn.add(t*2),s=Nt(e,0).add(Qn),r=Nt(e,t-8),a=xn(r,37).mul(n).add(s),o=xn(s,25).add(r).mul(n);return Xa(a,o,n)}if(t>=4){let n=Qn.add(t*2),s=yv(e,0);return Xa(s.shl(3).add(t),yv(e,t-4),n)}if(t>0){let n=e[0],s=e[t>>1],r=e[t-1],a=n+(s<<8),o=t+(r<<2);return b3(Qn.mul(a).xor(x6.mul(o))).mul(Qn)}return Qn}function aD(e,t=e.length){let n=Qn.add(t*2),s=Nt(e,0).mul(Fi),r=Nt(e,8),a=Nt(e,t-8).mul(n),o=Nt(e,t-16).mul(Qn);return Xa(xn(s.add(r),43).add(xn(a,30)).add(o),s.add(xn(r.add(Qn),18)).add(a),n)}function oD(e,t=e.length){let n=Qn.add(t*2),s=Nt(e,0).mul(Qn),r=Nt(e,8),a=Nt(e,t-8).mul(n),o=Nt(e,t-16).mul(Qn),i=xn(s.add(r),43).add(xn(a,30)).add(o),l=Xa(i,s.add(xn(r.add(Qn),18)).add(a),n),u=Nt(e,16).mul(n),c=Nt(e,24),p=i.add(Nt(e,t-32)).mul(n),d=l.add(Nt(e,t-24)).mul(n);return Xa(xn(u.add(c),43).add(xn(p,30)).add(d),u.add(xn(c.add(s),18)).add(p),n)}function iD(e,t=e.length){let n=zi.fromNumber(81,!0);if(t<=32)return t<=16?rD(e,t):aD(e,t);if(t<=64)return oD(e,t);let s=n,r=n.mul(Fi).add(113),a=b3(r.mul(Qn).add(113)).mul(Qn),o=[zi.UZERO,zi.UZERO],i=[zi.UZERO,zi.UZERO];s=s.mul(Qn).add(Nt(e,0));let l=0,u=(t-1>>6)*64,c=u+(t-1&63)-63;do s=xn(s.add(r).add(o[0]).add(Nt(e,l+8)),37).mul(Fi),r=xn(r.add(o[1]).add(Nt(e,l+48)),42).mul(Fi),s=s.xor(i[1]),r=r.add(o[0]).add(Nt(e,l+40)),a=xn(a.add(i[0]),33).mul(Fi),o=Wf(e,l,o[1].mul(Fi),s.add(i[0])),i=Wf(e,l+32,a.add(i[1]),r.add(Nt(e,l+16))),[a,s]=[s,a],l+=64;while(l!==u);let p=Fi.add(a.and(255).shl(1));return l=c,i[0]=i[0].add(t-1&63),o[0]=o[0].add(i[0]),i[0]=i[0].add(o[0]),s=xn(s.add(r).add(o[0]).add(Nt(e,l+8)),37).mul(p),r=xn(r.add(o[1]).add(Nt(e,l+48)),42).mul(p),s=s.xor(i[1].mul(9)),r=r.add(o[0].mul(9).add(Nt(e,l+40))),a=xn(a.add(i[0]),33).mul(p),o=Wf(e,l,o[1].mul(p),s.add(i[0])),i=Wf(e,l+32,a.add(i[1]),r.add(Nt(e,l+16))),[a,s]=[s,a],Xa(Xa(o[0],i[0],p).add(b3(r).mul(x6)).add(a),Xa(o[1],i[1],p).add(s),p)}function lD(e,t){return t==="string"?rh(e):g0([e],t)}function uD(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function g0(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=Ki(e)),X().getBool("DEBUG")&&i6(e,t),uD(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let s=0;s{s=n()},a,o=Ip();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(r);else{r();for(let l of s)l.dataSync();a=Promise.resolve({kernelMs:Ip()-o})}if(X().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let l=0;l{pD(c,u.dtype,e)})}return{kernelName:e,outputs:s,inputs:t,timeMs:a.then(l=>l.kernelMs),extraInfo:a.then(l=>l.getExtraProfileInfo!=null?l.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:s,inputs:r,extraInfo:a}=e;n.forEach(o=>{Promise.all([o.data(),s,a]).then(i=>{this.logger.logKernelProfile(t,o,i[0],i[1],r,i[2])})})}};function pD(e,t,n){if(t!=="float32")return!1;for(let s=0;s0?f:""} `}}console.log(`%c${i} %c${o} %c${l}D ${c} %c${u} %c${p} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function fD(e,t,n){let s={},r={};for(let l=0;ls[m.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let a={};a[n.id]=!0;let o={};for(let l=e.length-1;l>=0;l--){let u=e[l],c=u.inputs;for(let p=0;p=0;r--){let a=t[r],o=[];if(a.outputs.forEach(l=>{let u=e[l.id];u!=null?o.push(u):o.push(null)}),a.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${a.kernelName}.`);let i=a.gradient(o);for(let l in a.inputs){if(!(l in i))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(i)}.`);let u=n(()=>i[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${a.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let c=a.inputs[l];if(!po(u.shape,c.shape))throw new Error(`Error in gradient for op ${a.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(e[c.id]==null)e[c.id]=u;else{let p=e[c.id];e[c.id]=s(p,u),p.dispose()}}}}var Av=20,tp=3,o3=7;function gD(e,t,n,s){let r=pc(t),a=yD(e,t,n,r),o=t.length,i=tm(e,t,n,r,a),l=["Tensor"];return s&&(l.push(` dtype: ${n}`),l.push(` rank: ${o}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(i.map(u=>" "+u).join(` diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index 21929c49..8d53bad9 100644 --- a/dist/human.node-gpu.js +++ b/dist/human.node-gpu.js @@ -1,10 +1,10 @@ -"use strict";/* +/* Human homepage: author: ' */ -var un=Object.create;var M2=Object.defineProperty;var hn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var Pn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var vn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},gt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of bn(t))!Mn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=hn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?un(gn(e)):{},gt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Rn=e=>gt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(Pn(e,typeof t!="symbol"?t+"":t,o),o),Mt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Mt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Mt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=vn((B7,L5)=>{"use strict";var vt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,wn=Object.getOwnPropertyNames,kn=Object.prototype.hasOwnProperty,N5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wn(t))!kn.call(e,r)&&r!==o&&vt(e,r,{get:()=>t[r],enumerable:!(n=Tn(t,r))||n.enumerable});return e},En=(e,t,o)=>(N5(e,t,"default"),o&&N5(o,t,"default")),zn=e=>N5(vt({},"__esModule",{value:!0}),e),Rt={};L5.exports=zn(Rt);En(Rt,require("@tensorflow/tfjs-node-gpu"),L5.exports)});var L7={};be(L7,{Human:()=>mt,default:()=>mt,defaults:()=>ge,draw:()=>it,env:()=>R,match:()=>ft,models:()=>m5});module.exports=Rn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function Pt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function O5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")O5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var Tt=` +"use strict";var un=Object.create;var M2=Object.defineProperty;var hn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var Pn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var vn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},gt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of bn(t))!Mn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=hn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?un(gn(e)):{},gt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Rn=e=>gt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(Pn(e,typeof t!="symbol"?t+"":t,o),o),Mt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Mt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Mt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=vn((B7,L5)=>{"use strict";var vt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,wn=Object.getOwnPropertyNames,kn=Object.prototype.hasOwnProperty,N5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wn(t))!kn.call(e,r)&&r!==o&&vt(e,r,{get:()=>t[r],enumerable:!(n=Tn(t,r))||n.enumerable});return e},En=(e,t,o)=>(N5(e,t,"default"),o&&N5(o,t,"default")),zn=e=>N5(vt({},"__esModule",{value:!0}),e),Rt={};L5.exports=zn(Rt);En(Rt,require("@tensorflow/tfjs-node-gpu"),L5.exports)});var L7={};be(L7,{Human:()=>mt,default:()=>mt,defaults:()=>ge,draw:()=>it,env:()=>R,match:()=>ft,models:()=>m5});module.exports=Rn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function Pt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function O5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")O5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var Tt=` precision highp float; attribute vec2 pos; attribute vec2 uv; diff --git a/dist/human.node-wasm.js b/dist/human.node-wasm.js index d9411132..fa59416d 100644 --- a/dist/human.node-wasm.js +++ b/dist/human.node-wasm.js @@ -1,10 +1,10 @@ -"use strict";/* +/* Human homepage: author: ' */ -var hn=Object.create;var M2=Object.defineProperty;var bn=Object.getOwnPropertyDescriptor;var gn=Object.getOwnPropertyNames;var Mn=Object.getPrototypeOf,Pn=Object.prototype.hasOwnProperty;var vn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Rn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},Mt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of gn(t))!Pn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=bn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?hn(Mn(e)):{},Mt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Tn=e=>Mt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(vn(e,typeof t!="symbol"?t+"":t,o),o),Pt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Pt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Pt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=Rn((B7,F2)=>{"use strict";var Rt=Object.defineProperty,wn=Object.getOwnPropertyDescriptor,kn=Object.getOwnPropertyNames,En=Object.prototype.hasOwnProperty,L5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of kn(t))!En.call(e,r)&&r!==o&&Rt(e,r,{get:()=>t[r],enumerable:!(n=wn(t,r))||n.enumerable});return e},Tt=(e,t,o)=>(L5(e,t,"default"),o&&L5(o,t,"default")),zn=e=>L5(Rt({},"__esModule",{value:!0}),e),W5={};F2.exports=zn(W5);Tt(W5,require("@tensorflow/tfjs"),F2.exports);Tt(W5,require("@tensorflow/tfjs-backend-wasm"),F2.exports)});var L7={};be(L7,{Human:()=>pt,default:()=>pt,defaults:()=>ge,draw:()=>lt,env:()=>R,match:()=>mt,models:()=>p5});module.exports=Tn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function vt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function N5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")N5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var wt=` +"use strict";var hn=Object.create;var M2=Object.defineProperty;var bn=Object.getOwnPropertyDescriptor;var gn=Object.getOwnPropertyNames;var Mn=Object.getPrototypeOf,Pn=Object.prototype.hasOwnProperty;var vn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Rn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},Mt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of gn(t))!Pn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=bn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?hn(Mn(e)):{},Mt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Tn=e=>Mt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(vn(e,typeof t!="symbol"?t+"":t,o),o),Pt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Pt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Pt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=Rn((B7,F2)=>{"use strict";var Rt=Object.defineProperty,wn=Object.getOwnPropertyDescriptor,kn=Object.getOwnPropertyNames,En=Object.prototype.hasOwnProperty,L5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of kn(t))!En.call(e,r)&&r!==o&&Rt(e,r,{get:()=>t[r],enumerable:!(n=wn(t,r))||n.enumerable});return e},Tt=(e,t,o)=>(L5(e,t,"default"),o&&L5(o,t,"default")),zn=e=>L5(Rt({},"__esModule",{value:!0}),e),W5={};F2.exports=zn(W5);Tt(W5,require("@tensorflow/tfjs"),F2.exports);Tt(W5,require("@tensorflow/tfjs-backend-wasm"),F2.exports)});var L7={};be(L7,{Human:()=>pt,default:()=>pt,defaults:()=>ge,draw:()=>lt,env:()=>R,match:()=>mt,models:()=>p5});module.exports=Tn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function vt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function N5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")N5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var wt=` precision highp float; attribute vec2 pos; attribute vec2 uv; diff --git a/dist/human.node.js b/dist/human.node.js index 81b67584..c1efa5fb 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -1,10 +1,10 @@ -"use strict";/* +/* Human homepage: author: ' */ -var un=Object.create;var M2=Object.defineProperty;var hn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var Pn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var vn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},gt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of bn(t))!Mn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=hn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?un(gn(e)):{},gt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Rn=e=>gt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(Pn(e,typeof t!="symbol"?t+"":t,o),o),Mt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Mt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Mt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=vn((B7,L5)=>{"use strict";var vt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,wn=Object.getOwnPropertyNames,kn=Object.prototype.hasOwnProperty,N5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wn(t))!kn.call(e,r)&&r!==o&&vt(e,r,{get:()=>t[r],enumerable:!(n=Tn(t,r))||n.enumerable});return e},En=(e,t,o)=>(N5(e,t,"default"),o&&N5(o,t,"default")),zn=e=>N5(vt({},"__esModule",{value:!0}),e),Rt={};L5.exports=zn(Rt);En(Rt,require("@tensorflow/tfjs-node"),L5.exports)});var L7={};be(L7,{Human:()=>mt,default:()=>mt,defaults:()=>ge,draw:()=>it,env:()=>R,match:()=>ft,models:()=>m5});module.exports=Rn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function Pt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function O5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")O5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var Tt=` +"use strict";var un=Object.create;var M2=Object.defineProperty;var hn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var Pn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var vn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},gt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of bn(t))!Mn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=hn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?un(gn(e)):{},gt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Rn=e=>gt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(Pn(e,typeof t!="symbol"?t+"":t,o),o),Mt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Mt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Mt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=vn((B7,L5)=>{"use strict";var vt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,wn=Object.getOwnPropertyNames,kn=Object.prototype.hasOwnProperty,N5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wn(t))!kn.call(e,r)&&r!==o&&vt(e,r,{get:()=>t[r],enumerable:!(n=Tn(t,r))||n.enumerable});return e},En=(e,t,o)=>(N5(e,t,"default"),o&&N5(o,t,"default")),zn=e=>N5(vt({},"__esModule",{value:!0}),e),Rt={};L5.exports=zn(Rt);En(Rt,require("@tensorflow/tfjs-node"),L5.exports)});var L7={};be(L7,{Human:()=>mt,default:()=>mt,defaults:()=>ge,draw:()=>it,env:()=>R,match:()=>ft,models:()=>m5});module.exports=Rn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function Pt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function O5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")O5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var Tt=` precision highp float; attribute vec2 pos; attribute vec2 uv; diff --git a/package.json b/package.json index e8cedc14..23b3abc0 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "node-webcam": "^0.8.1" }, "devDependencies": { - "@microsoft/api-extractor": "^7.29.2", + "@microsoft/api-extractor": "^7.29.3", "@tensorflow/tfjs": "^3.19.0", "@tensorflow/tfjs-backend-cpu": "^3.19.0", "@tensorflow/tfjs-backend-wasm": "^3.19.0", @@ -79,15 +79,15 @@ "@tensorflow/tfjs-node": "^3.19.0", "@tensorflow/tfjs-node-gpu": "^3.19.0", "@tensorflow/tfjs-tflite": "0.0.1-alpha.8", - "@types/node": "^18.7.4", + "@types/node": "^18.7.6", "@types/offscreencanvas": "^2019.7.0", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@vladmandic/build": "^0.7.9", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@vladmandic/build": "^0.7.10", "@vladmandic/pilogger": "^0.4.6", "@vladmandic/tfjs": "github:vladmandic/tfjs", "@webgpu/types": "^0.1.21", - "esbuild": "^0.15.3", + "esbuild": "^0.15.5", "eslint": "8.22.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-html": "^7.1.0", diff --git a/test/browser.html b/test/browser.html index 29a44068..5c1ebb58 100644 --- a/test/browser.html +++ b/test/browser.html @@ -14,10 +14,10 @@ @font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 100; src: local('Lato'), url('../../assets/lato-light.woff2') } html { font-family: 'Lato', 'Segoe UI'; font-size: 14px; font-variant: small-caps; } body { margin: 0; background: black; color: white; width: 100vw; overflow-x: hidden; } - .canvas { position: absolute; bottom: 10px; right: 10px; width: 256px; height: 256px; z-index: 99; } + .canvas { position: fixed; bottom: 10px; right: 10px; width: 256px; height: 256px; z-index: 99; } + .events { position: fixed; top: 10px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; } + .state { position: fixed; top: 60px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; } .pre { line-height: 150%; white-space: break-spaces; } - .events { position: absolute; top: 10px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; } - .state { position: absolute; top: 60px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; } @@ -56,7 +56,7 @@ const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`; const elap = (dt - last).toString().padStart(5, '0'); document.getElementById('log').innerHTML += ts + ' +' + elap + 'ms  ' + str(false, ...msgs); - document.documentElement.scrollTop = document.documentElement.scrollHeight + document.documentElement.scrollTop = document.documentElement.scrollHeight; console.log(ts, elap, ...msgs); // eslint-disable-line no-console last = dt; } @@ -66,7 +66,7 @@ const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`; const elap = (dt - last).toString().padStart(5, '0'); document.getElementById('log').innerHTML += ts + ' +' + elap + 'ms  ' + str(true, ...msgs); - document.documentElement.scrollTop = document.documentElement.scrollHeight + document.documentElement.scrollTop = document.documentElement.scrollHeight; console.log(ts, elap, ...msgs); // eslint-disable-line no-console last = dt; } diff --git a/test/browser.sh b/test/browser.sh new file mode 100755 index 00000000..ba4d77a8 --- /dev/null +++ b/test/browser.sh @@ -0,0 +1,2 @@ +#!/bin/sh +"/mnt/c/Users/mandi/AppData/Local/Google/Chrome SxS/Application/chrome.exe" --enable-unsafe-gpu --allow-insecure-localhost --auto-open-devtools-for-tabs https://localhost:10031/test/browser.html diff --git a/test/build.log b/test/build.log index 39d52c95..86090847 100644 --- a/test/build.log +++ b/test/build.log @@ -1,39 +1,39 @@ -2022-08-15 11:36:04 DATA:  Build {"name":"@vladmandic/human","version":"2.9.3"} -2022-08-15 11:36:04 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.3"} -2022-08-15 11:36:04 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-08-15 11:36:04 INFO:  Toolchain: {"build":"0.7.9","esbuild":"0.15.3","typescript":"4.7.4","typedoc":"0.23.10","eslint":"8.22.0"} -2022-08-15 11:36:04 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-08-15 11:36:04 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} -2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":608} -2022-08-15 11:36:04 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655451,"outputBytes":307474} -2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":612} -2022-08-15 11:36:04 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655455,"outputBytes":307478} -2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":664} -2022-08-15 11:36:04 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655507,"outputBytes":307528} -2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1069,"outputBytes":358} -2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1032,"outputBytes":583} -2022-08-15 11:36:04 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655426,"outputBytes":306323} -2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1271,"outputBytes":2787569} -2022-08-15 11:36:04 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3442412,"outputBytes":1669183} -2022-08-15 11:36:04 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3442412,"outputBytes":3073108} -2022-08-15 11:36:09 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} -2022-08-15 11:36:11 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} -2022-08-15 11:36:11 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6716,"outputBytes":3141} -2022-08-15 11:36:11 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15629,"outputBytes":7798} -2022-08-15 11:36:19 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":109,"errors":0,"warnings":0} -2022-08-15 11:36:19 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-08-15 11:36:19 STATE: Copy: {"input":"tfjs/tfjs.esm.d.ts"} -2022-08-15 11:36:19 INFO:  Done... -2022-08-15 11:36:20 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":198} -2022-08-15 11:36:20 STATE: Copy: {"input":"types/human.d.ts"} -2022-08-15 11:36:20 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2022-08-15 11:36:20 STATE: Models {"folder":"./models","models":13} -2022-08-15 11:36:20 STATE: Models {"folder":"../human-models/models","models":42} -2022-08-15 11:36:20 STATE: Models {"folder":"../blazepose/model/","models":4} -2022-08-15 11:36:20 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2022-08-15 11:36:20 STATE: Models {"folder":"../efficientpose/models","models":3} -2022-08-15 11:36:20 STATE: Models {"folder":"../insightface/models","models":5} -2022-08-15 11:36:20 STATE: Models {"folder":"../movenet/models","models":3} -2022-08-15 11:36:20 STATE: Models {"folder":"../nanodet/models","models":4} -2022-08-15 11:36:20 STATE: Models: {"count":57,"totalSize":383017442} -2022-08-15 11:36:20 INFO:  Human Build complete... {"logFile":"test/build.log"} +2022-08-19 09:12:22 DATA:  Build {"name":"@vladmandic/human","version":"2.9.3"} +2022-08-19 09:12:22 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.3"} +2022-08-19 09:12:22 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-08-19 09:12:22 INFO:  Toolchain: {"build":"0.7.10","esbuild":"0.15.5","typescript":"4.7.4","typedoc":"0.23.10","eslint":"8.22.0"} +2022-08-19 09:12:22 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-08-19 09:12:22 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} +2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":608} +2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655452,"outputBytes":307474} +2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":612} +2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655456,"outputBytes":307478} +2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":664} +2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655508,"outputBytes":307528} +2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1069,"outputBytes":358} +2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1032,"outputBytes":583} +2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655427,"outputBytes":306323} +2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1271,"outputBytes":2787569} +2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3442413,"outputBytes":1669183} +2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3442413,"outputBytes":3073108} +2022-08-19 09:12:27 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} +2022-08-19 09:12:29 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} +2022-08-19 09:12:29 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6716,"outputBytes":3141} +2022-08-19 09:12:29 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15629,"outputBytes":7798} +2022-08-19 09:12:37 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":109,"errors":0,"warnings":0} +2022-08-19 09:12:37 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-08-19 09:12:37 STATE: Copy: {"input":"tfjs/tfjs.esm.d.ts"} +2022-08-19 09:12:37 INFO:  Done... +2022-08-19 09:12:37 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":198} +2022-08-19 09:12:37 STATE: Copy: {"input":"types/human.d.ts"} +2022-08-19 09:12:37 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2022-08-19 09:12:37 STATE: Models {"folder":"./models","models":13} +2022-08-19 09:12:37 STATE: Models {"folder":"../human-models/models","models":42} +2022-08-19 09:12:37 STATE: Models {"folder":"../blazepose/model/","models":4} +2022-08-19 09:12:37 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2022-08-19 09:12:37 STATE: Models {"folder":"../efficientpose/models","models":3} +2022-08-19 09:12:37 STATE: Models {"folder":"../insightface/models","models":5} +2022-08-19 09:12:37 STATE: Models {"folder":"../movenet/models","models":3} +2022-08-19 09:12:37 STATE: Models {"folder":"../nanodet/models","models":4} +2022-08-19 09:12:38 STATE: Models: {"count":57,"totalSize":383017442} +2022-08-19 09:12:38 INFO:  Human Build complete... {"logFile":"test/build.log"} diff --git a/test/test.log b/test/test.log index 41f5a0f8..fc1e3ca8 100644 --- a/test/test.log +++ b/test/test.log @@ -1,975 +1,975 @@ -2022-08-15 11:36:24 INFO:  @vladmandic/human version 2.9.3 -2022-08-15 11:36:24 INFO:  User: vlado Platform: linux Arch: x64 Node: v18.1.0 -2022-08-15 11:36:24 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-fetch.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]}] -2022-08-15 11:36:24 INFO:  -2022-08-15 11:36:24 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start -2022-08-15 11:36:25 INFO:  -2022-08-15 11:36:25 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start -2022-08-15 11:36:26 INFO:  -2022-08-15 11:36:26 INFO:  {"cmd":"../demo/nodejs/node-fetch.js","args":[]} start -2022-08-15 11:36:28 INFO:  -2022-08-15 11:36:28 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start -2022-08-15 11:36:29 INFO:  -2022-08-15 11:36:29 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start -2022-08-15 11:36:29 INFO:  -2022-08-15 11:36:29 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start -2022-08-15 11:36:30 INFO:  -2022-08-15 11:36:30 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start -2022-08-15 11:36:31 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2022-08-15 11:36:31 INFO:  -2022-08-15 11:36:31 INFO:  test-node.js start -2022-08-15 11:36:31 INFO:  test-node.js test: configuration validation -2022-08-15 11:36:31 STATE: test-node.js passed: configuration default validation [] -2022-08-15 11:36:31 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-08-15 11:36:31 INFO:  test-node.js test: model load -2022-08-15 11:36:32 STATE: test-node.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] -2022-08-15 11:36:32 INFO:  test-node.js test: warmup -2022-08-15 11:36:32 STATE: test-node.js passed: create human -2022-08-15 11:36:32 INFO:  test-node.js human version: 2.9.3 -2022-08-15 11:36:32 INFO:  test-node.js platform: linux x64 agent: NodeJS v18.1.0 -2022-08-15 11:36:32 INFO:  test-node.js tfjs version: 3.19.0 -2022-08-15 11:36:32 INFO:  test-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.7.3-dev20220521","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} -2022-08-15 11:36:32 STATE: test-node.js passed: set backend: tensorflow -2022-08-15 11:36:32 STATE: test-node.js tensors 1921 -2022-08-15 11:36:32 STATE: test-node.js passed: load models -2022-08-15 11:36:32 STATE: test-node.js result: defined models: 23 loaded models: 12 -2022-08-15 11:36:32 STATE: test-node.js passed: warmup: none default -2022-08-15 11:36:32 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-08-15 11:36:32 DATA:  test-node.js result: performance: load: null total: null -2022-08-15 11:36:32 STATE: test-node.js passed: warmup none result match -2022-08-15 11:36:32 STATE: test-node.js event: image -2022-08-15 11:36:32 STATE: test-node.js event: detect -2022-08-15 11:36:32 STATE: test-node.js event: warmup -2022-08-15 11:36:32 STATE: test-node.js passed: warmup: face default -2022-08-15 11:36:32 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-08-15 11:36:32 DATA:  test-node.js result: performance: load: null total: 348 -2022-08-15 11:36:32 STATE: test-node.js passed: warmup face result match -2022-08-15 11:36:32 STATE: test-node.js event: image -2022-08-15 11:36:32 STATE: test-node.js event: detect -2022-08-15 11:36:32 STATE: test-node.js event: warmup -2022-08-15 11:36:32 STATE: test-node.js passed: warmup: body default -2022-08-15 11:36:32 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:32 DATA:  test-node.js result: performance: load: null total: 242 -2022-08-15 11:36:32 STATE: test-node.js passed: warmup body result match -2022-08-15 11:36:32 STATE: test-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-08-15 11:36:32 INFO:  test-node.js test: details verification -2022-08-15 11:36:32 STATE: test-node.js start default -2022-08-15 11:36:32 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:32 STATE: test-node.js event: image -2022-08-15 11:36:33 STATE: test-node.js event: detect -2022-08-15 11:36:33 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-08-15 11:36:33 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:33 DATA:  test-node.js result: performance: load: null total: 238 -2022-08-15 11:36:33 STATE: test-node.js passed: details face length 1 -2022-08-15 11:36:33 STATE: test-node.js passed: details face score 1 0.93 1 -2022-08-15 11:36:33 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-08-15 11:36:33 STATE: test-node.js passed: details face arrays 4 478 1024 -2022-08-15 11:36:33 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-08-15 11:36:33 STATE: test-node.js passed: details face anti-spoofing 0.79 -2022-08-15 11:36:33 STATE: test-node.js passed: details face liveness 0.83 -2022-08-15 11:36:33 STATE: test-node.js passed: details body length 1 -2022-08-15 11:36:33 STATE: test-node.js passed: details body 0.92 17 6 -2022-08-15 11:36:33 STATE: test-node.js passed: details hand length 1 -2022-08-15 11:36:33 STATE: test-node.js passed: details hand 0.51 0.73 point -2022-08-15 11:36:33 STATE: test-node.js passed: details hand arrays 21 5 7 -2022-08-15 11:36:33 STATE: test-node.js passed: details gesture length 7 -2022-08-15 11:36:33 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-08-15 11:36:33 STATE: test-node.js passed: details object length 1 -2022-08-15 11:36:33 STATE: test-node.js passed: details object 0.72 person -2022-08-15 11:36:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-08-15 11:36:33 STATE: test-node.js event: image -2022-08-15 11:36:33 STATE: test-node.js event: detect -2022-08-15 11:36:33 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-08-15 11:36:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-08-15 11:36:33 STATE: test-node.js event: image -2022-08-15 11:36:33 STATE: test-node.js event: detect -2022-08-15 11:36:33 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-08-15 11:36:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:34 STATE: test-node.js event: image -2022-08-15 11:36:34 STATE: test-node.js event: detect -2022-08-15 11:36:34 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-08-15 11:36:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:34 STATE: test-node.js event: image -2022-08-15 11:36:34 STATE: test-node.js event: detect -2022-08-15 11:36:34 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-08-15 11:36:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-08-15 11:36:34 STATE: test-node.js event: image -2022-08-15 11:36:35 STATE: test-node.js event: detect -2022-08-15 11:36:35 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-08-15 11:36:35 INFO:  test-node.js test default -2022-08-15 11:36:35 STATE: test-node.js start async -2022-08-15 11:36:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:35 STATE: test-node.js event: image -2022-08-15 11:36:35 STATE: test-node.js event: detect -2022-08-15 11:36:35 STATE: test-node.js passed: detect: samples/in/ai-body.jpg async -2022-08-15 11:36:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:35 DATA:  test-node.js result: performance: load: null total: 227 -2022-08-15 11:36:35 STATE: test-node.js passed: default result face match 1 female 0.97 -2022-08-15 11:36:35 INFO:  test-node.js test sync -2022-08-15 11:36:35 STATE: test-node.js start sync -2022-08-15 11:36:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:35 STATE: test-node.js event: image -2022-08-15 11:36:35 STATE: test-node.js event: detect -2022-08-15 11:36:35 STATE: test-node.js passed: detect: samples/in/ai-body.jpg sync -2022-08-15 11:36:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:35 DATA:  test-node.js result: performance: load: null total: 225 -2022-08-15 11:36:35 STATE: test-node.js passed: default sync 1 female 0.97 -2022-08-15 11:36:35 INFO:  test-node.js test: image process -2022-08-15 11:36:35 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:35 STATE: test-node.js passed: image input null [1,256,256,3] -2022-08-15 11:36:35 INFO:  test-node.js test: image null -2022-08-15 11:36:35 STATE: test-node.js passed: invalid input could not convert input to tensor -2022-08-15 11:36:35 INFO:  test-node.js test face similarity -2022-08-15 11:36:35 STATE: test-node.js start face similarity -2022-08-15 11:36:35 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:35 STATE: test-node.js event: image -2022-08-15 11:36:36 STATE: test-node.js event: detect -2022-08-15 11:36:36 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face similarity -2022-08-15 11:36:36 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-08-15 11:36:36 DATA:  test-node.js result: performance: load: null total: 213 -2022-08-15 11:36:36 STATE: test-node.js start face similarity -2022-08-15 11:36:36 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:36 STATE: test-node.js event: image -2022-08-15 11:36:36 STATE: test-node.js event: detect -2022-08-15 11:36:36 STATE: test-node.js passed: detect: samples/in/ai-body.jpg face similarity -2022-08-15 11:36:36 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:36 DATA:  test-node.js result: performance: load: null total: 211 -2022-08-15 11:36:36 STATE: test-node.js start face similarity -2022-08-15 11:36:36 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-15 11:36:36 STATE: test-node.js event: image -2022-08-15 11:36:36 STATE: test-node.js event: detect -2022-08-15 11:36:36 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-08-15 11:36:36 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-08-15 11:36:36 DATA:  test-node.js result: performance: load: null total: 193 -2022-08-15 11:36:36 STATE: test-node.js passed: face descriptor -2022-08-15 11:36:36 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} -2022-08-15 11:36:36 INFO:  test-node.js test object -2022-08-15 11:36:36 STATE: test-node.js start object -2022-08-15 11:36:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:37 STATE: test-node.js event: image -2022-08-15 11:36:37 STATE: test-node.js event: detect -2022-08-15 11:36:37 STATE: test-node.js passed: detect: samples/in/ai-body.jpg object -2022-08-15 11:36:37 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:37 DATA:  test-node.js result: performance: load: null total: 224 -2022-08-15 11:36:37 STATE: test-node.js passed: centernet -2022-08-15 11:36:37 STATE: test-node.js start object -2022-08-15 11:36:38 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:38 STATE: test-node.js event: image -2022-08-15 11:36:38 STATE: test-node.js event: detect -2022-08-15 11:36:38 STATE: test-node.js passed: detect: samples/in/ai-body.jpg object -2022-08-15 11:36:38 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:38 DATA:  test-node.js result: performance: load: null total: 217 -2022-08-15 11:36:38 STATE: test-node.js passed: nanodet -2022-08-15 11:36:38 INFO:  test-node.js test sensitive -2022-08-15 11:36:38 STATE: test-node.js start sensitive -2022-08-15 11:36:38 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:38 STATE: test-node.js event: image -2022-08-15 11:36:38 STATE: test-node.js event: detect -2022-08-15 11:36:38 STATE: test-node.js passed: detect: samples/in/ai-body.jpg sensitive -2022-08-15 11:36:38 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:36:38 DATA:  test-node.js result: performance: load: null total: 185 -2022-08-15 11:36:38 STATE: test-node.js passed: sensitive result match -2022-08-15 11:36:38 STATE: test-node.js passed: sensitive face result match -2022-08-15 11:36:38 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-08-15 11:36:38 STATE: test-node.js passed: sensitive body result match -2022-08-15 11:36:38 STATE: test-node.js passed: sensitive hand result match -2022-08-15 11:36:38 INFO:  test-node.js test body -2022-08-15 11:36:38 STATE: test-node.js start blazepose -2022-08-15 11:36:40 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:40 STATE: test-node.js event: image -2022-08-15 11:36:40 STATE: test-node.js event: detect -2022-08-15 11:36:40 STATE: test-node.js passed: detect: samples/in/ai-body.jpg blazepose -2022-08-15 11:36:40 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-08-15 11:36:40 DATA:  test-node.js result: performance: load: null total: 225 -2022-08-15 11:36:40 STATE: test-node.js passed: blazepose -2022-08-15 11:36:40 STATE: test-node.js start efficientpose -2022-08-15 11:36:41 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:41 STATE: test-node.js event: image -2022-08-15 11:36:41 STATE: test-node.js event: detect -2022-08-15 11:36:41 STATE: test-node.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-08-15 11:36:41 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-08-15 11:36:41 DATA:  test-node.js result: performance: load: null total: 254 -2022-08-15 11:36:41 STATE: test-node.js passed: efficientpose -2022-08-15 11:36:41 STATE: test-node.js start posenet -2022-08-15 11:36:42 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:42 STATE: test-node.js event: image -2022-08-15 11:36:42 STATE: test-node.js event: detect -2022-08-15 11:36:42 STATE: test-node.js passed: detect: samples/in/ai-body.jpg posenet -2022-08-15 11:36:42 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-08-15 11:36:42 DATA:  test-node.js result: performance: load: null total: 200 -2022-08-15 11:36:42 STATE: test-node.js passed: posenet -2022-08-15 11:36:42 STATE: test-node.js start movenet -2022-08-15 11:36:42 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:42 STATE: test-node.js event: image -2022-08-15 11:36:42 STATE: test-node.js event: detect -2022-08-15 11:36:42 STATE: test-node.js passed: detect: samples/in/ai-body.jpg movenet -2022-08-15 11:36:42 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:36:42 DATA:  test-node.js result: performance: load: null total: 179 -2022-08-15 11:36:42 STATE: test-node.js passed: movenet -2022-08-15 11:36:42 INFO:  test-node.js test face matching -2022-08-15 11:36:42 STATE: test-node.js passed: face database 40 -2022-08-15 11:36:42 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.7827852615252829}} {"second":{"index":4,"similarity":0.5002052633015844}} {"third":{"index":4,"similarity":0.5401587887998899}} -2022-08-15 11:36:42 INFO:  test-node.js test face similarity alternative -2022-08-15 11:36:42 STATE: test-node.js start face embeddings -2022-08-15 11:36:43 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:43 STATE: test-node.js event: image -2022-08-15 11:36:43 STATE: test-node.js event: detect -2022-08-15 11:36:43 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-15 11:36:43 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:36:43 DATA:  test-node.js result: performance: load: null total: 191 -2022-08-15 11:36:43 STATE: test-node.js passed: mobilefacenet {"embedding":192} -2022-08-15 11:36:43 STATE: test-node.js start face embeddings -2022-08-15 11:36:44 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:44 STATE: test-node.js event: image -2022-08-15 11:36:44 STATE: test-node.js event: detect -2022-08-15 11:36:44 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-15 11:36:44 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:36:44 DATA:  test-node.js result: performance: load: null total: 198 -2022-08-15 11:36:44 STATE: test-node.js passed: insightface {"embedding":512} -2022-08-15 11:36:44 INFO:  test-node.js test face attention -2022-08-15 11:36:44 STATE: test-node.js start face attention -2022-08-15 11:36:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:45 STATE: test-node.js event: image -2022-08-15 11:36:45 STATE: test-node.js event: detect -2022-08-15 11:36:45 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face attention -2022-08-15 11:36:45 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:36:45 DATA:  test-node.js result: performance: load: null total: 181 -2022-08-15 11:36:45 STATE: test-node.js passed: face attention -2022-08-15 11:36:45 INFO:  test-node.js test detectors -2022-08-15 11:36:45 STATE: test-node.js start detectors -2022-08-15 11:36:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:45 STATE: test-node.js event: image -2022-08-15 11:36:45 STATE: test-node.js event: detect -2022-08-15 11:36:45 STATE: test-node.js passed: detect: samples/in/ai-body.jpg detectors -2022-08-15 11:36:45 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:36:45 DATA:  test-node.js result: performance: load: null total: 87 -2022-08-15 11:36:45 STATE: test-node.js passed: detector result face match -2022-08-15 11:36:45 STATE: test-node.js passed: detector result hand match -2022-08-15 11:36:45 INFO:  test-node.js test: multi-instance -2022-08-15 11:36:45 STATE: test-node.js start multi instance -2022-08-15 11:36:45 STATE: test-node.js event: image -2022-08-15 11:36:45 STATE: test-node.js event: detect -2022-08-15 11:36:45 STATE: test-node.js passed: detect: random multi instance -2022-08-15 11:36:45 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} -2022-08-15 11:36:45 DATA:  test-node.js result: performance: load: null total: 83 -2022-08-15 11:36:45 INFO:  test-node.js test: first instance -2022-08-15 11:36:45 STATE: test-node.js start multi instance -2022-08-15 11:36:45 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-15 11:36:45 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-15 11:36:45 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:36:45 DATA:  test-node.js result: performance: load: null total: 85 -2022-08-15 11:36:45 INFO:  test-node.js test: second instance -2022-08-15 11:36:45 STATE: test-node.js start multi instance -2022-08-15 11:36:45 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-15 11:36:45 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-15 11:36:45 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:36:45 DATA:  test-node.js result: performance: load: null total: 83 -2022-08-15 11:36:45 INFO:  test-node.js test: concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js start concurrent -2022-08-15 11:36:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:46 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:46 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:46 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-15 11:36:46 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-15 11:36:46 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:46 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:46 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-08-15 11:36:46 STATE: test-node.js event: image -2022-08-15 11:36:46 STATE: test-node.js event: image -2022-08-15 11:36:46 STATE: test-node.js event: image -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 1002 -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 1002 -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 1002 -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 1002 -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 1002 -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 1002 -2022-08-15 11:36:47 STATE: test-node.js event: detect -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 740 -2022-08-15 11:36:47 STATE: test-node.js event: detect -2022-08-15 11:36:47 STATE: test-node.js event: detect -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 740 -2022-08-15 11:36:47 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:36:47 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:36:47 DATA:  test-node.js result: performance: load: null total: 740 -2022-08-15 11:36:47 INFO:  test-node.js test: monkey-patch -2022-08-15 11:36:47 STATE: test-node.js event: image -2022-08-15 11:36:47 STATE: test-node.js event: detect -2022-08-15 11:36:47 STATE: test-node.js passed: monkey patch -2022-08-15 11:36:47 STATE: test-node.js passed: segmentation [65536] -2022-08-15 11:36:47 STATE: test-node.js passeed: equal usage -2022-08-15 11:36:47 INFO:  test-node.js test: input compare -2022-08-15 11:36:47 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:47 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-08-15 11:36:47 STATE: test-node.js passed: image compare 0 23.275441687091504 -2022-08-15 11:36:47 INFO:  test-node.js events: {"image":29,"detect":29,"warmup":2} -2022-08-15 11:36:47 INFO:  test-node.js tensors 4105 -2022-08-15 11:36:47 INFO:  test-node.js test complete: 15865 ms -2022-08-15 11:36:47 INFO:  -2022-08-15 11:36:47 INFO:  test-node-gpu.js start -2022-08-15 11:36:48 INFO:  test-node-gpu.js test: configuration validation -2022-08-15 11:36:48 STATE: test-node-gpu.js passed: configuration default validation [] -2022-08-15 11:36:48 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-08-15 11:36:48 INFO:  test-node-gpu.js test: model load -2022-08-15 11:36:48 STATE: test-node-gpu.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] -2022-08-15 11:36:48 INFO:  test-node-gpu.js test: warmup -2022-08-15 11:36:48 STATE: test-node-gpu.js passed: create human -2022-08-15 11:36:48 INFO:  test-node-gpu.js human version: 2.9.3 -2022-08-15 11:36:48 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v18.1.0 -2022-08-15 11:36:48 INFO:  test-node-gpu.js tfjs version: 3.19.0 -2022-08-15 11:36:48 INFO:  test-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.7.3-dev20220521","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} -2022-08-15 11:36:48 STATE: test-node-gpu.js passed: set backend: tensorflow -2022-08-15 11:36:48 STATE: test-node-gpu.js tensors 1921 -2022-08-15 11:36:48 STATE: test-node-gpu.js passed: load models -2022-08-15 11:36:48 STATE: test-node-gpu.js result: defined models: 23 loaded models: 12 -2022-08-15 11:36:48 STATE: test-node-gpu.js passed: warmup: none default -2022-08-15 11:36:48 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-08-15 11:36:48 DATA:  test-node-gpu.js result: performance: load: null total: null -2022-08-15 11:36:48 STATE: test-node-gpu.js passed: warmup none result match -2022-08-15 11:36:49 STATE: test-node-gpu.js event: image -2022-08-15 11:36:51 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:51 STATE: test-node-gpu.js event: warmup -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: warmup: face default -2022-08-15 11:36:51 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-08-15 11:36:51 DATA:  test-node-gpu.js result: performance: load: null total: 2030 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: warmup face result match -2022-08-15 11:36:51 STATE: test-node-gpu.js event: image -2022-08-15 11:36:51 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:51 STATE: test-node-gpu.js event: warmup -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: warmup: body default -2022-08-15 11:36:51 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:51 DATA:  test-node-gpu.js result: performance: load: null total: 178 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: warmup body result match -2022-08-15 11:36:51 STATE: test-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-08-15 11:36:51 INFO:  test-node-gpu.js test: details verification -2022-08-15 11:36:51 STATE: test-node-gpu.js start default -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:51 STATE: test-node-gpu.js event: image -2022-08-15 11:36:51 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-08-15 11:36:51 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:51 DATA:  test-node-gpu.js result: performance: load: null total: 200 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details face length 1 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details face score 1 0.93 1 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details face liveness 0.83 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details body length 1 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details body 0.92 17 6 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details hand length 1 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details gesture length 7 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details object length 1 -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: details object 0.72 person -2022-08-15 11:36:51 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-08-15 11:36:51 STATE: test-node-gpu.js event: image -2022-08-15 11:36:52 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:52 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-08-15 11:36:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-08-15 11:36:52 STATE: test-node-gpu.js event: image -2022-08-15 11:36:52 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:52 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-08-15 11:36:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:52 STATE: test-node-gpu.js event: image -2022-08-15 11:36:52 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:52 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-08-15 11:36:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:53 STATE: test-node-gpu.js event: image -2022-08-15 11:36:53 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:53 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-08-15 11:36:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-08-15 11:36:53 STATE: test-node-gpu.js event: image -2022-08-15 11:36:53 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:53 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-08-15 11:36:53 INFO:  test-node-gpu.js test default -2022-08-15 11:36:53 STATE: test-node-gpu.js start async -2022-08-15 11:36:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:53 STATE: test-node-gpu.js event: image -2022-08-15 11:36:54 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg async -2022-08-15 11:36:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:54 DATA:  test-node-gpu.js result: performance: load: null total: 171 -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 -2022-08-15 11:36:54 INFO:  test-node-gpu.js test sync -2022-08-15 11:36:54 STATE: test-node-gpu.js start sync -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:54 STATE: test-node-gpu.js event: image -2022-08-15 11:36:54 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg sync -2022-08-15 11:36:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:54 DATA:  test-node-gpu.js result: performance: load: null total: 170 -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: default sync 1 female 0.97 -2022-08-15 11:36:54 INFO:  test-node-gpu.js test: image process -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2022-08-15 11:36:54 INFO:  test-node-gpu.js test: image null -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor -2022-08-15 11:36:54 INFO:  test-node-gpu.js test face similarity -2022-08-15 11:36:54 STATE: test-node-gpu.js start face similarity -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:36:54 STATE: test-node-gpu.js event: image -2022-08-15 11:36:54 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity -2022-08-15 11:36:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-08-15 11:36:54 DATA:  test-node-gpu.js result: performance: load: null total: 164 -2022-08-15 11:36:54 STATE: test-node-gpu.js start face similarity -2022-08-15 11:36:54 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:54 STATE: test-node-gpu.js event: image -2022-08-15 11:36:55 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:55 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity -2022-08-15 11:36:55 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:55 DATA:  test-node-gpu.js result: performance: load: null total: 180 -2022-08-15 11:36:55 STATE: test-node-gpu.js start face similarity -2022-08-15 11:36:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-15 11:36:55 STATE: test-node-gpu.js event: image -2022-08-15 11:36:55 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:55 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-08-15 11:36:55 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-08-15 11:36:55 DATA:  test-node-gpu.js result: performance: load: null total: 168 -2022-08-15 11:36:55 STATE: test-node-gpu.js passed: face descriptor -2022-08-15 11:36:55 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} -2022-08-15 11:36:55 INFO:  test-node-gpu.js test object -2022-08-15 11:36:55 STATE: test-node-gpu.js start object -2022-08-15 11:36:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:55 STATE: test-node-gpu.js event: image -2022-08-15 11:36:55 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:55 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2022-08-15 11:36:55 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:55 DATA:  test-node-gpu.js result: performance: load: null total: 181 -2022-08-15 11:36:55 STATE: test-node-gpu.js passed: centernet -2022-08-15 11:36:55 STATE: test-node-gpu.js start object -2022-08-15 11:36:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:56 STATE: test-node-gpu.js event: image -2022-08-15 11:36:57 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2022-08-15 11:36:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:36:57 DATA:  test-node-gpu.js result: performance: load: null total: 579 -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: nanodet -2022-08-15 11:36:57 INFO:  test-node-gpu.js test sensitive -2022-08-15 11:36:57 STATE: test-node-gpu.js start sensitive -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:57 STATE: test-node-gpu.js event: image -2022-08-15 11:36:57 STATE: test-node-gpu.js event: detect -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive -2022-08-15 11:36:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:36:57 DATA:  test-node-gpu.js result: performance: load: null total: 132 -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: sensitive result match -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: sensitive face result match -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: sensitive body result match -2022-08-15 11:36:57 STATE: test-node-gpu.js passed: sensitive hand result match -2022-08-15 11:36:57 INFO:  test-node-gpu.js test body -2022-08-15 11:36:57 STATE: test-node-gpu.js start blazepose -2022-08-15 11:36:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:36:59 STATE: test-node-gpu.js event: image -2022-08-15 11:37:00 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose -2022-08-15 11:37:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-08-15 11:37:00 DATA:  test-node-gpu.js result: performance: load: null total: 398 -2022-08-15 11:37:00 STATE: test-node-gpu.js passed: blazepose -2022-08-15 11:37:00 STATE: test-node-gpu.js start efficientpose -2022-08-15 11:37:00 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:37:00 STATE: test-node-gpu.js event: image -2022-08-15 11:37:01 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:01 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-08-15 11:37:01 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-08-15 11:37:01 DATA:  test-node-gpu.js result: performance: load: null total: 665 -2022-08-15 11:37:01 STATE: test-node-gpu.js passed: efficientpose -2022-08-15 11:37:01 STATE: test-node-gpu.js start posenet -2022-08-15 11:37:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:37:02 STATE: test-node-gpu.js event: image -2022-08-15 11:37:02 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:02 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet -2022-08-15 11:37:02 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-08-15 11:37:02 DATA:  test-node-gpu.js result: performance: load: null total: 155 -2022-08-15 11:37:02 STATE: test-node-gpu.js passed: posenet -2022-08-15 11:37:02 STATE: test-node-gpu.js start movenet -2022-08-15 11:37:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:37:02 STATE: test-node-gpu.js event: image -2022-08-15 11:37:03 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:03 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet -2022-08-15 11:37:03 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:03 DATA:  test-node-gpu.js result: performance: load: null total: 151 -2022-08-15 11:37:03 STATE: test-node-gpu.js passed: movenet -2022-08-15 11:37:03 INFO:  test-node-gpu.js test face matching -2022-08-15 11:37:03 STATE: test-node-gpu.js passed: face database 40 -2022-08-15 11:37:03 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7828184453007331}} {"second":{"index":4,"similarity":0.5001334216773398}} {"third":{"index":4,"similarity":0.5403054967489764}} -2022-08-15 11:37:03 INFO:  test-node-gpu.js test face similarity alternative -2022-08-15 11:37:03 STATE: test-node-gpu.js start face embeddings -2022-08-15 11:37:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:37:03 STATE: test-node-gpu.js event: image -2022-08-15 11:37:03 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:03 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-15 11:37:03 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:03 DATA:  test-node-gpu.js result: performance: load: null total: 220 -2022-08-15 11:37:03 STATE: test-node-gpu.js passed: mobilefacenet {"embedding":192} -2022-08-15 11:37:03 STATE: test-node-gpu.js start face embeddings -2022-08-15 11:37:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:37:05 STATE: test-node-gpu.js event: image -2022-08-15 11:37:05 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:05 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-15 11:37:05 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:05 DATA:  test-node-gpu.js result: performance: load: null total: 234 -2022-08-15 11:37:05 STATE: test-node-gpu.js passed: insightface {"embedding":512} -2022-08-15 11:37:05 INFO:  test-node-gpu.js test face attention -2022-08-15 11:37:05 STATE: test-node-gpu.js start face attention -2022-08-15 11:37:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:37:05 STATE: test-node-gpu.js event: image -2022-08-15 11:37:06 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face attention -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: performance: load: null total: 278 -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: face attention -2022-08-15 11:37:06 INFO:  test-node-gpu.js test detectors -2022-08-15 11:37:06 STATE: test-node-gpu.js start detectors -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:37:06 STATE: test-node-gpu.js event: image -2022-08-15 11:37:06 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg detectors -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: performance: load: null total: 65 -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: detector result face match -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: detector result hand match -2022-08-15 11:37:06 INFO:  test-node-gpu.js test: multi-instance -2022-08-15 11:37:06 STATE: test-node-gpu.js start multi instance -2022-08-15 11:37:06 STATE: test-node-gpu.js event: image -2022-08-15 11:37:06 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: detect: random multi instance -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: performance: load: null total: 91 -2022-08-15 11:37:06 INFO:  test-node-gpu.js test: first instance -2022-08-15 11:37:06 STATE: test-node-gpu.js start multi instance -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: performance: load: null total: 93 -2022-08-15 11:37:06 INFO:  test-node-gpu.js test: second instance -2022-08-15 11:37:06 STATE: test-node-gpu.js start multi instance -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:06 DATA:  test-node-gpu.js result: performance: load: null total: 59 -2022-08-15 11:37:06 INFO:  test-node-gpu.js test: concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js start concurrent -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:37:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-15 11:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-15 11:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:37:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-08-15 11:37:07 STATE: test-node-gpu.js event: image -2022-08-15 11:37:07 STATE: test-node-gpu.js event: image -2022-08-15 11:37:07 STATE: test-node-gpu.js event: image -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-08-15 11:37:08 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 567 -2022-08-15 11:37:08 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:08 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 567 -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:08 DATA:  test-node-gpu.js result: performance: load: null total: 567 -2022-08-15 11:37:08 INFO:  test-node-gpu.js test: monkey-patch -2022-08-15 11:37:08 STATE: test-node-gpu.js event: image -2022-08-15 11:37:08 STATE: test-node-gpu.js event: detect -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: monkey patch -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: segmentation [65536] -2022-08-15 11:37:08 STATE: test-node-gpu.js passeed: equal usage -2022-08-15 11:37:08 INFO:  test-node-gpu.js test: input compare -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-08-15 11:37:08 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 -2022-08-15 11:37:08 INFO:  test-node-gpu.js events: {"image":29,"detect":29,"warmup":2} -2022-08-15 11:37:08 INFO:  test-node-gpu.js tensors 4105 -2022-08-15 11:37:08 INFO:  test-node-gpu.js test complete: 19978 ms -2022-08-15 11:37:09 INFO:  -2022-08-15 11:37:09 INFO:  test-node-wasm.js start -2022-08-15 11:37:09 DATA:  test-node-wasm.js stdout: 2022-08-15 11:37:09 INFO:  { supported: true, backend: true, simd: true, multithread: false } -2022-08-15 11:37:09 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2022-08-15 11:37:09 INFO:  test-node-wasm.js test: configuration validation -2022-08-15 11:37:09 STATE: test-node-wasm.js passed: configuration default validation [] -2022-08-15 11:37:09 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-08-15 11:37:09 INFO:  test-node-wasm.js test: model load -2022-08-15 11:37:11 STATE: test-node-wasm.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"https://vladmandic.github.io/human/models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"https://vladmandic.github.io/human/models/emotion.json"},{"name":"facedetect","loaded":true,"url":"https://vladmandic.github.io/human/models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"https://vladmandic.github.io/human/models/iris.json"},{"name":"facemesh","loaded":true,"url":"https://vladmandic.github.io/human/models/facemesh.json"},{"name":"faceres","loaded":true,"url":"https://vladmandic.github.io/human/models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"https://vladmandic.github.io/human/models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"https://vladmandic.github.io/human/models/handtrack.json"},{"name":"liveness","loaded":true,"url":"https://vladmandic.github.io/human/models/liveness.json"},{"name":"movenet","loaded":true,"url":"https://vladmandic.github.io/human/models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"https://vladmandic.github.io/human/models/selfie.json"},{"name":"antispoof","loaded":true,"url":"https://vladmandic.github.io/human/models/antispoof.json"}] -2022-08-15 11:37:11 INFO:  test-node-wasm.js test: warmup -2022-08-15 11:37:11 STATE: test-node-wasm.js passed: create human -2022-08-15 11:37:11 INFO:  test-node-wasm.js human version: 2.9.3 -2022-08-15 11:37:11 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v18.1.0 -2022-08-15 11:37:11 INFO:  test-node-wasm.js tfjs version: 3.19.0 -2022-08-15 11:37:11 INFO:  test-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","wasm"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":126} -2022-08-15 11:37:11 STATE: test-node-wasm.js passed: set backend: wasm -2022-08-15 11:37:11 STATE: test-node-wasm.js tensors 1921 -2022-08-15 11:37:11 STATE: test-node-wasm.js passed: load models -2022-08-15 11:37:11 STATE: test-node-wasm.js result: defined models: 23 loaded models: 12 -2022-08-15 11:37:11 STATE: test-node-wasm.js passed: warmup: none default -2022-08-15 11:37:11 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-08-15 11:37:11 DATA:  test-node-wasm.js result: performance: load: null total: null -2022-08-15 11:37:11 STATE: test-node-wasm.js passed: warmup none result match -2022-08-15 11:37:11 STATE: test-node-wasm.js event: image -2022-08-15 11:37:11 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:11 STATE: test-node-wasm.js event: warmup -2022-08-15 11:37:11 STATE: test-node-wasm.js passed: warmup: face default -2022-08-15 11:37:11 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-08-15 11:37:11 DATA:  test-node-wasm.js result: performance: load: null total: 578 -2022-08-15 11:37:11 STATE: test-node-wasm.js passed: warmup face result match -2022-08-15 11:37:11 STATE: test-node-wasm.js event: image -2022-08-15 11:37:12 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:12 STATE: test-node-wasm.js event: warmup -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: warmup: body default -2022-08-15 11:37:12 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:37:12 DATA:  test-node-wasm.js result: performance: load: null total: 408 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: warmup body result match -2022-08-15 11:37:12 STATE: test-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-08-15 11:37:12 INFO:  test-node-wasm.js test: details verification -2022-08-15 11:37:12 STATE: test-node-wasm.js start default -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:12 STATE: test-node-wasm.js event: image -2022-08-15 11:37:12 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-08-15 11:37:12 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:37:12 DATA:  test-node-wasm.js result: performance: load: null total: 382 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details face length 1 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details face score 1 0.93 1 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details face liveness 0.83 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details body length 1 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details body 0.92 17 6 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details hand length 1 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details gesture length 7 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details object length 1 -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: details object 0.72 person -2022-08-15 11:37:12 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2022-08-15 11:37:13 STATE: test-node-wasm.js event: image -2022-08-15 11:37:13 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:13 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-08-15 11:37:13 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2022-08-15 11:37:13 STATE: test-node-wasm.js event: image -2022-08-15 11:37:13 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:13 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-08-15 11:37:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:14 STATE: test-node-wasm.js event: image -2022-08-15 11:37:14 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:14 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-08-15 11:37:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:14 STATE: test-node-wasm.js event: image -2022-08-15 11:37:15 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:15 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-08-15 11:37:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-08-15 11:37:15 STATE: test-node-wasm.js event: image -2022-08-15 11:37:15 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:15 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-08-15 11:37:15 INFO:  test-node-wasm.js test default -2022-08-15 11:37:15 STATE: test-node-wasm.js start async -2022-08-15 11:37:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:16 STATE: test-node-wasm.js event: image -2022-08-15 11:37:16 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:16 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg async -2022-08-15 11:37:16 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:37:16 DATA:  test-node-wasm.js result: performance: load: null total: 334 -2022-08-15 11:37:16 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 -2022-08-15 11:37:16 INFO:  test-node-wasm.js test sync -2022-08-15 11:37:16 STATE: test-node-wasm.js start sync -2022-08-15 11:37:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:16 STATE: test-node-wasm.js event: image -2022-08-15 11:37:17 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:17 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg sync -2022-08-15 11:37:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:37:17 DATA:  test-node-wasm.js result: performance: load: null total: 436 -2022-08-15 11:37:17 STATE: test-node-wasm.js passed: default sync 1 female 0.97 -2022-08-15 11:37:17 INFO:  test-node-wasm.js test: image process -2022-08-15 11:37:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:17 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2022-08-15 11:37:17 INFO:  test-node-wasm.js test: image null -2022-08-15 11:37:17 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor -2022-08-15 11:37:17 INFO:  test-node-wasm.js test face similarity -2022-08-15 11:37:17 STATE: test-node-wasm.js start face similarity -2022-08-15 11:37:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:17 STATE: test-node-wasm.js event: image -2022-08-15 11:37:17 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:17 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity -2022-08-15 11:37:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-08-15 11:37:17 DATA:  test-node-wasm.js result: performance: load: null total: 424 -2022-08-15 11:37:17 STATE: test-node-wasm.js start face similarity -2022-08-15 11:37:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:17 STATE: test-node-wasm.js event: image -2022-08-15 11:37:18 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity -2022-08-15 11:37:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:37:18 DATA:  test-node-wasm.js result: performance: load: null total: 374 -2022-08-15 11:37:18 STATE: test-node-wasm.js start face similarity -2022-08-15 11:37:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-15 11:37:18 STATE: test-node-wasm.js event: image -2022-08-15 11:37:18 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-08-15 11:37:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-08-15 11:37:18 DATA:  test-node-wasm.js result: performance: load: null total: 316 -2022-08-15 11:37:18 STATE: test-node-wasm.js passed: face descriptor -2022-08-15 11:37:18 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} -2022-08-15 11:37:18 INFO:  test-node-wasm.js test object -2022-08-15 11:37:18 STATE: test-node-wasm.js start object -2022-08-15 11:37:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:18 STATE: test-node-wasm.js event: image -2022-08-15 11:37:19 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2022-08-15 11:37:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-08-15 11:37:19 DATA:  test-node-wasm.js result: performance: load: null total: 391 -2022-08-15 11:37:19 STATE: test-node-wasm.js passed: centernet -2022-08-15 11:37:19 STATE: test-node-wasm.js start object -2022-08-15 11:37:20 WARN:  test-node-wasm.js missing kernel ops {"title":"object","model":"nanodet","url":"https://vladmandic.github.io/human-models/models/nanodet.json","missing":["sparsetodense"],"backkend":"wasm"} -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:21 STATE: test-node-wasm.js event: image -2022-08-15 11:37:21 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2022-08-15 11:37:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:21 DATA:  test-node-wasm.js result: performance: load: null total: 204 -2022-08-15 11:37:21 ERROR: test-node-wasm.js failed: nanodet [] -2022-08-15 11:37:21 INFO:  test-node-wasm.js test sensitive -2022-08-15 11:37:21 STATE: test-node-wasm.js start sensitive -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:21 STATE: test-node-wasm.js event: image -2022-08-15 11:37:21 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive -2022-08-15 11:37:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:21 DATA:  test-node-wasm.js result: performance: load: null total: 263 -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: sensitive result match -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: sensitive face result match -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: sensitive body result match -2022-08-15 11:37:21 STATE: test-node-wasm.js passed: sensitive hand result match -2022-08-15 11:37:21 INFO:  test-node-wasm.js test body -2022-08-15 11:37:21 STATE: test-node-wasm.js start blazepose -2022-08-15 11:37:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:23 STATE: test-node-wasm.js event: image -2022-08-15 11:37:23 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose -2022-08-15 11:37:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-08-15 11:37:23 DATA:  test-node-wasm.js result: performance: load: null total: 423 -2022-08-15 11:37:23 STATE: test-node-wasm.js passed: blazepose -2022-08-15 11:37:23 STATE: test-node-wasm.js start efficientpose -2022-08-15 11:37:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:24 STATE: test-node-wasm.js event: image -2022-08-15 11:37:25 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:25 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-08-15 11:37:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-08-15 11:37:25 DATA:  test-node-wasm.js result: performance: load: null total: 721 -2022-08-15 11:37:25 STATE: test-node-wasm.js passed: efficientpose -2022-08-15 11:37:25 STATE: test-node-wasm.js start posenet -2022-08-15 11:37:25 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:25 STATE: test-node-wasm.js event: image -2022-08-15 11:37:26 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet -2022-08-15 11:37:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-08-15 11:37:26 DATA:  test-node-wasm.js result: performance: load: null total: 313 -2022-08-15 11:37:26 STATE: test-node-wasm.js passed: posenet -2022-08-15 11:37:26 STATE: test-node-wasm.js start movenet -2022-08-15 11:37:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:26 STATE: test-node-wasm.js event: image -2022-08-15 11:37:26 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet -2022-08-15 11:37:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:26 DATA:  test-node-wasm.js result: performance: load: null total: 254 -2022-08-15 11:37:26 STATE: test-node-wasm.js passed: movenet -2022-08-15 11:37:26 INFO:  test-node-wasm.js test face matching -2022-08-15 11:37:26 STATE: test-node-wasm.js passed: face database 40 -2022-08-15 11:37:26 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} -2022-08-15 11:37:26 INFO:  test-node-wasm.js test face similarity alternative -2022-08-15 11:37:26 STATE: test-node-wasm.js start face embeddings -2022-08-15 11:37:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:27 STATE: test-node-wasm.js event: image -2022-08-15 11:37:27 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-15 11:37:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:27 DATA:  test-node-wasm.js result: performance: load: null total: 278 -2022-08-15 11:37:27 STATE: test-node-wasm.js passed: mobilefacenet {"embedding":192} -2022-08-15 11:37:27 STATE: test-node-wasm.js start face embeddings -2022-08-15 11:37:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:27 STATE: test-node-wasm.js event: image -2022-08-15 11:37:28 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings -2022-08-15 11:37:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:28 DATA:  test-node-wasm.js result: performance: load: null total: 337 -2022-08-15 11:37:28 STATE: test-node-wasm.js passed: insightface {"embedding":512} -2022-08-15 11:37:28 INFO:  test-node-wasm.js test face attention -2022-08-15 11:37:28 STATE: test-node-wasm.js start face attention -2022-08-15 11:37:28 WARN:  test-node-wasm.js missing kernel ops {"title":"face attention","model":"facemesh","url":"https://vladmandic.github.io/human-models/models/facemesh-attention.json","missing":["atan2"],"backkend":"wasm"} -2022-08-15 11:37:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:28 STATE: test-node-wasm.js event: image -2022-08-15 11:37:28 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face attention -2022-08-15 11:37:28 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 1 gesture: 2 object: 0 person: 0 {} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:28 DATA:  test-node-wasm.js result: performance: load: null total: 142 -2022-08-15 11:37:28 ERROR: test-node-wasm.js failed: face attention {"annotations":0} -2022-08-15 11:37:28 INFO:  test-node-wasm.js test detectors -2022-08-15 11:37:28 STATE: test-node-wasm.js start detectors -2022-08-15 11:37:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:28 STATE: test-node-wasm.js event: image -2022-08-15 11:37:28 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg detectors -2022-08-15 11:37:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:28 DATA:  test-node-wasm.js result: performance: load: null total: 125 -2022-08-15 11:37:28 STATE: test-node-wasm.js passed: detector result face match -2022-08-15 11:37:28 STATE: test-node-wasm.js passed: detector result hand match -2022-08-15 11:37:28 INFO:  test-node-wasm.js test: multi-instance -2022-08-15 11:37:28 STATE: test-node-wasm.js start multi instance -2022-08-15 11:37:28 STATE: test-node-wasm.js event: image -2022-08-15 11:37:29 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: detect: random multi instance -2022-08-15 11:37:29 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} -2022-08-15 11:37:29 DATA:  test-node-wasm.js result: performance: load: null total: 98 -2022-08-15 11:37:29 INFO:  test-node-wasm.js test: first instance -2022-08-15 11:37:29 STATE: test-node-wasm.js start multi instance -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-15 11:37:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:29 DATA:  test-node-wasm.js result: performance: load: null total: 123 -2022-08-15 11:37:29 INFO:  test-node-wasm.js test: second instance -2022-08-15 11:37:29 STATE: test-node-wasm.js start multi instance -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance -2022-08-15 11:37:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:29 DATA:  test-node-wasm.js result: performance: load: null total: 117 -2022-08-15 11:37:29 INFO:  test-node-wasm.js test: concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js start concurrent -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-15 11:37:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-15 11:37:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-08-15 11:37:30 STATE: test-node-wasm.js event: image -2022-08-15 11:37:30 STATE: test-node-wasm.js event: image -2022-08-15 11:37:30 STATE: test-node-wasm.js event: image -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1338 -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1338 -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1339 -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1339 -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1339 -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1339 -2022-08-15 11:37:31 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1009 -2022-08-15 11:37:31 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:31 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1009 -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2022-08-15 11:37:31 DATA:  test-node-wasm.js result: performance: load: null total: 1009 -2022-08-15 11:37:31 INFO:  test-node-wasm.js test: monkey-patch -2022-08-15 11:37:31 STATE: test-node-wasm.js event: image -2022-08-15 11:37:31 STATE: test-node-wasm.js event: detect -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: monkey patch -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: segmentation [65536] -2022-08-15 11:37:31 STATE: test-node-wasm.js passeed: equal usage -2022-08-15 11:37:31 INFO:  test-node-wasm.js test: input compare -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-08-15 11:37:31 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 -2022-08-15 11:37:31 INFO:  test-node-wasm.js events: {"image":29,"detect":29,"warmup":2} -2022-08-15 11:37:31 INFO:  test-node-wasm.js tensors 4107 -2022-08-15 11:37:31 INFO:  test-node-wasm.js test complete: 22231 ms -2022-08-15 11:37:31 STATE: all tests complete -2022-08-15 11:37:31 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"../demo/nodejs/node-fetch.js","passed":1,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"test-node.js","passed":125,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"test-node-gpu.js","passed":125,"failed":0} -2022-08-15 11:37:31 INFO:  status {"test":"test-node-wasm.js","passed":124,"failed":2} -2022-08-15 11:37:31 INFO:  failures {"count":2} -2022-08-15 11:37:31 WARN:  failed {"test":"test-node-wasm.js","message":["error",["failed: nanodet",[]]]} -2022-08-15 11:37:31 WARN:  failed {"test":"test-node-wasm.js","message":["error",["failed: face attention",{"annotations":0}]]} +2022-08-19 09:13:23 INFO:  @vladmandic/human version 2.9.3 +2022-08-19 09:13:23 INFO:  User: vlado Platform: linux Arch: x64 Node: v18.1.0 +2022-08-19 09:13:23 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-fetch.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]}] +2022-08-19 09:13:23 INFO:  +2022-08-19 09:13:23 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start +2022-08-19 09:13:24 INFO:  +2022-08-19 09:13:24 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start +2022-08-19 09:13:25 INFO:  +2022-08-19 09:13:25 INFO:  {"cmd":"../demo/nodejs/node-fetch.js","args":[]} start +2022-08-19 09:13:27 INFO:  +2022-08-19 09:13:27 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start +2022-08-19 09:13:28 INFO:  +2022-08-19 09:13:28 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start +2022-08-19 09:13:28 INFO:  +2022-08-19 09:13:28 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start +2022-08-19 09:13:29 INFO:  +2022-08-19 09:13:29 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start +2022-08-19 09:13:30 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2022-08-19 09:13:30 INFO:  +2022-08-19 09:13:30 INFO:  test-node.js start +2022-08-19 09:13:30 INFO:  test-node.js test: configuration validation +2022-08-19 09:13:30 STATE: test-node.js passed: configuration default validation [] +2022-08-19 09:13:30 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-19 09:13:30 INFO:  test-node.js test: model load +2022-08-19 09:13:30 STATE: test-node.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] +2022-08-19 09:13:30 INFO:  test-node.js test: warmup +2022-08-19 09:13:30 STATE: test-node.js passed: create human +2022-08-19 09:13:30 INFO:  test-node.js human version: 2.9.3 +2022-08-19 09:13:30 INFO:  test-node.js platform: linux x64 agent: NodeJS v18.1.0 +2022-08-19 09:13:30 INFO:  test-node.js tfjs version: 3.19.0 +2022-08-19 09:13:30 INFO:  test-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.7.3-dev20220521","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} +2022-08-19 09:13:30 STATE: test-node.js passed: set backend: tensorflow +2022-08-19 09:13:30 STATE: test-node.js tensors 1921 +2022-08-19 09:13:30 STATE: test-node.js passed: load models +2022-08-19 09:13:30 STATE: test-node.js result: defined models: 23 loaded models: 12 +2022-08-19 09:13:30 STATE: test-node.js passed: warmup: none default +2022-08-19 09:13:30 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-19 09:13:30 DATA:  test-node.js result: performance: load: null total: null +2022-08-19 09:13:30 STATE: test-node.js passed: warmup none result match +2022-08-19 09:13:30 STATE: test-node.js event: image +2022-08-19 09:13:31 STATE: test-node.js event: detect +2022-08-19 09:13:31 STATE: test-node.js event: warmup +2022-08-19 09:13:31 STATE: test-node.js passed: warmup: face default +2022-08-19 09:13:31 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-08-19 09:13:31 DATA:  test-node.js result: performance: load: null total: 410 +2022-08-19 09:13:31 STATE: test-node.js passed: warmup face result match +2022-08-19 09:13:31 STATE: test-node.js event: image +2022-08-19 09:13:31 STATE: test-node.js event: detect +2022-08-19 09:13:31 STATE: test-node.js event: warmup +2022-08-19 09:13:31 STATE: test-node.js passed: warmup: body default +2022-08-19 09:13:31 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:31 DATA:  test-node.js result: performance: load: null total: 305 +2022-08-19 09:13:31 STATE: test-node.js passed: warmup body result match +2022-08-19 09:13:31 STATE: test-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-08-19 09:13:31 INFO:  test-node.js test: details verification +2022-08-19 09:13:31 STATE: test-node.js start default +2022-08-19 09:13:31 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:31 STATE: test-node.js event: image +2022-08-19 09:13:31 STATE: test-node.js event: detect +2022-08-19 09:13:31 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-19 09:13:31 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:31 DATA:  test-node.js result: performance: load: null total: 245 +2022-08-19 09:13:31 STATE: test-node.js passed: details face length 1 +2022-08-19 09:13:31 STATE: test-node.js passed: details face score 1 0.93 1 +2022-08-19 09:13:31 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-19 09:13:31 STATE: test-node.js passed: details face arrays 4 478 1024 +2022-08-19 09:13:31 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-19 09:13:31 STATE: test-node.js passed: details face anti-spoofing 0.79 +2022-08-19 09:13:31 STATE: test-node.js passed: details face liveness 0.83 +2022-08-19 09:13:31 STATE: test-node.js passed: details body length 1 +2022-08-19 09:13:31 STATE: test-node.js passed: details body 0.92 17 6 +2022-08-19 09:13:31 STATE: test-node.js passed: details hand length 1 +2022-08-19 09:13:31 STATE: test-node.js passed: details hand 0.51 0.73 point +2022-08-19 09:13:31 STATE: test-node.js passed: details hand arrays 21 5 7 +2022-08-19 09:13:31 STATE: test-node.js passed: details gesture length 7 +2022-08-19 09:13:31 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-19 09:13:31 STATE: test-node.js passed: details object length 1 +2022-08-19 09:13:31 STATE: test-node.js passed: details object 0.72 person +2022-08-19 09:13:32 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-08-19 09:13:32 STATE: test-node.js event: image +2022-08-19 09:13:32 STATE: test-node.js event: detect +2022-08-19 09:13:32 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-19 09:13:32 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-08-19 09:13:32 STATE: test-node.js event: image +2022-08-19 09:13:32 STATE: test-node.js event: detect +2022-08-19 09:13:32 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-19 09:13:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:33 STATE: test-node.js event: image +2022-08-19 09:13:33 STATE: test-node.js event: detect +2022-08-19 09:13:33 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-19 09:13:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:33 STATE: test-node.js event: image +2022-08-19 09:13:33 STATE: test-node.js event: detect +2022-08-19 09:13:33 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-19 09:13:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-19 09:13:33 STATE: test-node.js event: image +2022-08-19 09:13:34 STATE: test-node.js event: detect +2022-08-19 09:13:34 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-19 09:13:34 INFO:  test-node.js test default +2022-08-19 09:13:34 STATE: test-node.js start async +2022-08-19 09:13:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:34 STATE: test-node.js event: image +2022-08-19 09:13:34 STATE: test-node.js event: detect +2022-08-19 09:13:34 STATE: test-node.js passed: detect: samples/in/ai-body.jpg async +2022-08-19 09:13:34 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:34 DATA:  test-node.js result: performance: load: null total: 212 +2022-08-19 09:13:34 STATE: test-node.js passed: default result face match 1 female 0.97 +2022-08-19 09:13:34 INFO:  test-node.js test sync +2022-08-19 09:13:34 STATE: test-node.js start sync +2022-08-19 09:13:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:34 STATE: test-node.js event: image +2022-08-19 09:13:34 STATE: test-node.js event: detect +2022-08-19 09:13:34 STATE: test-node.js passed: detect: samples/in/ai-body.jpg sync +2022-08-19 09:13:34 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:34 DATA:  test-node.js result: performance: load: null total: 217 +2022-08-19 09:13:34 STATE: test-node.js passed: default sync 1 female 0.97 +2022-08-19 09:13:34 INFO:  test-node.js test: image process +2022-08-19 09:13:34 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:34 STATE: test-node.js passed: image input null [1,256,256,3] +2022-08-19 09:13:34 INFO:  test-node.js test: image null +2022-08-19 09:13:34 STATE: test-node.js passed: invalid input could not convert input to tensor +2022-08-19 09:13:34 INFO:  test-node.js test face similarity +2022-08-19 09:13:34 STATE: test-node.js start face similarity +2022-08-19 09:13:34 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:34 STATE: test-node.js event: image +2022-08-19 09:13:35 STATE: test-node.js event: detect +2022-08-19 09:13:35 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face similarity +2022-08-19 09:13:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-08-19 09:13:35 DATA:  test-node.js result: performance: load: null total: 214 +2022-08-19 09:13:35 STATE: test-node.js start face similarity +2022-08-19 09:13:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:35 STATE: test-node.js event: image +2022-08-19 09:13:35 STATE: test-node.js event: detect +2022-08-19 09:13:35 STATE: test-node.js passed: detect: samples/in/ai-body.jpg face similarity +2022-08-19 09:13:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:35 DATA:  test-node.js result: performance: load: null total: 229 +2022-08-19 09:13:35 STATE: test-node.js start face similarity +2022-08-19 09:13:35 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-19 09:13:35 STATE: test-node.js event: image +2022-08-19 09:13:35 STATE: test-node.js event: detect +2022-08-19 09:13:35 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-08-19 09:13:35 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-08-19 09:13:35 DATA:  test-node.js result: performance: load: null total: 191 +2022-08-19 09:13:35 STATE: test-node.js passed: face descriptor +2022-08-19 09:13:35 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} +2022-08-19 09:13:35 INFO:  test-node.js test object +2022-08-19 09:13:35 STATE: test-node.js start object +2022-08-19 09:13:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:35 STATE: test-node.js event: image +2022-08-19 09:13:36 STATE: test-node.js event: detect +2022-08-19 09:13:36 STATE: test-node.js passed: detect: samples/in/ai-body.jpg object +2022-08-19 09:13:36 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:36 DATA:  test-node.js result: performance: load: null total: 205 +2022-08-19 09:13:36 STATE: test-node.js passed: centernet +2022-08-19 09:13:36 STATE: test-node.js start object +2022-08-19 09:13:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:37 STATE: test-node.js event: image +2022-08-19 09:13:37 STATE: test-node.js event: detect +2022-08-19 09:13:37 STATE: test-node.js passed: detect: samples/in/ai-body.jpg object +2022-08-19 09:13:37 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:37 DATA:  test-node.js result: performance: load: null total: 223 +2022-08-19 09:13:37 STATE: test-node.js passed: nanodet +2022-08-19 09:13:37 INFO:  test-node.js test sensitive +2022-08-19 09:13:37 STATE: test-node.js start sensitive +2022-08-19 09:13:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:37 STATE: test-node.js event: image +2022-08-19 09:13:37 STATE: test-node.js event: detect +2022-08-19 09:13:37 STATE: test-node.js passed: detect: samples/in/ai-body.jpg sensitive +2022-08-19 09:13:37 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:13:37 DATA:  test-node.js result: performance: load: null total: 171 +2022-08-19 09:13:37 STATE: test-node.js passed: sensitive result match +2022-08-19 09:13:37 STATE: test-node.js passed: sensitive face result match +2022-08-19 09:13:37 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-08-19 09:13:37 STATE: test-node.js passed: sensitive body result match +2022-08-19 09:13:37 STATE: test-node.js passed: sensitive hand result match +2022-08-19 09:13:37 INFO:  test-node.js test body +2022-08-19 09:13:37 STATE: test-node.js start blazepose +2022-08-19 09:13:39 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:39 STATE: test-node.js event: image +2022-08-19 09:13:39 STATE: test-node.js event: detect +2022-08-19 09:13:39 STATE: test-node.js passed: detect: samples/in/ai-body.jpg blazepose +2022-08-19 09:13:39 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-08-19 09:13:39 DATA:  test-node.js result: performance: load: null total: 268 +2022-08-19 09:13:39 STATE: test-node.js passed: blazepose +2022-08-19 09:13:39 STATE: test-node.js start efficientpose +2022-08-19 09:13:40 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:40 STATE: test-node.js event: image +2022-08-19 09:13:41 STATE: test-node.js event: detect +2022-08-19 09:13:41 STATE: test-node.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-08-19 09:13:41 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-08-19 09:13:41 DATA:  test-node.js result: performance: load: null total: 274 +2022-08-19 09:13:41 STATE: test-node.js passed: efficientpose +2022-08-19 09:13:41 STATE: test-node.js start posenet +2022-08-19 09:13:41 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:41 STATE: test-node.js event: image +2022-08-19 09:13:42 STATE: test-node.js event: detect +2022-08-19 09:13:42 STATE: test-node.js passed: detect: samples/in/ai-body.jpg posenet +2022-08-19 09:13:42 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-08-19 09:13:42 DATA:  test-node.js result: performance: load: null total: 194 +2022-08-19 09:13:42 STATE: test-node.js passed: posenet +2022-08-19 09:13:42 STATE: test-node.js start movenet +2022-08-19 09:13:42 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:42 STATE: test-node.js event: image +2022-08-19 09:13:42 STATE: test-node.js event: detect +2022-08-19 09:13:42 STATE: test-node.js passed: detect: samples/in/ai-body.jpg movenet +2022-08-19 09:13:42 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:13:42 DATA:  test-node.js result: performance: load: null total: 188 +2022-08-19 09:13:42 STATE: test-node.js passed: movenet +2022-08-19 09:13:42 INFO:  test-node.js test face matching +2022-08-19 09:13:42 STATE: test-node.js passed: face database 40 +2022-08-19 09:13:42 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.7827852615252829}} {"second":{"index":4,"similarity":0.5002052633015844}} {"third":{"index":4,"similarity":0.5401587887998899}} +2022-08-19 09:13:42 INFO:  test-node.js test face similarity alternative +2022-08-19 09:13:42 STATE: test-node.js start face embeddings +2022-08-19 09:13:42 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:42 STATE: test-node.js event: image +2022-08-19 09:13:43 STATE: test-node.js event: detect +2022-08-19 09:13:43 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-19 09:13:43 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:13:43 DATA:  test-node.js result: performance: load: null total: 188 +2022-08-19 09:13:43 STATE: test-node.js passed: mobilefacenet {"embedding":192} +2022-08-19 09:13:43 STATE: test-node.js start face embeddings +2022-08-19 09:13:43 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:43 STATE: test-node.js event: image +2022-08-19 09:13:43 STATE: test-node.js event: detect +2022-08-19 09:13:43 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-19 09:13:43 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:13:43 DATA:  test-node.js result: performance: load: null total: 213 +2022-08-19 09:13:43 STATE: test-node.js passed: insightface {"embedding":512} +2022-08-19 09:13:43 INFO:  test-node.js test face attention +2022-08-19 09:13:43 STATE: test-node.js start face attention +2022-08-19 09:13:44 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:44 STATE: test-node.js event: image +2022-08-19 09:13:44 STATE: test-node.js event: detect +2022-08-19 09:13:44 STATE: test-node.js passed: detect: samples/in/ai-face.jpg face attention +2022-08-19 09:13:44 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:13:44 DATA:  test-node.js result: performance: load: null total: 180 +2022-08-19 09:13:44 STATE: test-node.js passed: face attention +2022-08-19 09:13:44 INFO:  test-node.js test detectors +2022-08-19 09:13:44 STATE: test-node.js start detectors +2022-08-19 09:13:44 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:44 STATE: test-node.js event: image +2022-08-19 09:13:44 STATE: test-node.js event: detect +2022-08-19 09:13:44 STATE: test-node.js passed: detect: samples/in/ai-body.jpg detectors +2022-08-19 09:13:44 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:13:44 DATA:  test-node.js result: performance: load: null total: 89 +2022-08-19 09:13:44 STATE: test-node.js passed: detector result face match +2022-08-19 09:13:44 STATE: test-node.js passed: detector result hand match +2022-08-19 09:13:44 INFO:  test-node.js test: multi-instance +2022-08-19 09:13:44 STATE: test-node.js start multi instance +2022-08-19 09:13:44 STATE: test-node.js event: image +2022-08-19 09:13:44 STATE: test-node.js event: detect +2022-08-19 09:13:44 STATE: test-node.js passed: detect: random multi instance +2022-08-19 09:13:44 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-08-19 09:13:44 DATA:  test-node.js result: performance: load: null total: 85 +2022-08-19 09:13:44 INFO:  test-node.js test: first instance +2022-08-19 09:13:44 STATE: test-node.js start multi instance +2022-08-19 09:13:44 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-19 09:13:44 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-19 09:13:44 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:13:44 DATA:  test-node.js result: performance: load: null total: 89 +2022-08-19 09:13:44 INFO:  test-node.js test: second instance +2022-08-19 09:13:44 STATE: test-node.js start multi instance +2022-08-19 09:13:44 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-19 09:13:45 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-19 09:13:45 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:13:45 DATA:  test-node.js result: performance: load: null total: 82 +2022-08-19 09:13:45 INFO:  test-node.js test: concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js start concurrent +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:45 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-19 09:13:45 STATE: test-node.js event: image +2022-08-19 09:13:45 STATE: test-node.js event: image +2022-08-19 09:13:45 STATE: test-node.js event: image +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 992 +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 992 +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 993 +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 993 +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 993 +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 993 +2022-08-19 09:13:46 STATE: test-node.js event: detect +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 719 +2022-08-19 09:13:46 STATE: test-node.js event: detect +2022-08-19 09:13:46 STATE: test-node.js event: detect +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 719 +2022-08-19 09:13:46 STATE: test-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:13:46 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:13:46 DATA:  test-node.js result: performance: load: null total: 719 +2022-08-19 09:13:46 INFO:  test-node.js test: monkey-patch +2022-08-19 09:13:46 STATE: test-node.js event: image +2022-08-19 09:13:46 STATE: test-node.js event: detect +2022-08-19 09:13:46 STATE: test-node.js passed: monkey patch +2022-08-19 09:13:46 STATE: test-node.js passed: segmentation [65536] +2022-08-19 09:13:46 STATE: test-node.js passeed: equal usage +2022-08-19 09:13:46 INFO:  test-node.js test: input compare +2022-08-19 09:13:46 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:46 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-19 09:13:46 STATE: test-node.js passed: image compare 0 23.275441687091504 +2022-08-19 09:13:46 INFO:  test-node.js events: {"image":29,"detect":29,"warmup":2} +2022-08-19 09:13:46 INFO:  test-node.js tensors 4105 +2022-08-19 09:13:46 INFO:  test-node.js test complete: 16274 ms +2022-08-19 09:13:46 INFO:  +2022-08-19 09:13:46 INFO:  test-node-gpu.js start +2022-08-19 09:13:48 INFO:  test-node-gpu.js test: configuration validation +2022-08-19 09:13:48 STATE: test-node-gpu.js passed: configuration default validation [] +2022-08-19 09:13:48 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-19 09:13:48 INFO:  test-node-gpu.js test: model load +2022-08-19 09:13:48 STATE: test-node-gpu.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] +2022-08-19 09:13:48 INFO:  test-node-gpu.js test: warmup +2022-08-19 09:13:48 STATE: test-node-gpu.js passed: create human +2022-08-19 09:13:48 INFO:  test-node-gpu.js human version: 2.9.3 +2022-08-19 09:13:48 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v18.1.0 +2022-08-19 09:13:48 INFO:  test-node-gpu.js tfjs version: 3.19.0 +2022-08-19 09:13:48 INFO:  test-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.7.3-dev20220521","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} +2022-08-19 09:13:48 STATE: test-node-gpu.js passed: set backend: tensorflow +2022-08-19 09:13:48 STATE: test-node-gpu.js tensors 1921 +2022-08-19 09:13:48 STATE: test-node-gpu.js passed: load models +2022-08-19 09:13:48 STATE: test-node-gpu.js result: defined models: 23 loaded models: 12 +2022-08-19 09:13:48 STATE: test-node-gpu.js passed: warmup: none default +2022-08-19 09:13:48 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-19 09:13:48 DATA:  test-node-gpu.js result: performance: load: null total: null +2022-08-19 09:13:48 STATE: test-node-gpu.js passed: warmup none result match +2022-08-19 09:13:49 STATE: test-node-gpu.js event: image +2022-08-19 09:13:54 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:54 STATE: test-node-gpu.js event: warmup +2022-08-19 09:13:54 STATE: test-node-gpu.js passed: warmup: face default +2022-08-19 09:13:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-08-19 09:13:54 DATA:  test-node-gpu.js result: performance: load: null total: 5301 +2022-08-19 09:13:54 STATE: test-node-gpu.js passed: warmup face result match +2022-08-19 09:13:54 STATE: test-node-gpu.js event: image +2022-08-19 09:13:54 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:54 STATE: test-node-gpu.js event: warmup +2022-08-19 09:13:54 STATE: test-node-gpu.js passed: warmup: body default +2022-08-19 09:13:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:54 DATA:  test-node-gpu.js result: performance: load: null total: 150 +2022-08-19 09:13:54 STATE: test-node-gpu.js passed: warmup body result match +2022-08-19 09:13:54 STATE: test-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-08-19 09:13:54 INFO:  test-node-gpu.js test: details verification +2022-08-19 09:13:54 STATE: test-node-gpu.js start default +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:13:55 STATE: test-node-gpu.js event: image +2022-08-19 09:13:55 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-19 09:13:55 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:55 DATA:  test-node-gpu.js result: performance: load: null total: 134 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face length 1 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face score 1 0.93 1 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details face liveness 0.83 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details body length 1 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details body 0.92 17 6 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details hand length 1 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details gesture length 7 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details object length 1 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: details object 0.72 person +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-08-19 09:13:55 STATE: test-node-gpu.js event: image +2022-08-19 09:13:55 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-08-19 09:13:55 STATE: test-node-gpu.js event: image +2022-08-19 09:13:55 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:55 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-19 09:13:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:13:56 STATE: test-node-gpu.js event: image +2022-08-19 09:13:56 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:56 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-19 09:13:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} +2022-08-19 09:13:56 STATE: test-node-gpu.js event: image +2022-08-19 09:13:56 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:56 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-19 09:13:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-19 09:13:56 STATE: test-node-gpu.js event: image +2022-08-19 09:13:56 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:56 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-19 09:13:56 INFO:  test-node-gpu.js test default +2022-08-19 09:13:56 STATE: test-node-gpu.js start async +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:13:57 STATE: test-node-gpu.js event: image +2022-08-19 09:13:57 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg async +2022-08-19 09:13:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:57 DATA:  test-node-gpu.js result: performance: load: null total: 148 +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 +2022-08-19 09:13:57 INFO:  test-node-gpu.js test sync +2022-08-19 09:13:57 STATE: test-node-gpu.js start sync +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:13:57 STATE: test-node-gpu.js event: image +2022-08-19 09:13:57 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg sync +2022-08-19 09:13:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:57 DATA:  test-node-gpu.js result: performance: load: null total: 142 +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: default sync 1 female 0.97 +2022-08-19 09:13:57 INFO:  test-node-gpu.js test: image process +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2022-08-19 09:13:57 INFO:  test-node-gpu.js test: image null +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor +2022-08-19 09:13:57 INFO:  test-node-gpu.js test face similarity +2022-08-19 09:13:57 STATE: test-node-gpu.js start face similarity +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:13:57 STATE: test-node-gpu.js event: image +2022-08-19 09:13:57 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity +2022-08-19 09:13:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-08-19 09:13:57 DATA:  test-node-gpu.js result: performance: load: null total: 163 +2022-08-19 09:13:57 STATE: test-node-gpu.js start face similarity +2022-08-19 09:13:57 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:13:57 STATE: test-node-gpu.js event: image +2022-08-19 09:13:58 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity +2022-08-19 09:13:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:58 DATA:  test-node-gpu.js result: performance: load: null total: 171 +2022-08-19 09:13:58 STATE: test-node-gpu.js start face similarity +2022-08-19 09:13:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-19 09:13:58 STATE: test-node-gpu.js event: image +2022-08-19 09:13:58 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-08-19 09:13:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-08-19 09:13:58 DATA:  test-node-gpu.js result: performance: load: null total: 168 +2022-08-19 09:13:58 STATE: test-node-gpu.js passed: face descriptor +2022-08-19 09:13:58 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} +2022-08-19 09:13:58 INFO:  test-node-gpu.js test object +2022-08-19 09:13:58 STATE: test-node-gpu.js start object +2022-08-19 09:13:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:13:58 STATE: test-node-gpu.js event: image +2022-08-19 09:13:58 STATE: test-node-gpu.js event: detect +2022-08-19 09:13:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2022-08-19 09:13:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:13:58 DATA:  test-node-gpu.js result: performance: load: null total: 187 +2022-08-19 09:13:58 STATE: test-node-gpu.js passed: centernet +2022-08-19 09:13:58 STATE: test-node-gpu.js start object +2022-08-19 09:13:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:13:59 STATE: test-node-gpu.js event: image +2022-08-19 09:14:00 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2022-08-19 09:14:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:14:00 DATA:  test-node-gpu.js result: performance: load: null total: 469 +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: nanodet +2022-08-19 09:14:00 INFO:  test-node-gpu.js test sensitive +2022-08-19 09:14:00 STATE: test-node-gpu.js start sensitive +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:00 STATE: test-node-gpu.js event: image +2022-08-19 09:14:00 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive +2022-08-19 09:14:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:00 DATA:  test-node-gpu.js result: performance: load: null total: 125 +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive result match +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive face result match +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive body result match +2022-08-19 09:14:00 STATE: test-node-gpu.js passed: sensitive hand result match +2022-08-19 09:14:00 INFO:  test-node-gpu.js test body +2022-08-19 09:14:00 STATE: test-node-gpu.js start blazepose +2022-08-19 09:14:01 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:01 STATE: test-node-gpu.js event: image +2022-08-19 09:14:02 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:02 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose +2022-08-19 09:14:02 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-08-19 09:14:02 DATA:  test-node-gpu.js result: performance: load: null total: 253 +2022-08-19 09:14:02 STATE: test-node-gpu.js passed: blazepose +2022-08-19 09:14:02 STATE: test-node-gpu.js start efficientpose +2022-08-19 09:14:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:02 STATE: test-node-gpu.js event: image +2022-08-19 09:14:03 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:03 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-08-19 09:14:03 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-08-19 09:14:03 DATA:  test-node-gpu.js result: performance: load: null total: 841 +2022-08-19 09:14:03 STATE: test-node-gpu.js passed: efficientpose +2022-08-19 09:14:03 STATE: test-node-gpu.js start posenet +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:04 STATE: test-node-gpu.js event: image +2022-08-19 09:14:04 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet +2022-08-19 09:14:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-08-19 09:14:04 DATA:  test-node-gpu.js result: performance: load: null total: 134 +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: posenet +2022-08-19 09:14:04 STATE: test-node-gpu.js start movenet +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:04 STATE: test-node-gpu.js event: image +2022-08-19 09:14:04 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet +2022-08-19 09:14:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:04 DATA:  test-node-gpu.js result: performance: load: null total: 107 +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: movenet +2022-08-19 09:14:04 INFO:  test-node-gpu.js test face matching +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: face database 40 +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7828184453007331}} {"second":{"index":4,"similarity":0.5001334216773398}} {"third":{"index":4,"similarity":0.5403054967489764}} +2022-08-19 09:14:04 INFO:  test-node-gpu.js test face similarity alternative +2022-08-19 09:14:04 STATE: test-node-gpu.js start face embeddings +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:14:04 STATE: test-node-gpu.js event: image +2022-08-19 09:14:04 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-19 09:14:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:04 DATA:  test-node-gpu.js result: performance: load: null total: 155 +2022-08-19 09:14:04 STATE: test-node-gpu.js passed: mobilefacenet {"embedding":192} +2022-08-19 09:14:04 STATE: test-node-gpu.js start face embeddings +2022-08-19 09:14:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:14:05 STATE: test-node-gpu.js event: image +2022-08-19 09:14:05 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:05 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-19 09:14:05 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:05 DATA:  test-node-gpu.js result: performance: load: null total: 181 +2022-08-19 09:14:05 STATE: test-node-gpu.js passed: insightface {"embedding":512} +2022-08-19 09:14:05 INFO:  test-node-gpu.js test face attention +2022-08-19 09:14:05 STATE: test-node-gpu.js start face attention +2022-08-19 09:14:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:14:05 STATE: test-node-gpu.js event: image +2022-08-19 09:14:06 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg face attention +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 224 +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: face attention +2022-08-19 09:14:06 INFO:  test-node-gpu.js test detectors +2022-08-19 09:14:06 STATE: test-node-gpu.js start detectors +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:06 STATE: test-node-gpu.js event: image +2022-08-19 09:14:06 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg detectors +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 59 +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detector result face match +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detector result hand match +2022-08-19 09:14:06 INFO:  test-node-gpu.js test: multi-instance +2022-08-19 09:14:06 STATE: test-node-gpu.js start multi instance +2022-08-19 09:14:06 STATE: test-node-gpu.js event: image +2022-08-19 09:14:06 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: random multi instance +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 53 +2022-08-19 09:14:06 INFO:  test-node-gpu.js test: first instance +2022-08-19 09:14:06 STATE: test-node-gpu.js start multi instance +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 45 +2022-08-19 09:14:06 INFO:  test-node-gpu.js test: second instance +2022-08-19 09:14:06 STATE: test-node-gpu.js start multi instance +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:06 DATA:  test-node-gpu.js result: performance: load: null total: 49 +2022-08-19 09:14:06 INFO:  test-node-gpu.js test: concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js start concurrent +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:14:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-19 09:14:07 STATE: test-node-gpu.js event: image +2022-08-19 09:14:07 STATE: test-node-gpu.js event: image +2022-08-19 09:14:07 STATE: test-node-gpu.js event: image +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 699 +2022-08-19 09:14:07 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 427 +2022-08-19 09:14:07 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:07 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 427 +2022-08-19 09:14:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:07 DATA:  test-node-gpu.js result: performance: load: null total: 427 +2022-08-19 09:14:07 INFO:  test-node-gpu.js test: monkey-patch +2022-08-19 09:14:07 STATE: test-node-gpu.js event: image +2022-08-19 09:14:08 STATE: test-node-gpu.js event: detect +2022-08-19 09:14:08 STATE: test-node-gpu.js passed: monkey patch +2022-08-19 09:14:08 STATE: test-node-gpu.js passed: segmentation [65536] +2022-08-19 09:14:08 STATE: test-node-gpu.js passeed: equal usage +2022-08-19 09:14:08 INFO:  test-node-gpu.js test: input compare +2022-08-19 09:14:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-19 09:14:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-19 09:14:08 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 +2022-08-19 09:14:08 INFO:  test-node-gpu.js events: {"image":29,"detect":29,"warmup":2} +2022-08-19 09:14:08 INFO:  test-node-gpu.js tensors 4105 +2022-08-19 09:14:08 INFO:  test-node-gpu.js test complete: 19548 ms +2022-08-19 09:14:09 INFO:  +2022-08-19 09:14:09 INFO:  test-node-wasm.js start +2022-08-19 09:14:11 DATA:  test-node-wasm.js stdout: 2022-08-19 09:14:11 INFO:  { supported: true, backend: true, simd: true, multithread: false } +2022-08-19 09:14:11 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2022-08-19 09:14:11 INFO:  test-node-wasm.js test: configuration validation +2022-08-19 09:14:11 STATE: test-node-wasm.js passed: configuration default validation [] +2022-08-19 09:14:11 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-19 09:14:11 INFO:  test-node-wasm.js test: model load +2022-08-19 09:14:12 STATE: test-node-wasm.js passed: models loaded 23 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"https://vladmandic.github.io/human/models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"https://vladmandic.github.io/human/models/emotion.json"},{"name":"facedetect","loaded":true,"url":"https://vladmandic.github.io/human/models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"https://vladmandic.github.io/human/models/iris.json"},{"name":"facemesh","loaded":true,"url":"https://vladmandic.github.io/human/models/facemesh.json"},{"name":"faceres","loaded":true,"url":"https://vladmandic.github.io/human/models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"https://vladmandic.github.io/human/models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"https://vladmandic.github.io/human/models/handtrack.json"},{"name":"liveness","loaded":true,"url":"https://vladmandic.github.io/human/models/liveness.json"},{"name":"movenet","loaded":true,"url":"https://vladmandic.github.io/human/models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"https://vladmandic.github.io/human/models/selfie.json"},{"name":"antispoof","loaded":true,"url":"https://vladmandic.github.io/human/models/antispoof.json"}] +2022-08-19 09:14:12 INFO:  test-node-wasm.js test: warmup +2022-08-19 09:14:12 STATE: test-node-wasm.js passed: create human +2022-08-19 09:14:12 INFO:  test-node-wasm.js human version: 2.9.3 +2022-08-19 09:14:12 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v18.1.0 +2022-08-19 09:14:12 INFO:  test-node-wasm.js tfjs version: 3.19.0 +2022-08-19 09:14:12 INFO:  test-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.1.0","backends":["cpu","wasm"],"initial":false,"tfjs":{"version":"3.19.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":126} +2022-08-19 09:14:12 STATE: test-node-wasm.js passed: set backend: wasm +2022-08-19 09:14:12 STATE: test-node-wasm.js tensors 1921 +2022-08-19 09:14:12 STATE: test-node-wasm.js passed: load models +2022-08-19 09:14:12 STATE: test-node-wasm.js result: defined models: 23 loaded models: 12 +2022-08-19 09:14:12 STATE: test-node-wasm.js passed: warmup: none default +2022-08-19 09:14:12 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-19 09:14:12 DATA:  test-node-wasm.js result: performance: load: null total: null +2022-08-19 09:14:12 STATE: test-node-wasm.js passed: warmup none result match +2022-08-19 09:14:12 STATE: test-node-wasm.js event: image +2022-08-19 09:14:13 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:13 STATE: test-node-wasm.js event: warmup +2022-08-19 09:14:13 STATE: test-node-wasm.js passed: warmup: face default +2022-08-19 09:14:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-08-19 09:14:13 DATA:  test-node-wasm.js result: performance: load: null total: 502 +2022-08-19 09:14:13 STATE: test-node-wasm.js passed: warmup face result match +2022-08-19 09:14:13 STATE: test-node-wasm.js event: image +2022-08-19 09:14:13 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:13 STATE: test-node-wasm.js event: warmup +2022-08-19 09:14:13 STATE: test-node-wasm.js passed: warmup: body default +2022-08-19 09:14:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:14:13 DATA:  test-node-wasm.js result: performance: load: null total: 357 +2022-08-19 09:14:13 STATE: test-node-wasm.js passed: warmup body result match +2022-08-19 09:14:13 STATE: test-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-08-19 09:14:13 INFO:  test-node-wasm.js test: details verification +2022-08-19 09:14:13 STATE: test-node-wasm.js start default +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:14 STATE: test-node-wasm.js event: image +2022-08-19 09:14:14 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-19 09:14:14 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:14:14 DATA:  test-node-wasm.js result: performance: load: null total: 336 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face length 1 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face score 1 0.93 1 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details face liveness 0.83 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details body length 1 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details body 0.92 17 6 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details hand length 1 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details gesture length 7 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details object length 1 +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: details object 0.72 person +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2022-08-19 09:14:14 STATE: test-node-wasm.js event: image +2022-08-19 09:14:14 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:14 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-19 09:14:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2022-08-19 09:14:15 STATE: test-node-wasm.js event: image +2022-08-19 09:14:15 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:15 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-19 09:14:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:15 STATE: test-node-wasm.js event: image +2022-08-19 09:14:16 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:16 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-19 09:14:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:16 STATE: test-node-wasm.js event: image +2022-08-19 09:14:16 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:16 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-19 09:14:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-19 09:14:16 STATE: test-node-wasm.js event: image +2022-08-19 09:14:17 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:17 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-19 09:14:17 INFO:  test-node-wasm.js test default +2022-08-19 09:14:17 STATE: test-node-wasm.js start async +2022-08-19 09:14:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:17 STATE: test-node-wasm.js event: image +2022-08-19 09:14:17 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:17 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg async +2022-08-19 09:14:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:14:17 DATA:  test-node-wasm.js result: performance: load: null total: 356 +2022-08-19 09:14:17 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 +2022-08-19 09:14:17 INFO:  test-node-wasm.js test sync +2022-08-19 09:14:17 STATE: test-node-wasm.js start sync +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:18 STATE: test-node-wasm.js event: image +2022-08-19 09:14:18 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg sync +2022-08-19 09:14:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:14:18 DATA:  test-node-wasm.js result: performance: load: null total: 323 +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: default sync 1 female 0.97 +2022-08-19 09:14:18 INFO:  test-node-wasm.js test: image process +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2022-08-19 09:14:18 INFO:  test-node-wasm.js test: image null +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor +2022-08-19 09:14:18 INFO:  test-node-wasm.js test face similarity +2022-08-19 09:14:18 STATE: test-node-wasm.js start face similarity +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:18 STATE: test-node-wasm.js event: image +2022-08-19 09:14:18 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity +2022-08-19 09:14:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-08-19 09:14:18 DATA:  test-node-wasm.js result: performance: load: null total: 310 +2022-08-19 09:14:18 STATE: test-node-wasm.js start face similarity +2022-08-19 09:14:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:18 STATE: test-node-wasm.js event: image +2022-08-19 09:14:19 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity +2022-08-19 09:14:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:14:19 DATA:  test-node-wasm.js result: performance: load: null total: 360 +2022-08-19 09:14:19 STATE: test-node-wasm.js start face similarity +2022-08-19 09:14:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-19 09:14:19 STATE: test-node-wasm.js event: image +2022-08-19 09:14:19 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-08-19 09:14:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-08-19 09:14:19 DATA:  test-node-wasm.js result: performance: load: null total: 337 +2022-08-19 09:14:19 STATE: test-node-wasm.js passed: face descriptor +2022-08-19 09:14:19 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} +2022-08-19 09:14:19 INFO:  test-node-wasm.js test object +2022-08-19 09:14:19 STATE: test-node-wasm.js start object +2022-08-19 09:14:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:19 STATE: test-node-wasm.js event: image +2022-08-19 09:14:20 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:20 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2022-08-19 09:14:20 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-08-19 09:14:20 DATA:  test-node-wasm.js result: performance: load: null total: 371 +2022-08-19 09:14:20 STATE: test-node-wasm.js passed: centernet +2022-08-19 09:14:20 STATE: test-node-wasm.js start object +2022-08-19 09:14:20 WARN:  test-node-wasm.js missing kernel ops {"title":"object","model":"nanodet","url":"https://vladmandic.github.io/human-models/models/nanodet.json","missing":["sparsetodense"],"backkend":"wasm"} +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:21 STATE: test-node-wasm.js event: image +2022-08-19 09:14:21 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2022-08-19 09:14:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:21 DATA:  test-node-wasm.js result: performance: load: null total: 266 +2022-08-19 09:14:21 ERROR: test-node-wasm.js failed: nanodet [] +2022-08-19 09:14:21 INFO:  test-node-wasm.js test sensitive +2022-08-19 09:14:21 STATE: test-node-wasm.js start sensitive +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:21 STATE: test-node-wasm.js event: image +2022-08-19 09:14:21 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive +2022-08-19 09:14:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:21 DATA:  test-node-wasm.js result: performance: load: null total: 288 +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive result match +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive face result match +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive body result match +2022-08-19 09:14:21 STATE: test-node-wasm.js passed: sensitive hand result match +2022-08-19 09:14:21 INFO:  test-node-wasm.js test body +2022-08-19 09:14:21 STATE: test-node-wasm.js start blazepose +2022-08-19 09:14:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:23 STATE: test-node-wasm.js event: image +2022-08-19 09:14:23 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose +2022-08-19 09:14:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-08-19 09:14:23 DATA:  test-node-wasm.js result: performance: load: null total: 410 +2022-08-19 09:14:23 STATE: test-node-wasm.js passed: blazepose +2022-08-19 09:14:23 STATE: test-node-wasm.js start efficientpose +2022-08-19 09:14:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:24 STATE: test-node-wasm.js event: image +2022-08-19 09:14:25 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:25 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-08-19 09:14:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-08-19 09:14:25 DATA:  test-node-wasm.js result: performance: load: null total: 643 +2022-08-19 09:14:25 STATE: test-node-wasm.js passed: efficientpose +2022-08-19 09:14:25 STATE: test-node-wasm.js start posenet +2022-08-19 09:14:25 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:25 STATE: test-node-wasm.js event: image +2022-08-19 09:14:25 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:25 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet +2022-08-19 09:14:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-08-19 09:14:25 DATA:  test-node-wasm.js result: performance: load: null total: 291 +2022-08-19 09:14:25 STATE: test-node-wasm.js passed: posenet +2022-08-19 09:14:25 STATE: test-node-wasm.js start movenet +2022-08-19 09:14:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:26 STATE: test-node-wasm.js event: image +2022-08-19 09:14:26 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet +2022-08-19 09:14:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:26 DATA:  test-node-wasm.js result: performance: load: null total: 236 +2022-08-19 09:14:26 STATE: test-node-wasm.js passed: movenet +2022-08-19 09:14:26 INFO:  test-node-wasm.js test face matching +2022-08-19 09:14:26 STATE: test-node-wasm.js passed: face database 40 +2022-08-19 09:14:26 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} +2022-08-19 09:14:26 INFO:  test-node-wasm.js test face similarity alternative +2022-08-19 09:14:26 STATE: test-node-wasm.js start face embeddings +2022-08-19 09:14:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:26 STATE: test-node-wasm.js event: image +2022-08-19 09:14:27 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-19 09:14:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:27 DATA:  test-node-wasm.js result: performance: load: null total: 245 +2022-08-19 09:14:27 STATE: test-node-wasm.js passed: mobilefacenet {"embedding":192} +2022-08-19 09:14:27 STATE: test-node-wasm.js start face embeddings +2022-08-19 09:14:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:27 STATE: test-node-wasm.js event: image +2022-08-19 09:14:28 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-08-19 09:14:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:28 DATA:  test-node-wasm.js result: performance: load: null total: 291 +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: insightface {"embedding":512} +2022-08-19 09:14:28 INFO:  test-node-wasm.js test face attention +2022-08-19 09:14:28 STATE: test-node-wasm.js start face attention +2022-08-19 09:14:28 WARN:  test-node-wasm.js missing kernel ops {"title":"face attention","model":"facemesh","url":"https://vladmandic.github.io/human-models/models/facemesh-attention.json","missing":["atan2"],"backkend":"wasm"} +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:28 STATE: test-node-wasm.js event: image +2022-08-19 09:14:28 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg face attention +2022-08-19 09:14:28 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 1 gesture: 2 object: 0 person: 0 {} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:28 DATA:  test-node-wasm.js result: performance: load: null total: 124 +2022-08-19 09:14:28 ERROR: test-node-wasm.js failed: face attention {"annotations":0} +2022-08-19 09:14:28 INFO:  test-node-wasm.js test detectors +2022-08-19 09:14:28 STATE: test-node-wasm.js start detectors +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:28 STATE: test-node-wasm.js event: image +2022-08-19 09:14:28 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg detectors +2022-08-19 09:14:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:28 DATA:  test-node-wasm.js result: performance: load: null total: 130 +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detector result face match +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detector result hand match +2022-08-19 09:14:28 INFO:  test-node-wasm.js test: multi-instance +2022-08-19 09:14:28 STATE: test-node-wasm.js start multi instance +2022-08-19 09:14:28 STATE: test-node-wasm.js event: image +2022-08-19 09:14:28 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:28 STATE: test-node-wasm.js passed: detect: random multi instance +2022-08-19 09:14:28 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-08-19 09:14:28 DATA:  test-node-wasm.js result: performance: load: null total: 109 +2022-08-19 09:14:28 INFO:  test-node-wasm.js test: first instance +2022-08-19 09:14:28 STATE: test-node-wasm.js start multi instance +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-19 09:14:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:29 DATA:  test-node-wasm.js result: performance: load: null total: 112 +2022-08-19 09:14:29 INFO:  test-node-wasm.js test: second instance +2022-08-19 09:14:29 STATE: test-node-wasm.js start multi instance +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-08-19 09:14:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:29 DATA:  test-node-wasm.js result: performance: load: null total: 113 +2022-08-19 09:14:29 INFO:  test-node-wasm.js test: concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js start concurrent +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-19 09:14:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-19 09:14:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-19 09:14:30 STATE: test-node-wasm.js event: image +2022-08-19 09:14:30 STATE: test-node-wasm.js event: image +2022-08-19 09:14:30 STATE: test-node-wasm.js event: image +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1334 +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1334 +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1335 +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1335 +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1335 +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1335 +2022-08-19 09:14:31 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1014 +2022-08-19 09:14:31 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:31 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1014 +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-08-19 09:14:31 DATA:  test-node-wasm.js result: performance: load: null total: 1014 +2022-08-19 09:14:31 INFO:  test-node-wasm.js test: monkey-patch +2022-08-19 09:14:31 STATE: test-node-wasm.js event: image +2022-08-19 09:14:31 STATE: test-node-wasm.js event: detect +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: monkey patch +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: segmentation [65536] +2022-08-19 09:14:31 STATE: test-node-wasm.js passeed: equal usage +2022-08-19 09:14:31 INFO:  test-node-wasm.js test: input compare +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-19 09:14:31 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 +2022-08-19 09:14:31 INFO:  test-node-wasm.js events: {"image":29,"detect":29,"warmup":2} +2022-08-19 09:14:31 INFO:  test-node-wasm.js tensors 4107 +2022-08-19 09:14:31 INFO:  test-node-wasm.js test complete: 20364 ms +2022-08-19 09:14:31 STATE: all tests complete +2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-fetch.js","passed":1,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"test-node.js","passed":125,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"test-node-gpu.js","passed":125,"failed":0} +2022-08-19 09:14:31 INFO:  status {"test":"test-node-wasm.js","passed":124,"failed":2} +2022-08-19 09:14:31 INFO:  failures {"count":2} +2022-08-19 09:14:31 WARN:  failed {"test":"test-node-wasm.js","message":["error",["failed: nanodet",[]]]} +2022-08-19 09:14:31 WARN:  failed {"test":"test-node-wasm.js","message":["error",["failed: face attention",{"annotations":0}]]}