From f70e5615b455b3b087a4bd225732ce258bdefb4d Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 16 Sep 2021 08:31:45 -0400 Subject: [PATCH] update release --- CHANGELOG.md | 6 +++++- dist/face-api.esm-nobundle.js | 2 +- dist/face-api.esm.js | 2 +- dist/face-api.js | 2 +- dist/face-api.node-gpu.js | 2 +- dist/face-api.node.js | 2 +- typedoc/classes/AgeGenderNet.html | 8 ++++---- typedoc/classes/BoundingBox.html | 8 ++++---- typedoc/classes/Box.html | 8 ++++---- typedoc/classes/ComposableTask.html | 8 ++++---- typedoc/classes/ComputeAllFaceDescriptorsTask.html | 8 ++++---- typedoc/classes/ComputeFaceDescriptorsTaskBase.html | 8 ++++---- typedoc/classes/ComputeSingleFaceDescriptorTask.html | 8 ++++---- typedoc/classes/DetectAllFaceLandmarksTask.html | 8 ++++---- typedoc/classes/DetectAllFacesTask.html | 8 ++++---- typedoc/classes/DetectFaceLandmarksTaskBase.html | 8 ++++---- typedoc/classes/DetectFacesTaskBase.html | 8 ++++---- typedoc/classes/DetectSingleFaceLandmarksTask.html | 8 ++++---- typedoc/classes/DetectSingleFaceTask.html | 8 ++++---- typedoc/classes/Dimensions.html | 8 ++++---- typedoc/classes/FaceDetection.html | 8 ++++---- typedoc/classes/FaceDetectionNet.html | 8 ++++---- typedoc/classes/FaceExpressionNet.html | 8 ++++---- typedoc/classes/FaceExpressions.html | 8 ++++---- typedoc/classes/FaceLandmark68Net.html | 8 ++++---- typedoc/classes/FaceLandmark68TinyNet.html | 8 ++++---- typedoc/classes/FaceLandmarkNet.html | 8 ++++---- typedoc/classes/FaceLandmarks.html | 8 ++++---- typedoc/classes/FaceLandmarks5.html | 8 ++++---- typedoc/classes/FaceLandmarks68.html | 8 ++++---- typedoc/classes/FaceMatch.html | 8 ++++---- typedoc/classes/FaceMatcher.html | 8 ++++---- typedoc/classes/FaceRecognitionNet.html | 8 ++++---- typedoc/classes/LabeledBox.html | 8 ++++---- typedoc/classes/LabeledFaceDescriptors.html | 8 ++++---- typedoc/classes/NetInput.html | 8 ++++---- typedoc/classes/NeuralNetwork.html | 8 ++++---- typedoc/classes/ObjectDetection.html | 8 ++++---- typedoc/classes/Point.html | 8 ++++---- typedoc/classes/PredictedBox.html | 8 ++++---- typedoc/classes/Rect.html | 8 ++++---- typedoc/classes/SsdMobilenetv1.html | 8 ++++---- typedoc/classes/SsdMobilenetv1Options.html | 8 ++++---- typedoc/classes/TinyFaceDetector.html | 8 ++++---- typedoc/classes/TinyFaceDetectorOptions.html | 8 ++++---- typedoc/classes/TinyYolov2.html | 8 ++++---- typedoc/classes/TinyYolov2Options.html | 8 ++++---- typedoc/classes/draw.DrawBox.html | 8 ++++---- typedoc/classes/draw.DrawBoxOptions.html | 8 ++++---- typedoc/classes/draw.DrawFaceLandmarks.html | 8 ++++---- typedoc/classes/draw.DrawFaceLandmarksOptions.html | 8 ++++---- typedoc/classes/draw.DrawTextField.html | 8 ++++---- typedoc/classes/draw.DrawTextFieldOptions.html | 8 ++++---- typedoc/enums/Gender.html | 8 ++++---- typedoc/enums/draw.AnchorPosition.html | 8 ++++---- typedoc/index.html | 8 ++++---- typedoc/interfaces/IBoundingBox.html | 8 ++++---- typedoc/interfaces/IDimensions.html | 8 ++++---- typedoc/interfaces/IFaceDetecion.html | 8 ++++---- typedoc/interfaces/IFaceLandmarks.html | 8 ++++---- typedoc/interfaces/IFaceMatch.html | 8 ++++---- typedoc/interfaces/IPoint.html | 8 ++++---- typedoc/interfaces/IRect.html | 8 ++++---- typedoc/interfaces/ISsdMobilenetv1Options.html | 8 ++++---- typedoc/interfaces/ITinyYolov2Options.html | 8 ++++---- typedoc/interfaces/draw.IDrawBoxOptions.html | 8 ++++---- typedoc/interfaces/draw.IDrawFaceLandmarksOptions.html | 8 ++++---- typedoc/interfaces/draw.IDrawTextFieldOptions.html | 8 ++++---- typedoc/modules/draw.html | 8 ++++---- typedoc/modules/utils.html | 8 ++++---- 70 files changed, 266 insertions(+), 262 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7184699..8934fe5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,11 @@ ## Changelog -### **HEAD -> master** 2021/09/11 mandic00@live.com +### **1.5.3** 2021/09/16 mandic00@live.com + +- simplify tfjs imports + +### **origin/master** 2021/09/11 mandic00@live.com - reduce bundle size - enable webgl uniforms diff --git a/dist/face-api.esm-nobundle.js b/dist/face-api.esm-nobundle.js index bfd28fe..1576bb0 100644 --- a/dist/face-api.esm-nobundle.js +++ b/dist/face-api.esm-nobundle.js @@ -2148,7 +2148,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) { } // package.json -var version10 = "1.5.2"; +var version10 = "1.5.3"; // src/xception/extractParams.ts function extractorsFactory2(extractWeights, paramMappings) { diff --git a/dist/face-api.esm.js b/dist/face-api.esm.js index 6303218..d96d7a7 100644 --- a/dist/face-api.esm.js +++ b/dist/face-api.esm.js @@ -62205,7 +62205,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) { } // package.json -var version6 = "1.5.2"; +var version6 = "1.5.3"; // src/xception/extractParams.ts function extractorsFactory2(extractWeights, paramMappings) { diff --git a/dist/face-api.js b/dist/face-api.js index 1a0692b..43dc2ad 100644 --- a/dist/face-api.js +++ b/dist/face-api.js @@ -4610,7 +4610,7 @@ return a / b;`,_ee=` } setOutput(${c}); } - `}};function pre(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,segmentIds:a}=t,{numSegments:o}=r,i=s.shape.length,c=[],u=0,l=_.getAxesPermutation([u],i),d=s;l!=null&&(d=Cn({inputs:{x:s},backend:n,attrs:{perm:l}}),c.push(d),u=_.getInnerMostAxes(1,i)[0]);let p=_.segment_util.computeOutShape(d.shape,u,o),h=w.sizeFromShape([d.shape[u]]),f=be({inputs:{x:d},backend:n,attrs:{shape:[-1,h]}});c.push(f);let m=Ch(s.dtype),g=(x,k,C,N,$)=>{let R=x.shape[0],O=x.shape[1],D=_.segment_util.segOpComputeOptimalWindowSize(O,$),P={windowSize:D,inSize:O,batchSize:R,numSegments:$},T=new dre(P,k),L=n.compileAndRun(T,[x,C],N);if(c.push(L),L.shape[1]===$)return L;let G=n_({backend:n,attrs:{start:0,stop:$,step:1,dtype:"float32"}}),j=i_({inputs:{x:G},backend:n,attrs:{reps:[O/D]}});return c.push(G),c.push(j),g(L,k,j,N,$)},b=g(f,"unsortedSegmentSum",a,m,o),y=be({inputs:{x:b},backend:n,attrs:{shape:p}}),v=y;if(l!=null){c.push(y);let x=_.getUndoAxesPermutation(l);v=Cn({inputs:{x:v},backend:n,attrs:{perm:x}})}return c.forEach(x=>n.disposeIntermediateTensorInfo(x)),v}var hre={kernelName:Fl,backendName:"webgl",kernelFunc:pre},fre=[VQ,HQ,_9,A9,F9,O9,L9,W9,U9,H9,X9,Z9,eY,rY,lY,oY,hY,bY,mY,wY,IY,CY,EY,OY,LY,GY,jY,YY,QY,u9,sZ,fZ,gZ,cZ,xZ,kZ,yZ,CZ,_Z,DZ,FZ,PZ,LZ,GZ,jZ,zZ,XZ,JZ,eJ,sJ,cJ,pJ,mJ,gJ,bJ,vJ,wJ,IJ,CJ,NJ,DJ,RJ,MJ,BJ,VJ,HJ,XJ,QJ,c9,tQ,nZ,sQ,iQ,lQ,d9,fQ,yQ,xQ,NQ,SQ,DQ,RQ,LQ,qQ,tee,QQ,aee,iee,uee,ZQ,dee,hee,bee,wee,Cee,Fee,g9,Pee,Lee,Wee,Gee,zY,qee,Xee,Zee,ete,ste,h9,ote,ite,WY,Eee,lte,yte,fte,y9,kte,Cte,Ete,$te,Ote,Lte,Wte,Gte,jte,Xte,Jte,ene,rne,one,une,RY,Dee,pne,fne,gne,yne,xne,kne,Sne,Tne,_ne,Dne,Fne,Pne,Lne,zne,Vne,Gne,Aee,C9,qne,Yne,Qne,rre,ore,T9,cre,lre,hre,Kee];for(let e of fre)Pl(e);var Bn;(function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"})(Bn||(Bn={}));var Ud;(function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"})(Ud||(Ud={}));var u_;function mre(e){u_=e.wasm.cwrap(Ro,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function gre(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a,bias:o,preluActivationWeights:i}=t;if(s.dtype!=="float32"||a.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:c,transposeB:u,activation:l,leakyreluAlpha:d}=r,p=n.dataIdMap.get(s.dataId).id,h=n.dataIdMap.get(a.dataId).id,f=0;if(o!=null){let $=n.dataIdMap.get(o.dataId);if($.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${$.shape.length}.`);f=$.id}let m=i==null?0:n.dataIdMap.get(i.dataId).id,g=Ud[l];if(g==null)throw new Error(`${l} activation not yet supported for FusedConv2D in the wasm backend.`);let b=c?s.shape[2]:s.shape[1],y=u?a.shape[1]:a.shape[2],v=s.shape[0],x=n.makeOutput([v,b,y],s.dtype),k=n.dataIdMap.get(x.dataId).id,C=new Uint8Array(new Int32Array(s.shape).buffer),N=new Uint8Array(new Int32Array(a.shape).buffer);return u_(p,C,s.shape.length,h,N,a.shape.length,c,u,g,f,m,d||0,k),x}var bre={kernelName:Ro,backendName:"wasm",setupFunc:mre,kernelFunc:gre};function un(e){let t;function n(s){t=s.wasm.cwrap(e,null,["number","number"])}function r(s){let{backend:a,inputs:{x:o}}=s,i=a.dataIdMap.get(o.dataId).id,c=a.makeOutput(o.shape,o.dtype),u=a.dataIdMap.get(c.dataId).id;return w.sizeFromShape(c.shape)===0||t(i,u),c}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var yre=un(Xi);function Tn(e,t,n){let r;function s(o){r=o.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function a(o){let{backend:i,inputs:c}=o,{a:u,b:l}=c,d=i.dataIdMap.get(u.dataId).id,p=i.dataIdMap.get(l.dataId).id,h=n!=null?n:u.dtype,f=_.assertAndGetBroadcastShape(u.shape,l.shape),m=i.makeOutput(f,h);if(w.sizeFromShape(f)===0)return m;let g=new Uint8Array(new Int32Array(u.shape).buffer),b=new Uint8Array(new Int32Array(l.shape).buffer),y=i.dataIdMap.get(m.dataId).id,v=()=>r(d,g,u.shape.length,p,b,l.shape.length,Bn[u.dtype],y);if(t&&u.dtype==="float32")return v(),m;let x=_.getBroadcastDims(u.shape,f),k=_.getBroadcastDims(l.shape,f),C=x.every(($,R)=>$===R),N=k.every(($,R)=>$===R);if(C&&N)return v(),m;throw new Error(`Broadcasting along outer dims is not yet supported for ${u.dtype} ${e}.`)}return{kernelName:e,backendName:"wasm",setupFunc:s,kernelFunc:a}}var vre=!0,xre=Tn(Zs,vre),l_;function wre(e){l_=e.wasm.cwrap(Ma,null,["array","number","number","number"])}function kre(e){let{inputs:t,backend:n}=e,r=n.makeOutput(t[0].shape,t[0].dtype);if(w.sizeFromShape(r.shape)===0)return r;let s=t.map(i=>n.dataIdMap.get(i.dataId).id),a=new Uint8Array(new Int32Array(s).buffer),o=n.dataIdMap.get(r.dataId).id;return l_(a,s.length,Bn[r.dtype],o),r}var Ire={kernelName:Ma,backendName:"wasm",setupFunc:wre,kernelFunc:kre};function Cm(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(s),r}var Sre={kernelName:no,backendName:"wasm",kernelFunc:Cm},d_;function Cre(e){d_=e.wasm.cwrap(Fo,null,["number","array","number","number","number","array","number"])}function Mu(e){let{inputs:t,backend:n,attrs:r}=e,[s,a]=Nre(t.x.shape,r.perm),o=!0;for(let f=0;f=s&&(a===-1||r[a]>r[o])&&(a=o);r[a]=s}return[n,r]}var _re={kernelName:Fo,backendName:"wasm",kernelFunc:Mu,setupFunc:Cre};function Sa(e,t,n){let r=e.shape,s=e.shape.length,a=w.parseAxisParam(t,r),o=a,i=_.getAxesPermutation(o,s),c=null,u=!1;if(i!=null){let l=new Array(s);for(let h=0;h`new shape: ${o}, old shape: ${r.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(r.dataId),{dataId:r.dataId,shape:o,dtype:r.dtype}}var Wre={kernelName:Rc,backendName:"wasm",kernelFunc:zn},g_;function Vre(e){g_=e.wasm.cwrap(za,null,["number","array","number","number","array","number","number","number","number"])}function Ure(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a}=t,{transposeA:o,transposeB:i}=r;if(s.dtype!=="float32"||a.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let c=s.shape.length,u=a.shape.length,l=o?s.shape[c-2]:s.shape[c-1],d=i?a.shape[u-1]:a.shape[u-2],p=o?s.shape[c-1]:s.shape[c-2],h=i?a.shape[u-2]:a.shape[u-1],f=s.shape.slice(0,-2),m=a.shape.slice(0,-2),g=w.sizeFromShape(f),b=w.sizeFromShape(m),y=g===b||g===1||b===1;w.assert(c>=2&&u>=2&&y,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${f}) and (${m}).`);let x=(g>b?s.shape.slice(0,-2):a.shape.slice(0,-2)).concat([p,h]);w.assert(l===d,()=>`Error in matMul: inner shapes (${l}) and (${d}) of Tensors with shapes ${s.shape} and ${a.shape} and transposeA=${o} and transposeB=${i} must match.`);let k=o?[g,l,p]:[g,p,l],C=i?[b,h,d]:[b,d,h],N=zn({inputs:{x:s},backend:n,attrs:{shape:k}}),$=zn({inputs:{x:a},backend:n,attrs:{shape:C}}),R=n.dataIdMap.get(N.dataId).id,O=n.dataIdMap.get($.dataId).id,D=o?N.shape[2]:N.shape[1],P=i?$.shape[1]:$.shape[2],T=Math.max(g,b),L=n.makeOutput([T,D,P],N.dtype),G=n.dataIdMap.get(L.dataId).id,j=new Uint8Array(new Int32Array(N.shape).buffer),q=new Uint8Array(new Int32Array($.shape).buffer);return g_(R,j,N.shape.length,O,q,$.shape.length,o,i,G),n.disposeData(N.dataId),n.disposeData($.dataId),L.shape=x,L}var Gre={kernelName:za,backendName:"wasm",setupFunc:Vre,kernelFunc:Ure};function Gd(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:s}=e,[a,o]=vn.parseSliceParams(t,n,r),i=vn.isSliceContinous(t.shape,a,o),c=s.readSync(t.dataId),u=s.makeOutput(o,t.dtype),l=w.computeStrides(t.shape),d=s.dataIdMap.get(u.dataId);if(i){let f=vn.computeFlatOffset(a,l);return t.dtype==="string"?d.stringBytes=c.slice(f,f+w.sizeFromShape(o)):s.typedArrayFromHeap(u).set(c.subarray(f,f+w.sizeFromShape(o))),u}if(t.dtype==="string"){let f=nm(c,a,o,t.shape,t.dtype);return d.stringBytes=f,u}let p=s.typedArrayFromHeap(u),h=t.shape.length;if(h===2)Hre(c,l[0],p,a,o);else if(h===3)jre(c,l[0],l[1],p,a,o);else if(h===4)qre(c,l[0],l[1],l[2],p,a,o);else{let f=nm(c,a,o,t.shape,t.dtype);p.set(f)}return u}function Hre(e,t,n,r,s){let a=0,o=r[0],i=r[1],c=o+s[0];for(let u=o;ub*y),c=_.getReshaped(s.shape,a,i),u=_.getPermuted(c.length,a.length),l=_.getReshapedPermuted(s.shape,a,i),d=_.getSliceBeginCoords(o,a.length),p=_.getSliceSize(l,o,a.length),h=zn({inputs:{x:s},backend:n,attrs:{shape:c}}),f=Mu({inputs:{x:h},backend:n,attrs:{perm:u}}),m=zn({inputs:{x:f},backend:n,attrs:{shape:l}}),g=Gd({inputs:{x:m},backend:n,attrs:{begin:d,size:p}});return n.disposeData(h.dataId),n.disposeData(f.dataId),n.disposeData(h.dataId),g}var Yre={kernelName:ac,backendName:"wasm",kernelFunc:Xre};function Tm(e){let{inputs:{x:t},attrs:{dtype:n},backend:r}=e,s=r.makeOutput(t.shape,n),a=r.typedArrayFromHeap(t);return r.typedArrayFromHeap(s).set(a),s}var Zre={kernelName:Wa,backendName:"wasm",kernelFunc:Tm},Jre=un(Va),b_;function Qre(e){b_=e.wasm.cwrap(Js,null,["number","number","number","number"])}function ese(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:a,clipValueMax:o}=r,i=n.dataIdMap.get(s.dataId).id,c=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(c.dataId).id;return b_(i,a,o,u),c}var tse={kernelName:Js,backendName:"wasm",setupFunc:Qre,kernelFunc:ese};function y_(e){let{inputs:t,backend:n}=e,r=w.parseAxisParam(e.attrs.axis,t[0].shape)[0],s=_.computeOutShape(t.map(h=>h.shape),r),a=t.filter(h=>w.sizeFromShape(h.shape)>0);if(a.length===1)return Cm({inputs:{x:a[0]},backend:n});let o=n.makeOutput(s,t[0].dtype);if(w.sizeFromShape(s)===0)return o;let i=a.map(h=>h.shape);if(_.assertParamsConsistent(i,r),a[0].dtype==="string"){let h=a.map(v=>{let x=w.sizeFromShape(v.shape.slice(r));return zn({inputs:{x:v},backend:n,attrs:{shape:[-1,x]}})}),f=h.map(v=>({vals:n.readSync(v.dataId),shape:v.shape}));s=_.computeOutShape(h.map(v=>v.shape),1);let m=h[0].shape[0]===1,g=fw(f,s,t[0].dtype,m),b=_.computeOutShape(a.map(v=>v.shape),r);o.shape=b;let y=n.dataIdMap.get(o.dataId);return y.stringBytes=_.fromStringArrayToUint8(g),h.forEach(v=>n.disposeData(v.dataId)),o}let c=w.sizeFromShape(a[0].shape.slice(0,r)),u=0,l=a.map(h=>{let f=w.sizeFromShape(h.shape.slice(r));return u+=f,f}),d=a.map(h=>n.typedArrayFromHeap(h)),p=n.typedArrayFromHeap(o);for(let h=0;h`cumsum does not support ${s.dtype} tensors in the WASM backend`);let u=_.getAxesPermutation([a],c),l=s;u!==null&&(l=Mu({inputs:{x:s},attrs:{perm:u},backend:n}));let d=_.getInnerMostAxes(1,c)[0];_.assertAxesAreInnerMostDims("cumsum",[d],c);let p=n.makeOutput(l.shape,l.dtype),h=l.shape[d],f=n.dataIdMap.get(l.dataId).id,m=n.dataIdMap.get(p.dataId).id;k_(f,o?1:0,i?1:0,h,m,Bn[s.dtype]);let g=p;if(u!==null){let b=_.getUndoAxesPermutation(u);g=Mu({inputs:{x:p},attrs:{perm:b},backend:n}),n.disposeData(l.dataId),n.disposeData(p.dataId)}return g}var gse={kernelName:qa,backendName:"wasm",setupFunc:fse,kernelFunc:mse},I_;function bse(e){I_=e.wasm.cwrap(cc,null,["number","number","number","array","number","array","array","number","number"])}function yse(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{blockSize:a,dataFormat:o}=r;w.assert(a>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${a}`);let i=s.shape[0],c=o==="NHWC"?s.shape[1]:s.shape[2],u=o==="NHWC"?s.shape[2]:s.shape[3],l=o==="NHWC"?s.shape[3]:s.shape[1],d=c*a,p=u*a,h=l/(a*a),f=o==="NHWC"?[i,d,p,h]:[i,h,d,p],m=t.makeOutput(f,"float32"),b=t.dataIdMap.get(s.dataId).id,y=new Uint8Array(new Int32Array(w.computeStrides(s.shape)).buffer),v=new Uint8Array(new Int32Array(f).buffer),x=new Uint8Array(new Int32Array(w.computeStrides(f)).buffer),k=t.dataIdMap.get(m.dataId).id;return I_(b,a,o==="NHWC"?1:0,y,s.shape.length-1,v,x,f.length,k),m}var vse={kernelName:cc,backendName:"wasm",setupFunc:bse,kernelFunc:yse},S_;function xse(e){S_=e.wasm.cwrap(Ka,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function wse(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a}=t,o=r.dataIdMap.get(s.dataId).id,i=r.dataIdMap.get(a.dataId).id,{strides:c,dilations:u,pad:l,dimRoundingMode:d}=n,p=u==null?[1,1]:u,h=_.computeConv2DInfo(s.shape,a.shape,c,p,l,d,!0),f=h.filterHeight,m=h.filterWidth,g=h.padInfo.top,b=h.padInfo.right,y=h.padInfo.bottom,v=h.padInfo.left,x=h.dilationHeight,k=h.dilationWidth,C=h.strideHeight,N=h.strideWidth,$=h.inChannels,R=h.outChannels,O=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);let D=r.makeOutput(h.outShape,"float32"),P=r.dataIdMap.get(D.dataId).id;return S_(o,s.shape[0],s.shape[1],s.shape[2],i,f,m,g,b,y,v,O,x,k,C,N,$,R,P),D}var kse={kernelName:Ka,backendName:"wasm",setupFunc:xse,kernelFunc:wse},Ise=un(Ya),Sse=!1,Cse=Tn(lc,Sse,"bool"),Tse=un(Za);function qw(e){let{inputs:t,attrs:n,backend:r}=e,{input:s}=t,{dim:a}=n,o=s.shape.length,i=s.shape.slice(),c=a;return a<0&&(w.assert(-(o+1)<=a,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),c=o+a+1),i.splice(c,0,1),zn({inputs:{x:s},backend:r,attrs:{shape:i}})}var Nse={kernelName:dc,backendName:"wasm",kernelFunc:qw};function C_(e){let{attrs:{shape:t,value:n,dtype:r},backend:s}=e,a=s.makeOutput(t,r);return s.typedArrayFromHeap(a).fill(n),a}var _se={kernelName:Cl,backendName:"wasm",kernelFunc:C_},T_;function Ese(e){T_=e.wasm.cwrap(hc,null,["number","number","number","number","number","number"])}function Ase(e){let{inputs:t,backend:n}=e,{image:r}=t,s=n.makeOutput(r.shape,r.dtype),a=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,[i,c,u,l]=r.shape;return T_(a,i,c,u,l,o),s}var Dse={kernelName:hc,backendName:"wasm",kernelFunc:Ase,setupFunc:Ese},$se=un(Ja),Fse=!1,Rse=Tn(Qa,Fse),N_;function Pse(e){N_=e.wasm.cwrap(eo,null,["number","number","number","number","number","number","number"])}function Ose(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:s}=r,{x:a,mean:o,variance:i,offset:c,scale:u}=n,l=t.dataIdMap.get(a.dataId).id,d=t.dataIdMap.get(o.dataId).id,p=t.dataIdMap.get(i.dataId).id,h=c!=null?t.dataIdMap.get(c.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,m=t.makeOutput(a.shape,a.dtype);if(w.sizeFromShape(a.shape)===0)return m;let g=t.dataIdMap.get(m.dataId).id;return N_(l,d,p,h,f,s,g),m}var Mse={kernelName:eo,backendName:"wasm",setupFunc:Pse,kernelFunc:Ose},__;function Lse(e){__=e.wasm.cwrap(Po,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Bse(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dilations:l,dataFormat:d,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=n,m=_.computeConv2DInfo(s.shape,a.shape,c,l,u,p),g=Ud[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let b=r.dataIdMap.get(s.dataId).id,y=r.dataIdMap.get(a.dataId).id,v=m.outChannels,x=0;if(o!=null){let J=r.dataIdMap.get(o.dataId);if(J.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${J.shape.length}.`);if(J.shape[0]!==v)throw new Error(`FusedConv2D bias shape (${J.shape}) does not match the number of output channels (${v})`);x=J.id}let k=m.filterHeight,C=m.filterWidth,N=m.padInfo.top,$=m.padInfo.right,R=m.padInfo.bottom,O=m.padInfo.left,D=m.dilationHeight,P=m.dilationWidth,T=m.strideHeight,L=m.strideWidth,G=m.inChannels,j=m.padInfo.type==="SAME"?1:0,q=m.batchSize,K=m.inHeight,te=m.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let ne=r.makeOutput(m.outShape,"float32"),re=r.dataIdMap.get(ne.dataId).id,se=i==null?0:r.dataIdMap.get(i.dataId).id;return __(b,q,K,te,y,k,C,x,N,$,R,O,j,D,P,T,L,G,v,g,se,f||0,re),ne}var zse={kernelName:Po,backendName:"wasm",setupFunc:Lse,kernelFunc:Bse},E_;function Wse(e){E_=e.wasm.cwrap(Oo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Vse(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dilations:l,dataFormat:d,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=n,m=_.computeConv2DInfo(s.shape,a.shape,c,l,u,p,!0),g=Ud[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let b=r.dataIdMap.get(s.dataId).id,y=r.dataIdMap.get(a.dataId).id,v=m.outChannels,x=0;if(o!=null){let J=r.dataIdMap.get(o.dataId);if(J.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${J.shape.length}.`);if(J.shape[0]!==v)throw new Error(`FusedDepthwiseConv2D bias shape (${J.shape}) does not match the number of output channels (${v})`);x=J.id}let k=m.filterHeight,C=m.filterWidth,N=m.padInfo.top,$=m.padInfo.right,R=m.padInfo.bottom,O=m.padInfo.left,D=m.dilationHeight,P=m.dilationWidth,T=m.strideHeight,L=m.strideWidth,G=m.inChannels,j=m.padInfo.type==="SAME"?1:0,q=m.batchSize,K=m.inHeight,te=m.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let ne=r.makeOutput(m.outShape,"float32"),re=r.dataIdMap.get(ne.dataId).id,se=i==null?0:r.dataIdMap.get(i.dataId).id;return E_(b,q,K,te,y,k,C,x,N,$,R,O,j,D,P,T,L,G,v,g,se,f||0,re),ne}var Use={kernelName:Oo,backendName:"wasm",setupFunc:Wse,kernelFunc:Vse},A_;function Gse(e){A_=e.wasm.cwrap(mc,null,["number","number","number","number","number","number","array","number"])}function Hse(e){let{backend:t,inputs:n}=e,{params:r,indices:s}=n,[a,o,i,c]=iy.prepareAndValidate(r,s),u=t.makeOutput(a,r.dtype);if(o===0)return u;let l=s.shape,d=l[l.length-1],h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,g=new Uint8Array(new Int32Array(c).buffer),b=t.dataIdMap.get(u.dataId).id;return A_(h,Bn[r.dtype],m,o,d,i,g,b),u}var jse={kernelName:mc,backendName:"wasm",setupFunc:Gse,kernelFunc:Hse},D_;function qse(e){D_=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Kse(e){let{backend:t,inputs:n,attrs:r}=e,{x:s,indices:a}=n,{axis:o,batchDims:i}=r,c=w.parseAxisParam(o,s.shape)[0],u=_.segment_util.collectGatherOpShapeInfo(s,a,c,i),l=zn({inputs:{x:s},attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]},backend:t}),d=w.sizeFromShape(a.shape),p=zn({inputs:{x:a},attrs:{shape:[u.batchSize,d/u.batchSize]},backend:t}),h=[u.batchSize,u.outerSize,d/u.batchSize,u.sliceSize],f=t.makeOutput(h,s.dtype);if(w.sizeFromShape(s.shape)===0)return f;let m=l.shape.length-1,b=t.dataIdMap.get(l.dataId).id,v=t.dataIdMap.get(p.dataId).id,x=t.dataIdMap.get(f.dataId).id,k=new Uint8Array(new Int32Array(w.computeStrides(l.shape)).buffer),C=new Uint8Array(new Int32Array(w.computeStrides(h)).buffer);return D_(b,Bn[s.dtype],k,m,v,u.batchSize,C,x),t.disposeData(l.dataId),t.disposeData(p.dataId),f.shape=u.outputShape,f}var Xse={kernelName:fc,backendName:"wasm",setupFunc:qse,kernelFunc:Kse},Yse=!1,Zse=Tn(gc,Yse,"bool"),Jse=!1,Qse=Tn(to,Jse,"bool"),$_;function eae(e){$_=e.wasm.cwrap(ro,null,["number","number","number"])}function tae(e){let{inputs:{x:t},attrs:{alpha:n},backend:r}=e,s=r.dataIdMap.get(t.dataId).id,a=r.makeOutput(t.shape,t.dtype);if(w.sizeFromShape(t.shape)!==0){let o=r.dataIdMap.get(a.dataId).id;$_(s,n,o)}return a}var nae={kernelName:ro,backendName:"wasm",setupFunc:eae,kernelFunc:tae},rae=!1,sae=Tn(xc,rae,"bool"),aae=!1,oae=Tn(wc,aae,"bool"),iae=un(so),cae=!1,uae=Tn(Ic,cae,"bool"),F_;function lae(e){F_=e.wasm.cwrap(ao,null,["number, number, number"])}function dae(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:s,keepDims:a}=r,{x:o}=n,c=t.dataIdMap.get(o.dataId).id,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;u=l,c=v}let f=u.shape.length;_.assertAxesAreInnerMostDims("max",d,f);let[m,g]=_.computeOutAndReduceShapes(u.shape,d),b=w.sizeFromShape(g),y=t.makeOutput(m,o.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;F_(c,b,v)}if(h&&t.disposeData(l.dataId),a){let v=_.expandShapeToKeepDim(y.shape,p);y.shape=v}return y}var pae={kernelName:ao,backendName:"wasm",setupFunc:lae,kernelFunc:dae},hae=!1,fae=Tn(oo,hae),R_;function mae(e){R_=e.wasm.cwrap(io,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function gae(e){let{inputs:t,attrs:n,backend:r}=e,s=t.x,a=r.dataIdMap.get(s.dataId).id,{filterSize:o,strides:i,pad:c,dimRoundingMode:u}=n,l=_.computePool2DInfo(s.shape,o,i,1,c,u),d=l.filterHeight,p=l.filterWidth,h=l.padInfo.top,f=l.padInfo.right,m=l.padInfo.bottom,g=l.padInfo.left,b=l.dilationHeight,y=l.dilationWidth,v=l.strideHeight,x=l.strideWidth,k=l.inChannels,C=l.outChannels;if(l.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${l.dataFormat}'. Please use 'channelsLast'.`);let N=r.makeOutput(l.outShape,"float32"),$=r.dataIdMap.get(N.dataId).id;return R_(a,s.shape[0],s.shape[1],s.shape[2],d,p,h,f,m,g,b,y,v,x,k,C,$),N}var bae={kernelName:io,backendName:"wasm",setupFunc:mae,kernelFunc:gae},P_;function yae(e){P_=e.wasm.cwrap(co,null,["number, number, number"])}function vae(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t),f=d;if(h){let x=t.dataIdMap.get(l.dataId).id;x!==i&&(u=l,c=x,f=_.getInnerMostAxes(f.length,u.shape.length))}_.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[m,g]=_.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=u;u.dtype!=="float32"&&(y=Tm({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),c=t.dataIdMap.get(y.dataId).id);let v=t.makeOutput(m,"float32");if(w.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(v.dataId).id;P_(c,b,x)}if(h&&t.disposeData(l.dataId),a){let x=_.expandShapeToKeepDim(v.shape,p);v.shape=x}return u.dtype!=="float32"&&t.disposeData(y.dataId),v}var xae={kernelName:co,backendName:"wasm",setupFunc:yae,kernelFunc:vae},O_;function wae(e){O_=e.wasm.cwrap(uo,null,["number, number, number"])}function kae(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v)}let f=u.shape.length;_.assertAxesAreInnerMostDims("min",d,f);let[m,g]=_.computeOutAndReduceShapes(u.shape,d),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;O_(c,b,v)}if(h&&t.disposeData(l.dataId),a){let v=_.expandShapeToKeepDim(y.shape,p);y.shape=v}return y}var Iae={kernelName:uo,backendName:"wasm",setupFunc:wae,kernelFunc:kae},Sae=!1,Cae=Tn(lo,Sae),Kw;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(Kw||(Kw={}));var M_;function Tae(e){M_=e.wasm.cwrap(po,null,["number","array","number","number","array","array","number","number"])}function Nae(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,mode:s}}=e,a=r.map((f,m)=>f[0]+t.shape[m]+f[1]),o=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(a,t.dtype),c=n.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),l=r.map(f=>f[0]),d=r.map(f=>f[1]),p=new Uint8Array(new Int32Array(l).buffer),h=new Uint8Array(new Int32Array(d).buffer);return M_(o,u,t.shape.length,Bn[t.dtype],p,h,Kw[s],c),i}var _ae={kernelName:po,backendName:"wasm",kernelFunc:Nae,setupFunc:Tae},Eae=!0,Aae=Tn(ho,Eae),Dae=un(Cc);function Xw(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),r=n[0],s=n[1],a=n[2],o=n[3];return e.wasm._free(t),{pSelectedIndices:r,selectedSize:s,pSelectedScores:a,pValidOutputs:o}}var L_;function $ae(e){L_=e.wasm.cwrap(Nc,"number",["number","number","number","number","number"])}function Fae(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o}=r,{boxes:i,scores:c}=n,u=t.dataIdMap.get(i.dataId).id,l=t.dataIdMap.get(c.dataId).id,d=L_(u,l,a,s,o),{pSelectedIndices:p,selectedSize:h,pSelectedScores:f,pValidOutputs:m}=Xw(t,d);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([h],"int32",p)}var Rae={kernelName:Nc,backendName:"wasm",setupFunc:$ae,kernelFunc:Fae},B_;function Pae(e){B_=e.wasm.cwrap(_c,"number",["number","number","number","number","number","bool"])}function Oae(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o,padToMaxOutputSize:i}=r,{boxes:c,scores:u}=n,l=t.dataIdMap.get(c.dataId).id,d=t.dataIdMap.get(u.dataId).id,p=B_(l,d,a,s,o,i),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=Xw(t,p);t.wasm._free(m);let b=t.makeOutput([f],"int32",h),y=t.makeOutput([],"int32",g);return[b,y]}var Mae={kernelName:_c,backendName:"wasm",setupFunc:Pae,kernelFunc:Oae},z_;function Lae(e){z_=e.wasm.cwrap(Ec,"number",["number","number","number","number","number","number"])}function Bae(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o,softNmsSigma:i}=r,{boxes:c,scores:u}=n,l=t.dataIdMap.get(c.dataId).id,d=t.dataIdMap.get(u.dataId).id,p=z_(l,d,a,s,o,i),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=Xw(t,p);t.wasm._free(g);let b=t.makeOutput([f],"int32",h),y=t.makeOutput([f],"float32",m);return[b,y]}var zae={kernelName:Ec,backendName:"wasm",setupFunc:Lae,kernelFunc:Bae},Wae=!1,Vae=Tn(Tc,Wae,"bool"),W_;function Uae(e){W_=e.wasm.cwrap(fo,null,["number","number","number","number","number"])}function Gae(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{depth:a,onValue:o,offValue:i}=r,c=n.makeOutput([...s.shape,a],"int32"),u=n.dataIdMap.get(c.dataId).id,d=n.dataIdMap.get(s.dataId).id;return W_(d,a,o,i,u),c}var Hae={kernelName:fo,backendName:"wasm",setupFunc:Uae,kernelFunc:Gae};function jae(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}var qae={kernelName:Ac,backendName:"wasm",kernelFunc:jae};function Kae(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return qw({inputs:{input:t[0]},backend:n,attrs:{dim:s}});let a=t[0].shape,o=t[0].dtype;t.forEach(l=>{w.assertShapesMatch(a,l.shape,"All tensors passed to stack must have matching shapes"),w.assert(o===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],c=t.map(l=>{let d=qw({inputs:{input:l},backend:n,attrs:{dim:s}});return i.push(d),d}),u=y_({inputs:c,backend:n,attrs:{axis:s}});return i.forEach(l=>n.disposeData(l.dataId)),u}var Xae={kernelName:Dc,backendName:"wasm",kernelFunc:Kae},V_;function Yae(e){V_=e.wasm.cwrap(mo,null,["number","array","number","number","array","array","number","number"])}function Zae(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:s}}=e,a=r.map((m,g)=>m[0]+t.shape[g]+m[1]);if(w.sizeFromShape(t.shape)===0)return C_({backend:n,attrs:{shape:a,value:s,dtype:t.dtype}});let o=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(a,t.dtype),u=n.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(t.shape).buffer),d=r.map(m=>m[0]),p=r.map(m=>m[1]),h=new Uint8Array(new Int32Array(d).buffer),f=new Uint8Array(new Int32Array(p).buffer);return V_(o,l,t.shape.length,Bn[t.dtype],h,f,s,u),i}var U_={kernelName:mo,backendName:"wasm",kernelFunc:Zae,setupFunc:Yae},Jae=!1,Qae=Tn(go,Jae),G_;function eoe(e){G_=e.wasm.cwrap(bo,null,["number","number","number"])}function toe(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t,a=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,i=n.makeOutput(r.shape,"float32"),c=n.dataIdMap.get(i.dataId).id;return G_(a,o,c),i}var noe={kernelName:bo,backendName:"wasm",setupFunc:eoe,kernelFunc:toe},H_;function roe(e){H_=e.wasm.cwrap($c,null,["number","number","number","number"])}function soe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t),f=d;if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v,f=_.getInnerMostAxes(f.length,u.shape.length))}_.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[m,g]=_.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;H_(c,b,Bn[y.dtype],v)}if(h&&t.disposeData(l.dataId),a){let v=_.expandShapeToKeepDim(y.shape,p);y.shape=v}return y}var aoe={kernelName:$c,backendName:"wasm",setupFunc:roe,kernelFunc:soe},ooe=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:a,dtype:o}=n,i=bw(r,s,a,o),c=t.makeOutput([i.length],o);return t.typedArrayFromHeap(c).set(i),c},ioe={kernelName:Al,backendName:"wasm",kernelFunc:ooe},coe=!0,uoe=Tn(Xa,coe),loe=un(yo),doe=un(xo),j_;function poe(e){j_=e.wasm.cwrap(vo,null,["number","number","number","number","number","number","number","number","number","number"])}function hoe(e){let{backend:t,inputs:n,attrs:r}=e,{images:s}=n,{alignCorners:a,halfPixelCenters:o,size:i}=r,[c,u]=i,[l,d,p,h]=s.shape,f=[l,c,u,h],m=t.dataIdMap.get(s.dataId),g;m.dtype!=="float32"&&(g=Tm({backend:t,inputs:{x:s},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(g.dataId));let b=m.id,y=t.makeOutput(f,"float32");if(w.sizeFromShape(s.shape)===0)return y;let v=t.dataIdMap.get(y.dataId).id;return j_(b,l,d,p,h,c,u,a?1:0,o?1:0,v),g!=null&&t.disposeData(g.dataId),y}var foe={kernelName:vo,backendName:"wasm",setupFunc:poe,kernelFunc:hoe},q_;function moe(e){q_=e.wasm.cwrap(wo,null,["number","array","number","array","number","number"])}function goe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:a}=r,o=w.parseAxisParam(a,s.shape);if(s.shape.length===0)return Cm({inputs:{x:s},backend:n});let i=n.makeOutput(s.shape,s.dtype),c=n.dataIdMap.get(s.dataId).id,u=n.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(o).buffer),d=new Uint8Array(new Int32Array(s.shape).buffer);q_(c,l,o.length,d,s.shape.length,u);let p=zn({inputs:{x:i},attrs:{shape:s.shape},backend:n});return n.disposeData(i.dataId),p}var boe={kernelName:wo,backendName:"wasm",kernelFunc:goe,setupFunc:moe},K_;function yoe(e){K_=e.wasm.cwrap(Xc,null,["number","number","number","number","number","number","number","number","array","number","number"])}function voe(e){let{inputs:t,backend:n,attrs:r}=e,{image:s}=t,{radians:a,fillValue:o,center:i}=r,c=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(s.dataId).id,l=n.dataIdMap.get(c.dataId).id,[d,p,h,f]=s.shape,[m,g]=_.getImageCenter(i,p,h),b=o===0,y=255,v=typeof o=="number"?[o,o,o,b?0:y]:[...o,y],x=new Uint8Array(new Int32Array(v).buffer);return K_(u,d,p,h,f,a,m,g,x,v.length,l),c}var xoe={kernelName:Xc,backendName:"wasm",kernelFunc:voe,setupFunc:yoe},woe=un(ko),koe=un(Io),X_;function Ioe(e){X_=e.wasm.cwrap(Pc,null,["number","number","number","number","number","number","array","number","number"])}function Soe(e){let{backend:t,inputs:n,attrs:r}=e,{indices:s,updates:a}=n,{shape:o}=r,i=t.makeOutput(o,a.dtype);if(w.sizeFromShape(o)===0)return i;let{sliceRank:c,numUpdates:u,sliceSize:l,strides:d,outputSize:p}=cy.calculateShapes(a,s,o),f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,b=new Uint8Array(new Int32Array(d).buffer),y=t.dataIdMap.get(i.dataId).id;return X_(f,g,Bn[a.dtype],c,u,l,b,p,y),i}var Coe={kernelName:Pc,backendName:"wasm",setupFunc:Ioe,kernelFunc:Soe},Y_;function Toe(e){Y_=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Noe(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:a}=t,o=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(s.dataId).id,c=n.dataIdMap.get(a.dataId).id,u=n.makeOutput(s.shape,s.dtype),l=n.dataIdMap.get(u.dataId).id,d=r.shape.length,p=s.shape.length,h=d===0||d>1||p===1?1:w.sizeFromShape(s.shape.slice(1));return Y_(o,i,c,h,l),u}var _oe={kernelName:Oc,backendName:"wasm",kernelFunc:Noe,setupFunc:Toe},Z_;function Eoe(e){Z_=e.wasm.cwrap(Co,null,["number","number"])}function Aoe(e){let{backend:t,inputs:{x:n}}=e,r=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),a=t.dataIdMap.get(s.dataId).id;return w.sizeFromShape(s.shape)===0||Z_(r,a),s}var Doe={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Eoe,kernelFunc:Aoe},$oe=un(So),J_;function Foe(e){J_=e.wasm.cwrap(_o,null,["number","number","number","number"])}function Roe(e){let{backend:t,inputs:{logits:n},attrs:{dim:r}}=e,s=t.dataIdMap.get(n.dataId).id,a=t.makeOutput(n.shape,n.dtype),o=t.dataIdMap.get(a.dataId).id,i=n.shape[r],c=w.sizeFromShape(n.shape)/i;return w.sizeFromShape(a.shape)===0||J_(s,o,i,c),a}var Poe={kernelName:_o,backendName:"wasm",setupFunc:Foe,kernelFunc:Roe};function Ooe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,paddings:o}=r,i=w.sizeFromShape(a),c=[[0,0]];c.push(...o);for(let C=1+a.length;C{let p=[...l];p[i]=d;let h=Gd({inputs:{x:s},attrs:{begin:u,size:p},backend:r});return u[i]+=d,h})}var Boe={kernelName:Uc,backendName:"wasm",kernelFunc:Loe},zoe=un(To),Woe=un($l),Voe=!0,Uoe=Tn(Eo,Voe),Q_;function Goe(e){Q_=e.wasm.cwrap(ea,null,["number","number","number"])}function Hoe(e){let{backend:t,inputs:n,attrs:r}=e,{alpha:s}=r,{x:a}=n,o=t.dataIdMap.get(a.dataId).id,i=t.makeOutput(a.shape,a.dtype),c=t.dataIdMap.get(i.dataId).id;return Q_(o,s,c),i}var joe={kernelName:ea,backendName:"wasm",setupFunc:Goe,kernelFunc:Hoe},eE;function qoe(e){eE=e.wasm.cwrap(Gc,null,["number","array","number","array","array","array","array","array","number","number"])}function Koe(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{begin:a,end:o,strides:i}=r;i==null&&(i=new Array(a.length));let{beginMask:c,endMask:u,ellipsisMask:l,newAxisMask:d,shrinkAxisMask:p}=r,h=_.slice_util.maskToAxes(l);if(h.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(l!==0&&d!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(l!==0&&p!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let f=s.shape.length-a.length,m=_.slice_util.maskToAxes(d),g=s.shape.slice();m.forEach(D=>{a[D]=0,o[D]=1,g.splice(D,0,1)});let b=zn({inputs:{x:s},attrs:{shape:g},backend:t}),{begin:y,end:v,strides:x}=_.slice_util.getNormalizedAxes(b.shape,h,f,a,o,i,c,u,l);a=y,o=v,i=x;let k=_.slice_util.maskToAxes(p);k.forEach(D=>{o[D]=a[D]+1,i[D]=1});let C=_.slice_util.computeOutShape(a,o,i),N=C.filter((D,P)=>k.indexOf(P)===-1);if(i.every(D=>D===1)){let D=Gd({inputs:{x:b},attrs:{begin:a,size:C},backend:t});t.disposeData(b.dataId);let P=zn({inputs:{x:D},attrs:{shape:N},backend:t});return t.disposeData(D.dataId),P}let R=t.makeOutput(N,"float32");if(!N.some(D=>D===0)){let D=t.dataIdMap.get(b.dataId).id,P=new Uint8Array(new Int32Array(w.computeStrides(b.shape)).buffer),T=new Uint8Array(new Int32Array(a).buffer),L=new Uint8Array(new Int32Array(o).buffer),G=new Uint8Array(new Int32Array(i).buffer),j=new Uint8Array(new Int32Array(N).buffer),q=new Uint8Array(new Int32Array(w.computeStrides(N)).buffer),K=t.dataIdMap.get(R.dataId).id;eE(D,P,b.shape.length,T,L,G,j,q,N.length,K)}t.disposeData(b.dataId);let O=zn({inputs:{x:R},attrs:{shape:N},backend:t});return t.disposeData(R.dataId),O}var Xoe={kernelName:Gc,backendName:"wasm",setupFunc:qoe,kernelFunc:Koe},Yoe=!0,Zoe=Tn(Ao,Yoe),tE;function Joe(e){tE=e.wasm.cwrap(No,null,["number, number, number"])}function Qoe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t),f=d;if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v,f=_.getInnerMostAxes(f.length,u.shape.length))}_.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[m,g]=_.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;tE(c,b,v)}if(h&&t.disposeData(l.dataId),a){let v=_.expandShapeToKeepDim(y.shape,p);y.shape=v}return y}var eie={kernelName:No,backendName:"wasm",setupFunc:Joe,kernelFunc:Qoe},tie=un(Do),nie=un($o),nE;function rie(e){nE=e.wasm.cwrap(Qs,null,["number","array","number","array","number","number"])}function sie(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,a=n.dataIdMap.get(s.dataId).id,{reps:o}=r,i=new Array(s.shape.length);for(let p=0;p{let{x:r}=e,{k:s,sorted:a}=n,o=t.dataIdMap.get(r.dataId).id,i=new Uint8Array(new Int32Array(r.shape).buffer),c=r.shape.slice();c[c.length-1]=s;let u=t.makeOutput(c,r.dtype),l=t.dataIdMap.get(u.dataId).id,d=t.makeOutput(c,"int32"),p=t.dataIdMap.get(d.dataId).id;return rE(o,i,r.shape.length,Bn[r.dtype],s,a,l,p),[u,d]},cie={kernelName:Hc,backendName:"wasm",setupFunc:oie,kernelFunc:iie},sE;function uie(e){sE=e.wasm.cwrap(jc,null,["number","number","bool","number","number","number","number","number","number","array","number","number","number","number","number"])}function lie(e){let{backend:t,inputs:n,attrs:r}=e,{image:s,transforms:a}=n,{interpolation:o,fillMode:i,fillValue:c,outputShape:u}=r,[l,d,p,h]=s.shape,[f,m]=u!=null?u:[d,p],g=[l,f,m,h],b=new Uint8Array(new Int32Array(w.computeStrides(s.shape)).buffer),y=t.makeOutput(g,s.dtype),v=t.dataIdMap.get(y.dataId).id,k=t.dataIdMap.get(s.dataId).id,N=t.dataIdMap.get(a.dataId).id,$=o==="nearest"?1:2,R;switch(i){case"constant":R=1;break;case"reflect":R=2;break;case"wrap":R=3;break;case"nearest":R=4;break;default:R=1;break}return sE(k,N,a.shape[0]>1,l,f,m,h,p,d,b,s.shape.length-1,$,R,c,v),y}var die={kernelName:jc,backendName:"wasm",setupFunc:uie,kernelFunc:lie};function pie(e){let{inputs:t,backend:n,attrs:r}=e,{value:s}=t,{axis:a}=r;a<0&&(a+=s.shape.length);let o=s.shape[a],i=s.shape.length,c=new Array(i-1),u=0;for(let h=0;h({dataId:h,dtype:f,shape:c}))}var hie={kernelName:qc,backendName:"wasm",kernelFunc:pie};function fie(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}var mie={kernelName:Kc,backendName:"wasm",kernelFunc:fie},gie=[yre,xre,Ire,Dre,Rre,Mre,zre,Gre,Yre,Zre,Jre,tse,nse,ase,cse,use,lse,hse,gse,vse,kse,Ise,Cse,Tse,Nse,_se,Dse,$se,Rse,bre,Mse,zse,Use,jse,Xse,Zse,Qse,Sre,nae,sae,oae,iae,uae,pae,fae,bae,xae,Iae,Cae,_ae,Aae,Dae,Rae,Mae,zae,Vae,Hae,qae,Xae,U_,Qae,noe,aoe,ioe,uoe,loe,doe,Wre,foe,boe,xoe,koe,woe,Coe,_oe,Doe,$oe,Kre,Poe,Moe,Boe,zoe,Woe,Uoe,joe,Xoe,Zoe,eie,tie,nie,aie,cie,die,_re,hie,mie];for(let e of gie)Pl(e);var Yw=Q();Yw.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11])));Yw.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Yw.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(e){return!1}});var aE=Fa(pD()),bie='var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");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;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};function moduleLoaded(){}this.onmessage=function(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;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}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);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["getNoExitRuntime"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}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);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}',yie=Fa(hD()),oE=class extends bl{constructor(e){super();this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.init(),this.dataIdMap=new Dp(this,Ss())}write(e,t,n){let r={id:this.dataIdNextNumber++};return this.move(r,e,t,n,1),r}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=w.now();return e(),{kernelMs:w.now()-t}}move(e,t,n,r,s){let a=this.dataIdNextNumber++;if(r==="string"){let u=t;this.dataIdMap.set(e,{id:a,stringBytes:u,shape:n,dtype:r,memoryOffset:null,refCount:s});return}let o=w.sizeFromShape(n),i=o*w.bytesPerElement(r),c=this.wasm._malloc(i);this.dataIdMap.set(e,{id:a,memoryOffset:c,shape:n,dtype:r,refCount:s}),this.wasm.tfjs.registerTensor(a,o,c),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,i),c)}async read(e){return this.readSync(e)}readSync(e){let{memoryOffset:t,dtype:n,shape:r,stringBytes:s}=this.dataIdMap.get(e);if(n==="string")return s;let a=this.wasm.HEAPU8.slice(t,t+w.sizeFromShape(r)*w.bytesPerElement(n));return wie(a.buffer,n)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let r;if(n==null)r=this.write(null,e,t);else{let s=this.dataIdNextNumber++;r={id:s},this.dataIdMap.set(r,{id:s,memoryOffset:n,shape:e,dtype:t,refCount:1});let a=w.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,a,n)}return{dataId:r,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let r=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(n),a=w.sizeFromShape(e);switch(t){case"float32":return new Float32Array(r,s,a);case"int32":return new Int32Array(r,s,a);case"bool":return new Uint8Array(r,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function vie(e){return(t,n)=>(w.fetch(e,{credentials:"same-origin"}).then(r=>{r.ok||t.env.a(`failed to load wasm binary file at '${e}'`),r.arrayBuffer().then(s=>{WebAssembly.instantiate(s,t).then(a=>{n(a.instance,a.module)})})}),{})}function iE(e,t,n){if(Nm!=null)return Nm;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),jd!=null&&jd[r]!=null?jd[r]:n+r}async function xie(){let[e,t]=await Promise.all([Q().getAsync("WASM_HAS_SIMD_SUPPORT"),Q().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,r)=>{let s={};s.locateFile=(i,c)=>{if(i.endsWith(".worker.js")){let u=bie,l=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(l)}return i.endsWith(".wasm")?iE(e,t,Hd!=null?Hd:c):c+i},Zw&&(s.instantiateWasm=vie(iE(e,t,Hd!=null?Hd:"")));let a=!1;s.onAbort=()=>{if(a||qd)return;qd=!0,r({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"})};let o;t&&e&&Nm==null?(s.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+aE.default.toString()],{type:"text/javascript"}),o=(0,aE.default)(s)):o=(0,yie.default)(s),o.then(i=>{a=!0,qd=!1;let c=null;i.tfjs={init:i.cwrap("init",null,[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",c,["number"]),dispose:i.cwrap("dispose",c,[])},n({wasm:i})})})}function wie(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}var kie=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Nm=null,Hd=null,jd={},qd=!1,Zw=!1;function Iie(e,t=!1){if(fy("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),qd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Nm=e,Zw=t}function Sie(e,t=!1){if(qd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof e=="string")Hd=e;else{jd=e;let n=kie.filter(r=>jd[r]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}Zw=t}var Cie="3.9.0",Tie=2;Dh("wasm",async()=>{let{wasm:e}=await xie();return new oE(e)},Tie);var Nie="3.9.0",_ie="3.9.0",Eie="3.9.0",Aie="3.9.0",Die="3.9.0",$ie="3.9.0",Fie="3.9.0",Rie="3.9.0",Pie={tfjs:Nie,"tfjs-core":_ie,"tfjs-data":Eie,"tfjs-layers":Aie,"tfjs-converter":Die,"tfjs-backend-cpu":$ie,"tfjs-backend-webgl":Fie,"tfjs-backend-wasm":Rie};var S0={};Ep(S0,{AnchorPosition:()=>fs,DrawBox:()=>Dm,DrawBoxOptions:()=>h0,DrawFaceLandmarks:()=>I0,DrawFaceLandmarksOptions:()=>k0,DrawTextField:()=>Ta,DrawTextFieldOptions:()=>Zd,drawContour:()=>Ps,drawDetections:()=>Gie,drawFaceExpressions:()=>Xie,drawFaceLandmarks:()=>Zie});function Ps(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:r,y:s},a)=>{let o=t[a];e.moveTo(o.x,o.y),e.lineTo(r,s)}),n){let r=t[t.length-1],s=t[0];if(!r||!s)return;e.moveTo(r.x,r.y),e.lineTo(s.x,s.y)}e.stroke()}var n0={};Ep(n0,{computeReshapedDimensions:()=>t0,getCenterPoint:()=>xi,isDimensions:()=>Em,isEven:()=>_m,isFloat:()=>e0,isTensor:()=>yi,isTensor1D:()=>Oie,isTensor2D:()=>Qw,isTensor3D:()=>Os,isTensor4D:()=>br,isValidNumber:()=>jr,isValidProbablitiy:()=>Lu,range:()=>ps,round:()=>vi});var Nn=class{constructor(t,n){if(!jr(t)||!jr(n))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:n})}`);this._width=t,this._height=n}get width(){return this._width}get height(){return this._height}reverse(){return new Nn(1/this.width,1/this.height)}};function yi(e,t){return e instanceof Ee&&e.shape.length===t}function Oie(e){return yi(e,1)}function Qw(e){return yi(e,2)}function Os(e){return yi(e,3)}function br(e){return yi(e,4)}function e0(e){return e%1!=0}function _m(e){return e%2==0}function vi(e,t=2){let n=10**t;return Math.floor(e*n)/n}function Em(e){return e&&e.width&&e.height}function t0({width:e,height:t},n){let r=n/Math.max(t,e);return new Nn(Math.round(e*r),Math.round(t*r))}function xi(e){return e.reduce((t,n)=>t.add(n),new Oe(0,0)).div(new Oe(e.length,e.length))}function ps(e,t,n){return Array(e).fill(0).map((r,s)=>t+s*n)}function jr(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function Lu(e){return jr(e)&&e>=0&&e<=1}var Oe=class{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new Oe(this.x+t.x,this.y+t.y)}sub(t){return new Oe(this.x-t.x,this.y-t.y)}mul(t){return new Oe(this.x*t.x,this.y*t.y)}div(t){return new Oe(this.x/t.x,this.y/t.y)}abs(){return new Oe(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new Oe(Math.floor(this.x),Math.floor(this.y))}};var ut=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(jr)}static assertIsValidBox(t,n,r=!1){if(!ut.isRect(t))throw new Error(`${n} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!r&&(t.width<0||t.height<0))throw new Error(`${n} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,n=!0){let r=t||{},s=[r.left,r.top,r.right,r.bottom].every(jr),a=[r.x,r.y,r.width,r.height].every(jr);if(!a&&!s)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[o,i,c,u]=a?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];ut.assertIsValidBox({x:o,y:i,width:c,height:u},"Box.constructor",n),this._x=o,this._y=i,this._width=c,this._height=u}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new Oe(this.left,this.top)}get topRight(){return new Oe(this.right,this.top)}get bottomLeft(){return new Oe(this.left,this.bottom)}get bottomRight(){return new Oe(this.right,this.bottom)}round(){let[t,n,r,s]=[this.x,this.y,this.width,this.height].map(a=>Math.round(a));return new ut({x:t,y:n,width:r,height:s})}floor(){let[t,n,r,s]=[this.x,this.y,this.width,this.height].map(a=>Math.floor(a));return new ut({x:t,y:n,width:r,height:s})}toSquare(){let{x:t,y:n,width:r,height:s}=this,a=Math.abs(r-s);return rn&&(i=-d+n+r,d=n),p>t&&(c=-p+t+s,p=t),u<1&&(c=2-u,u=1),l<1&&(c=2-l,l=1),{dy:o,edy:c,dx:a,edx:i,y:l,ey:p,x:u,ex:d,w:r,h:s}}calibrate(t){return new ut({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Bu=class extends ut{constructor(t,n,r,s,a=!1){super({left:t,top:n,right:r,bottom:s},a)}};var Ca=class{constructor(t,n,r,s,a){this._imageDims=new Nn(a.width,a.height),this._score=t,this._classScore=n,this._className=r,this._box=new ut(s).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new ut(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new Ca(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var vt=class extends Ca{constructor(t,n,r){super(t,t,"",n,r)}forSize(t,n){let{score:r,relativeBox:s,imageDims:a}=super.forSize(t,n);return new vt(r,s,a)}};function r0(e,t,n=!0){let r=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),s=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),a=r*s;return n?a/(e.area+t.area-a):a/Math.min(e.area,t.area)}function s0(e){let t=e.map(i=>i.x),n=e.map(i=>i.y),r=t.reduce((i,c)=>ccii({score:o,boxIndex:i})).sort((o,i)=>o.score-i.score).map(o=>o.boxIndex),a=[];for(;s.length>0;){let o=s.pop();a.push(o);let i=s,c=[];for(let u=0;uc[l]<=n)}return a}function qr(e,t){return M(()=>{let[n,r,s]=t,a=xn([...e.shape.slice(0,3),1],n,"float32"),o=xn([...e.shape.slice(0,3),1],r,"float32"),i=xn([...e.shape.slice(0,3),1],s,"float32"),c=Ze([a,o,i],3);return fe(e,c)})}function o0(e,t=!1){return M(()=>{let[n,r]=e.shape.slice(1);if(n===r)return e;let s=Math.abs(n-r),a=Math.round(s*(t?.5:1)),o=n>r?2:1,i=p=>{let h=e.shape.slice();return h[o]=p,xn(h,0,"float32")},c=i(a),u=s-c.shape[o],d=[t&&u?i(u):null,e,c].filter(p=>!!p).map(p=>ce(p,"float32"));return Ze(d,o)})}function Mie(e){let t=e.slice();for(let n=t.length-1;n>0;n--){let r=Math.floor(Math.random()*(n+1)),s=t[n];t[n]=t[r],t[r]=s}return t}function Kd(e){return 1/(1+Math.exp(-e))}function Lie(e){return Math.log(e/(1-e))}var zu=class extends ut{constructor(t,n,r,s,a=!1){super({x:t,y:n,width:r,height:s},a)}};var Bie=.5,zie=.43,Wie=.45,yr=class{constructor(t,n,r=new Oe(0,0)){let{width:s,height:a}=n;this._imgDims=new Nn(s,a),this._shift=r,this._positions=t.map(o=>o.mul(new Oe(s,a)).add(r))}get shift(){return new Oe(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new Oe(this.imageWidth,this.imageHeight)))}forSize(t,n){return new this.constructor(this.relativePositions,{width:t,height:n})}shiftBy(t,n){return new this.constructor(this.relativePositions,this._imgDims,new Oe(t,n))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,n={}){if(t){let a=t instanceof vt?t.box.floor():new ut(t);return this.shiftBy(a.x,a.y).align(null,n)}let{useDlibAlignment:r,minBoxPadding:s}={useDlibAlignment:!1,minBoxPadding:.2,...n};return r?this.alignDlib():this.alignMinBbox(s)}alignDlib(){let t=this.getRefPointsForAlignment(),[n,r,s]=t,a=d=>s.sub(d).magnitude(),o=(a(n)+a(r))/2,i=Math.floor(o/Wie),c=xi(t),u=Math.floor(Math.max(0,c.x-Bie*i)),l=Math.floor(Math.max(0,c.y-zie*i));return new zu(u,l,Math.min(i,this.imageWidth+u),Math.min(i,this.imageHeight+l))}alignMinBbox(t){let n=s0(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var cE=class extends yr{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],xi([t[3],t[4]])]}};var Wu=class extends yr{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(xi)}};var Xd=class{constructor(t,n){this._label=t,this._distance=n}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${vi(this.distance)})`:""}`}};var Yd=class extends ut{static assertIsValidLabeledBox(t,n){if(ut.assertIsValidBox(t,n),!jr(t.label))throw new Error(`${n} - expected property label (${t.label}) to be a number`)}constructor(t,n){super(t);this._label=n}get label(){return this._label}};var Ms=class{constructor(t,n){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(n)||n.some(r=>!(r instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=n}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let n=t.descriptors.map(r=>new Float32Array(r));return new Ms(t.label,n)}};var uE=class extends Yd{static assertIsValidPredictedBox(t,n){if(Yd.assertIsValidLabeledBox(t,n),!Lu(t.score)||!Lu(t.classScore))throw new Error(`${n} - expected properties score (${t.score}) and (${t.classScore}) to be a number between [0, 1]`)}constructor(t,n,r,s){super(t,n);this._score=r,this._classScore=s}get score(){return this._score}get classScore(){return this._classScore}};function hs(e){return e.detection instanceof vt}function wi(e,t){return{...e,...{detection:t}}}function i0(){let e=window.fetch;if(!e)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:e,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function Am(e){let t="";if(!e)try{e=Hi("fs")}catch(r){t=r.toString()}return{readFile:e?r=>new Promise((s,a)=>{e.readFile(r,(o,i)=>o?a(o):s(i))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function c0(){let e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=global.Video||global.HTMLVideoElement,r=()=>{if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},s=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},a=()=>{if(n)return new n;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},o=global.fetch,i=Am();return{Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:r,createImageElement:s,createVideoElement:a,fetch:o,...i}}function u0(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}function l0(){return typeof global=="object"&&typeof Hi=="function"&&typeof module!="undefined"&&typeof process!="undefined"&&!!process.version}var tn;function Vie(){if(!tn)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return tn}function d0(e){tn=e}function p0(){return u0()?d0(i0()):l0()?d0(c0()):null}function Uie(e){if(tn||p0(),!tn)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=tn.Canvas,Image:n=tn.Image}=e;tn.Canvas=t,tn.Image=n,tn.createCanvasElement=e.createCanvasElement||(()=>new t),tn.createImageElement=e.createImageElement||(()=>new n),tn.ImageData=e.ImageData||tn.ImageData,tn.Video=e.Video||tn.Video,tn.fetch=e.fetch||tn.fetch,tn.readFile=e.readFile||tn.readFile}var Je={getEnv:Vie,setEnv:d0,initialize:p0,createBrowserEnv:i0,createFileSystem:Am,createNodejsEnv:c0,monkeyPatch:Uie,isBrowser:u0,isNodejs:l0};p0();function ki(e){return!Je.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function Wn(e){let{Canvas:t,CanvasRenderingContext2D:n}=Je.getEnv();if(e instanceof n)return e;let r=ki(e);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let s=r.getContext("2d");if(!s)throw new Error("resolveContext2d - canvas 2d context is null");return s}var fs;(function(s){s.TOP_LEFT="TOP_LEFT",s.TOP_RIGHT="TOP_RIGHT",s.BOTTOM_LEFT="BOTTOM_LEFT",s.BOTTOM_RIGHT="BOTTOM_RIGHT"})(fs||(fs={}));var Zd=class{constructor(t={}){let{anchorPosition:n,backgroundColor:r,fontColor:s,fontSize:a,fontStyle:o,padding:i}=t;this.anchorPosition=n||fs.TOP_LEFT,this.backgroundColor=r||"rgba(0, 0, 0, 0.5)",this.fontColor=s||"rgba(255, 255, 255, 1)",this.fontSize=a||14,this.fontStyle=o||"Georgia",this.padding=i||4}},Ta=class{constructor(t,n,r={}){this.text=typeof t=="string"?[t]:t instanceof Ta?t.text:t,this.anchor=n,this.options=new Zd(r)}measureWidth(t){let{padding:n}=this.options;return this.text.map(r=>t.measureText(r).width).reduce((r,s)=>r{let f=c+d.x,m=c+d.y+(h+1)*o;r.fillText(p,f,m)})}};var h0=class{constructor(t={}){let{boxColor:n,lineWidth:r,label:s,drawLabelOptions:a}=t;this.boxColor=n||"rgba(0, 0, 255, 1)",this.lineWidth=r||2,this.label=s;let o={anchorPosition:fs.BOTTOM_LEFT,backgroundColor:this.boxColor};this.drawLabelOptions=new Zd({...o,...a})}},Dm=class{constructor(t,n={}){this.box=new ut(t),this.options=new h0(n)}draw(t){let n=Wn(t),{boxColor:r,lineWidth:s}=this.options,{x:a,y:o,width:i,height:c}=this.box;n.strokeStyle=r,n.lineWidth=s,n.strokeRect(a,o,i,c);let{label:u}=this.options;u&&new Ta([u],{x:a-s/2,y:o},this.options.drawLabelOptions).draw(t)}};function Gie(e,t){(Array.isArray(t)?t:[t]).forEach(r=>{let s=r instanceof vt?r.score:hs(r)?r.detection.score:void 0,a=r instanceof vt?r.box:hs(r)?r.detection.box:new ut(r),o=s?`${vi(s)}`:void 0;new Dm(a,{label:o}).draw(e)})}function Jd(e){let{Image:t,Video:n}=Je.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function f0(e){return new Promise((t,n)=>{if(e instanceof Je.getEnv().Canvas||Jd(e))return t(null);function r(a){!a.currentTarget||(a.currentTarget.removeEventListener("load",s),a.currentTarget.removeEventListener("error",r),n(a))}function s(a){!a.currentTarget||(a.currentTarget.removeEventListener("load",s),a.currentTarget.removeEventListener("error",r),t(a))}e.addEventListener("load",s),e.addEventListener("error",r)})}function m0(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToImage - expected buf to be of type: Blob"));let r=new FileReader;r.onload=()=>{typeof r.result!="string"&&n(new Error("bufferToImage - expected reader.result to be a string, in onload"));let s=Je.getEnv().createImageElement();s.onload=()=>t(s),s.onerror=n,s.src=r.result},r.onerror=n,r.readAsDataURL(e)})}function Ii(e){let{Image:t,Video:n}=Je.getEnv();return e instanceof t?new Nn(e.naturalWidth,e.naturalHeight):e instanceof n?new Nn(e.videoWidth,e.videoHeight):new Nn(e.width,e.height)}function Si({width:e,height:t}){let{createCanvasElement:n}=Je.getEnv(),r=n();return r.width=e,r.height=t,r}function Qd(e,t){let{ImageData:n}=Je.getEnv();if(!(e instanceof n)&&!Jd(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:s}=t||Ii(e),a=Si({width:r,height:s});return e instanceof n?Wn(a).putImageData(e,0,0):Wn(a).drawImage(e,0,0,r,s),a}async function g0(e,t){let n=t||Je.getEnv().createCanvasElement(),[r,s,a]=e.shape.slice(br(e)?1:0),o=M(()=>e.as3D(r,s,a).toInt());return await Vo.toPixels(o,n),o.dispose(),n}function $m(e){let{Image:t,Canvas:n,Video:r}=Je.getEnv();return e instanceof t||e instanceof n||e instanceof r}function b0(e,t,n=!1){let{Image:r,Canvas:s}=Je.getEnv();if(!(e instanceof r||e instanceof s))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Si({width:1,height:1});let a=Ii(e),o=t/Math.max(a.height,a.width),i=o*a.width,c=o*a.height,u=Si({width:t,height:t}),l=e instanceof s?e:Qd(e),d=Math.abs(i-c)/2,p=n&&i0&&l.height>0&&Wn(u).drawImage(l,p,h,i,c),u}var Ls=class{constructor(t,n=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=n,this._batchSize=t.length,t.forEach((r,s)=>{if(Os(r)){this._imageTensors[s]=r,this._inputDimensions[s]=r.shape;return}if(br(r)){let o=r.shape[0];if(o!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${o} passed, but not supported in input array`);this._imageTensors[s]=r,this._inputDimensions[s]=r.shape.slice(1);return}let a=r instanceof Je.getEnv().Canvas?r:Qd(r);this._canvases[s]=a,this._inputDimensions[s]=[a.height,a.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return ps(this.batchSize,0,1).map((t,n)=>this.getReshapedInputDimensions(n))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let n=this.getInputWidth(t),r=this.getInputHeight(t);return t0({width:n,height:r},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,M(()=>{let r=ps(this.batchSize,0,1).map(a=>{let o=this.getInput(a);if(o instanceof Ee){let i=br(o)?o:fn(o);return i=o0(i,n),(i.shape[1]!==t||i.shape[2]!==t)&&(i=Jn.resizeBilinear(i,[t,t],!1,!1)),i.as3D(t,t,3)}if(o instanceof Je.getEnv().Canvas)return Vo.fromPixels(b0(o,t,n));throw new Error(`toBatchTensor - at batchIdx ${a}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${o}`)});return Pt(r.map(a=>ce(a,"float32"))).as4D(this.batchSize,t,t,3)})}};async function mt(e){if(e instanceof Ls)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");let n=s=>Array.isArray(e)?` at input index ${s}:`:"",r=t.map(ki);return r.forEach((s,a)=>{if(!$m(s)&&!Os(s)&&!br(s))throw typeof t[a]=="string"?new Error(`toNetInput -${n(a)} string passed, but could not resolve HTMLElement for element id ${t[a]}`):new Error(`toNetInput -${n(a)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(br(s)){let o=s.shape[0];if(o!==1)throw new Error(`toNetInput -${n(a)} tf.Tensor4D with batchSize ${o} passed, but not supported in input array`)}}),await Promise.all(r.map(s=>$m(s)&&f0(s))),new Ls(r,Array.isArray(e))}async function Vu(e,t){let{Canvas:n}=Je.getEnv(),r=e;if(!(e instanceof n)){let o=await mt(e);if(o.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let i=o.getInput(0);r=i instanceof n?i:await g0(i)}let s=Wn(r);return t.map(o=>o instanceof vt?o.forSize(r.width,r.height).box.floor():o).map(o=>o.clipAtImageBorders(r.width,r.height)).map(({x:o,y:i,width:c,height:u})=>{let l=Si({width:c,height:u});return c>0&&u>0&&Wn(l).putImageData(s.getImageData(o,i,c,u),0,0),l})}async function Uu(e,t){if(!Os(e)&&!br(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(br(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return M(()=>{let[n,r,s]=e.shape.slice(br(e)?1:0);return t.map(i=>i instanceof vt?i.forSize(r,n).box:i).map(i=>i.clipAtImageBorders(r,n)).map(({x:i,y:c,width:u,height:l})=>lu(e.as3D(n,r,s),[c,i,0],[l,u,s]))})}async function Bs(e,t){let{fetch:n}=Je.getEnv(),r=await n(e,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function Hie(e){let t=await Bs(e),n=await t.blob();if(!n.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${n.type}, for url: ${t.url}`);return m0(n)}async function y0(e){return(await Bs(e)).json()}async function jie(e){return new Float32Array(await(await Bs(e)).arrayBuffer())}function lE(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let r=Je.getEnv().createVideoElement();r.oncanplay=()=>t(r),r.onerror=n,r.playsInline=!0,r.muted=!0,r.src=URL.createObjectURL(e),r.play()})}async function qie(e){let t=await Bs(e),n=await t.blob();if(!n.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${n.type}, for url: ${t.url}`);return lE(n)}function Fm(e,t){let n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};let r=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(r,"");let s=e.split("/").filter(i=>i),a=e.endsWith(".json")?s[s.length-1]:n,o=r+(e.endsWith(".json")?s.slice(0,s.length-1):s).join("/");return o=e.startsWith("/")?`/${o}`:o,{modelBaseUri:o,manifestUri:o==="/"?`/${a}`:`${o}/${a}`}}async function v0(e,t){let{manifestUri:n,modelBaseUri:r}=Fm(e,t),s=await y0(n);return Xt.loadWeights(s,r)}function Kie(e,t,n=!1){let{width:r,height:s}=n?Ii(t):t;return e.width=r,e.height=s,{width:r,height:s}}var ln=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:n,objProp:r}=this.traversePropertyPath(t);return n[r]}reassignParamFromPath(t,n){let{obj:r,objProp:s}=this.traversePropertyPath(t);r[s].dispose(),r[s]=n}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof na)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof na))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let r=jn(n.dataSync());n.dispose(),this.reassignParamFromPath(t,r)})}dispose(t=!0){this.getParamList().forEach(n=>{if(t&&n.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${n.path}`);n.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,n)=>t.concat(n)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let n=await v0(t,this.getDefaultModelName());this.loadFromWeightMap(n)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:n}=Je.getEnv(),{manifestUri:r,modelBaseUri:s}=Fm(t,this.getDefaultModelName()),a=u=>Promise.all(u.map(l=>n(l).then(d=>d.buffer))),o=Xt.weightsLoaderFactory(a),i=JSON.parse((await n(r)).toString()),c=await o(i,s);this.loadFromWeightMap(c)}loadFromWeightMap(t){let{paramMappings:n,params:r}=this.extractParamsFromWeightMap(t);this._paramMappings=n,this._params=r}extractWeights(t){let{paramMappings:n,params:r}=this.extractParams(t);this._paramMappings=n,this._params=r}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let n=t.split("/").reduce((a,o)=>{if(!a.nextObj.hasOwnProperty(o))throw new Error(`traversePropertyPath - object does not have property ${o}, for path ${t}`);return{obj:a.nextObj,objProp:o,nextObj:a.nextObj[o]}},{nextObj:this.params}),{obj:r,objProp:s}=n;if(!r||!s||!(r[s]instanceof Ee))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:r,objProp:s}}};function Vn(e,t,n){return M(()=>{let r=Zo(e,t.depthwise_filter,t.pointwise_filter,n,"same");return r=Y(r,t.bias),r})}function Rm(e,t,n=!1){return M(()=>{let r=qe(n?Y(Ft(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):Vn(e,t.conv0,[2,2])),s=Vn(r,t.conv1,[1,1]),a=qe(Y(r,s)),o=Vn(a,t.conv2,[1,1]);return qe(Y(r,Y(s,o)))})}function ep(e,t,n=!1,r=!0){return M(()=>{let s=qe(n?Y(Ft(e,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):Vn(e,t.conv0,r?[2,2]:[1,1])),a=Vn(s,t.conv1,[1,1]),o=qe(Y(s,a)),i=Vn(o,t.conv2,[1,1]),c=qe(Y(s,Y(a,i))),u=Vn(c,t.conv3,[1,1]);return qe(Y(s,Y(a,Y(i,u))))})}function Ci(e,t,n="same",r=!1){return M(()=>{let s=Y(Ft(e,t.filters,[1,1],n),t.bias);return r?qe(s):s})}function _n(e,t){Object.keys(e).forEach(n=>{t.some(r=>r.originalPath===n)||e[n].dispose()})}function Gu(e,t){return(n,r,s,a)=>{let o=Or(e(n*r*s*s),[s,s,n,r]),i=He(e(r));return t.push({paramPath:`${a}/filters`},{paramPath:`${a}/bias`}),{filters:o,bias:i}}}function Pm(e,t){return(n,r,s)=>{let a=Pr(e(n*r),[n,r]),o=He(e(r));return t.push({paramPath:`${s}/weights`},{paramPath:`${s}/bias`}),{weights:a,bias:o}}}var Om=class{constructor(t,n,r){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=r}};function Hu(e,t){return(n,r,s)=>{let a=Or(e(3*3*n),[3,3,n,1]),o=Or(e(n*r),[1,1,n,r]),i=He(e(r));return t.push({paramPath:`${s}/depthwise_filter`},{paramPath:`${s}/pointwise_filter`},{paramPath:`${s}/bias`}),new Om(a,o,i)}}function ju(e){return t=>{let n=e(`${t}/depthwise_filter`,4),r=e(`${t}/pointwise_filter`,4),s=e(`${t}/bias`,1);return new Om(n,r,s)}}function rr(e,t){return(n,r,s)=>{let a=e[n];if(!yi(a,r))throw new Error(`expected weightMap[${n}] to be a Tensor${r}D, instead have ${a}`);return t.push({originalPath:n,paramPath:s||n}),a}}function En(e){let t=e;function n(s){let a=t.slice(0,s);return t=t.slice(s),a}function r(){return t}return{extractWeights:n,getRemainingWeights:r}}function Mm(e,t){let n=Gu(e,t),r=Hu(e,t);function s(o,i,c,u=!1){let l=u?n(o,i,3,`${c}/conv0`):r(o,i,`${c}/conv0`),d=r(i,i,`${c}/conv1`),p=r(i,i,`${c}/conv2`);return{conv0:l,conv1:d,conv2:p}}function a(o,i,c,u=!1){let{conv0:l,conv1:d,conv2:p}=s(o,i,c,u),h=r(i,i,`${c}/conv3`);return{conv0:l,conv1:d,conv2:p,conv3:h}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:a}}function dE(e){let t=[],{extractWeights:n,getRemainingWeights:r}=En(e),{extractDenseBlock4Params:s}=Mm(n,t),a=s(3,32,"dense0",!0),o=s(32,64,"dense1"),i=s(64,128,"dense2"),c=s(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:a,dense1:o,dense2:i,dense3:c}}}function Lm(e){return t=>{let n=e(`${t}/filters`,4),r=e(`${t}/bias`,1);return{filters:n,bias:r}}}function Bm(e,t){let n=rr(e,t),r=Lm(n),s=ju(n);function a(i,c=!1){let u=c?r(`${i}/conv0`):s(`${i}/conv0`),l=s(`${i}/conv1`),d=s(`${i}/conv2`);return{conv0:u,conv1:l,conv2:d}}function o(i,c=!1){let u=c?r(`${i}/conv0`):s(`${i}/conv0`),l=s(`${i}/conv1`),d=s(`${i}/conv2`),p=s(`${i}/conv3`);return{conv0:u,conv1:l,conv2:d,conv3:p}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:o}}function pE(e){let t=[],{extractDenseBlock4Params:n}=Bm(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return _n(e,t),{params:r,paramMappings:t}}var tp=class extends ln{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(112,!0),"float32"),a=qr(r,[122.782,117.001,104.298]).div(255),o=ep(a,n.dense0,!0);return o=ep(o,n.dense1),o=ep(o,n.dense2),o=ep(o,n.dense3),o=ur(o,[7,7],[2,2],"valid"),o})}async forward(t){return this.forwardInput(await mt(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return pE(t)}extractParams(t){return dE(t)}};function np(e,t){return M(()=>Y(De(e,t.weights),t.bias))}function hE(e,t,n){let r=[],{extractWeights:s,getRemainingWeights:a}=En(e),i=Pm(s,r)(t,n,"fc");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:r,params:{fc:i}}}function fE(e){let t=[],n=rr(e,t);function r(a){let o=n(`${a}/weights`,2),i=n(`${a}/bias`,1);return{weights:o,bias:i}}let s={fc:r("fc")};return _n(e,t),{params:s,paramMappings:t}}function zm(e){let t={},n={};return Object.keys(e).forEach(r=>{let s=r.startsWith("fc")?n:t;s[r]=e[r]}),{featureExtractorMap:t,classifierMap:n}}var rp=class extends ln{constructor(t,n){super(t);this._faceFeatureExtractor=n}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:n}=this;if(!n)throw new Error(`${this._name} - load model before inference`);return M(()=>{let r=t instanceof Ls?this.faceFeatureExtractor.forwardInput(t):t;return np(r.as2D(r.shape[0],-1),n.fc)})}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:n,paramMappings:r}=this.extractClassifierParams(t);this._params=n,this._paramMappings=r}extractClassifierParams(t){return hE(t,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(t){let{featureExtractorMap:n,classifierMap:r}=zm(t);return this.faceFeatureExtractor.loadFromWeightMap(n),fE(r)}extractParams(t){let n=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),s=r*n+r,a=t.slice(0,t.length-s),o=t.slice(t.length-s);return this.faceFeatureExtractor.extractWeights(a),this.extractClassifierParams(o)}};var x0=["neutral","happy","sad","angry","fearful","disgusted","surprised"],Na=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);x0.forEach((n,r)=>{this[n]=t[r]})}asSortedArray(){return x0.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var Wm=class extends rp{constructor(t=new tp){super("FaceExpressionNet",t)}forwardInput(t){return M(()=>Rr(this.runNet(t)))}async forward(t){return this.forwardInput(await mt(t))}async predictExpressions(t){let n=await mt(t),r=await this.forwardInput(n),s=await Promise.all(dt(r).map(async o=>{let i=o.dataSync();return o.dispose(),i}));r.dispose();let a=s.map(o=>new Na(o));return n.isBatchInput?a:a[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function w0(e){return e.expressions instanceof Na}function Vm(e,t){return{...e,...{expressions:t}}}function Xie(e,t,n=.1,r){(Array.isArray(t)?t:[t]).forEach(a=>{let o=a instanceof Na?a:w0(a)?a.expressions:void 0;if(!o)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let c=o.asSortedArray().filter(d=>d.probability>n),u=hs(a)?a.detection.box.bottomLeft:r||new Oe(0,0);new Ta(c.map(d=>`${d.expression} (${vi(d.probability)})`),u).draw(e)})}function Ti(e){return hs(e)&&e.landmarks instanceof yr&&e.unshiftedLandmarks instanceof yr&&e.alignedRect instanceof vt}function Yie(e){let t=(i,c,u,l)=>Math.atan2(l-c,u-i)%Math.PI,n=i=>i*180/Math.PI,r={roll:void 0,pitch:void 0,yaw:void 0};if(!e||!e._positions||e._positions.length!==68)return r;let s=e._positions;r.roll=-t(s[36]._x,s[36]._y,s[45]._x,s[45]._y),r.pitch=t(0,Math.abs(s[0]._x-s[30]._x)/s[30]._x,Math.PI,Math.abs(s[16]._x-s[30]._x)/s[30]._x);let a=s.reduce((i,c)=>ii>c._y?i:c._y,-1/0);return r.yaw=Math.PI*(e._imgDims._height/(o-a)/1.4-1),r}function qu(e,t){let{box:n}=e.detection,r=t.shiftBy(n.x,n.y),s=r.align(),{imageDims:a}=e.detection,o=new vt(e.detection.score,s.rescale(a.reverse()),a),i=Yie(t);return{...e,...{landmarks:r,unshiftedLandmarks:t,alignedRect:o,angle:i}}}var k0=class{constructor(t={}){let{drawLines:n=!0,drawPoints:r=!0,lineWidth:s,lineColor:a,pointSize:o,pointColor:i}=t;this.drawLines=n,this.drawPoints=r,this.lineWidth=s||1,this.pointSize=o||2,this.lineColor=a||"rgba(0, 255, 255, 1)",this.pointColor=i||"rgba(255, 0, 255, 1)"}},I0=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new k0(n)}draw(t){let n=Wn(t),{drawLines:r,drawPoints:s,lineWidth:a,lineColor:o,pointSize:i,pointColor:c}=this.options;if(r&&this.faceLandmarks instanceof Wu&&(n.strokeStyle=o,n.lineWidth=a,Ps(n,this.faceLandmarks.getJawOutline()),Ps(n,this.faceLandmarks.getLeftEyeBrow()),Ps(n,this.faceLandmarks.getRightEyeBrow()),Ps(n,this.faceLandmarks.getNose()),Ps(n,this.faceLandmarks.getLeftEye(),!0),Ps(n,this.faceLandmarks.getRightEye(),!0),Ps(n,this.faceLandmarks.getMouth(),!0)),s){n.strokeStyle=c,n.fillStyle=c;let u=l=>{n.beginPath(),n.arc(l.x,l.y,i,0,2*Math.PI),n.fill()};this.faceLandmarks.positions.forEach(u)}}};function Zie(e,t){(Array.isArray(t)?t:[t]).forEach(r=>{let s=r instanceof yr?r:Ti(r)?r.landmarks:void 0;if(!s)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new I0(s).draw(e)})}var mE="1.5.2";function Qie(e,t){let n=Gu(e,t),r=Hu(e,t);function s(o,i,c){let u=r(o,i,`${c}/separable_conv0`),l=r(i,i,`${c}/separable_conv1`),d=n(o,i,1,`${c}/expansion_conv`);return{separable_conv0:u,separable_conv1:l,expansion_conv:d}}function a(o,i){let c=r(o,o,`${i}/separable_conv0`),u=r(o,o,`${i}/separable_conv1`),l=r(o,o,`${i}/separable_conv2`);return{separable_conv0:c,separable_conv1:u,separable_conv2:l}}return{extractConvParams:n,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:a}}function gE(e,t){let n=[],{extractWeights:r,getRemainingWeights:s}=En(e),{extractConvParams:a,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:c}=Qie(r,n),u=a(3,32,3,"entry_flow/conv_in"),l=i(32,64,"entry_flow/reduction_block_0"),d=i(64,128,"entry_flow/reduction_block_1"),p={conv_in:u,reduction_block_0:l,reduction_block_1:d},h={};ps(t,0,1).forEach(b=>{h[`main_block_${b}`]=c(128,`middle_flow/main_block_${b}`)});let f=i(128,256,"exit_flow/reduction_block"),m=o(256,512,"exit_flow/separable_conv"),g={reduction_block:f,separable_conv:m};if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:n,params:{entry_flow:p,middle_flow:h,exit_flow:g}}}function ece(e,t){let n=rr(e,t),r=Lm(n),s=ju(n);function a(i){let c=s(`${i}/separable_conv0`),u=s(`${i}/separable_conv1`),l=r(`${i}/expansion_conv`);return{separable_conv0:c,separable_conv1:u,expansion_conv:l}}function o(i){let c=s(`${i}/separable_conv0`),u=s(`${i}/separable_conv1`),l=s(`${i}/separable_conv2`);return{separable_conv0:c,separable_conv1:u,separable_conv2:l}}return{extractConvParams:r,extractSeparableConvParams:s,extractReductionBlockParams:a,extractMainBlockParams:o}}function bE(e,t){let n=[],{extractConvParams:r,extractSeparableConvParams:s,extractReductionBlockParams:a,extractMainBlockParams:o}=ece(e,n),i=r("entry_flow/conv_in"),c=a("entry_flow/reduction_block_0"),u=a("entry_flow/reduction_block_1"),l={conv_in:i,reduction_block_0:c,reduction_block_1:u},d={};ps(t,0,1).forEach(m=>{d[`main_block_${m}`]=o(`middle_flow/main_block_${m}`)});let p=a("exit_flow/reduction_block"),h=s("exit_flow/separable_conv"),f={reduction_block:p,separable_conv:h};return _n(e,n),{params:{entry_flow:l,middle_flow:d,exit_flow:f},paramMappings:n}}function yE(e,t,n){return Y(Ft(e,t.filters,n,"same"),t.bias)}function C0(e,t,n=!0){let r=n?qe(e):e;return r=Vn(r,t.separable_conv0,[1,1]),r=Vn(qe(r),t.separable_conv1,[1,1]),r=Rt(r,[3,3],[2,2],"same"),r=Y(r,yE(e,t.expansion_conv,[2,2])),r}function tce(e,t){let n=Vn(qe(e),t.separable_conv0,[1,1]);return n=Vn(qe(n),t.separable_conv1,[1,1]),n=Vn(qe(n),t.separable_conv2,[1,1]),n=Y(n,e),n}var T0=class extends ln{constructor(t){super("TinyXception");this._numMainBlocks=t}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyXception - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(112,!0),"float32"),a=qr(r,[122.782,117.001,104.298]).div(255),o=qe(yE(a,n.entry_flow.conv_in,[2,2]));return o=C0(o,n.entry_flow.reduction_block_0,!1),o=C0(o,n.entry_flow.reduction_block_1),ps(this._numMainBlocks,0,1).forEach(i=>{o=tce(o,n.middle_flow[`main_block_${i}`])}),o=C0(o,n.exit_flow.reduction_block),o=qe(Vn(o,n.exit_flow.separable_conv,[1,1])),o})}async forward(t){return this.forwardInput(await mt(t))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(t){return bE(t,this._numMainBlocks)}extractParams(t){return gE(t,this._numMainBlocks)}};function vE(e){let t=[],{extractWeights:n,getRemainingWeights:r}=En(e),s=Pm(n,t),a=s(512,1,"fc/age"),o=s(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:a,gender:o}}}}function xE(e){let t=[],n=rr(e,t);function r(a){let o=n(`${a}/weights`,2),i=n(`${a}/bias`,1);return{weights:o,bias:i}}let s={fc:{age:r("fc/age"),gender:r("fc/gender")}};return _n(e,t),{params:s,paramMappings:t}}var zs;(function(n){n.FEMALE="female",n.MALE="male"})(zs||(zs={}));var Um=class extends ln{constructor(t=new T0(2)){super("AgeGenderNet");this._faceFeatureExtractor=t}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:n}=this;if(!n)throw new Error(`${this._name} - load model before inference`);return M(()=>{let r=t instanceof Ls?this.faceFeatureExtractor.forwardInput(t):t,s=ur(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),a=np(s,n.fc.age).as1D(),o=np(s,n.fc.gender);return{age:a,gender:o}})}forwardInput(t){return M(()=>{let{age:n,gender:r}=this.runNet(t);return{age:n,gender:Rr(r)}})}async forward(t){return this.forwardInput(await mt(t))}async predictAgeAndGender(t){let n=await mt(t),r=await this.forwardInput(n),s=dt(r.age),a=dt(r.gender),o=s.map((c,u)=>({ageTensor:c,genderTensor:a[u]})),i=await Promise.all(o.map(async({ageTensor:c,genderTensor:u})=>{let l=c.dataSync()[0],d=u.dataSync()[0],p=d>.5,h=p?zs.MALE:zs.FEMALE,f=p?d:1-d;return c.dispose(),u.dispose(),{age:l,gender:h,genderProbability:f}}));return r.age.dispose(),r.gender.dispose(),n.isBatchInput?i:i[0]}getDefaultModelName(){return"age_gender_model"}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:n,paramMappings:r}=this.extractClassifierParams(t);this._params=n,this._paramMappings=r}extractClassifierParams(t){return vE(t)}extractParamsFromWeightMap(t){let{featureExtractorMap:n,classifierMap:r}=zm(t);return this.faceFeatureExtractor.loadFromWeightMap(n),xE(r)}extractParams(t){let n=512*1+1+(512*2+2),r=t.slice(0,t.length-n),s=t.slice(t.length-n);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(s)}};var sp=class extends rp{postProcess(t,n,r){let s=r.map(({width:o,height:i})=>{let c=n/Math.max(i,o);return{width:o*c,height:i*c}}),a=s.length;return M(()=>{let o=(d,p)=>Pt([xn([68],d,"float32"),xn([68],p,"float32")],1).as2D(1,136).as1D(),i=(d,p)=>{let{width:h,height:f}=s[d];return p(h,f)?Math.abs(h-f)/2:0},c=d=>i(d,(p,h)=>pi(d,(p,h)=>ho(c(p),u(p))))).div(Pt(Array.from(Array(a),(d,p)=>o(s[p].width,s[p].height))))})}forwardInput(t){return M(()=>{let n=this.runNet(t);return this.postProcess(n,t.inputSize,t.inputDimensions.map(([r,s])=>({height:r,width:s})))})}async forward(t){return this.forwardInput(await mt(t))}async detectLandmarks(t){let n=await mt(t),r=M(()=>dt(this.forwardInput(n))),s=await Promise.all(r.map(async(a,o)=>{let i=Array.from(a.dataSync()),c=i.filter((l,d)=>_m(d)),u=i.filter((l,d)=>!_m(d));return new Wu(Array(68).fill(0).map((l,d)=>new Oe(c[d],u[d])),{height:n.getInputHeight(o),width:n.getInputWidth(o)})}));return r.forEach(a=>a.dispose()),n.isBatchInput?s:s[0]}getClassifierChannelsOut(){return 136}};var Ku=class extends sp{constructor(t=new tp){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function wE(e){let t=[],{extractDenseBlock3Params:n}=Bm(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return _n(e,t),{params:r,paramMappings:t}}function kE(e){let t=[],{extractWeights:n,getRemainingWeights:r}=En(e),{extractDenseBlock3Params:s}=Mm(n,t),a=s(3,32,"dense0",!0),o=s(32,64,"dense1"),i=s(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:a,dense1:o,dense2:i}}}var N0=class extends ln{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(112,!0),"float32"),a=qr(r,[122.782,117.001,104.298]).div(255),o=Rm(a,n.dense0,!0);return o=Rm(o,n.dense1),o=Rm(o,n.dense2),o=ur(o,[14,14],[2,2],"valid"),o})}async forward(t){return this.forwardInput(await mt(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return wE(t)}extractParams(t){return kE(t)}};var Gm=class extends sp{constructor(t=new N0){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var IE=class extends Ku{};function SE(e,t){return Y(V(e,t.weights),t.biases)}function _0(e,t,n,r,s="same"){let{filters:a,bias:o}=t.conv,i=Ft(e,a,n,s);return i=Y(i,o),i=SE(i,t.scale),r?qe(i):i}function CE(e,t){return _0(e,t,[1,1],!0)}function E0(e,t){return _0(e,t,[1,1],!1)}function Hm(e,t){return _0(e,t,[2,2],!0,"valid")}function nce(e,t){function n(i,c,u){let l=e(i),d=l.length/(c*u*u);if(e0(d))throw new Error(`depth has to be an integer: ${d}, weights.length: ${l.length}, numFilters: ${c}, filterSize: ${u}`);return M(()=>Pe(Or(l,[c,d,u,u]),[2,3,1,0]))}function r(i,c,u,l){let d=n(i,c,u),p=He(e(c));return t.push({paramPath:`${l}/filters`},{paramPath:`${l}/bias`}),{filters:d,bias:p}}function s(i,c){let u=He(e(i)),l=He(e(i));return t.push({paramPath:`${c}/weights`},{paramPath:`${c}/biases`}),{weights:u,biases:l}}function a(i,c,u,l){let d=r(i,c,u,`${l}/conv`),p=s(c,`${l}/scale`);return{conv:d,scale:p}}function o(i,c,u,l,d=!1){let p=a((d?.5:1)*i,c,u,`${l}/conv1`),h=a(i,c,u,`${l}/conv2`);return{conv1:p,conv2:h}}return{extractConvLayerParams:a,extractResidualLayerParams:o}}function TE(e){let{extractWeights:t,getRemainingWeights:n}=En(e),r=[],{extractConvLayerParams:s,extractResidualLayerParams:a}=nce(t,r),o=s(4704,32,7,"conv32_down"),i=a(9216,32,3,"conv32_1"),c=a(9216,32,3,"conv32_2"),u=a(9216,32,3,"conv32_3"),l=a(36864,64,3,"conv64_down",!0),d=a(36864,64,3,"conv64_1"),p=a(36864,64,3,"conv64_2"),h=a(36864,64,3,"conv64_3"),f=a(147456,128,3,"conv128_down",!0),m=a(147456,128,3,"conv128_1"),g=a(147456,128,3,"conv128_2"),b=a(589824,256,3,"conv256_down",!0),y=a(589824,256,3,"conv256_1"),v=a(589824,256,3,"conv256_2"),x=a(589824,256,3,"conv256_down_out"),k=M(()=>Pe(Pr(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);return{params:{conv32_down:o,conv32_1:i,conv32_2:c,conv32_3:u,conv64_down:l,conv64_1:d,conv64_2:p,conv64_3:h,conv128_down:f,conv128_1:m,conv128_2:g,conv256_down:b,conv256_1:y,conv256_2:v,conv256_down_out:x,fc:k},paramMappings:r}}function rce(e,t){let n=rr(e,t);function r(o){let i=n(`${o}/scale/weights`,1),c=n(`${o}/scale/biases`,1);return{weights:i,biases:c}}function s(o){let i=n(`${o}/conv/filters`,4),c=n(`${o}/conv/bias`,1),u=r(o);return{conv:{filters:i,bias:c},scale:u}}function a(o){return{conv1:s(`${o}/conv1`),conv2:s(`${o}/conv2`)}}return{extractConvLayerParams:s,extractResidualLayerParams:a}}function NE(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:r}=rce(e,t),s=n("conv32_down"),a=r("conv32_1"),o=r("conv32_2"),i=r("conv32_3"),c=r("conv64_down"),u=r("conv64_1"),l=r("conv64_2"),d=r("conv64_3"),p=r("conv128_down"),h=r("conv128_1"),f=r("conv128_2"),m=r("conv256_down"),g=r("conv256_1"),b=r("conv256_2"),y=r("conv256_down_out"),{fc:v}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!Qw(v))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${v}`);let x={conv32_down:s,conv32_1:a,conv32_2:o,conv32_3:i,conv64_down:c,conv64_1:u,conv64_2:l,conv64_3:d,conv128_down:p,conv128_1:h,conv128_2:f,conv256_down:m,conv256_1:g,conv256_2:b,conv256_down_out:y,fc:v};return _n(e,t),{params:x,paramMappings:t}}function Kr(e,t){let n=CE(e,t.conv1);return n=E0(n,t.conv2),n=Y(n,e),n=qe(n),n}function ap(e,t){let n=Hm(e,t.conv1);n=E0(n,t.conv2);let r=ur(e,2,2,"valid"),s=It(r.shape),a=r.shape[3]!==n.shape[3];if(r.shape[1]!==n.shape[1]||r.shape[2]!==n.shape[2]){let i=[...n.shape];i[1]=1;let c=It(i);n=Ze([n,c],1);let u=[...n.shape];u[2]=1;let l=It(u);n=Ze([n,l],2)}return r=a?Ze([r,s],3):r,n=Y(r,n),n=qe(n),n}var Xu=class extends ln{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(150,!0),"float32"),a=qr(r,[122.782,117.001,104.298]).div(255),o=Hm(a,n.conv32_down);o=Rt(o,3,2,"valid"),o=Kr(o,n.conv32_1),o=Kr(o,n.conv32_2),o=Kr(o,n.conv32_3),o=ap(o,n.conv64_down),o=Kr(o,n.conv64_1),o=Kr(o,n.conv64_2),o=Kr(o,n.conv64_3),o=ap(o,n.conv128_down),o=Kr(o,n.conv128_1),o=Kr(o,n.conv128_2),o=ap(o,n.conv256_down),o=Kr(o,n.conv256_1),o=Kr(o,n.conv256_2),o=ap(o,n.conv256_down_out);let i=o.mean([1,2]);return De(i,n.fc)})}async forward(t){return this.forwardInput(await mt(t))}async computeFaceDescriptor(t){var a;if((a=t==null?void 0:t.shape)==null?void 0:a.some(o=>o<=0))return new Float32Array(128);let n=await mt(t),r=M(()=>dt(this.forwardInput(n))),s=await Promise.all(r.map(o=>o.data()));return r.forEach(o=>o.dispose()),n.isBatchInput?s:s[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return NE(t)}extractParams(t){return TE(t)}};function sce(e){let t=new Xu;return t.extractWeights(e),t}function jm(e,t){return{...e,...{descriptor:t}}}function ace(e){return typeof e.age=="number"}function qm(e,t){return{...e,...{age:t}}}function oce(e){return(e.gender===zs.MALE||e.gender===zs.FEMALE)&&Lu(e.genderProbability)}function Km(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function ice(e,t){function n(c,u){let l=Or(e(3*3*c),[3,3,c,1]),d=He(e(c)),p=He(e(c)),h=He(e(c)),f=He(e(c));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/batch_norm_scale`},{paramPath:`${u}/batch_norm_offset`},{paramPath:`${u}/batch_norm_mean`},{paramPath:`${u}/batch_norm_variance`}),{filters:l,batch_norm_scale:d,batch_norm_offset:p,batch_norm_mean:h,batch_norm_variance:f}}function r(c,u,l,d,p){let h=Or(e(c*u*l*l),[l,l,c,u]),f=He(e(u));return t.push({paramPath:`${d}/filters`},{paramPath:`${d}/${p?"batch_norm_offset":"bias"}`}),{filters:h,bias:f}}function s(c,u,l,d){let{filters:p,bias:h}=r(c,u,l,d,!0);return{filters:p,batch_norm_offset:h}}function a(c,u,l){let d=n(c,`${l}/depthwise_conv`),p=s(c,u,1,`${l}/pointwise_conv`);return{depthwise_conv:d,pointwise_conv:p}}function o(){let c=s(3,32,3,"mobilenetv1/conv_0"),u=a(32,64,"mobilenetv1/conv_1"),l=a(64,128,"mobilenetv1/conv_2"),d=a(128,128,"mobilenetv1/conv_3"),p=a(128,256,"mobilenetv1/conv_4"),h=a(256,256,"mobilenetv1/conv_5"),f=a(256,512,"mobilenetv1/conv_6"),m=a(512,512,"mobilenetv1/conv_7"),g=a(512,512,"mobilenetv1/conv_8"),b=a(512,512,"mobilenetv1/conv_9"),y=a(512,512,"mobilenetv1/conv_10"),v=a(512,512,"mobilenetv1/conv_11"),x=a(512,1024,"mobilenetv1/conv_12"),k=a(1024,1024,"mobilenetv1/conv_13");return{conv_0:c,conv_1:u,conv_2:l,conv_3:d,conv_4:p,conv_5:h,conv_6:f,conv_7:m,conv_8:g,conv_9:b,conv_10:y,conv_11:v,conv_12:x,conv_13:k}}function i(){let c=s(1024,256,1,"prediction_layer/conv_0"),u=s(256,512,3,"prediction_layer/conv_1"),l=s(512,128,1,"prediction_layer/conv_2"),d=s(128,256,3,"prediction_layer/conv_3"),p=s(256,128,1,"prediction_layer/conv_4"),h=s(128,256,3,"prediction_layer/conv_5"),f=s(256,64,1,"prediction_layer/conv_6"),m=s(64,128,3,"prediction_layer/conv_7"),g=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),b=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),y=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),v=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),x=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),k=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),C=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),N=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),R=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),O=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),D=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:c,conv_1:u,conv_2:l,conv_3:d,conv_4:p,conv_5:h,conv_6:f,conv_7:m,box_predictor_0:{box_encoding_predictor:g,class_predictor:b},box_predictor_1:{box_encoding_predictor:y,class_predictor:v},box_predictor_2:{box_encoding_predictor:x,class_predictor:k},box_predictor_3:{box_encoding_predictor:C,class_predictor:N},box_predictor_4:{box_encoding_predictor:$,class_predictor:R},box_predictor_5:{box_encoding_predictor:O,class_predictor:D}}}return{extractMobilenetV1Params:o,extractPredictionLayerParams:i}}function _E(e){let t=[],{extractWeights:n,getRemainingWeights:r}=En(e),{extractMobilenetV1Params:s,extractPredictionLayerParams:a}=ice(n,t),o=s(),i=a(),u={extra_dim:_h(n(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:o,prediction_layer:i,output_layer:u},paramMappings:t}}function cce(e,t){let n=rr(e,t);function r(u,l,d){let p=n(`${u}/Conv2d_${l}_pointwise/weights`,4,`${d}/filters`),h=n(`${u}/Conv2d_${l}_pointwise/convolution_bn_offset`,1,`${d}/batch_norm_offset`);return{filters:p,batch_norm_offset:h}}function s(u){let l=`mobilenetv1/conv_${u}`,d=`MobilenetV1/Conv2d_${u}_depthwise`,p=`${l}/depthwise_conv`,h=`${l}/pointwise_conv`,f=n(`${d}/depthwise_weights`,4,`${p}/filters`),m=n(`${d}/BatchNorm/gamma`,1,`${p}/batch_norm_scale`),g=n(`${d}/BatchNorm/beta`,1,`${p}/batch_norm_offset`),b=n(`${d}/BatchNorm/moving_mean`,1,`${p}/batch_norm_mean`),y=n(`${d}/BatchNorm/moving_variance`,1,`${p}/batch_norm_variance`);return{depthwise_conv:{filters:f,batch_norm_scale:m,batch_norm_offset:g,batch_norm_mean:b,batch_norm_variance:y},pointwise_conv:r("MobilenetV1",u,h)}}function a(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:s(1),conv_2:s(2),conv_3:s(3),conv_4:s(4),conv_5:s(5),conv_6:s(6),conv_7:s(7),conv_8:s(8),conv_9:s(9),conv_10:s(10),conv_11:s(11),conv_12:s(12),conv_13:s(13)}}function o(u,l){let d=n(`${u}/weights`,4,`${l}/filters`),p=n(`${u}/biases`,1,`${l}/bias`);return{filters:d,bias:p}}function i(u){let l=o(`Prediction/BoxPredictor_${u}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${u}/box_encoding_predictor`),d=o(`Prediction/BoxPredictor_${u}/ClassPredictor`,`prediction_layer/box_predictor_${u}/class_predictor`);return{box_encoding_predictor:l,class_predictor:d}}function c(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:i(0),box_predictor_1:i(1),box_predictor_2:i(2),box_predictor_3:i(3),box_predictor_4:i(4),box_predictor_5:i(5)}}return{extractMobilenetV1Params:a,extractPredictionLayerParams:c}}function EE(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:r}=cce(e,t),s=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Os(s))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${s}`);let a={mobilenetv1:n(),prediction_layer:r(),output_layer:{extra_dim:s}};return _n(e,t),{params:a,paramMappings:t}}function Er(e,t,n){return M(()=>{let r=Ft(e,t.filters,n,"same");return r=Y(r,t.batch_norm_offset),Zt(r,0,6)})}var uce=.0010000000474974513;function lce(e,t,n){return M(()=>{let r=ca(e,t.filters,n,"same");return r=Cs(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,uce),Zt(r,0,6)})}function dce(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function AE(e,t){return M(()=>{let n,r=Er(e,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((a,o)=>{let i=o+1,c=dce(i);r=lce(r,a.depthwise_conv,c),r=Er(r,a.pointwise_conv,[1,1]),i===11&&(n=r)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:n}})}function pce(e,t,n){let r=e.arraySync(),s=Math.min(r[t][0],r[t][2]),a=Math.min(r[t][1],r[t][3]),o=Math.max(r[t][0],r[t][2]),i=Math.max(r[t][1],r[t][3]),c=Math.min(r[n][0],r[n][2]),u=Math.min(r[n][1],r[n][3]),l=Math.max(r[n][0],r[n][2]),d=Math.max(r[n][1],r[n][3]),p=(o-s)*(i-a),h=(l-c)*(d-u);if(p<=0||h<=0)return 0;let f=Math.max(s,c),m=Math.max(a,u),g=Math.min(o,l),b=Math.min(i,d),y=Math.max(g-f,0)*Math.max(b-m,0);return y/(p+h-y)}function DE(e,t,n,r,s){let a=e.shape[0],o=Math.min(n,a),i=t.map((l,d)=>({score:l,boxIndex:d})).filter(l=>l.score>s).sort((l,d)=>d.score-l.score),c=l=>l<=r?1:0,u=[];return i.forEach(l=>{if(u.length>=o)return;let d=l.score;for(let p=u.length-1;p>=0;--p){let h=pce(e,l.boxIndex,u[p]);if(h!==0&&(l.score*=c(h),l.score<=s))break}d===l.score&&u.push(l.boxIndex)}),u}function hce(e){let t=dt(Pe(e,[1,0])),n=[fe(t[2],t[0]),fe(t[3],t[1])],r=[Y(t[0],ge(n[0],2)),Y(t[1],ge(n[1],2))];return{sizes:n,centers:r}}function fce(e,t){let{sizes:n,centers:r}=hce(e),s=dt(Pe(t,[1,0])),a=ge(V(hn(ge(s[2],5)),n[0]),2),o=Y(V(ge(s[0],10),n[0]),r[0]),i=ge(V(hn(ge(s[3],5)),n[1]),2),c=Y(V(ge(s[1],10),n[1]),r[1]);return Pe(Pt([fe(o,a),fe(c,i),Y(o,a),Y(c,i)]),[1,0])}function $E(e,t,n){return M(()=>{let r=e.shape[0],s=fce(U(Fn(n.extra_dim,[r,1,1]),[-1,4]),U(e,[-1,4]));s=U(s,[r,s.shape[0]/r,4]);let a=lr(We(t,[0,0,1],[-1,-1,-1])),o=We(a,[0,0,0],[-1,-1,1]);o=U(o,[r,o.shape[1]]);let i=dt(s),c=dt(o);return{boxes:i,scores:c}})}function Ni(e,t){return M(()=>{let n=e.shape[0],r=U(Ci(e,t.box_encoding_predictor),[n,-1,1,4]),s=U(Ci(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:r,classPrediction:s}})}function FE(e,t,n){return M(()=>{let r=Er(e,n.conv_0,[1,1]),s=Er(r,n.conv_1,[2,2]),a=Er(s,n.conv_2,[1,1]),o=Er(a,n.conv_3,[2,2]),i=Er(o,n.conv_4,[1,1]),c=Er(i,n.conv_5,[2,2]),u=Er(c,n.conv_6,[1,1]),l=Er(u,n.conv_7,[2,2]),d=Ni(t,n.box_predictor_0),p=Ni(e,n.box_predictor_1),h=Ni(s,n.box_predictor_2),f=Ni(o,n.box_predictor_3),m=Ni(c,n.box_predictor_4),g=Ni(l,n.box_predictor_5),b=Ze([d.boxPredictionEncoding,p.boxPredictionEncoding,h.boxPredictionEncoding,f.boxPredictionEncoding,m.boxPredictionEncoding,g.boxPredictionEncoding],1),y=Ze([d.classPrediction,p.classPrediction,h.classPrediction,f.classPrediction,m.classPrediction,g.classPrediction],1);return{boxPredictions:b,classPredictions:y}})}var Ar=class{constructor({minConfidence:t,maxResults:n}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=n||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var _i=class extends ln{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(512,!1),"float32"),s=fe(ge(r,127.5),1),a=AE(s,n.mobilenetv1),{boxPredictions:o,classPredictions:i}=FE(a.out,a.conv11,n.prediction_layer);return $E(o,i,n.output_layer)})}async forward(t){return this.forwardInput(await mt(t))}async locateFaces(t,n={}){let{maxResults:r,minConfidence:s}=new Ar(n),a=await mt(t),{boxes:o,scores:i}=this.forwardInput(a),c=o[0],u=i[0];for(let v=1;v{let[x,k]=[Math.max(0,b[v][0]),Math.min(1,b[v][2])].map($=>$*g),[C,N]=[Math.max(0,b[v][1]),Math.min(1,b[v][3])].map($=>$*m);return new vt(l[v],new zu(C,x,N-C,k-x),{height:a.getInputHeight(0),width:a.getInputWidth(0)})});return c.dispose(),u.dispose(),y}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return EE(t)}extractParams(t){return _E(t)}};function RE(e){let t=new _i;return t.extractWeights(e),t}function mce(e){return RE(e)}var PE=class extends _i{};var OE=.4,ME=[new Oe(.738768,.874946),new Oe(2.42204,2.65704),new Oe(4.30971,7.04493),new Oe(10.246,4.59428),new Oe(12.6868,11.8741)],LE=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],BE=[117.001,114.697,97.404],zE="tiny_yolov2_model",WE="tiny_yolov2_separable_conv_model";var Xm=e=>typeof e=="number";function A0(e){if(!e)throw new Error(`invalid config: ${e}`);if(typeof e.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${e.withSeparableConvs}`);if(!Xm(e.iouThreshold)||e.iouThreshold<0||e.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${e.iouThreshold}`);if(!Array.isArray(e.classes)||!e.classes.length||!e.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(e.classes)}`);if(!Array.isArray(e.anchors)||!e.anchors.length||!e.anchors.map(t=>t||{}).every(t=>Xm(t.x)&&Xm(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(e.anchors)}`);if(e.meanRgb&&(!Array.isArray(e.meanRgb)||e.meanRgb.length!==3||!e.meanRgb.every(Xm)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function Yu(e){return M(()=>{let t=V(e,Ie(.10000000149011612));return Y(qe(fe(e,t)),t)})}function Ws(e,t){return M(()=>{let n=dr(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Ft(n,t.conv.filters,[1,1],"valid"),n=fe(n,t.bn.sub),n=V(n,t.bn.truediv),n=Y(n,t.conv.bias),Yu(n)})}function Vs(e,t){return M(()=>{let n=dr(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Zo(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=Y(n,t.bias),Yu(n)})}function gce(e,t){let n=Gu(e,t);function r(o,i){let c=He(e(o)),u=He(e(o));return t.push({paramPath:`${i}/sub`},{paramPath:`${i}/truediv`}),{sub:c,truediv:u}}function s(o,i,c){let u=n(o,i,3,`${c}/conv`),l=r(i,`${c}/bn`);return{conv:u,bn:l}}let a=Hu(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:s,extractSeparableConvParams:a}}function VE(e,t,n,r){let{extractWeights:s,getRemainingWeights:a}=En(e),o=[],{extractConvParams:i,extractConvWithBatchNormParams:c,extractSeparableConvParams:u}=gce(s,o),l;if(t.withSeparableConvs){let[d,p,h,f,m,g,b,y,v]=r,x=t.isFirstLayerConv2d?i(d,p,3,"conv0"):u(d,p,"conv0"),k=u(p,h,"conv1"),C=u(h,f,"conv2"),N=u(f,m,"conv3"),$=u(m,g,"conv4"),R=u(g,b,"conv5"),O=y?u(b,y,"conv6"):void 0,D=v?u(y,v,"conv7"):void 0,P=i(v||y||b,5*n,1,"conv8");l={conv0:x,conv1:k,conv2:C,conv3:N,conv4:$,conv5:R,conv6:O,conv7:D,conv8:P}}else{let[d,p,h,f,m,g,b,y,v]=r,x=c(d,p,"conv0"),k=c(p,h,"conv1"),C=c(h,f,"conv2"),N=c(f,m,"conv3"),$=c(m,g,"conv4"),R=c(g,b,"conv5"),O=c(b,y,"conv6"),D=c(y,v,"conv7"),P=i(v,5*n,1,"conv8");l={conv0:x,conv1:k,conv2:C,conv3:N,conv4:$,conv5:R,conv6:O,conv7:D,conv8:P}}if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{params:l,paramMappings:o}}function bce(e,t){let n=rr(e,t);function r(i){let c=n(`${i}/sub`,1),u=n(`${i}/truediv`,1);return{sub:c,truediv:u}}function s(i){let c=n(`${i}/filters`,4),u=n(`${i}/bias`,1);return{filters:c,bias:u}}function a(i){let c=s(`${i}/conv`),u=r(`${i}/bn`);return{conv:c,bn:u}}let o=ju(n);return{extractConvParams:s,extractConvWithBatchNormParams:a,extractSeparableConvParams:o}}function UE(e,t){let n=[],{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:a}=bce(e,n),o;if(t.withSeparableConvs){let i=t.filterSizes&&t.filterSizes.length||9;o={conv0:t.isFirstLayerConv2d?r("conv0"):a("conv0"),conv1:a("conv1"),conv2:a("conv2"),conv3:a("conv3"),conv4:a("conv4"),conv5:a("conv5"),conv6:i>7?a("conv6"):void 0,conv7:i>8?a("conv7"):void 0,conv8:r("conv8")}}else o={conv0:s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:s("conv6"),conv7:s("conv7"),conv8:r("conv8")};return _n(e,n),{params:o,paramMappings:n}}var ms=class{constructor({inputSize:t,scoreThreshold:n}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=n||.5,typeof this._inputSize!="number"||this._inputSize%32!=0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var D0=class extends ln{constructor(t){super("TinyYolov2");A0(t),this._config=t}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(t,n){let r=Ws(t,n.conv0);return r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv1),r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv2),r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv3),r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv4),r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv5),r=Rt(r,[2,2],[1,1],"same"),r=Ws(r,n.conv6),r=Ws(r,n.conv7),Ci(r,n.conv8,"valid",!1)}runMobilenet(t,n){let r=this.config.isFirstLayerConv2d?Yu(Ci(t,n.conv0,"valid",!1)):Vs(t,n.conv0);return r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv1),r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv2),r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv3),r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv4),r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv5),r=Rt(r,[2,2],[1,1],"same"),r=n.conv6?Vs(r,n.conv6):r,r=n.conv7?Vs(r,n.conv7):r,Ci(r,n.conv8,"valid",!1)}forwardInput(t,n){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return M(()=>{let s=ce(t.toBatchTensor(n,!1),"float32");return s=this.config.meanRgb?qr(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,r):this.runTinyYolov2(s,r)})}async forward(t,n){return this.forwardInput(await mt(t),n)}async detect(t,n={}){let{inputSize:r,scoreThreshold:s}=new ms(n),a=await mt(t),o=await this.forwardInput(a,r),i=M(()=>dt(o)[0].expandDims()),c={width:a.getInputWidth(0),height:a.getInputHeight(0)},u=await this.extractBoxes(i,a.getReshapedInputDimensions(0),s);o.dispose(),i.dispose();let l=u.map(g=>g.box),d=u.map(g=>g.score),p=u.map(g=>g.classScore),h=u.map(g=>this.config.classes[g.label]);return a0(l.map(g=>g.rescale(r)),d,this.config.iouThreshold,!0).map(g=>new Ca(d[g],p[g],h[g],l[g],c))}getDefaultModelName(){return""}extractParamsFromWeightMap(t){return UE(t,this.config)}extractParams(t){let n=this.config.filterSizes||D0.DEFAULT_FILTER_SIZES,r=n?n.length:void 0;if(r!==7&&r!==8&&r!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return VE(t,this.config,this.boxEncodingSize,n)}async extractBoxes(t,n,r){let{width:s,height:a}=n,o=Math.max(s,a),i=o/s,c=o/a,u=t.shape[1],l=this.config.anchors.length,[d,p,h]=M(()=>{let b=t.reshape([u,u,l,this.boxEncodingSize]),y=b.slice([0,0,0,0],[u,u,l,4]),v=b.slice([0,0,0,4],[u,u,l,1]),x=this.withClassScores?Rr(b.slice([0,0,0,5],[u,u,l,this.config.classes.length]),3):Ie(0);return[y,v,x]}),f=[],m=await p.array(),g=await d.array();for(let b=0;br){let k=(y+Kd(g[b][y][v][0]))/u*i,C=(b+Kd(g[b][y][v][1]))/u*c,N=Math.exp(g[b][y][v][2])*this.config.anchors[v].x/u*i,$=Math.exp(g[b][y][v][3])*this.config.anchors[v].y/u*c,R=k-N/2,O=C-$/2,D={row:b,col:y,anchor:v},{classScore:P,label:T}=this.withClassScores?await this.extractPredictedClass(h,D):{classScore:1,label:0};f.push({box:new Bu(R,O,R+N,O+$),score:x,classScore:x*P,label:T,...D})}}return d.dispose(),p.dispose(),h.dispose(),f}async extractPredictedClass(t,n){let{row:r,col:s,anchor:a}=n,o=await t.array();return Array(this.config.classes.length).fill(0).map((i,c)=>o[r][s][a][c]).map((i,c)=>({classScore:i,label:c})).reduce((i,c)=>i.classScore>c.classScore?i:c)}},Zu=D0;Zu.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var Ju=class extends Zu{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:OE,classes:["face"],...t?{anchors:LE,meanRgb:BE}:{anchors:ME,withClassScores:!0}};super(n)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(s=>new vt(s.score,s.relativeBox,{width:s.imageWidth,height:s.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?WE:zE}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function yce(e,t=!0){let n=new Ju(t);return n.extractWeights(e),n}var Ym=class extends ms{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var Dr=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Ei(e,t,n,r,s=({alignedRect:a})=>a){let a=e.map(c=>Ti(c)?s(c):c.detection),o=r||(t instanceof Ee?await Uu(t,a):await Vu(t,a)),i=await n(o);return o.forEach(c=>c instanceof Ee&&c.dispose()),i}async function Qu(e,t,n,r,s){return Ei([e],t,async a=>n(a[0]),r,s)}var GE=.4,HE=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],jE=[117.001,114.697,97.404];var el=class extends Zu{constructor(){let t={withSeparableConvs:!0,iouThreshold:GE,classes:["face"],anchors:HE,meanRgb:jE,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(s=>new vt(s.score,s.relativeBox,{width:s.imageWidth,height:s.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var Qe={ssdMobilenetv1:new _i,tinyFaceDetector:new el,tinyYolov2:new Ju,faceLandmark68Net:new Ku,faceLandmark68TinyNet:new Gm,faceRecognitionNet:new Xu,faceExpressionNet:new Wm,ageGenderNet:new Um},qE=(e,t)=>Qe.ssdMobilenetv1.locateFaces(e,t),vce=(e,t)=>Qe.tinyFaceDetector.locateFaces(e,t),xce=(e,t)=>Qe.tinyYolov2.locateFaces(e,t),KE=e=>Qe.faceLandmark68Net.detectLandmarks(e),wce=e=>Qe.faceLandmark68TinyNet.detectLandmarks(e),kce=e=>Qe.faceRecognitionNet.computeFaceDescriptor(e),Ice=e=>Qe.faceExpressionNet.predictExpressions(e),Sce=e=>Qe.ageGenderNet.predictAgeAndGender(e),XE=e=>Qe.ssdMobilenetv1.load(e),Cce=e=>Qe.tinyFaceDetector.load(e),Tce=e=>Qe.tinyYolov2.load(e),Nce=e=>Qe.faceLandmark68Net.load(e),_ce=e=>Qe.faceLandmark68TinyNet.load(e),Ece=e=>Qe.faceRecognitionNet.load(e),Ace=e=>Qe.faceExpressionNet.load(e),Dce=e=>Qe.ageGenderNet.load(e),$ce=XE,Fce=qE,Rce=KE;var $0=class extends Dr{constructor(t,n,r){super();this.parentTask=t;this.input=n;this.extractedFaces=r}},tl=class extends $0{async run(){let t=await this.parentTask,n=await Ei(t,this.input,async r=>Promise.all(r.map(s=>Qe.faceExpressionNet.predictExpressions(s))),this.extractedFaces);return t.map((r,s)=>Vm(r,n[s]))}withAgeAndGender(){return new rl(this,this.input)}},nl=class extends $0{async run(){let t=await this.parentTask;if(!t)return;let n=await Qu(t,this.input,r=>Qe.faceExpressionNet.predictExpressions(r),this.extractedFaces);return Vm(t,n)}withAgeAndGender(){return new sl(this,this.input)}},Ai=class extends tl{withAgeAndGender(){return new $i(this,this.input)}withFaceDescriptors(){return new _a(this,this.input)}},Di=class extends nl{withAgeAndGender(){return new Fi(this,this.input)}withFaceDescriptor(){return new Ea(this,this.input)}};var F0=class extends Dr{constructor(t,n,r){super();this.parentTask=t;this.input=n;this.extractedFaces=r}},rl=class extends F0{async run(){let t=await this.parentTask,n=await Ei(t,this.input,async r=>Promise.all(r.map(s=>Qe.ageGenderNet.predictAgeAndGender(s))),this.extractedFaces);return t.map((r,s)=>{let{age:a,gender:o,genderProbability:i}=n[s];return qm(Km(r,o,i),a)})}withFaceExpressions(){return new tl(this,this.input)}},sl=class extends F0{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:r,genderProbability:s}=await Qu(t,this.input,a=>Qe.ageGenderNet.predictAgeAndGender(a),this.extractedFaces);return qm(Km(t,r,s),n)}withFaceExpressions(){return new nl(this,this.input)}},$i=class extends rl{withFaceExpressions(){return new Ai(this,this.input)}withFaceDescriptors(){return new _a(this,this.input)}},Fi=class extends sl{withFaceExpressions(){return new Di(this,this.input)}withFaceDescriptor(){return new Ea(this,this.input)}};var Zm=class extends Dr{constructor(t,n){super();this.parentTask=t;this.input=n}},_a=class extends Zm{async run(){let t=await this.parentTask;return(await Ei(t,this.input,r=>Promise.all(r.map(s=>Qe.faceRecognitionNet.computeFaceDescriptor(s))),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}))).map((r,s)=>jm(t[s],r))}withFaceExpressions(){return new Ai(this,this.input)}withAgeAndGender(){return new $i(this,this.input)}},Ea=class extends Zm{async run(){let t=await this.parentTask;if(!t)return;let n=await Qu(t,this.input,r=>Qe.faceRecognitionNet.computeFaceDescriptor(r),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}));return jm(t,n)}withFaceExpressions(){return new Di(this,this.input)}withAgeAndGender(){return new Fi(this,this.input)}};var Jm=class extends Dr{constructor(t,n,r){super();this.parentTask=t;this.input=n;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?Qe.faceLandmark68TinyNet:Qe.faceLandmark68Net}},Qm=class extends Jm{async run(){let t=await this.parentTask,n=t.map(a=>a.detection),r=this.input instanceof Ee?await Uu(this.input,n):await Vu(this.input,n),s=await Promise.all(r.map(a=>this.landmarkNet.detectLandmarks(a)));return r.forEach(a=>a instanceof Ee&&a.dispose()),t.map((a,o)=>qu(a,s[o]))}withFaceExpressions(){return new Ai(this,this.input)}withAgeAndGender(){return new $i(this,this.input)}withFaceDescriptors(){return new _a(this,this.input)}},eg=class extends Jm{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,r=this.input instanceof Ee?await Uu(this.input,[n]):await Vu(this.input,[n]),s=await this.landmarkNet.detectLandmarks(r[0]);return r.forEach(a=>a instanceof Ee&&a.dispose()),qu(t,s)}withFaceExpressions(){return new Di(this,this.input)}withAgeAndGender(){return new Fi(this,this.input)}withFaceDescriptor(){return new Ea(this,this.input)}};var tg=class extends Dr{constructor(t,n=new Ar){super();this.input=t;this.options=n}},op=class extends tg{async run(){let{input:t,options:n}=this,r;if(n instanceof Ym)r=Qe.tinyFaceDetector.locateFaces(t,n);else if(n instanceof Ar)r=Qe.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof ms)r=Qe.tinyYolov2.locateFaces(t,n);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return r}runAndExtendWithFaceDetections(){return new Promise((t,n)=>{this.run().then(r=>t(r.map(s=>wi({},s)))).catch(r=>n(r))})}withFaceLandmarks(t=!1){return new Qm(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new tl(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new rl(this.runAndExtendWithFaceDetections(),this.input)}},ng=class extends tg{async run(){let t=await new op(this.input,this.options),n=t[0];return t.forEach(r=>{r.score>n.score&&(n=r)}),n}runAndExtendWithFaceDetection(){return new Promise(async t=>{let n=await this.run();t(n?wi({},n):void 0)})}withFaceLandmarks(t=!1){return new eg(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new nl(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new sl(this.runAndExtendWithFaceDetection(),this.input)}};function Pce(e,t=new Ar){return new ng(e,t)}function rg(e,t=new Ar){return new op(e,t)}async function YE(e,t){return rg(e,new Ar(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Oce(e,t={}){return rg(e,new ms(t)).withFaceLandmarks().withFaceDescriptors()}var Mce=YE;function R0(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let n=Array.from(e),r=Array.from(t);return Math.sqrt(n.map((s,a)=>s-r[a]).reduce((s,a)=>s+a**2,0))}var sg=class{constructor(t,n=.6){this._distanceThreshold=n;let r=Array.isArray(t)?t:[t];if(!r.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let s=1,a=()=>`person ${s++}`;this._labeledDescriptors=r.map(o=>{if(o instanceof Ms)return o;if(o instanceof Float32Array)return new Ms(a(),[o]);if(o.descriptor&&o.descriptor instanceof Float32Array)return new Ms(a(),[o.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,n){return n.map(r=>R0(r,t)).reduce((r,s)=>r+s,0)/(n.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:n,label:r})=>new Xd(r,this.computeMeanDistance(t,n))).reduce((n,r)=>n.distancet.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(r=>Ms.fromJSON(r));return new sg(n,t.distanceThreshold)}};function Lce(e){let t=new el;return t.extractWeights(e),t}function ZE(e,t){let{width:n,height:r}=new Nn(t.width,t.height);if(n<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:r})}`);if(Array.isArray(e))return e.map(s=>ZE(s,{width:n,height:r}));if(Ti(e)){let s=e.detection.forSize(n,r),a=e.unshiftedLandmarks.forSize(s.box.width,s.box.height);return qu(wi(e,s),a)}return hs(e)?wi(e,e.detection.forSize(n,r)):e instanceof yr||e instanceof vt?e.forSize(n,r):e}var Bce=typeof process!="undefined",JE=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",zce={faceapi:mE,node:Bce,browser:JE};JE&&(Oa.set("CHECK_COMPUTATION_FOR_ERRORS",!1),Oa.set("WEBGL_CPU_FORWARD",!0),Oa.set("WEBGL_PACK_DEPTHWISECONV",!1),Oa.set("WEBGL_USE_SHAPES_UNIFORMS",!0));return Wce;})(); + `}};function pre(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,segmentIds:a}=t,{numSegments:o}=r,i=s.shape.length,c=[],u=0,l=_.getAxesPermutation([u],i),d=s;l!=null&&(d=Cn({inputs:{x:s},backend:n,attrs:{perm:l}}),c.push(d),u=_.getInnerMostAxes(1,i)[0]);let p=_.segment_util.computeOutShape(d.shape,u,o),h=w.sizeFromShape([d.shape[u]]),f=be({inputs:{x:d},backend:n,attrs:{shape:[-1,h]}});c.push(f);let m=Ch(s.dtype),g=(x,k,C,N,$)=>{let R=x.shape[0],O=x.shape[1],D=_.segment_util.segOpComputeOptimalWindowSize(O,$),P={windowSize:D,inSize:O,batchSize:R,numSegments:$},T=new dre(P,k),L=n.compileAndRun(T,[x,C],N);if(c.push(L),L.shape[1]===$)return L;let G=n_({backend:n,attrs:{start:0,stop:$,step:1,dtype:"float32"}}),j=i_({inputs:{x:G},backend:n,attrs:{reps:[O/D]}});return c.push(G),c.push(j),g(L,k,j,N,$)},b=g(f,"unsortedSegmentSum",a,m,o),y=be({inputs:{x:b},backend:n,attrs:{shape:p}}),v=y;if(l!=null){c.push(y);let x=_.getUndoAxesPermutation(l);v=Cn({inputs:{x:v},backend:n,attrs:{perm:x}})}return c.forEach(x=>n.disposeIntermediateTensorInfo(x)),v}var hre={kernelName:Fl,backendName:"webgl",kernelFunc:pre},fre=[VQ,HQ,_9,A9,F9,O9,L9,W9,U9,H9,X9,Z9,eY,rY,lY,oY,hY,bY,mY,wY,IY,CY,EY,OY,LY,GY,jY,YY,QY,u9,sZ,fZ,gZ,cZ,xZ,kZ,yZ,CZ,_Z,DZ,FZ,PZ,LZ,GZ,jZ,zZ,XZ,JZ,eJ,sJ,cJ,pJ,mJ,gJ,bJ,vJ,wJ,IJ,CJ,NJ,DJ,RJ,MJ,BJ,VJ,HJ,XJ,QJ,c9,tQ,nZ,sQ,iQ,lQ,d9,fQ,yQ,xQ,NQ,SQ,DQ,RQ,LQ,qQ,tee,QQ,aee,iee,uee,ZQ,dee,hee,bee,wee,Cee,Fee,g9,Pee,Lee,Wee,Gee,zY,qee,Xee,Zee,ete,ste,h9,ote,ite,WY,Eee,lte,yte,fte,y9,kte,Cte,Ete,$te,Ote,Lte,Wte,Gte,jte,Xte,Jte,ene,rne,one,une,RY,Dee,pne,fne,gne,yne,xne,kne,Sne,Tne,_ne,Dne,Fne,Pne,Lne,zne,Vne,Gne,Aee,C9,qne,Yne,Qne,rre,ore,T9,cre,lre,hre,Kee];for(let e of fre)Pl(e);var Bn;(function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"})(Bn||(Bn={}));var Ud;(function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"})(Ud||(Ud={}));var u_;function mre(e){u_=e.wasm.cwrap(Ro,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function gre(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a,bias:o,preluActivationWeights:i}=t;if(s.dtype!=="float32"||a.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:c,transposeB:u,activation:l,leakyreluAlpha:d}=r,p=n.dataIdMap.get(s.dataId).id,h=n.dataIdMap.get(a.dataId).id,f=0;if(o!=null){let $=n.dataIdMap.get(o.dataId);if($.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${$.shape.length}.`);f=$.id}let m=i==null?0:n.dataIdMap.get(i.dataId).id,g=Ud[l];if(g==null)throw new Error(`${l} activation not yet supported for FusedConv2D in the wasm backend.`);let b=c?s.shape[2]:s.shape[1],y=u?a.shape[1]:a.shape[2],v=s.shape[0],x=n.makeOutput([v,b,y],s.dtype),k=n.dataIdMap.get(x.dataId).id,C=new Uint8Array(new Int32Array(s.shape).buffer),N=new Uint8Array(new Int32Array(a.shape).buffer);return u_(p,C,s.shape.length,h,N,a.shape.length,c,u,g,f,m,d||0,k),x}var bre={kernelName:Ro,backendName:"wasm",setupFunc:mre,kernelFunc:gre};function un(e){let t;function n(s){t=s.wasm.cwrap(e,null,["number","number"])}function r(s){let{backend:a,inputs:{x:o}}=s,i=a.dataIdMap.get(o.dataId).id,c=a.makeOutput(o.shape,o.dtype),u=a.dataIdMap.get(c.dataId).id;return w.sizeFromShape(c.shape)===0||t(i,u),c}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var yre=un(Xi);function Tn(e,t,n){let r;function s(o){r=o.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function a(o){let{backend:i,inputs:c}=o,{a:u,b:l}=c,d=i.dataIdMap.get(u.dataId).id,p=i.dataIdMap.get(l.dataId).id,h=n!=null?n:u.dtype,f=_.assertAndGetBroadcastShape(u.shape,l.shape),m=i.makeOutput(f,h);if(w.sizeFromShape(f)===0)return m;let g=new Uint8Array(new Int32Array(u.shape).buffer),b=new Uint8Array(new Int32Array(l.shape).buffer),y=i.dataIdMap.get(m.dataId).id,v=()=>r(d,g,u.shape.length,p,b,l.shape.length,Bn[u.dtype],y);if(t&&u.dtype==="float32")return v(),m;let x=_.getBroadcastDims(u.shape,f),k=_.getBroadcastDims(l.shape,f),C=x.every(($,R)=>$===R),N=k.every(($,R)=>$===R);if(C&&N)return v(),m;throw new Error(`Broadcasting along outer dims is not yet supported for ${u.dtype} ${e}.`)}return{kernelName:e,backendName:"wasm",setupFunc:s,kernelFunc:a}}var vre=!0,xre=Tn(Zs,vre),l_;function wre(e){l_=e.wasm.cwrap(Ma,null,["array","number","number","number"])}function kre(e){let{inputs:t,backend:n}=e,r=n.makeOutput(t[0].shape,t[0].dtype);if(w.sizeFromShape(r.shape)===0)return r;let s=t.map(i=>n.dataIdMap.get(i.dataId).id),a=new Uint8Array(new Int32Array(s).buffer),o=n.dataIdMap.get(r.dataId).id;return l_(a,s.length,Bn[r.dtype],o),r}var Ire={kernelName:Ma,backendName:"wasm",setupFunc:wre,kernelFunc:kre};function Cm(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(s),r}var Sre={kernelName:no,backendName:"wasm",kernelFunc:Cm},d_;function Cre(e){d_=e.wasm.cwrap(Fo,null,["number","array","number","number","number","array","number"])}function Mu(e){let{inputs:t,backend:n,attrs:r}=e,[s,a]=Nre(t.x.shape,r.perm),o=!0;for(let f=0;f=s&&(a===-1||r[a]>r[o])&&(a=o);r[a]=s}return[n,r]}var _re={kernelName:Fo,backendName:"wasm",kernelFunc:Mu,setupFunc:Cre};function Sa(e,t,n){let r=e.shape,s=e.shape.length,a=w.parseAxisParam(t,r),o=a,i=_.getAxesPermutation(o,s),c=null,u=!1;if(i!=null){let l=new Array(s);for(let h=0;h`new shape: ${o}, old shape: ${r.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(r.dataId),{dataId:r.dataId,shape:o,dtype:r.dtype}}var Wre={kernelName:Rc,backendName:"wasm",kernelFunc:zn},g_;function Vre(e){g_=e.wasm.cwrap(za,null,["number","array","number","number","array","number","number","number","number"])}function Ure(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a}=t,{transposeA:o,transposeB:i}=r;if(s.dtype!=="float32"||a.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let c=s.shape.length,u=a.shape.length,l=o?s.shape[c-2]:s.shape[c-1],d=i?a.shape[u-1]:a.shape[u-2],p=o?s.shape[c-1]:s.shape[c-2],h=i?a.shape[u-2]:a.shape[u-1],f=s.shape.slice(0,-2),m=a.shape.slice(0,-2),g=w.sizeFromShape(f),b=w.sizeFromShape(m),y=g===b||g===1||b===1;w.assert(c>=2&&u>=2&&y,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${f}) and (${m}).`);let x=(g>b?s.shape.slice(0,-2):a.shape.slice(0,-2)).concat([p,h]);w.assert(l===d,()=>`Error in matMul: inner shapes (${l}) and (${d}) of Tensors with shapes ${s.shape} and ${a.shape} and transposeA=${o} and transposeB=${i} must match.`);let k=o?[g,l,p]:[g,p,l],C=i?[b,h,d]:[b,d,h],N=zn({inputs:{x:s},backend:n,attrs:{shape:k}}),$=zn({inputs:{x:a},backend:n,attrs:{shape:C}}),R=n.dataIdMap.get(N.dataId).id,O=n.dataIdMap.get($.dataId).id,D=o?N.shape[2]:N.shape[1],P=i?$.shape[1]:$.shape[2],T=Math.max(g,b),L=n.makeOutput([T,D,P],N.dtype),G=n.dataIdMap.get(L.dataId).id,j=new Uint8Array(new Int32Array(N.shape).buffer),q=new Uint8Array(new Int32Array($.shape).buffer);return g_(R,j,N.shape.length,O,q,$.shape.length,o,i,G),n.disposeData(N.dataId),n.disposeData($.dataId),L.shape=x,L}var Gre={kernelName:za,backendName:"wasm",setupFunc:Vre,kernelFunc:Ure};function Gd(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:s}=e,[a,o]=vn.parseSliceParams(t,n,r),i=vn.isSliceContinous(t.shape,a,o),c=s.readSync(t.dataId),u=s.makeOutput(o,t.dtype),l=w.computeStrides(t.shape),d=s.dataIdMap.get(u.dataId);if(i){let f=vn.computeFlatOffset(a,l);return t.dtype==="string"?d.stringBytes=c.slice(f,f+w.sizeFromShape(o)):s.typedArrayFromHeap(u).set(c.subarray(f,f+w.sizeFromShape(o))),u}if(t.dtype==="string"){let f=nm(c,a,o,t.shape,t.dtype);return d.stringBytes=f,u}let p=s.typedArrayFromHeap(u),h=t.shape.length;if(h===2)Hre(c,l[0],p,a,o);else if(h===3)jre(c,l[0],l[1],p,a,o);else if(h===4)qre(c,l[0],l[1],l[2],p,a,o);else{let f=nm(c,a,o,t.shape,t.dtype);p.set(f)}return u}function Hre(e,t,n,r,s){let a=0,o=r[0],i=r[1],c=o+s[0];for(let u=o;ub*y),c=_.getReshaped(s.shape,a,i),u=_.getPermuted(c.length,a.length),l=_.getReshapedPermuted(s.shape,a,i),d=_.getSliceBeginCoords(o,a.length),p=_.getSliceSize(l,o,a.length),h=zn({inputs:{x:s},backend:n,attrs:{shape:c}}),f=Mu({inputs:{x:h},backend:n,attrs:{perm:u}}),m=zn({inputs:{x:f},backend:n,attrs:{shape:l}}),g=Gd({inputs:{x:m},backend:n,attrs:{begin:d,size:p}});return n.disposeData(h.dataId),n.disposeData(f.dataId),n.disposeData(h.dataId),g}var Yre={kernelName:ac,backendName:"wasm",kernelFunc:Xre};function Tm(e){let{inputs:{x:t},attrs:{dtype:n},backend:r}=e,s=r.makeOutput(t.shape,n),a=r.typedArrayFromHeap(t);return r.typedArrayFromHeap(s).set(a),s}var Zre={kernelName:Wa,backendName:"wasm",kernelFunc:Tm},Jre=un(Va),b_;function Qre(e){b_=e.wasm.cwrap(Js,null,["number","number","number","number"])}function ese(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:a,clipValueMax:o}=r,i=n.dataIdMap.get(s.dataId).id,c=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(c.dataId).id;return b_(i,a,o,u),c}var tse={kernelName:Js,backendName:"wasm",setupFunc:Qre,kernelFunc:ese};function y_(e){let{inputs:t,backend:n}=e,r=w.parseAxisParam(e.attrs.axis,t[0].shape)[0],s=_.computeOutShape(t.map(h=>h.shape),r),a=t.filter(h=>w.sizeFromShape(h.shape)>0);if(a.length===1)return Cm({inputs:{x:a[0]},backend:n});let o=n.makeOutput(s,t[0].dtype);if(w.sizeFromShape(s)===0)return o;let i=a.map(h=>h.shape);if(_.assertParamsConsistent(i,r),a[0].dtype==="string"){let h=a.map(v=>{let x=w.sizeFromShape(v.shape.slice(r));return zn({inputs:{x:v},backend:n,attrs:{shape:[-1,x]}})}),f=h.map(v=>({vals:n.readSync(v.dataId),shape:v.shape}));s=_.computeOutShape(h.map(v=>v.shape),1);let m=h[0].shape[0]===1,g=fw(f,s,t[0].dtype,m),b=_.computeOutShape(a.map(v=>v.shape),r);o.shape=b;let y=n.dataIdMap.get(o.dataId);return y.stringBytes=_.fromStringArrayToUint8(g),h.forEach(v=>n.disposeData(v.dataId)),o}let c=w.sizeFromShape(a[0].shape.slice(0,r)),u=0,l=a.map(h=>{let f=w.sizeFromShape(h.shape.slice(r));return u+=f,f}),d=a.map(h=>n.typedArrayFromHeap(h)),p=n.typedArrayFromHeap(o);for(let h=0;h`cumsum does not support ${s.dtype} tensors in the WASM backend`);let u=_.getAxesPermutation([a],c),l=s;u!==null&&(l=Mu({inputs:{x:s},attrs:{perm:u},backend:n}));let d=_.getInnerMostAxes(1,c)[0];_.assertAxesAreInnerMostDims("cumsum",[d],c);let p=n.makeOutput(l.shape,l.dtype),h=l.shape[d],f=n.dataIdMap.get(l.dataId).id,m=n.dataIdMap.get(p.dataId).id;k_(f,o?1:0,i?1:0,h,m,Bn[s.dtype]);let g=p;if(u!==null){let b=_.getUndoAxesPermutation(u);g=Mu({inputs:{x:p},attrs:{perm:b},backend:n}),n.disposeData(l.dataId),n.disposeData(p.dataId)}return g}var gse={kernelName:qa,backendName:"wasm",setupFunc:fse,kernelFunc:mse},I_;function bse(e){I_=e.wasm.cwrap(cc,null,["number","number","number","array","number","array","array","number","number"])}function yse(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{blockSize:a,dataFormat:o}=r;w.assert(a>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${a}`);let i=s.shape[0],c=o==="NHWC"?s.shape[1]:s.shape[2],u=o==="NHWC"?s.shape[2]:s.shape[3],l=o==="NHWC"?s.shape[3]:s.shape[1],d=c*a,p=u*a,h=l/(a*a),f=o==="NHWC"?[i,d,p,h]:[i,h,d,p],m=t.makeOutput(f,"float32"),b=t.dataIdMap.get(s.dataId).id,y=new Uint8Array(new Int32Array(w.computeStrides(s.shape)).buffer),v=new Uint8Array(new Int32Array(f).buffer),x=new Uint8Array(new Int32Array(w.computeStrides(f)).buffer),k=t.dataIdMap.get(m.dataId).id;return I_(b,a,o==="NHWC"?1:0,y,s.shape.length-1,v,x,f.length,k),m}var vse={kernelName:cc,backendName:"wasm",setupFunc:bse,kernelFunc:yse},S_;function xse(e){S_=e.wasm.cwrap(Ka,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function wse(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a}=t,o=r.dataIdMap.get(s.dataId).id,i=r.dataIdMap.get(a.dataId).id,{strides:c,dilations:u,pad:l,dimRoundingMode:d}=n,p=u==null?[1,1]:u,h=_.computeConv2DInfo(s.shape,a.shape,c,p,l,d,!0),f=h.filterHeight,m=h.filterWidth,g=h.padInfo.top,b=h.padInfo.right,y=h.padInfo.bottom,v=h.padInfo.left,x=h.dilationHeight,k=h.dilationWidth,C=h.strideHeight,N=h.strideWidth,$=h.inChannels,R=h.outChannels,O=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);let D=r.makeOutput(h.outShape,"float32"),P=r.dataIdMap.get(D.dataId).id;return S_(o,s.shape[0],s.shape[1],s.shape[2],i,f,m,g,b,y,v,O,x,k,C,N,$,R,P),D}var kse={kernelName:Ka,backendName:"wasm",setupFunc:xse,kernelFunc:wse},Ise=un(Ya),Sse=!1,Cse=Tn(lc,Sse,"bool"),Tse=un(Za);function qw(e){let{inputs:t,attrs:n,backend:r}=e,{input:s}=t,{dim:a}=n,o=s.shape.length,i=s.shape.slice(),c=a;return a<0&&(w.assert(-(o+1)<=a,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),c=o+a+1),i.splice(c,0,1),zn({inputs:{x:s},backend:r,attrs:{shape:i}})}var Nse={kernelName:dc,backendName:"wasm",kernelFunc:qw};function C_(e){let{attrs:{shape:t,value:n,dtype:r},backend:s}=e,a=s.makeOutput(t,r);return s.typedArrayFromHeap(a).fill(n),a}var _se={kernelName:Cl,backendName:"wasm",kernelFunc:C_},T_;function Ese(e){T_=e.wasm.cwrap(hc,null,["number","number","number","number","number","number"])}function Ase(e){let{inputs:t,backend:n}=e,{image:r}=t,s=n.makeOutput(r.shape,r.dtype),a=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,[i,c,u,l]=r.shape;return T_(a,i,c,u,l,o),s}var Dse={kernelName:hc,backendName:"wasm",kernelFunc:Ase,setupFunc:Ese},$se=un(Ja),Fse=!1,Rse=Tn(Qa,Fse),N_;function Pse(e){N_=e.wasm.cwrap(eo,null,["number","number","number","number","number","number","number"])}function Ose(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:s}=r,{x:a,mean:o,variance:i,offset:c,scale:u}=n,l=t.dataIdMap.get(a.dataId).id,d=t.dataIdMap.get(o.dataId).id,p=t.dataIdMap.get(i.dataId).id,h=c!=null?t.dataIdMap.get(c.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,m=t.makeOutput(a.shape,a.dtype);if(w.sizeFromShape(a.shape)===0)return m;let g=t.dataIdMap.get(m.dataId).id;return N_(l,d,p,h,f,s,g),m}var Mse={kernelName:eo,backendName:"wasm",setupFunc:Pse,kernelFunc:Ose},__;function Lse(e){__=e.wasm.cwrap(Po,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Bse(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dilations:l,dataFormat:d,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=n,m=_.computeConv2DInfo(s.shape,a.shape,c,l,u,p),g=Ud[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let b=r.dataIdMap.get(s.dataId).id,y=r.dataIdMap.get(a.dataId).id,v=m.outChannels,x=0;if(o!=null){let J=r.dataIdMap.get(o.dataId);if(J.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${J.shape.length}.`);if(J.shape[0]!==v)throw new Error(`FusedConv2D bias shape (${J.shape}) does not match the number of output channels (${v})`);x=J.id}let k=m.filterHeight,C=m.filterWidth,N=m.padInfo.top,$=m.padInfo.right,R=m.padInfo.bottom,O=m.padInfo.left,D=m.dilationHeight,P=m.dilationWidth,T=m.strideHeight,L=m.strideWidth,G=m.inChannels,j=m.padInfo.type==="SAME"?1:0,q=m.batchSize,K=m.inHeight,te=m.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let ne=r.makeOutput(m.outShape,"float32"),re=r.dataIdMap.get(ne.dataId).id,se=i==null?0:r.dataIdMap.get(i.dataId).id;return __(b,q,K,te,y,k,C,x,N,$,R,O,j,D,P,T,L,G,v,g,se,f||0,re),ne}var zse={kernelName:Po,backendName:"wasm",setupFunc:Lse,kernelFunc:Bse},E_;function Wse(e){E_=e.wasm.cwrap(Oo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Vse(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dilations:l,dataFormat:d,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=n,m=_.computeConv2DInfo(s.shape,a.shape,c,l,u,p,!0),g=Ud[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let b=r.dataIdMap.get(s.dataId).id,y=r.dataIdMap.get(a.dataId).id,v=m.outChannels,x=0;if(o!=null){let J=r.dataIdMap.get(o.dataId);if(J.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${J.shape.length}.`);if(J.shape[0]!==v)throw new Error(`FusedDepthwiseConv2D bias shape (${J.shape}) does not match the number of output channels (${v})`);x=J.id}let k=m.filterHeight,C=m.filterWidth,N=m.padInfo.top,$=m.padInfo.right,R=m.padInfo.bottom,O=m.padInfo.left,D=m.dilationHeight,P=m.dilationWidth,T=m.strideHeight,L=m.strideWidth,G=m.inChannels,j=m.padInfo.type==="SAME"?1:0,q=m.batchSize,K=m.inHeight,te=m.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let ne=r.makeOutput(m.outShape,"float32"),re=r.dataIdMap.get(ne.dataId).id,se=i==null?0:r.dataIdMap.get(i.dataId).id;return E_(b,q,K,te,y,k,C,x,N,$,R,O,j,D,P,T,L,G,v,g,se,f||0,re),ne}var Use={kernelName:Oo,backendName:"wasm",setupFunc:Wse,kernelFunc:Vse},A_;function Gse(e){A_=e.wasm.cwrap(mc,null,["number","number","number","number","number","number","array","number"])}function Hse(e){let{backend:t,inputs:n}=e,{params:r,indices:s}=n,[a,o,i,c]=iy.prepareAndValidate(r,s),u=t.makeOutput(a,r.dtype);if(o===0)return u;let l=s.shape,d=l[l.length-1],h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,g=new Uint8Array(new Int32Array(c).buffer),b=t.dataIdMap.get(u.dataId).id;return A_(h,Bn[r.dtype],m,o,d,i,g,b),u}var jse={kernelName:mc,backendName:"wasm",setupFunc:Gse,kernelFunc:Hse},D_;function qse(e){D_=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Kse(e){let{backend:t,inputs:n,attrs:r}=e,{x:s,indices:a}=n,{axis:o,batchDims:i}=r,c=w.parseAxisParam(o,s.shape)[0],u=_.segment_util.collectGatherOpShapeInfo(s,a,c,i),l=zn({inputs:{x:s},attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]},backend:t}),d=w.sizeFromShape(a.shape),p=zn({inputs:{x:a},attrs:{shape:[u.batchSize,d/u.batchSize]},backend:t}),h=[u.batchSize,u.outerSize,d/u.batchSize,u.sliceSize],f=t.makeOutput(h,s.dtype);if(w.sizeFromShape(s.shape)===0)return f;let m=l.shape.length-1,b=t.dataIdMap.get(l.dataId).id,v=t.dataIdMap.get(p.dataId).id,x=t.dataIdMap.get(f.dataId).id,k=new Uint8Array(new Int32Array(w.computeStrides(l.shape)).buffer),C=new Uint8Array(new Int32Array(w.computeStrides(h)).buffer);return D_(b,Bn[s.dtype],k,m,v,u.batchSize,C,x),t.disposeData(l.dataId),t.disposeData(p.dataId),f.shape=u.outputShape,f}var Xse={kernelName:fc,backendName:"wasm",setupFunc:qse,kernelFunc:Kse},Yse=!1,Zse=Tn(gc,Yse,"bool"),Jse=!1,Qse=Tn(to,Jse,"bool"),$_;function eae(e){$_=e.wasm.cwrap(ro,null,["number","number","number"])}function tae(e){let{inputs:{x:t},attrs:{alpha:n},backend:r}=e,s=r.dataIdMap.get(t.dataId).id,a=r.makeOutput(t.shape,t.dtype);if(w.sizeFromShape(t.shape)!==0){let o=r.dataIdMap.get(a.dataId).id;$_(s,n,o)}return a}var nae={kernelName:ro,backendName:"wasm",setupFunc:eae,kernelFunc:tae},rae=!1,sae=Tn(xc,rae,"bool"),aae=!1,oae=Tn(wc,aae,"bool"),iae=un(so),cae=!1,uae=Tn(Ic,cae,"bool"),F_;function lae(e){F_=e.wasm.cwrap(ao,null,["number, number, number"])}function dae(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:s,keepDims:a}=r,{x:o}=n,c=t.dataIdMap.get(o.dataId).id,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;u=l,c=v}let f=u.shape.length;_.assertAxesAreInnerMostDims("max",d,f);let[m,g]=_.computeOutAndReduceShapes(u.shape,d),b=w.sizeFromShape(g),y=t.makeOutput(m,o.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;F_(c,b,v)}if(h&&t.disposeData(l.dataId),a){let v=_.expandShapeToKeepDim(y.shape,p);y.shape=v}return y}var pae={kernelName:ao,backendName:"wasm",setupFunc:lae,kernelFunc:dae},hae=!1,fae=Tn(oo,hae),R_;function mae(e){R_=e.wasm.cwrap(io,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function gae(e){let{inputs:t,attrs:n,backend:r}=e,s=t.x,a=r.dataIdMap.get(s.dataId).id,{filterSize:o,strides:i,pad:c,dimRoundingMode:u}=n,l=_.computePool2DInfo(s.shape,o,i,1,c,u),d=l.filterHeight,p=l.filterWidth,h=l.padInfo.top,f=l.padInfo.right,m=l.padInfo.bottom,g=l.padInfo.left,b=l.dilationHeight,y=l.dilationWidth,v=l.strideHeight,x=l.strideWidth,k=l.inChannels,C=l.outChannels;if(l.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${l.dataFormat}'. Please use 'channelsLast'.`);let N=r.makeOutput(l.outShape,"float32"),$=r.dataIdMap.get(N.dataId).id;return R_(a,s.shape[0],s.shape[1],s.shape[2],d,p,h,f,m,g,b,y,v,x,k,C,$),N}var bae={kernelName:io,backendName:"wasm",setupFunc:mae,kernelFunc:gae},P_;function yae(e){P_=e.wasm.cwrap(co,null,["number, number, number"])}function vae(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t),f=d;if(h){let x=t.dataIdMap.get(l.dataId).id;x!==i&&(u=l,c=x,f=_.getInnerMostAxes(f.length,u.shape.length))}_.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[m,g]=_.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=u;u.dtype!=="float32"&&(y=Tm({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),c=t.dataIdMap.get(y.dataId).id);let v=t.makeOutput(m,"float32");if(w.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(v.dataId).id;P_(c,b,x)}if(h&&t.disposeData(l.dataId),a){let x=_.expandShapeToKeepDim(v.shape,p);v.shape=x}return u.dtype!=="float32"&&t.disposeData(y.dataId),v}var xae={kernelName:co,backendName:"wasm",setupFunc:yae,kernelFunc:vae},O_;function wae(e){O_=e.wasm.cwrap(uo,null,["number, number, number"])}function kae(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v)}let f=u.shape.length;_.assertAxesAreInnerMostDims("min",d,f);let[m,g]=_.computeOutAndReduceShapes(u.shape,d),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;O_(c,b,v)}if(h&&t.disposeData(l.dataId),a){let v=_.expandShapeToKeepDim(y.shape,p);y.shape=v}return y}var Iae={kernelName:uo,backendName:"wasm",setupFunc:wae,kernelFunc:kae},Sae=!1,Cae=Tn(lo,Sae),Kw;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(Kw||(Kw={}));var M_;function Tae(e){M_=e.wasm.cwrap(po,null,["number","array","number","number","array","array","number","number"])}function Nae(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,mode:s}}=e,a=r.map((f,m)=>f[0]+t.shape[m]+f[1]),o=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(a,t.dtype),c=n.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),l=r.map(f=>f[0]),d=r.map(f=>f[1]),p=new Uint8Array(new Int32Array(l).buffer),h=new Uint8Array(new Int32Array(d).buffer);return M_(o,u,t.shape.length,Bn[t.dtype],p,h,Kw[s],c),i}var _ae={kernelName:po,backendName:"wasm",kernelFunc:Nae,setupFunc:Tae},Eae=!0,Aae=Tn(ho,Eae),Dae=un(Cc);function Xw(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),r=n[0],s=n[1],a=n[2],o=n[3];return e.wasm._free(t),{pSelectedIndices:r,selectedSize:s,pSelectedScores:a,pValidOutputs:o}}var L_;function $ae(e){L_=e.wasm.cwrap(Nc,"number",["number","number","number","number","number"])}function Fae(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o}=r,{boxes:i,scores:c}=n,u=t.dataIdMap.get(i.dataId).id,l=t.dataIdMap.get(c.dataId).id,d=L_(u,l,a,s,o),{pSelectedIndices:p,selectedSize:h,pSelectedScores:f,pValidOutputs:m}=Xw(t,d);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([h],"int32",p)}var Rae={kernelName:Nc,backendName:"wasm",setupFunc:$ae,kernelFunc:Fae},B_;function Pae(e){B_=e.wasm.cwrap(_c,"number",["number","number","number","number","number","bool"])}function Oae(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o,padToMaxOutputSize:i}=r,{boxes:c,scores:u}=n,l=t.dataIdMap.get(c.dataId).id,d=t.dataIdMap.get(u.dataId).id,p=B_(l,d,a,s,o,i),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=Xw(t,p);t.wasm._free(m);let b=t.makeOutput([f],"int32",h),y=t.makeOutput([],"int32",g);return[b,y]}var Mae={kernelName:_c,backendName:"wasm",setupFunc:Pae,kernelFunc:Oae},z_;function Lae(e){z_=e.wasm.cwrap(Ec,"number",["number","number","number","number","number","number"])}function Bae(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o,softNmsSigma:i}=r,{boxes:c,scores:u}=n,l=t.dataIdMap.get(c.dataId).id,d=t.dataIdMap.get(u.dataId).id,p=z_(l,d,a,s,o,i),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=Xw(t,p);t.wasm._free(g);let b=t.makeOutput([f],"int32",h),y=t.makeOutput([f],"float32",m);return[b,y]}var zae={kernelName:Ec,backendName:"wasm",setupFunc:Lae,kernelFunc:Bae},Wae=!1,Vae=Tn(Tc,Wae,"bool"),W_;function Uae(e){W_=e.wasm.cwrap(fo,null,["number","number","number","number","number"])}function Gae(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{depth:a,onValue:o,offValue:i}=r,c=n.makeOutput([...s.shape,a],"int32"),u=n.dataIdMap.get(c.dataId).id,d=n.dataIdMap.get(s.dataId).id;return W_(d,a,o,i,u),c}var Hae={kernelName:fo,backendName:"wasm",setupFunc:Uae,kernelFunc:Gae};function jae(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}var qae={kernelName:Ac,backendName:"wasm",kernelFunc:jae};function Kae(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return qw({inputs:{input:t[0]},backend:n,attrs:{dim:s}});let a=t[0].shape,o=t[0].dtype;t.forEach(l=>{w.assertShapesMatch(a,l.shape,"All tensors passed to stack must have matching shapes"),w.assert(o===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],c=t.map(l=>{let d=qw({inputs:{input:l},backend:n,attrs:{dim:s}});return i.push(d),d}),u=y_({inputs:c,backend:n,attrs:{axis:s}});return i.forEach(l=>n.disposeData(l.dataId)),u}var Xae={kernelName:Dc,backendName:"wasm",kernelFunc:Kae},V_;function Yae(e){V_=e.wasm.cwrap(mo,null,["number","array","number","number","array","array","number","number"])}function Zae(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:s}}=e,a=r.map((m,g)=>m[0]+t.shape[g]+m[1]);if(w.sizeFromShape(t.shape)===0)return C_({backend:n,attrs:{shape:a,value:s,dtype:t.dtype}});let o=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(a,t.dtype),u=n.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(t.shape).buffer),d=r.map(m=>m[0]),p=r.map(m=>m[1]),h=new Uint8Array(new Int32Array(d).buffer),f=new Uint8Array(new Int32Array(p).buffer);return V_(o,l,t.shape.length,Bn[t.dtype],h,f,s,u),i}var U_={kernelName:mo,backendName:"wasm",kernelFunc:Zae,setupFunc:Yae},Jae=!1,Qae=Tn(go,Jae),G_;function eoe(e){G_=e.wasm.cwrap(bo,null,["number","number","number"])}function toe(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t,a=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,i=n.makeOutput(r.shape,"float32"),c=n.dataIdMap.get(i.dataId).id;return G_(a,o,c),i}var noe={kernelName:bo,backendName:"wasm",setupFunc:eoe,kernelFunc:toe},H_;function roe(e){H_=e.wasm.cwrap($c,null,["number","number","number","number"])}function soe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t),f=d;if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v,f=_.getInnerMostAxes(f.length,u.shape.length))}_.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[m,g]=_.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;H_(c,b,Bn[y.dtype],v)}if(h&&t.disposeData(l.dataId),a){let v=_.expandShapeToKeepDim(y.shape,p);y.shape=v}return y}var aoe={kernelName:$c,backendName:"wasm",setupFunc:roe,kernelFunc:soe},ooe=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:a,dtype:o}=n,i=bw(r,s,a,o),c=t.makeOutput([i.length],o);return t.typedArrayFromHeap(c).set(i),c},ioe={kernelName:Al,backendName:"wasm",kernelFunc:ooe},coe=!0,uoe=Tn(Xa,coe),loe=un(yo),doe=un(xo),j_;function poe(e){j_=e.wasm.cwrap(vo,null,["number","number","number","number","number","number","number","number","number","number"])}function hoe(e){let{backend:t,inputs:n,attrs:r}=e,{images:s}=n,{alignCorners:a,halfPixelCenters:o,size:i}=r,[c,u]=i,[l,d,p,h]=s.shape,f=[l,c,u,h],m=t.dataIdMap.get(s.dataId),g;m.dtype!=="float32"&&(g=Tm({backend:t,inputs:{x:s},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(g.dataId));let b=m.id,y=t.makeOutput(f,"float32");if(w.sizeFromShape(s.shape)===0)return y;let v=t.dataIdMap.get(y.dataId).id;return j_(b,l,d,p,h,c,u,a?1:0,o?1:0,v),g!=null&&t.disposeData(g.dataId),y}var foe={kernelName:vo,backendName:"wasm",setupFunc:poe,kernelFunc:hoe},q_;function moe(e){q_=e.wasm.cwrap(wo,null,["number","array","number","array","number","number"])}function goe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:a}=r,o=w.parseAxisParam(a,s.shape);if(s.shape.length===0)return Cm({inputs:{x:s},backend:n});let i=n.makeOutput(s.shape,s.dtype),c=n.dataIdMap.get(s.dataId).id,u=n.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(o).buffer),d=new Uint8Array(new Int32Array(s.shape).buffer);q_(c,l,o.length,d,s.shape.length,u);let p=zn({inputs:{x:i},attrs:{shape:s.shape},backend:n});return n.disposeData(i.dataId),p}var boe={kernelName:wo,backendName:"wasm",kernelFunc:goe,setupFunc:moe},K_;function yoe(e){K_=e.wasm.cwrap(Xc,null,["number","number","number","number","number","number","number","number","array","number","number"])}function voe(e){let{inputs:t,backend:n,attrs:r}=e,{image:s}=t,{radians:a,fillValue:o,center:i}=r,c=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(s.dataId).id,l=n.dataIdMap.get(c.dataId).id,[d,p,h,f]=s.shape,[m,g]=_.getImageCenter(i,p,h),b=o===0,y=255,v=typeof o=="number"?[o,o,o,b?0:y]:[...o,y],x=new Uint8Array(new Int32Array(v).buffer);return K_(u,d,p,h,f,a,m,g,x,v.length,l),c}var xoe={kernelName:Xc,backendName:"wasm",kernelFunc:voe,setupFunc:yoe},woe=un(ko),koe=un(Io),X_;function Ioe(e){X_=e.wasm.cwrap(Pc,null,["number","number","number","number","number","number","array","number","number"])}function Soe(e){let{backend:t,inputs:n,attrs:r}=e,{indices:s,updates:a}=n,{shape:o}=r,i=t.makeOutput(o,a.dtype);if(w.sizeFromShape(o)===0)return i;let{sliceRank:c,numUpdates:u,sliceSize:l,strides:d,outputSize:p}=cy.calculateShapes(a,s,o),f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,b=new Uint8Array(new Int32Array(d).buffer),y=t.dataIdMap.get(i.dataId).id;return X_(f,g,Bn[a.dtype],c,u,l,b,p,y),i}var Coe={kernelName:Pc,backendName:"wasm",setupFunc:Ioe,kernelFunc:Soe},Y_;function Toe(e){Y_=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Noe(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:a}=t,o=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(s.dataId).id,c=n.dataIdMap.get(a.dataId).id,u=n.makeOutput(s.shape,s.dtype),l=n.dataIdMap.get(u.dataId).id,d=r.shape.length,p=s.shape.length,h=d===0||d>1||p===1?1:w.sizeFromShape(s.shape.slice(1));return Y_(o,i,c,h,l),u}var _oe={kernelName:Oc,backendName:"wasm",kernelFunc:Noe,setupFunc:Toe},Z_;function Eoe(e){Z_=e.wasm.cwrap(Co,null,["number","number"])}function Aoe(e){let{backend:t,inputs:{x:n}}=e,r=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),a=t.dataIdMap.get(s.dataId).id;return w.sizeFromShape(s.shape)===0||Z_(r,a),s}var Doe={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Eoe,kernelFunc:Aoe},$oe=un(So),J_;function Foe(e){J_=e.wasm.cwrap(_o,null,["number","number","number","number"])}function Roe(e){let{backend:t,inputs:{logits:n},attrs:{dim:r}}=e,s=t.dataIdMap.get(n.dataId).id,a=t.makeOutput(n.shape,n.dtype),o=t.dataIdMap.get(a.dataId).id,i=n.shape[r],c=w.sizeFromShape(n.shape)/i;return w.sizeFromShape(a.shape)===0||J_(s,o,i,c),a}var Poe={kernelName:_o,backendName:"wasm",setupFunc:Foe,kernelFunc:Roe};function Ooe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,paddings:o}=r,i=w.sizeFromShape(a),c=[[0,0]];c.push(...o);for(let C=1+a.length;C{let p=[...l];p[i]=d;let h=Gd({inputs:{x:s},attrs:{begin:u,size:p},backend:r});return u[i]+=d,h})}var Boe={kernelName:Uc,backendName:"wasm",kernelFunc:Loe},zoe=un(To),Woe=un($l),Voe=!0,Uoe=Tn(Eo,Voe),Q_;function Goe(e){Q_=e.wasm.cwrap(ea,null,["number","number","number"])}function Hoe(e){let{backend:t,inputs:n,attrs:r}=e,{alpha:s}=r,{x:a}=n,o=t.dataIdMap.get(a.dataId).id,i=t.makeOutput(a.shape,a.dtype),c=t.dataIdMap.get(i.dataId).id;return Q_(o,s,c),i}var joe={kernelName:ea,backendName:"wasm",setupFunc:Goe,kernelFunc:Hoe},eE;function qoe(e){eE=e.wasm.cwrap(Gc,null,["number","array","number","array","array","array","array","array","number","number"])}function Koe(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{begin:a,end:o,strides:i}=r;i==null&&(i=new Array(a.length));let{beginMask:c,endMask:u,ellipsisMask:l,newAxisMask:d,shrinkAxisMask:p}=r,h=_.slice_util.maskToAxes(l);if(h.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(l!==0&&d!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(l!==0&&p!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let f=s.shape.length-a.length,m=_.slice_util.maskToAxes(d),g=s.shape.slice();m.forEach(D=>{a[D]=0,o[D]=1,g.splice(D,0,1)});let b=zn({inputs:{x:s},attrs:{shape:g},backend:t}),{begin:y,end:v,strides:x}=_.slice_util.getNormalizedAxes(b.shape,h,f,a,o,i,c,u,l);a=y,o=v,i=x;let k=_.slice_util.maskToAxes(p);k.forEach(D=>{o[D]=a[D]+1,i[D]=1});let C=_.slice_util.computeOutShape(a,o,i),N=C.filter((D,P)=>k.indexOf(P)===-1);if(i.every(D=>D===1)){let D=Gd({inputs:{x:b},attrs:{begin:a,size:C},backend:t});t.disposeData(b.dataId);let P=zn({inputs:{x:D},attrs:{shape:N},backend:t});return t.disposeData(D.dataId),P}let R=t.makeOutput(N,"float32");if(!N.some(D=>D===0)){let D=t.dataIdMap.get(b.dataId).id,P=new Uint8Array(new Int32Array(w.computeStrides(b.shape)).buffer),T=new Uint8Array(new Int32Array(a).buffer),L=new Uint8Array(new Int32Array(o).buffer),G=new Uint8Array(new Int32Array(i).buffer),j=new Uint8Array(new Int32Array(N).buffer),q=new Uint8Array(new Int32Array(w.computeStrides(N)).buffer),K=t.dataIdMap.get(R.dataId).id;eE(D,P,b.shape.length,T,L,G,j,q,N.length,K)}t.disposeData(b.dataId);let O=zn({inputs:{x:R},attrs:{shape:N},backend:t});return t.disposeData(R.dataId),O}var Xoe={kernelName:Gc,backendName:"wasm",setupFunc:qoe,kernelFunc:Koe},Yoe=!0,Zoe=Tn(Ao,Yoe),tE;function Joe(e){tE=e.wasm.cwrap(No,null,["number, number, number"])}function Qoe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:d,originalAxes:p,inputWasTransposed:h}=Sa(o,s,t),f=d;if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v,f=_.getInnerMostAxes(f.length,u.shape.length))}_.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[m,g]=_.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;tE(c,b,v)}if(h&&t.disposeData(l.dataId),a){let v=_.expandShapeToKeepDim(y.shape,p);y.shape=v}return y}var eie={kernelName:No,backendName:"wasm",setupFunc:Joe,kernelFunc:Qoe},tie=un(Do),nie=un($o),nE;function rie(e){nE=e.wasm.cwrap(Qs,null,["number","array","number","array","number","number"])}function sie(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,a=n.dataIdMap.get(s.dataId).id,{reps:o}=r,i=new Array(s.shape.length);for(let p=0;p{let{x:r}=e,{k:s,sorted:a}=n,o=t.dataIdMap.get(r.dataId).id,i=new Uint8Array(new Int32Array(r.shape).buffer),c=r.shape.slice();c[c.length-1]=s;let u=t.makeOutput(c,r.dtype),l=t.dataIdMap.get(u.dataId).id,d=t.makeOutput(c,"int32"),p=t.dataIdMap.get(d.dataId).id;return rE(o,i,r.shape.length,Bn[r.dtype],s,a,l,p),[u,d]},cie={kernelName:Hc,backendName:"wasm",setupFunc:oie,kernelFunc:iie},sE;function uie(e){sE=e.wasm.cwrap(jc,null,["number","number","bool","number","number","number","number","number","number","array","number","number","number","number","number"])}function lie(e){let{backend:t,inputs:n,attrs:r}=e,{image:s,transforms:a}=n,{interpolation:o,fillMode:i,fillValue:c,outputShape:u}=r,[l,d,p,h]=s.shape,[f,m]=u!=null?u:[d,p],g=[l,f,m,h],b=new Uint8Array(new Int32Array(w.computeStrides(s.shape)).buffer),y=t.makeOutput(g,s.dtype),v=t.dataIdMap.get(y.dataId).id,k=t.dataIdMap.get(s.dataId).id,N=t.dataIdMap.get(a.dataId).id,$=o==="nearest"?1:2,R;switch(i){case"constant":R=1;break;case"reflect":R=2;break;case"wrap":R=3;break;case"nearest":R=4;break;default:R=1;break}return sE(k,N,a.shape[0]>1,l,f,m,h,p,d,b,s.shape.length-1,$,R,c,v),y}var die={kernelName:jc,backendName:"wasm",setupFunc:uie,kernelFunc:lie};function pie(e){let{inputs:t,backend:n,attrs:r}=e,{value:s}=t,{axis:a}=r;a<0&&(a+=s.shape.length);let o=s.shape[a],i=s.shape.length,c=new Array(i-1),u=0;for(let h=0;h({dataId:h,dtype:f,shape:c}))}var hie={kernelName:qc,backendName:"wasm",kernelFunc:pie};function fie(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}var mie={kernelName:Kc,backendName:"wasm",kernelFunc:fie},gie=[yre,xre,Ire,Dre,Rre,Mre,zre,Gre,Yre,Zre,Jre,tse,nse,ase,cse,use,lse,hse,gse,vse,kse,Ise,Cse,Tse,Nse,_se,Dse,$se,Rse,bre,Mse,zse,Use,jse,Xse,Zse,Qse,Sre,nae,sae,oae,iae,uae,pae,fae,bae,xae,Iae,Cae,_ae,Aae,Dae,Rae,Mae,zae,Vae,Hae,qae,Xae,U_,Qae,noe,aoe,ioe,uoe,loe,doe,Wre,foe,boe,xoe,koe,woe,Coe,_oe,Doe,$oe,Kre,Poe,Moe,Boe,zoe,Woe,Uoe,joe,Xoe,Zoe,eie,tie,nie,aie,cie,die,_re,hie,mie];for(let e of gie)Pl(e);var Yw=Q();Yw.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11])));Yw.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Yw.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(e){return!1}});var aE=Fa(pD()),bie='var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");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;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};function moduleLoaded(){}this.onmessage=function(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;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}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);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["getNoExitRuntime"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}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);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}',yie=Fa(hD()),oE=class extends bl{constructor(e){super();this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.init(),this.dataIdMap=new Dp(this,Ss())}write(e,t,n){let r={id:this.dataIdNextNumber++};return this.move(r,e,t,n,1),r}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=w.now();return e(),{kernelMs:w.now()-t}}move(e,t,n,r,s){let a=this.dataIdNextNumber++;if(r==="string"){let u=t;this.dataIdMap.set(e,{id:a,stringBytes:u,shape:n,dtype:r,memoryOffset:null,refCount:s});return}let o=w.sizeFromShape(n),i=o*w.bytesPerElement(r),c=this.wasm._malloc(i);this.dataIdMap.set(e,{id:a,memoryOffset:c,shape:n,dtype:r,refCount:s}),this.wasm.tfjs.registerTensor(a,o,c),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,i),c)}async read(e){return this.readSync(e)}readSync(e){let{memoryOffset:t,dtype:n,shape:r,stringBytes:s}=this.dataIdMap.get(e);if(n==="string")return s;let a=this.wasm.HEAPU8.slice(t,t+w.sizeFromShape(r)*w.bytesPerElement(n));return wie(a.buffer,n)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let r;if(n==null)r=this.write(null,e,t);else{let s=this.dataIdNextNumber++;r={id:s},this.dataIdMap.set(r,{id:s,memoryOffset:n,shape:e,dtype:t,refCount:1});let a=w.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,a,n)}return{dataId:r,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let r=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(n),a=w.sizeFromShape(e);switch(t){case"float32":return new Float32Array(r,s,a);case"int32":return new Int32Array(r,s,a);case"bool":return new Uint8Array(r,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function vie(e){return(t,n)=>(w.fetch(e,{credentials:"same-origin"}).then(r=>{r.ok||t.env.a(`failed to load wasm binary file at '${e}'`),r.arrayBuffer().then(s=>{WebAssembly.instantiate(s,t).then(a=>{n(a.instance,a.module)})})}),{})}function iE(e,t,n){if(Nm!=null)return Nm;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),jd!=null&&jd[r]!=null?jd[r]:n+r}async function xie(){let[e,t]=await Promise.all([Q().getAsync("WASM_HAS_SIMD_SUPPORT"),Q().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,r)=>{let s={};s.locateFile=(i,c)=>{if(i.endsWith(".worker.js")){let u=bie,l=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(l)}return i.endsWith(".wasm")?iE(e,t,Hd!=null?Hd:c):c+i},Zw&&(s.instantiateWasm=vie(iE(e,t,Hd!=null?Hd:"")));let a=!1;s.onAbort=()=>{if(a||qd)return;qd=!0,r({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"})};let o;t&&e&&Nm==null?(s.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+aE.default.toString()],{type:"text/javascript"}),o=(0,aE.default)(s)):o=(0,yie.default)(s),o.then(i=>{a=!0,qd=!1;let c=null;i.tfjs={init:i.cwrap("init",null,[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",c,["number"]),dispose:i.cwrap("dispose",c,[])},n({wasm:i})})})}function wie(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}var kie=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Nm=null,Hd=null,jd={},qd=!1,Zw=!1;function Iie(e,t=!1){if(fy("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),qd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Nm=e,Zw=t}function Sie(e,t=!1){if(qd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof e=="string")Hd=e;else{jd=e;let n=kie.filter(r=>jd[r]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}Zw=t}var Cie="3.9.0",Tie=2;Dh("wasm",async()=>{let{wasm:e}=await xie();return new oE(e)},Tie);var Nie="3.9.0",_ie="3.9.0",Eie="3.9.0",Aie="3.9.0",Die="3.9.0",$ie="3.9.0",Fie="3.9.0",Rie="3.9.0",Pie={tfjs:Nie,"tfjs-core":_ie,"tfjs-data":Eie,"tfjs-layers":Aie,"tfjs-converter":Die,"tfjs-backend-cpu":$ie,"tfjs-backend-webgl":Fie,"tfjs-backend-wasm":Rie};var S0={};Ep(S0,{AnchorPosition:()=>fs,DrawBox:()=>Dm,DrawBoxOptions:()=>h0,DrawFaceLandmarks:()=>I0,DrawFaceLandmarksOptions:()=>k0,DrawTextField:()=>Ta,DrawTextFieldOptions:()=>Zd,drawContour:()=>Ps,drawDetections:()=>Gie,drawFaceExpressions:()=>Xie,drawFaceLandmarks:()=>Zie});function Ps(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:r,y:s},a)=>{let o=t[a];e.moveTo(o.x,o.y),e.lineTo(r,s)}),n){let r=t[t.length-1],s=t[0];if(!r||!s)return;e.moveTo(r.x,r.y),e.lineTo(s.x,s.y)}e.stroke()}var n0={};Ep(n0,{computeReshapedDimensions:()=>t0,getCenterPoint:()=>xi,isDimensions:()=>Em,isEven:()=>_m,isFloat:()=>e0,isTensor:()=>yi,isTensor1D:()=>Oie,isTensor2D:()=>Qw,isTensor3D:()=>Os,isTensor4D:()=>br,isValidNumber:()=>jr,isValidProbablitiy:()=>Lu,range:()=>ps,round:()=>vi});var Nn=class{constructor(t,n){if(!jr(t)||!jr(n))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:n})}`);this._width=t,this._height=n}get width(){return this._width}get height(){return this._height}reverse(){return new Nn(1/this.width,1/this.height)}};function yi(e,t){return e instanceof Ee&&e.shape.length===t}function Oie(e){return yi(e,1)}function Qw(e){return yi(e,2)}function Os(e){return yi(e,3)}function br(e){return yi(e,4)}function e0(e){return e%1!=0}function _m(e){return e%2==0}function vi(e,t=2){let n=10**t;return Math.floor(e*n)/n}function Em(e){return e&&e.width&&e.height}function t0({width:e,height:t},n){let r=n/Math.max(t,e);return new Nn(Math.round(e*r),Math.round(t*r))}function xi(e){return e.reduce((t,n)=>t.add(n),new Oe(0,0)).div(new Oe(e.length,e.length))}function ps(e,t,n){return Array(e).fill(0).map((r,s)=>t+s*n)}function jr(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function Lu(e){return jr(e)&&e>=0&&e<=1}var Oe=class{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new Oe(this.x+t.x,this.y+t.y)}sub(t){return new Oe(this.x-t.x,this.y-t.y)}mul(t){return new Oe(this.x*t.x,this.y*t.y)}div(t){return new Oe(this.x/t.x,this.y/t.y)}abs(){return new Oe(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new Oe(Math.floor(this.x),Math.floor(this.y))}};var ut=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(jr)}static assertIsValidBox(t,n,r=!1){if(!ut.isRect(t))throw new Error(`${n} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!r&&(t.width<0||t.height<0))throw new Error(`${n} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,n=!0){let r=t||{},s=[r.left,r.top,r.right,r.bottom].every(jr),a=[r.x,r.y,r.width,r.height].every(jr);if(!a&&!s)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[o,i,c,u]=a?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];ut.assertIsValidBox({x:o,y:i,width:c,height:u},"Box.constructor",n),this._x=o,this._y=i,this._width=c,this._height=u}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new Oe(this.left,this.top)}get topRight(){return new Oe(this.right,this.top)}get bottomLeft(){return new Oe(this.left,this.bottom)}get bottomRight(){return new Oe(this.right,this.bottom)}round(){let[t,n,r,s]=[this.x,this.y,this.width,this.height].map(a=>Math.round(a));return new ut({x:t,y:n,width:r,height:s})}floor(){let[t,n,r,s]=[this.x,this.y,this.width,this.height].map(a=>Math.floor(a));return new ut({x:t,y:n,width:r,height:s})}toSquare(){let{x:t,y:n,width:r,height:s}=this,a=Math.abs(r-s);return rn&&(i=-d+n+r,d=n),p>t&&(c=-p+t+s,p=t),u<1&&(c=2-u,u=1),l<1&&(c=2-l,l=1),{dy:o,edy:c,dx:a,edx:i,y:l,ey:p,x:u,ex:d,w:r,h:s}}calibrate(t){return new ut({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Bu=class extends ut{constructor(t,n,r,s,a=!1){super({left:t,top:n,right:r,bottom:s},a)}};var Ca=class{constructor(t,n,r,s,a){this._imageDims=new Nn(a.width,a.height),this._score=t,this._classScore=n,this._className=r,this._box=new ut(s).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new ut(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new Ca(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var vt=class extends Ca{constructor(t,n,r){super(t,t,"",n,r)}forSize(t,n){let{score:r,relativeBox:s,imageDims:a}=super.forSize(t,n);return new vt(r,s,a)}};function r0(e,t,n=!0){let r=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),s=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),a=r*s;return n?a/(e.area+t.area-a):a/Math.min(e.area,t.area)}function s0(e){let t=e.map(i=>i.x),n=e.map(i=>i.y),r=t.reduce((i,c)=>ccii({score:o,boxIndex:i})).sort((o,i)=>o.score-i.score).map(o=>o.boxIndex),a=[];for(;s.length>0;){let o=s.pop();a.push(o);let i=s,c=[];for(let u=0;uc[l]<=n)}return a}function qr(e,t){return M(()=>{let[n,r,s]=t,a=xn([...e.shape.slice(0,3),1],n,"float32"),o=xn([...e.shape.slice(0,3),1],r,"float32"),i=xn([...e.shape.slice(0,3),1],s,"float32"),c=Ze([a,o,i],3);return fe(e,c)})}function o0(e,t=!1){return M(()=>{let[n,r]=e.shape.slice(1);if(n===r)return e;let s=Math.abs(n-r),a=Math.round(s*(t?.5:1)),o=n>r?2:1,i=p=>{let h=e.shape.slice();return h[o]=p,xn(h,0,"float32")},c=i(a),u=s-c.shape[o],d=[t&&u?i(u):null,e,c].filter(p=>!!p).map(p=>ce(p,"float32"));return Ze(d,o)})}function Mie(e){let t=e.slice();for(let n=t.length-1;n>0;n--){let r=Math.floor(Math.random()*(n+1)),s=t[n];t[n]=t[r],t[r]=s}return t}function Kd(e){return 1/(1+Math.exp(-e))}function Lie(e){return Math.log(e/(1-e))}var zu=class extends ut{constructor(t,n,r,s,a=!1){super({x:t,y:n,width:r,height:s},a)}};var Bie=.5,zie=.43,Wie=.45,yr=class{constructor(t,n,r=new Oe(0,0)){let{width:s,height:a}=n;this._imgDims=new Nn(s,a),this._shift=r,this._positions=t.map(o=>o.mul(new Oe(s,a)).add(r))}get shift(){return new Oe(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new Oe(this.imageWidth,this.imageHeight)))}forSize(t,n){return new this.constructor(this.relativePositions,{width:t,height:n})}shiftBy(t,n){return new this.constructor(this.relativePositions,this._imgDims,new Oe(t,n))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,n={}){if(t){let a=t instanceof vt?t.box.floor():new ut(t);return this.shiftBy(a.x,a.y).align(null,n)}let{useDlibAlignment:r,minBoxPadding:s}={useDlibAlignment:!1,minBoxPadding:.2,...n};return r?this.alignDlib():this.alignMinBbox(s)}alignDlib(){let t=this.getRefPointsForAlignment(),[n,r,s]=t,a=d=>s.sub(d).magnitude(),o=(a(n)+a(r))/2,i=Math.floor(o/Wie),c=xi(t),u=Math.floor(Math.max(0,c.x-Bie*i)),l=Math.floor(Math.max(0,c.y-zie*i));return new zu(u,l,Math.min(i,this.imageWidth+u),Math.min(i,this.imageHeight+l))}alignMinBbox(t){let n=s0(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var cE=class extends yr{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],xi([t[3],t[4]])]}};var Wu=class extends yr{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(xi)}};var Xd=class{constructor(t,n){this._label=t,this._distance=n}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${vi(this.distance)})`:""}`}};var Yd=class extends ut{static assertIsValidLabeledBox(t,n){if(ut.assertIsValidBox(t,n),!jr(t.label))throw new Error(`${n} - expected property label (${t.label}) to be a number`)}constructor(t,n){super(t);this._label=n}get label(){return this._label}};var Ms=class{constructor(t,n){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(n)||n.some(r=>!(r instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=n}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let n=t.descriptors.map(r=>new Float32Array(r));return new Ms(t.label,n)}};var uE=class extends Yd{static assertIsValidPredictedBox(t,n){if(Yd.assertIsValidLabeledBox(t,n),!Lu(t.score)||!Lu(t.classScore))throw new Error(`${n} - expected properties score (${t.score}) and (${t.classScore}) to be a number between [0, 1]`)}constructor(t,n,r,s){super(t,n);this._score=r,this._classScore=s}get score(){return this._score}get classScore(){return this._classScore}};function hs(e){return e.detection instanceof vt}function wi(e,t){return{...e,...{detection:t}}}function i0(){let e=window.fetch;if(!e)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:e,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function Am(e){let t="";if(!e)try{e=Hi("fs")}catch(r){t=r.toString()}return{readFile:e?r=>new Promise((s,a)=>{e.readFile(r,(o,i)=>o?a(o):s(i))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function c0(){let e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=global.Video||global.HTMLVideoElement,r=()=>{if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},s=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},a=()=>{if(n)return new n;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},o=global.fetch,i=Am();return{Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:r,createImageElement:s,createVideoElement:a,fetch:o,...i}}function u0(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}function l0(){return typeof global=="object"&&typeof Hi=="function"&&typeof module!="undefined"&&typeof process!="undefined"&&!!process.version}var tn;function Vie(){if(!tn)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return tn}function d0(e){tn=e}function p0(){return u0()?d0(i0()):l0()?d0(c0()):null}function Uie(e){if(tn||p0(),!tn)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=tn.Canvas,Image:n=tn.Image}=e;tn.Canvas=t,tn.Image=n,tn.createCanvasElement=e.createCanvasElement||(()=>new t),tn.createImageElement=e.createImageElement||(()=>new n),tn.ImageData=e.ImageData||tn.ImageData,tn.Video=e.Video||tn.Video,tn.fetch=e.fetch||tn.fetch,tn.readFile=e.readFile||tn.readFile}var Je={getEnv:Vie,setEnv:d0,initialize:p0,createBrowserEnv:i0,createFileSystem:Am,createNodejsEnv:c0,monkeyPatch:Uie,isBrowser:u0,isNodejs:l0};p0();function ki(e){return!Je.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function Wn(e){let{Canvas:t,CanvasRenderingContext2D:n}=Je.getEnv();if(e instanceof n)return e;let r=ki(e);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let s=r.getContext("2d");if(!s)throw new Error("resolveContext2d - canvas 2d context is null");return s}var fs;(function(s){s.TOP_LEFT="TOP_LEFT",s.TOP_RIGHT="TOP_RIGHT",s.BOTTOM_LEFT="BOTTOM_LEFT",s.BOTTOM_RIGHT="BOTTOM_RIGHT"})(fs||(fs={}));var Zd=class{constructor(t={}){let{anchorPosition:n,backgroundColor:r,fontColor:s,fontSize:a,fontStyle:o,padding:i}=t;this.anchorPosition=n||fs.TOP_LEFT,this.backgroundColor=r||"rgba(0, 0, 0, 0.5)",this.fontColor=s||"rgba(255, 255, 255, 1)",this.fontSize=a||14,this.fontStyle=o||"Georgia",this.padding=i||4}},Ta=class{constructor(t,n,r={}){this.text=typeof t=="string"?[t]:t instanceof Ta?t.text:t,this.anchor=n,this.options=new Zd(r)}measureWidth(t){let{padding:n}=this.options;return this.text.map(r=>t.measureText(r).width).reduce((r,s)=>r{let f=c+d.x,m=c+d.y+(h+1)*o;r.fillText(p,f,m)})}};var h0=class{constructor(t={}){let{boxColor:n,lineWidth:r,label:s,drawLabelOptions:a}=t;this.boxColor=n||"rgba(0, 0, 255, 1)",this.lineWidth=r||2,this.label=s;let o={anchorPosition:fs.BOTTOM_LEFT,backgroundColor:this.boxColor};this.drawLabelOptions=new Zd({...o,...a})}},Dm=class{constructor(t,n={}){this.box=new ut(t),this.options=new h0(n)}draw(t){let n=Wn(t),{boxColor:r,lineWidth:s}=this.options,{x:a,y:o,width:i,height:c}=this.box;n.strokeStyle=r,n.lineWidth=s,n.strokeRect(a,o,i,c);let{label:u}=this.options;u&&new Ta([u],{x:a-s/2,y:o},this.options.drawLabelOptions).draw(t)}};function Gie(e,t){(Array.isArray(t)?t:[t]).forEach(r=>{let s=r instanceof vt?r.score:hs(r)?r.detection.score:void 0,a=r instanceof vt?r.box:hs(r)?r.detection.box:new ut(r),o=s?`${vi(s)}`:void 0;new Dm(a,{label:o}).draw(e)})}function Jd(e){let{Image:t,Video:n}=Je.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function f0(e){return new Promise((t,n)=>{if(e instanceof Je.getEnv().Canvas||Jd(e))return t(null);function r(a){!a.currentTarget||(a.currentTarget.removeEventListener("load",s),a.currentTarget.removeEventListener("error",r),n(a))}function s(a){!a.currentTarget||(a.currentTarget.removeEventListener("load",s),a.currentTarget.removeEventListener("error",r),t(a))}e.addEventListener("load",s),e.addEventListener("error",r)})}function m0(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToImage - expected buf to be of type: Blob"));let r=new FileReader;r.onload=()=>{typeof r.result!="string"&&n(new Error("bufferToImage - expected reader.result to be a string, in onload"));let s=Je.getEnv().createImageElement();s.onload=()=>t(s),s.onerror=n,s.src=r.result},r.onerror=n,r.readAsDataURL(e)})}function Ii(e){let{Image:t,Video:n}=Je.getEnv();return e instanceof t?new Nn(e.naturalWidth,e.naturalHeight):e instanceof n?new Nn(e.videoWidth,e.videoHeight):new Nn(e.width,e.height)}function Si({width:e,height:t}){let{createCanvasElement:n}=Je.getEnv(),r=n();return r.width=e,r.height=t,r}function Qd(e,t){let{ImageData:n}=Je.getEnv();if(!(e instanceof n)&&!Jd(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:s}=t||Ii(e),a=Si({width:r,height:s});return e instanceof n?Wn(a).putImageData(e,0,0):Wn(a).drawImage(e,0,0,r,s),a}async function g0(e,t){let n=t||Je.getEnv().createCanvasElement(),[r,s,a]=e.shape.slice(br(e)?1:0),o=M(()=>e.as3D(r,s,a).toInt());return await Vo.toPixels(o,n),o.dispose(),n}function $m(e){let{Image:t,Canvas:n,Video:r}=Je.getEnv();return e instanceof t||e instanceof n||e instanceof r}function b0(e,t,n=!1){let{Image:r,Canvas:s}=Je.getEnv();if(!(e instanceof r||e instanceof s))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Si({width:1,height:1});let a=Ii(e),o=t/Math.max(a.height,a.width),i=o*a.width,c=o*a.height,u=Si({width:t,height:t}),l=e instanceof s?e:Qd(e),d=Math.abs(i-c)/2,p=n&&i0&&l.height>0&&Wn(u).drawImage(l,p,h,i,c),u}var Ls=class{constructor(t,n=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=n,this._batchSize=t.length,t.forEach((r,s)=>{if(Os(r)){this._imageTensors[s]=r,this._inputDimensions[s]=r.shape;return}if(br(r)){let o=r.shape[0];if(o!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${o} passed, but not supported in input array`);this._imageTensors[s]=r,this._inputDimensions[s]=r.shape.slice(1);return}let a=r instanceof Je.getEnv().Canvas?r:Qd(r);this._canvases[s]=a,this._inputDimensions[s]=[a.height,a.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return ps(this.batchSize,0,1).map((t,n)=>this.getReshapedInputDimensions(n))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let n=this.getInputWidth(t),r=this.getInputHeight(t);return t0({width:n,height:r},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,M(()=>{let r=ps(this.batchSize,0,1).map(a=>{let o=this.getInput(a);if(o instanceof Ee){let i=br(o)?o:fn(o);return i=o0(i,n),(i.shape[1]!==t||i.shape[2]!==t)&&(i=Jn.resizeBilinear(i,[t,t],!1,!1)),i.as3D(t,t,3)}if(o instanceof Je.getEnv().Canvas)return Vo.fromPixels(b0(o,t,n));throw new Error(`toBatchTensor - at batchIdx ${a}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${o}`)});return Pt(r.map(a=>ce(a,"float32"))).as4D(this.batchSize,t,t,3)})}};async function mt(e){if(e instanceof Ls)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");let n=s=>Array.isArray(e)?` at input index ${s}:`:"",r=t.map(ki);return r.forEach((s,a)=>{if(!$m(s)&&!Os(s)&&!br(s))throw typeof t[a]=="string"?new Error(`toNetInput -${n(a)} string passed, but could not resolve HTMLElement for element id ${t[a]}`):new Error(`toNetInput -${n(a)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(br(s)){let o=s.shape[0];if(o!==1)throw new Error(`toNetInput -${n(a)} tf.Tensor4D with batchSize ${o} passed, but not supported in input array`)}}),await Promise.all(r.map(s=>$m(s)&&f0(s))),new Ls(r,Array.isArray(e))}async function Vu(e,t){let{Canvas:n}=Je.getEnv(),r=e;if(!(e instanceof n)){let o=await mt(e);if(o.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let i=o.getInput(0);r=i instanceof n?i:await g0(i)}let s=Wn(r);return t.map(o=>o instanceof vt?o.forSize(r.width,r.height).box.floor():o).map(o=>o.clipAtImageBorders(r.width,r.height)).map(({x:o,y:i,width:c,height:u})=>{let l=Si({width:c,height:u});return c>0&&u>0&&Wn(l).putImageData(s.getImageData(o,i,c,u),0,0),l})}async function Uu(e,t){if(!Os(e)&&!br(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(br(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return M(()=>{let[n,r,s]=e.shape.slice(br(e)?1:0);return t.map(i=>i instanceof vt?i.forSize(r,n).box:i).map(i=>i.clipAtImageBorders(r,n)).map(({x:i,y:c,width:u,height:l})=>lu(e.as3D(n,r,s),[c,i,0],[l,u,s]))})}async function Bs(e,t){let{fetch:n}=Je.getEnv(),r=await n(e,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function Hie(e){let t=await Bs(e),n=await t.blob();if(!n.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${n.type}, for url: ${t.url}`);return m0(n)}async function y0(e){return(await Bs(e)).json()}async function jie(e){return new Float32Array(await(await Bs(e)).arrayBuffer())}function lE(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let r=Je.getEnv().createVideoElement();r.oncanplay=()=>t(r),r.onerror=n,r.playsInline=!0,r.muted=!0,r.src=URL.createObjectURL(e),r.play()})}async function qie(e){let t=await Bs(e),n=await t.blob();if(!n.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${n.type}, for url: ${t.url}`);return lE(n)}function Fm(e,t){let n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};let r=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(r,"");let s=e.split("/").filter(i=>i),a=e.endsWith(".json")?s[s.length-1]:n,o=r+(e.endsWith(".json")?s.slice(0,s.length-1):s).join("/");return o=e.startsWith("/")?`/${o}`:o,{modelBaseUri:o,manifestUri:o==="/"?`/${a}`:`${o}/${a}`}}async function v0(e,t){let{manifestUri:n,modelBaseUri:r}=Fm(e,t),s=await y0(n);return Xt.loadWeights(s,r)}function Kie(e,t,n=!1){let{width:r,height:s}=n?Ii(t):t;return e.width=r,e.height=s,{width:r,height:s}}var ln=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:n,objProp:r}=this.traversePropertyPath(t);return n[r]}reassignParamFromPath(t,n){let{obj:r,objProp:s}=this.traversePropertyPath(t);r[s].dispose(),r[s]=n}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof na)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof na))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let r=jn(n.dataSync());n.dispose(),this.reassignParamFromPath(t,r)})}dispose(t=!0){this.getParamList().forEach(n=>{if(t&&n.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${n.path}`);n.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,n)=>t.concat(n)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let n=await v0(t,this.getDefaultModelName());this.loadFromWeightMap(n)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:n}=Je.getEnv(),{manifestUri:r,modelBaseUri:s}=Fm(t,this.getDefaultModelName()),a=u=>Promise.all(u.map(l=>n(l).then(d=>d.buffer))),o=Xt.weightsLoaderFactory(a),i=JSON.parse((await n(r)).toString()),c=await o(i,s);this.loadFromWeightMap(c)}loadFromWeightMap(t){let{paramMappings:n,params:r}=this.extractParamsFromWeightMap(t);this._paramMappings=n,this._params=r}extractWeights(t){let{paramMappings:n,params:r}=this.extractParams(t);this._paramMappings=n,this._params=r}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let n=t.split("/").reduce((a,o)=>{if(!a.nextObj.hasOwnProperty(o))throw new Error(`traversePropertyPath - object does not have property ${o}, for path ${t}`);return{obj:a.nextObj,objProp:o,nextObj:a.nextObj[o]}},{nextObj:this.params}),{obj:r,objProp:s}=n;if(!r||!s||!(r[s]instanceof Ee))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:r,objProp:s}}};function Vn(e,t,n){return M(()=>{let r=Zo(e,t.depthwise_filter,t.pointwise_filter,n,"same");return r=Y(r,t.bias),r})}function Rm(e,t,n=!1){return M(()=>{let r=qe(n?Y(Ft(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):Vn(e,t.conv0,[2,2])),s=Vn(r,t.conv1,[1,1]),a=qe(Y(r,s)),o=Vn(a,t.conv2,[1,1]);return qe(Y(r,Y(s,o)))})}function ep(e,t,n=!1,r=!0){return M(()=>{let s=qe(n?Y(Ft(e,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):Vn(e,t.conv0,r?[2,2]:[1,1])),a=Vn(s,t.conv1,[1,1]),o=qe(Y(s,a)),i=Vn(o,t.conv2,[1,1]),c=qe(Y(s,Y(a,i))),u=Vn(c,t.conv3,[1,1]);return qe(Y(s,Y(a,Y(i,u))))})}function Ci(e,t,n="same",r=!1){return M(()=>{let s=Y(Ft(e,t.filters,[1,1],n),t.bias);return r?qe(s):s})}function _n(e,t){Object.keys(e).forEach(n=>{t.some(r=>r.originalPath===n)||e[n].dispose()})}function Gu(e,t){return(n,r,s,a)=>{let o=Or(e(n*r*s*s),[s,s,n,r]),i=He(e(r));return t.push({paramPath:`${a}/filters`},{paramPath:`${a}/bias`}),{filters:o,bias:i}}}function Pm(e,t){return(n,r,s)=>{let a=Pr(e(n*r),[n,r]),o=He(e(r));return t.push({paramPath:`${s}/weights`},{paramPath:`${s}/bias`}),{weights:a,bias:o}}}var Om=class{constructor(t,n,r){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=r}};function Hu(e,t){return(n,r,s)=>{let a=Or(e(3*3*n),[3,3,n,1]),o=Or(e(n*r),[1,1,n,r]),i=He(e(r));return t.push({paramPath:`${s}/depthwise_filter`},{paramPath:`${s}/pointwise_filter`},{paramPath:`${s}/bias`}),new Om(a,o,i)}}function ju(e){return t=>{let n=e(`${t}/depthwise_filter`,4),r=e(`${t}/pointwise_filter`,4),s=e(`${t}/bias`,1);return new Om(n,r,s)}}function rr(e,t){return(n,r,s)=>{let a=e[n];if(!yi(a,r))throw new Error(`expected weightMap[${n}] to be a Tensor${r}D, instead have ${a}`);return t.push({originalPath:n,paramPath:s||n}),a}}function En(e){let t=e;function n(s){let a=t.slice(0,s);return t=t.slice(s),a}function r(){return t}return{extractWeights:n,getRemainingWeights:r}}function Mm(e,t){let n=Gu(e,t),r=Hu(e,t);function s(o,i,c,u=!1){let l=u?n(o,i,3,`${c}/conv0`):r(o,i,`${c}/conv0`),d=r(i,i,`${c}/conv1`),p=r(i,i,`${c}/conv2`);return{conv0:l,conv1:d,conv2:p}}function a(o,i,c,u=!1){let{conv0:l,conv1:d,conv2:p}=s(o,i,c,u),h=r(i,i,`${c}/conv3`);return{conv0:l,conv1:d,conv2:p,conv3:h}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:a}}function dE(e){let t=[],{extractWeights:n,getRemainingWeights:r}=En(e),{extractDenseBlock4Params:s}=Mm(n,t),a=s(3,32,"dense0",!0),o=s(32,64,"dense1"),i=s(64,128,"dense2"),c=s(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:a,dense1:o,dense2:i,dense3:c}}}function Lm(e){return t=>{let n=e(`${t}/filters`,4),r=e(`${t}/bias`,1);return{filters:n,bias:r}}}function Bm(e,t){let n=rr(e,t),r=Lm(n),s=ju(n);function a(i,c=!1){let u=c?r(`${i}/conv0`):s(`${i}/conv0`),l=s(`${i}/conv1`),d=s(`${i}/conv2`);return{conv0:u,conv1:l,conv2:d}}function o(i,c=!1){let u=c?r(`${i}/conv0`):s(`${i}/conv0`),l=s(`${i}/conv1`),d=s(`${i}/conv2`),p=s(`${i}/conv3`);return{conv0:u,conv1:l,conv2:d,conv3:p}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:o}}function pE(e){let t=[],{extractDenseBlock4Params:n}=Bm(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return _n(e,t),{params:r,paramMappings:t}}var tp=class extends ln{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(112,!0),"float32"),a=qr(r,[122.782,117.001,104.298]).div(255),o=ep(a,n.dense0,!0);return o=ep(o,n.dense1),o=ep(o,n.dense2),o=ep(o,n.dense3),o=ur(o,[7,7],[2,2],"valid"),o})}async forward(t){return this.forwardInput(await mt(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return pE(t)}extractParams(t){return dE(t)}};function np(e,t){return M(()=>Y(De(e,t.weights),t.bias))}function hE(e,t,n){let r=[],{extractWeights:s,getRemainingWeights:a}=En(e),i=Pm(s,r)(t,n,"fc");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:r,params:{fc:i}}}function fE(e){let t=[],n=rr(e,t);function r(a){let o=n(`${a}/weights`,2),i=n(`${a}/bias`,1);return{weights:o,bias:i}}let s={fc:r("fc")};return _n(e,t),{params:s,paramMappings:t}}function zm(e){let t={},n={};return Object.keys(e).forEach(r=>{let s=r.startsWith("fc")?n:t;s[r]=e[r]}),{featureExtractorMap:t,classifierMap:n}}var rp=class extends ln{constructor(t,n){super(t);this._faceFeatureExtractor=n}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:n}=this;if(!n)throw new Error(`${this._name} - load model before inference`);return M(()=>{let r=t instanceof Ls?this.faceFeatureExtractor.forwardInput(t):t;return np(r.as2D(r.shape[0],-1),n.fc)})}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:n,paramMappings:r}=this.extractClassifierParams(t);this._params=n,this._paramMappings=r}extractClassifierParams(t){return hE(t,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(t){let{featureExtractorMap:n,classifierMap:r}=zm(t);return this.faceFeatureExtractor.loadFromWeightMap(n),fE(r)}extractParams(t){let n=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),s=r*n+r,a=t.slice(0,t.length-s),o=t.slice(t.length-s);return this.faceFeatureExtractor.extractWeights(a),this.extractClassifierParams(o)}};var x0=["neutral","happy","sad","angry","fearful","disgusted","surprised"],Na=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);x0.forEach((n,r)=>{this[n]=t[r]})}asSortedArray(){return x0.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var Wm=class extends rp{constructor(t=new tp){super("FaceExpressionNet",t)}forwardInput(t){return M(()=>Rr(this.runNet(t)))}async forward(t){return this.forwardInput(await mt(t))}async predictExpressions(t){let n=await mt(t),r=await this.forwardInput(n),s=await Promise.all(dt(r).map(async o=>{let i=o.dataSync();return o.dispose(),i}));r.dispose();let a=s.map(o=>new Na(o));return n.isBatchInput?a:a[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function w0(e){return e.expressions instanceof Na}function Vm(e,t){return{...e,...{expressions:t}}}function Xie(e,t,n=.1,r){(Array.isArray(t)?t:[t]).forEach(a=>{let o=a instanceof Na?a:w0(a)?a.expressions:void 0;if(!o)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let c=o.asSortedArray().filter(d=>d.probability>n),u=hs(a)?a.detection.box.bottomLeft:r||new Oe(0,0);new Ta(c.map(d=>`${d.expression} (${vi(d.probability)})`),u).draw(e)})}function Ti(e){return hs(e)&&e.landmarks instanceof yr&&e.unshiftedLandmarks instanceof yr&&e.alignedRect instanceof vt}function Yie(e){let t=(i,c,u,l)=>Math.atan2(l-c,u-i)%Math.PI,n=i=>i*180/Math.PI,r={roll:void 0,pitch:void 0,yaw:void 0};if(!e||!e._positions||e._positions.length!==68)return r;let s=e._positions;r.roll=-t(s[36]._x,s[36]._y,s[45]._x,s[45]._y),r.pitch=t(0,Math.abs(s[0]._x-s[30]._x)/s[30]._x,Math.PI,Math.abs(s[16]._x-s[30]._x)/s[30]._x);let a=s.reduce((i,c)=>ii>c._y?i:c._y,-1/0);return r.yaw=Math.PI*(e._imgDims._height/(o-a)/1.4-1),r}function qu(e,t){let{box:n}=e.detection,r=t.shiftBy(n.x,n.y),s=r.align(),{imageDims:a}=e.detection,o=new vt(e.detection.score,s.rescale(a.reverse()),a),i=Yie(t);return{...e,...{landmarks:r,unshiftedLandmarks:t,alignedRect:o,angle:i}}}var k0=class{constructor(t={}){let{drawLines:n=!0,drawPoints:r=!0,lineWidth:s,lineColor:a,pointSize:o,pointColor:i}=t;this.drawLines=n,this.drawPoints=r,this.lineWidth=s||1,this.pointSize=o||2,this.lineColor=a||"rgba(0, 255, 255, 1)",this.pointColor=i||"rgba(255, 0, 255, 1)"}},I0=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new k0(n)}draw(t){let n=Wn(t),{drawLines:r,drawPoints:s,lineWidth:a,lineColor:o,pointSize:i,pointColor:c}=this.options;if(r&&this.faceLandmarks instanceof Wu&&(n.strokeStyle=o,n.lineWidth=a,Ps(n,this.faceLandmarks.getJawOutline()),Ps(n,this.faceLandmarks.getLeftEyeBrow()),Ps(n,this.faceLandmarks.getRightEyeBrow()),Ps(n,this.faceLandmarks.getNose()),Ps(n,this.faceLandmarks.getLeftEye(),!0),Ps(n,this.faceLandmarks.getRightEye(),!0),Ps(n,this.faceLandmarks.getMouth(),!0)),s){n.strokeStyle=c,n.fillStyle=c;let u=l=>{n.beginPath(),n.arc(l.x,l.y,i,0,2*Math.PI),n.fill()};this.faceLandmarks.positions.forEach(u)}}};function Zie(e,t){(Array.isArray(t)?t:[t]).forEach(r=>{let s=r instanceof yr?r:Ti(r)?r.landmarks:void 0;if(!s)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new I0(s).draw(e)})}var mE="1.5.3";function Qie(e,t){let n=Gu(e,t),r=Hu(e,t);function s(o,i,c){let u=r(o,i,`${c}/separable_conv0`),l=r(i,i,`${c}/separable_conv1`),d=n(o,i,1,`${c}/expansion_conv`);return{separable_conv0:u,separable_conv1:l,expansion_conv:d}}function a(o,i){let c=r(o,o,`${i}/separable_conv0`),u=r(o,o,`${i}/separable_conv1`),l=r(o,o,`${i}/separable_conv2`);return{separable_conv0:c,separable_conv1:u,separable_conv2:l}}return{extractConvParams:n,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:a}}function gE(e,t){let n=[],{extractWeights:r,getRemainingWeights:s}=En(e),{extractConvParams:a,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:c}=Qie(r,n),u=a(3,32,3,"entry_flow/conv_in"),l=i(32,64,"entry_flow/reduction_block_0"),d=i(64,128,"entry_flow/reduction_block_1"),p={conv_in:u,reduction_block_0:l,reduction_block_1:d},h={};ps(t,0,1).forEach(b=>{h[`main_block_${b}`]=c(128,`middle_flow/main_block_${b}`)});let f=i(128,256,"exit_flow/reduction_block"),m=o(256,512,"exit_flow/separable_conv"),g={reduction_block:f,separable_conv:m};if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:n,params:{entry_flow:p,middle_flow:h,exit_flow:g}}}function ece(e,t){let n=rr(e,t),r=Lm(n),s=ju(n);function a(i){let c=s(`${i}/separable_conv0`),u=s(`${i}/separable_conv1`),l=r(`${i}/expansion_conv`);return{separable_conv0:c,separable_conv1:u,expansion_conv:l}}function o(i){let c=s(`${i}/separable_conv0`),u=s(`${i}/separable_conv1`),l=s(`${i}/separable_conv2`);return{separable_conv0:c,separable_conv1:u,separable_conv2:l}}return{extractConvParams:r,extractSeparableConvParams:s,extractReductionBlockParams:a,extractMainBlockParams:o}}function bE(e,t){let n=[],{extractConvParams:r,extractSeparableConvParams:s,extractReductionBlockParams:a,extractMainBlockParams:o}=ece(e,n),i=r("entry_flow/conv_in"),c=a("entry_flow/reduction_block_0"),u=a("entry_flow/reduction_block_1"),l={conv_in:i,reduction_block_0:c,reduction_block_1:u},d={};ps(t,0,1).forEach(m=>{d[`main_block_${m}`]=o(`middle_flow/main_block_${m}`)});let p=a("exit_flow/reduction_block"),h=s("exit_flow/separable_conv"),f={reduction_block:p,separable_conv:h};return _n(e,n),{params:{entry_flow:l,middle_flow:d,exit_flow:f},paramMappings:n}}function yE(e,t,n){return Y(Ft(e,t.filters,n,"same"),t.bias)}function C0(e,t,n=!0){let r=n?qe(e):e;return r=Vn(r,t.separable_conv0,[1,1]),r=Vn(qe(r),t.separable_conv1,[1,1]),r=Rt(r,[3,3],[2,2],"same"),r=Y(r,yE(e,t.expansion_conv,[2,2])),r}function tce(e,t){let n=Vn(qe(e),t.separable_conv0,[1,1]);return n=Vn(qe(n),t.separable_conv1,[1,1]),n=Vn(qe(n),t.separable_conv2,[1,1]),n=Y(n,e),n}var T0=class extends ln{constructor(t){super("TinyXception");this._numMainBlocks=t}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyXception - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(112,!0),"float32"),a=qr(r,[122.782,117.001,104.298]).div(255),o=qe(yE(a,n.entry_flow.conv_in,[2,2]));return o=C0(o,n.entry_flow.reduction_block_0,!1),o=C0(o,n.entry_flow.reduction_block_1),ps(this._numMainBlocks,0,1).forEach(i=>{o=tce(o,n.middle_flow[`main_block_${i}`])}),o=C0(o,n.exit_flow.reduction_block),o=qe(Vn(o,n.exit_flow.separable_conv,[1,1])),o})}async forward(t){return this.forwardInput(await mt(t))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(t){return bE(t,this._numMainBlocks)}extractParams(t){return gE(t,this._numMainBlocks)}};function vE(e){let t=[],{extractWeights:n,getRemainingWeights:r}=En(e),s=Pm(n,t),a=s(512,1,"fc/age"),o=s(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:a,gender:o}}}}function xE(e){let t=[],n=rr(e,t);function r(a){let o=n(`${a}/weights`,2),i=n(`${a}/bias`,1);return{weights:o,bias:i}}let s={fc:{age:r("fc/age"),gender:r("fc/gender")}};return _n(e,t),{params:s,paramMappings:t}}var zs;(function(n){n.FEMALE="female",n.MALE="male"})(zs||(zs={}));var Um=class extends ln{constructor(t=new T0(2)){super("AgeGenderNet");this._faceFeatureExtractor=t}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:n}=this;if(!n)throw new Error(`${this._name} - load model before inference`);return M(()=>{let r=t instanceof Ls?this.faceFeatureExtractor.forwardInput(t):t,s=ur(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),a=np(s,n.fc.age).as1D(),o=np(s,n.fc.gender);return{age:a,gender:o}})}forwardInput(t){return M(()=>{let{age:n,gender:r}=this.runNet(t);return{age:n,gender:Rr(r)}})}async forward(t){return this.forwardInput(await mt(t))}async predictAgeAndGender(t){let n=await mt(t),r=await this.forwardInput(n),s=dt(r.age),a=dt(r.gender),o=s.map((c,u)=>({ageTensor:c,genderTensor:a[u]})),i=await Promise.all(o.map(async({ageTensor:c,genderTensor:u})=>{let l=c.dataSync()[0],d=u.dataSync()[0],p=d>.5,h=p?zs.MALE:zs.FEMALE,f=p?d:1-d;return c.dispose(),u.dispose(),{age:l,gender:h,genderProbability:f}}));return r.age.dispose(),r.gender.dispose(),n.isBatchInput?i:i[0]}getDefaultModelName(){return"age_gender_model"}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:n,paramMappings:r}=this.extractClassifierParams(t);this._params=n,this._paramMappings=r}extractClassifierParams(t){return vE(t)}extractParamsFromWeightMap(t){let{featureExtractorMap:n,classifierMap:r}=zm(t);return this.faceFeatureExtractor.loadFromWeightMap(n),xE(r)}extractParams(t){let n=512*1+1+(512*2+2),r=t.slice(0,t.length-n),s=t.slice(t.length-n);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(s)}};var sp=class extends rp{postProcess(t,n,r){let s=r.map(({width:o,height:i})=>{let c=n/Math.max(i,o);return{width:o*c,height:i*c}}),a=s.length;return M(()=>{let o=(d,p)=>Pt([xn([68],d,"float32"),xn([68],p,"float32")],1).as2D(1,136).as1D(),i=(d,p)=>{let{width:h,height:f}=s[d];return p(h,f)?Math.abs(h-f)/2:0},c=d=>i(d,(p,h)=>pi(d,(p,h)=>ho(c(p),u(p))))).div(Pt(Array.from(Array(a),(d,p)=>o(s[p].width,s[p].height))))})}forwardInput(t){return M(()=>{let n=this.runNet(t);return this.postProcess(n,t.inputSize,t.inputDimensions.map(([r,s])=>({height:r,width:s})))})}async forward(t){return this.forwardInput(await mt(t))}async detectLandmarks(t){let n=await mt(t),r=M(()=>dt(this.forwardInput(n))),s=await Promise.all(r.map(async(a,o)=>{let i=Array.from(a.dataSync()),c=i.filter((l,d)=>_m(d)),u=i.filter((l,d)=>!_m(d));return new Wu(Array(68).fill(0).map((l,d)=>new Oe(c[d],u[d])),{height:n.getInputHeight(o),width:n.getInputWidth(o)})}));return r.forEach(a=>a.dispose()),n.isBatchInput?s:s[0]}getClassifierChannelsOut(){return 136}};var Ku=class extends sp{constructor(t=new tp){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function wE(e){let t=[],{extractDenseBlock3Params:n}=Bm(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return _n(e,t),{params:r,paramMappings:t}}function kE(e){let t=[],{extractWeights:n,getRemainingWeights:r}=En(e),{extractDenseBlock3Params:s}=Mm(n,t),a=s(3,32,"dense0",!0),o=s(32,64,"dense1"),i=s(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:a,dense1:o,dense2:i}}}var N0=class extends ln{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(112,!0),"float32"),a=qr(r,[122.782,117.001,104.298]).div(255),o=Rm(a,n.dense0,!0);return o=Rm(o,n.dense1),o=Rm(o,n.dense2),o=ur(o,[14,14],[2,2],"valid"),o})}async forward(t){return this.forwardInput(await mt(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return wE(t)}extractParams(t){return kE(t)}};var Gm=class extends sp{constructor(t=new N0){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var IE=class extends Ku{};function SE(e,t){return Y(V(e,t.weights),t.biases)}function _0(e,t,n,r,s="same"){let{filters:a,bias:o}=t.conv,i=Ft(e,a,n,s);return i=Y(i,o),i=SE(i,t.scale),r?qe(i):i}function CE(e,t){return _0(e,t,[1,1],!0)}function E0(e,t){return _0(e,t,[1,1],!1)}function Hm(e,t){return _0(e,t,[2,2],!0,"valid")}function nce(e,t){function n(i,c,u){let l=e(i),d=l.length/(c*u*u);if(e0(d))throw new Error(`depth has to be an integer: ${d}, weights.length: ${l.length}, numFilters: ${c}, filterSize: ${u}`);return M(()=>Pe(Or(l,[c,d,u,u]),[2,3,1,0]))}function r(i,c,u,l){let d=n(i,c,u),p=He(e(c));return t.push({paramPath:`${l}/filters`},{paramPath:`${l}/bias`}),{filters:d,bias:p}}function s(i,c){let u=He(e(i)),l=He(e(i));return t.push({paramPath:`${c}/weights`},{paramPath:`${c}/biases`}),{weights:u,biases:l}}function a(i,c,u,l){let d=r(i,c,u,`${l}/conv`),p=s(c,`${l}/scale`);return{conv:d,scale:p}}function o(i,c,u,l,d=!1){let p=a((d?.5:1)*i,c,u,`${l}/conv1`),h=a(i,c,u,`${l}/conv2`);return{conv1:p,conv2:h}}return{extractConvLayerParams:a,extractResidualLayerParams:o}}function TE(e){let{extractWeights:t,getRemainingWeights:n}=En(e),r=[],{extractConvLayerParams:s,extractResidualLayerParams:a}=nce(t,r),o=s(4704,32,7,"conv32_down"),i=a(9216,32,3,"conv32_1"),c=a(9216,32,3,"conv32_2"),u=a(9216,32,3,"conv32_3"),l=a(36864,64,3,"conv64_down",!0),d=a(36864,64,3,"conv64_1"),p=a(36864,64,3,"conv64_2"),h=a(36864,64,3,"conv64_3"),f=a(147456,128,3,"conv128_down",!0),m=a(147456,128,3,"conv128_1"),g=a(147456,128,3,"conv128_2"),b=a(589824,256,3,"conv256_down",!0),y=a(589824,256,3,"conv256_1"),v=a(589824,256,3,"conv256_2"),x=a(589824,256,3,"conv256_down_out"),k=M(()=>Pe(Pr(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);return{params:{conv32_down:o,conv32_1:i,conv32_2:c,conv32_3:u,conv64_down:l,conv64_1:d,conv64_2:p,conv64_3:h,conv128_down:f,conv128_1:m,conv128_2:g,conv256_down:b,conv256_1:y,conv256_2:v,conv256_down_out:x,fc:k},paramMappings:r}}function rce(e,t){let n=rr(e,t);function r(o){let i=n(`${o}/scale/weights`,1),c=n(`${o}/scale/biases`,1);return{weights:i,biases:c}}function s(o){let i=n(`${o}/conv/filters`,4),c=n(`${o}/conv/bias`,1),u=r(o);return{conv:{filters:i,bias:c},scale:u}}function a(o){return{conv1:s(`${o}/conv1`),conv2:s(`${o}/conv2`)}}return{extractConvLayerParams:s,extractResidualLayerParams:a}}function NE(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:r}=rce(e,t),s=n("conv32_down"),a=r("conv32_1"),o=r("conv32_2"),i=r("conv32_3"),c=r("conv64_down"),u=r("conv64_1"),l=r("conv64_2"),d=r("conv64_3"),p=r("conv128_down"),h=r("conv128_1"),f=r("conv128_2"),m=r("conv256_down"),g=r("conv256_1"),b=r("conv256_2"),y=r("conv256_down_out"),{fc:v}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!Qw(v))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${v}`);let x={conv32_down:s,conv32_1:a,conv32_2:o,conv32_3:i,conv64_down:c,conv64_1:u,conv64_2:l,conv64_3:d,conv128_down:p,conv128_1:h,conv128_2:f,conv256_down:m,conv256_1:g,conv256_2:b,conv256_down_out:y,fc:v};return _n(e,t),{params:x,paramMappings:t}}function Kr(e,t){let n=CE(e,t.conv1);return n=E0(n,t.conv2),n=Y(n,e),n=qe(n),n}function ap(e,t){let n=Hm(e,t.conv1);n=E0(n,t.conv2);let r=ur(e,2,2,"valid"),s=It(r.shape),a=r.shape[3]!==n.shape[3];if(r.shape[1]!==n.shape[1]||r.shape[2]!==n.shape[2]){let i=[...n.shape];i[1]=1;let c=It(i);n=Ze([n,c],1);let u=[...n.shape];u[2]=1;let l=It(u);n=Ze([n,l],2)}return r=a?Ze([r,s],3):r,n=Y(r,n),n=qe(n),n}var Xu=class extends ln{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(150,!0),"float32"),a=qr(r,[122.782,117.001,104.298]).div(255),o=Hm(a,n.conv32_down);o=Rt(o,3,2,"valid"),o=Kr(o,n.conv32_1),o=Kr(o,n.conv32_2),o=Kr(o,n.conv32_3),o=ap(o,n.conv64_down),o=Kr(o,n.conv64_1),o=Kr(o,n.conv64_2),o=Kr(o,n.conv64_3),o=ap(o,n.conv128_down),o=Kr(o,n.conv128_1),o=Kr(o,n.conv128_2),o=ap(o,n.conv256_down),o=Kr(o,n.conv256_1),o=Kr(o,n.conv256_2),o=ap(o,n.conv256_down_out);let i=o.mean([1,2]);return De(i,n.fc)})}async forward(t){return this.forwardInput(await mt(t))}async computeFaceDescriptor(t){var a;if((a=t==null?void 0:t.shape)==null?void 0:a.some(o=>o<=0))return new Float32Array(128);let n=await mt(t),r=M(()=>dt(this.forwardInput(n))),s=await Promise.all(r.map(o=>o.data()));return r.forEach(o=>o.dispose()),n.isBatchInput?s:s[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return NE(t)}extractParams(t){return TE(t)}};function sce(e){let t=new Xu;return t.extractWeights(e),t}function jm(e,t){return{...e,...{descriptor:t}}}function ace(e){return typeof e.age=="number"}function qm(e,t){return{...e,...{age:t}}}function oce(e){return(e.gender===zs.MALE||e.gender===zs.FEMALE)&&Lu(e.genderProbability)}function Km(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function ice(e,t){function n(c,u){let l=Or(e(3*3*c),[3,3,c,1]),d=He(e(c)),p=He(e(c)),h=He(e(c)),f=He(e(c));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/batch_norm_scale`},{paramPath:`${u}/batch_norm_offset`},{paramPath:`${u}/batch_norm_mean`},{paramPath:`${u}/batch_norm_variance`}),{filters:l,batch_norm_scale:d,batch_norm_offset:p,batch_norm_mean:h,batch_norm_variance:f}}function r(c,u,l,d,p){let h=Or(e(c*u*l*l),[l,l,c,u]),f=He(e(u));return t.push({paramPath:`${d}/filters`},{paramPath:`${d}/${p?"batch_norm_offset":"bias"}`}),{filters:h,bias:f}}function s(c,u,l,d){let{filters:p,bias:h}=r(c,u,l,d,!0);return{filters:p,batch_norm_offset:h}}function a(c,u,l){let d=n(c,`${l}/depthwise_conv`),p=s(c,u,1,`${l}/pointwise_conv`);return{depthwise_conv:d,pointwise_conv:p}}function o(){let c=s(3,32,3,"mobilenetv1/conv_0"),u=a(32,64,"mobilenetv1/conv_1"),l=a(64,128,"mobilenetv1/conv_2"),d=a(128,128,"mobilenetv1/conv_3"),p=a(128,256,"mobilenetv1/conv_4"),h=a(256,256,"mobilenetv1/conv_5"),f=a(256,512,"mobilenetv1/conv_6"),m=a(512,512,"mobilenetv1/conv_7"),g=a(512,512,"mobilenetv1/conv_8"),b=a(512,512,"mobilenetv1/conv_9"),y=a(512,512,"mobilenetv1/conv_10"),v=a(512,512,"mobilenetv1/conv_11"),x=a(512,1024,"mobilenetv1/conv_12"),k=a(1024,1024,"mobilenetv1/conv_13");return{conv_0:c,conv_1:u,conv_2:l,conv_3:d,conv_4:p,conv_5:h,conv_6:f,conv_7:m,conv_8:g,conv_9:b,conv_10:y,conv_11:v,conv_12:x,conv_13:k}}function i(){let c=s(1024,256,1,"prediction_layer/conv_0"),u=s(256,512,3,"prediction_layer/conv_1"),l=s(512,128,1,"prediction_layer/conv_2"),d=s(128,256,3,"prediction_layer/conv_3"),p=s(256,128,1,"prediction_layer/conv_4"),h=s(128,256,3,"prediction_layer/conv_5"),f=s(256,64,1,"prediction_layer/conv_6"),m=s(64,128,3,"prediction_layer/conv_7"),g=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),b=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),y=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),v=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),x=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),k=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),C=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),N=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),R=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),O=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),D=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:c,conv_1:u,conv_2:l,conv_3:d,conv_4:p,conv_5:h,conv_6:f,conv_7:m,box_predictor_0:{box_encoding_predictor:g,class_predictor:b},box_predictor_1:{box_encoding_predictor:y,class_predictor:v},box_predictor_2:{box_encoding_predictor:x,class_predictor:k},box_predictor_3:{box_encoding_predictor:C,class_predictor:N},box_predictor_4:{box_encoding_predictor:$,class_predictor:R},box_predictor_5:{box_encoding_predictor:O,class_predictor:D}}}return{extractMobilenetV1Params:o,extractPredictionLayerParams:i}}function _E(e){let t=[],{extractWeights:n,getRemainingWeights:r}=En(e),{extractMobilenetV1Params:s,extractPredictionLayerParams:a}=ice(n,t),o=s(),i=a(),u={extra_dim:_h(n(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:o,prediction_layer:i,output_layer:u},paramMappings:t}}function cce(e,t){let n=rr(e,t);function r(u,l,d){let p=n(`${u}/Conv2d_${l}_pointwise/weights`,4,`${d}/filters`),h=n(`${u}/Conv2d_${l}_pointwise/convolution_bn_offset`,1,`${d}/batch_norm_offset`);return{filters:p,batch_norm_offset:h}}function s(u){let l=`mobilenetv1/conv_${u}`,d=`MobilenetV1/Conv2d_${u}_depthwise`,p=`${l}/depthwise_conv`,h=`${l}/pointwise_conv`,f=n(`${d}/depthwise_weights`,4,`${p}/filters`),m=n(`${d}/BatchNorm/gamma`,1,`${p}/batch_norm_scale`),g=n(`${d}/BatchNorm/beta`,1,`${p}/batch_norm_offset`),b=n(`${d}/BatchNorm/moving_mean`,1,`${p}/batch_norm_mean`),y=n(`${d}/BatchNorm/moving_variance`,1,`${p}/batch_norm_variance`);return{depthwise_conv:{filters:f,batch_norm_scale:m,batch_norm_offset:g,batch_norm_mean:b,batch_norm_variance:y},pointwise_conv:r("MobilenetV1",u,h)}}function a(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:s(1),conv_2:s(2),conv_3:s(3),conv_4:s(4),conv_5:s(5),conv_6:s(6),conv_7:s(7),conv_8:s(8),conv_9:s(9),conv_10:s(10),conv_11:s(11),conv_12:s(12),conv_13:s(13)}}function o(u,l){let d=n(`${u}/weights`,4,`${l}/filters`),p=n(`${u}/biases`,1,`${l}/bias`);return{filters:d,bias:p}}function i(u){let l=o(`Prediction/BoxPredictor_${u}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${u}/box_encoding_predictor`),d=o(`Prediction/BoxPredictor_${u}/ClassPredictor`,`prediction_layer/box_predictor_${u}/class_predictor`);return{box_encoding_predictor:l,class_predictor:d}}function c(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:i(0),box_predictor_1:i(1),box_predictor_2:i(2),box_predictor_3:i(3),box_predictor_4:i(4),box_predictor_5:i(5)}}return{extractMobilenetV1Params:a,extractPredictionLayerParams:c}}function EE(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:r}=cce(e,t),s=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Os(s))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${s}`);let a={mobilenetv1:n(),prediction_layer:r(),output_layer:{extra_dim:s}};return _n(e,t),{params:a,paramMappings:t}}function Er(e,t,n){return M(()=>{let r=Ft(e,t.filters,n,"same");return r=Y(r,t.batch_norm_offset),Zt(r,0,6)})}var uce=.0010000000474974513;function lce(e,t,n){return M(()=>{let r=ca(e,t.filters,n,"same");return r=Cs(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,uce),Zt(r,0,6)})}function dce(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function AE(e,t){return M(()=>{let n,r=Er(e,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((a,o)=>{let i=o+1,c=dce(i);r=lce(r,a.depthwise_conv,c),r=Er(r,a.pointwise_conv,[1,1]),i===11&&(n=r)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:n}})}function pce(e,t,n){let r=e.arraySync(),s=Math.min(r[t][0],r[t][2]),a=Math.min(r[t][1],r[t][3]),o=Math.max(r[t][0],r[t][2]),i=Math.max(r[t][1],r[t][3]),c=Math.min(r[n][0],r[n][2]),u=Math.min(r[n][1],r[n][3]),l=Math.max(r[n][0],r[n][2]),d=Math.max(r[n][1],r[n][3]),p=(o-s)*(i-a),h=(l-c)*(d-u);if(p<=0||h<=0)return 0;let f=Math.max(s,c),m=Math.max(a,u),g=Math.min(o,l),b=Math.min(i,d),y=Math.max(g-f,0)*Math.max(b-m,0);return y/(p+h-y)}function DE(e,t,n,r,s){let a=e.shape[0],o=Math.min(n,a),i=t.map((l,d)=>({score:l,boxIndex:d})).filter(l=>l.score>s).sort((l,d)=>d.score-l.score),c=l=>l<=r?1:0,u=[];return i.forEach(l=>{if(u.length>=o)return;let d=l.score;for(let p=u.length-1;p>=0;--p){let h=pce(e,l.boxIndex,u[p]);if(h!==0&&(l.score*=c(h),l.score<=s))break}d===l.score&&u.push(l.boxIndex)}),u}function hce(e){let t=dt(Pe(e,[1,0])),n=[fe(t[2],t[0]),fe(t[3],t[1])],r=[Y(t[0],ge(n[0],2)),Y(t[1],ge(n[1],2))];return{sizes:n,centers:r}}function fce(e,t){let{sizes:n,centers:r}=hce(e),s=dt(Pe(t,[1,0])),a=ge(V(hn(ge(s[2],5)),n[0]),2),o=Y(V(ge(s[0],10),n[0]),r[0]),i=ge(V(hn(ge(s[3],5)),n[1]),2),c=Y(V(ge(s[1],10),n[1]),r[1]);return Pe(Pt([fe(o,a),fe(c,i),Y(o,a),Y(c,i)]),[1,0])}function $E(e,t,n){return M(()=>{let r=e.shape[0],s=fce(U(Fn(n.extra_dim,[r,1,1]),[-1,4]),U(e,[-1,4]));s=U(s,[r,s.shape[0]/r,4]);let a=lr(We(t,[0,0,1],[-1,-1,-1])),o=We(a,[0,0,0],[-1,-1,1]);o=U(o,[r,o.shape[1]]);let i=dt(s),c=dt(o);return{boxes:i,scores:c}})}function Ni(e,t){return M(()=>{let n=e.shape[0],r=U(Ci(e,t.box_encoding_predictor),[n,-1,1,4]),s=U(Ci(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:r,classPrediction:s}})}function FE(e,t,n){return M(()=>{let r=Er(e,n.conv_0,[1,1]),s=Er(r,n.conv_1,[2,2]),a=Er(s,n.conv_2,[1,1]),o=Er(a,n.conv_3,[2,2]),i=Er(o,n.conv_4,[1,1]),c=Er(i,n.conv_5,[2,2]),u=Er(c,n.conv_6,[1,1]),l=Er(u,n.conv_7,[2,2]),d=Ni(t,n.box_predictor_0),p=Ni(e,n.box_predictor_1),h=Ni(s,n.box_predictor_2),f=Ni(o,n.box_predictor_3),m=Ni(c,n.box_predictor_4),g=Ni(l,n.box_predictor_5),b=Ze([d.boxPredictionEncoding,p.boxPredictionEncoding,h.boxPredictionEncoding,f.boxPredictionEncoding,m.boxPredictionEncoding,g.boxPredictionEncoding],1),y=Ze([d.classPrediction,p.classPrediction,h.classPrediction,f.classPrediction,m.classPrediction,g.classPrediction],1);return{boxPredictions:b,classPredictions:y}})}var Ar=class{constructor({minConfidence:t,maxResults:n}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=n||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var _i=class extends ln{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return M(()=>{let r=ce(t.toBatchTensor(512,!1),"float32"),s=fe(ge(r,127.5),1),a=AE(s,n.mobilenetv1),{boxPredictions:o,classPredictions:i}=FE(a.out,a.conv11,n.prediction_layer);return $E(o,i,n.output_layer)})}async forward(t){return this.forwardInput(await mt(t))}async locateFaces(t,n={}){let{maxResults:r,minConfidence:s}=new Ar(n),a=await mt(t),{boxes:o,scores:i}=this.forwardInput(a),c=o[0],u=i[0];for(let v=1;v{let[x,k]=[Math.max(0,b[v][0]),Math.min(1,b[v][2])].map($=>$*g),[C,N]=[Math.max(0,b[v][1]),Math.min(1,b[v][3])].map($=>$*m);return new vt(l[v],new zu(C,x,N-C,k-x),{height:a.getInputHeight(0),width:a.getInputWidth(0)})});return c.dispose(),u.dispose(),y}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return EE(t)}extractParams(t){return _E(t)}};function RE(e){let t=new _i;return t.extractWeights(e),t}function mce(e){return RE(e)}var PE=class extends _i{};var OE=.4,ME=[new Oe(.738768,.874946),new Oe(2.42204,2.65704),new Oe(4.30971,7.04493),new Oe(10.246,4.59428),new Oe(12.6868,11.8741)],LE=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],BE=[117.001,114.697,97.404],zE="tiny_yolov2_model",WE="tiny_yolov2_separable_conv_model";var Xm=e=>typeof e=="number";function A0(e){if(!e)throw new Error(`invalid config: ${e}`);if(typeof e.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${e.withSeparableConvs}`);if(!Xm(e.iouThreshold)||e.iouThreshold<0||e.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${e.iouThreshold}`);if(!Array.isArray(e.classes)||!e.classes.length||!e.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(e.classes)}`);if(!Array.isArray(e.anchors)||!e.anchors.length||!e.anchors.map(t=>t||{}).every(t=>Xm(t.x)&&Xm(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(e.anchors)}`);if(e.meanRgb&&(!Array.isArray(e.meanRgb)||e.meanRgb.length!==3||!e.meanRgb.every(Xm)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function Yu(e){return M(()=>{let t=V(e,Ie(.10000000149011612));return Y(qe(fe(e,t)),t)})}function Ws(e,t){return M(()=>{let n=dr(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Ft(n,t.conv.filters,[1,1],"valid"),n=fe(n,t.bn.sub),n=V(n,t.bn.truediv),n=Y(n,t.conv.bias),Yu(n)})}function Vs(e,t){return M(()=>{let n=dr(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Zo(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=Y(n,t.bias),Yu(n)})}function gce(e,t){let n=Gu(e,t);function r(o,i){let c=He(e(o)),u=He(e(o));return t.push({paramPath:`${i}/sub`},{paramPath:`${i}/truediv`}),{sub:c,truediv:u}}function s(o,i,c){let u=n(o,i,3,`${c}/conv`),l=r(i,`${c}/bn`);return{conv:u,bn:l}}let a=Hu(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:s,extractSeparableConvParams:a}}function VE(e,t,n,r){let{extractWeights:s,getRemainingWeights:a}=En(e),o=[],{extractConvParams:i,extractConvWithBatchNormParams:c,extractSeparableConvParams:u}=gce(s,o),l;if(t.withSeparableConvs){let[d,p,h,f,m,g,b,y,v]=r,x=t.isFirstLayerConv2d?i(d,p,3,"conv0"):u(d,p,"conv0"),k=u(p,h,"conv1"),C=u(h,f,"conv2"),N=u(f,m,"conv3"),$=u(m,g,"conv4"),R=u(g,b,"conv5"),O=y?u(b,y,"conv6"):void 0,D=v?u(y,v,"conv7"):void 0,P=i(v||y||b,5*n,1,"conv8");l={conv0:x,conv1:k,conv2:C,conv3:N,conv4:$,conv5:R,conv6:O,conv7:D,conv8:P}}else{let[d,p,h,f,m,g,b,y,v]=r,x=c(d,p,"conv0"),k=c(p,h,"conv1"),C=c(h,f,"conv2"),N=c(f,m,"conv3"),$=c(m,g,"conv4"),R=c(g,b,"conv5"),O=c(b,y,"conv6"),D=c(y,v,"conv7"),P=i(v,5*n,1,"conv8");l={conv0:x,conv1:k,conv2:C,conv3:N,conv4:$,conv5:R,conv6:O,conv7:D,conv8:P}}if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{params:l,paramMappings:o}}function bce(e,t){let n=rr(e,t);function r(i){let c=n(`${i}/sub`,1),u=n(`${i}/truediv`,1);return{sub:c,truediv:u}}function s(i){let c=n(`${i}/filters`,4),u=n(`${i}/bias`,1);return{filters:c,bias:u}}function a(i){let c=s(`${i}/conv`),u=r(`${i}/bn`);return{conv:c,bn:u}}let o=ju(n);return{extractConvParams:s,extractConvWithBatchNormParams:a,extractSeparableConvParams:o}}function UE(e,t){let n=[],{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:a}=bce(e,n),o;if(t.withSeparableConvs){let i=t.filterSizes&&t.filterSizes.length||9;o={conv0:t.isFirstLayerConv2d?r("conv0"):a("conv0"),conv1:a("conv1"),conv2:a("conv2"),conv3:a("conv3"),conv4:a("conv4"),conv5:a("conv5"),conv6:i>7?a("conv6"):void 0,conv7:i>8?a("conv7"):void 0,conv8:r("conv8")}}else o={conv0:s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:s("conv6"),conv7:s("conv7"),conv8:r("conv8")};return _n(e,n),{params:o,paramMappings:n}}var ms=class{constructor({inputSize:t,scoreThreshold:n}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=n||.5,typeof this._inputSize!="number"||this._inputSize%32!=0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var D0=class extends ln{constructor(t){super("TinyYolov2");A0(t),this._config=t}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(t,n){let r=Ws(t,n.conv0);return r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv1),r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv2),r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv3),r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv4),r=Rt(r,[2,2],[2,2],"same"),r=Ws(r,n.conv5),r=Rt(r,[2,2],[1,1],"same"),r=Ws(r,n.conv6),r=Ws(r,n.conv7),Ci(r,n.conv8,"valid",!1)}runMobilenet(t,n){let r=this.config.isFirstLayerConv2d?Yu(Ci(t,n.conv0,"valid",!1)):Vs(t,n.conv0);return r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv1),r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv2),r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv3),r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv4),r=Rt(r,[2,2],[2,2],"same"),r=Vs(r,n.conv5),r=Rt(r,[2,2],[1,1],"same"),r=n.conv6?Vs(r,n.conv6):r,r=n.conv7?Vs(r,n.conv7):r,Ci(r,n.conv8,"valid",!1)}forwardInput(t,n){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return M(()=>{let s=ce(t.toBatchTensor(n,!1),"float32");return s=this.config.meanRgb?qr(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,r):this.runTinyYolov2(s,r)})}async forward(t,n){return this.forwardInput(await mt(t),n)}async detect(t,n={}){let{inputSize:r,scoreThreshold:s}=new ms(n),a=await mt(t),o=await this.forwardInput(a,r),i=M(()=>dt(o)[0].expandDims()),c={width:a.getInputWidth(0),height:a.getInputHeight(0)},u=await this.extractBoxes(i,a.getReshapedInputDimensions(0),s);o.dispose(),i.dispose();let l=u.map(g=>g.box),d=u.map(g=>g.score),p=u.map(g=>g.classScore),h=u.map(g=>this.config.classes[g.label]);return a0(l.map(g=>g.rescale(r)),d,this.config.iouThreshold,!0).map(g=>new Ca(d[g],p[g],h[g],l[g],c))}getDefaultModelName(){return""}extractParamsFromWeightMap(t){return UE(t,this.config)}extractParams(t){let n=this.config.filterSizes||D0.DEFAULT_FILTER_SIZES,r=n?n.length:void 0;if(r!==7&&r!==8&&r!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return VE(t,this.config,this.boxEncodingSize,n)}async extractBoxes(t,n,r){let{width:s,height:a}=n,o=Math.max(s,a),i=o/s,c=o/a,u=t.shape[1],l=this.config.anchors.length,[d,p,h]=M(()=>{let b=t.reshape([u,u,l,this.boxEncodingSize]),y=b.slice([0,0,0,0],[u,u,l,4]),v=b.slice([0,0,0,4],[u,u,l,1]),x=this.withClassScores?Rr(b.slice([0,0,0,5],[u,u,l,this.config.classes.length]),3):Ie(0);return[y,v,x]}),f=[],m=await p.array(),g=await d.array();for(let b=0;br){let k=(y+Kd(g[b][y][v][0]))/u*i,C=(b+Kd(g[b][y][v][1]))/u*c,N=Math.exp(g[b][y][v][2])*this.config.anchors[v].x/u*i,$=Math.exp(g[b][y][v][3])*this.config.anchors[v].y/u*c,R=k-N/2,O=C-$/2,D={row:b,col:y,anchor:v},{classScore:P,label:T}=this.withClassScores?await this.extractPredictedClass(h,D):{classScore:1,label:0};f.push({box:new Bu(R,O,R+N,O+$),score:x,classScore:x*P,label:T,...D})}}return d.dispose(),p.dispose(),h.dispose(),f}async extractPredictedClass(t,n){let{row:r,col:s,anchor:a}=n,o=await t.array();return Array(this.config.classes.length).fill(0).map((i,c)=>o[r][s][a][c]).map((i,c)=>({classScore:i,label:c})).reduce((i,c)=>i.classScore>c.classScore?i:c)}},Zu=D0;Zu.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var Ju=class extends Zu{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:OE,classes:["face"],...t?{anchors:LE,meanRgb:BE}:{anchors:ME,withClassScores:!0}};super(n)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(s=>new vt(s.score,s.relativeBox,{width:s.imageWidth,height:s.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?WE:zE}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function yce(e,t=!0){let n=new Ju(t);return n.extractWeights(e),n}var Ym=class extends ms{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var Dr=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Ei(e,t,n,r,s=({alignedRect:a})=>a){let a=e.map(c=>Ti(c)?s(c):c.detection),o=r||(t instanceof Ee?await Uu(t,a):await Vu(t,a)),i=await n(o);return o.forEach(c=>c instanceof Ee&&c.dispose()),i}async function Qu(e,t,n,r,s){return Ei([e],t,async a=>n(a[0]),r,s)}var GE=.4,HE=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],jE=[117.001,114.697,97.404];var el=class extends Zu{constructor(){let t={withSeparableConvs:!0,iouThreshold:GE,classes:["face"],anchors:HE,meanRgb:jE,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(s=>new vt(s.score,s.relativeBox,{width:s.imageWidth,height:s.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var Qe={ssdMobilenetv1:new _i,tinyFaceDetector:new el,tinyYolov2:new Ju,faceLandmark68Net:new Ku,faceLandmark68TinyNet:new Gm,faceRecognitionNet:new Xu,faceExpressionNet:new Wm,ageGenderNet:new Um},qE=(e,t)=>Qe.ssdMobilenetv1.locateFaces(e,t),vce=(e,t)=>Qe.tinyFaceDetector.locateFaces(e,t),xce=(e,t)=>Qe.tinyYolov2.locateFaces(e,t),KE=e=>Qe.faceLandmark68Net.detectLandmarks(e),wce=e=>Qe.faceLandmark68TinyNet.detectLandmarks(e),kce=e=>Qe.faceRecognitionNet.computeFaceDescriptor(e),Ice=e=>Qe.faceExpressionNet.predictExpressions(e),Sce=e=>Qe.ageGenderNet.predictAgeAndGender(e),XE=e=>Qe.ssdMobilenetv1.load(e),Cce=e=>Qe.tinyFaceDetector.load(e),Tce=e=>Qe.tinyYolov2.load(e),Nce=e=>Qe.faceLandmark68Net.load(e),_ce=e=>Qe.faceLandmark68TinyNet.load(e),Ece=e=>Qe.faceRecognitionNet.load(e),Ace=e=>Qe.faceExpressionNet.load(e),Dce=e=>Qe.ageGenderNet.load(e),$ce=XE,Fce=qE,Rce=KE;var $0=class extends Dr{constructor(t,n,r){super();this.parentTask=t;this.input=n;this.extractedFaces=r}},tl=class extends $0{async run(){let t=await this.parentTask,n=await Ei(t,this.input,async r=>Promise.all(r.map(s=>Qe.faceExpressionNet.predictExpressions(s))),this.extractedFaces);return t.map((r,s)=>Vm(r,n[s]))}withAgeAndGender(){return new rl(this,this.input)}},nl=class extends $0{async run(){let t=await this.parentTask;if(!t)return;let n=await Qu(t,this.input,r=>Qe.faceExpressionNet.predictExpressions(r),this.extractedFaces);return Vm(t,n)}withAgeAndGender(){return new sl(this,this.input)}},Ai=class extends tl{withAgeAndGender(){return new $i(this,this.input)}withFaceDescriptors(){return new _a(this,this.input)}},Di=class extends nl{withAgeAndGender(){return new Fi(this,this.input)}withFaceDescriptor(){return new Ea(this,this.input)}};var F0=class extends Dr{constructor(t,n,r){super();this.parentTask=t;this.input=n;this.extractedFaces=r}},rl=class extends F0{async run(){let t=await this.parentTask,n=await Ei(t,this.input,async r=>Promise.all(r.map(s=>Qe.ageGenderNet.predictAgeAndGender(s))),this.extractedFaces);return t.map((r,s)=>{let{age:a,gender:o,genderProbability:i}=n[s];return qm(Km(r,o,i),a)})}withFaceExpressions(){return new tl(this,this.input)}},sl=class extends F0{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:r,genderProbability:s}=await Qu(t,this.input,a=>Qe.ageGenderNet.predictAgeAndGender(a),this.extractedFaces);return qm(Km(t,r,s),n)}withFaceExpressions(){return new nl(this,this.input)}},$i=class extends rl{withFaceExpressions(){return new Ai(this,this.input)}withFaceDescriptors(){return new _a(this,this.input)}},Fi=class extends sl{withFaceExpressions(){return new Di(this,this.input)}withFaceDescriptor(){return new Ea(this,this.input)}};var Zm=class extends Dr{constructor(t,n){super();this.parentTask=t;this.input=n}},_a=class extends Zm{async run(){let t=await this.parentTask;return(await Ei(t,this.input,r=>Promise.all(r.map(s=>Qe.faceRecognitionNet.computeFaceDescriptor(s))),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}))).map((r,s)=>jm(t[s],r))}withFaceExpressions(){return new Ai(this,this.input)}withAgeAndGender(){return new $i(this,this.input)}},Ea=class extends Zm{async run(){let t=await this.parentTask;if(!t)return;let n=await Qu(t,this.input,r=>Qe.faceRecognitionNet.computeFaceDescriptor(r),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}));return jm(t,n)}withFaceExpressions(){return new Di(this,this.input)}withAgeAndGender(){return new Fi(this,this.input)}};var Jm=class extends Dr{constructor(t,n,r){super();this.parentTask=t;this.input=n;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?Qe.faceLandmark68TinyNet:Qe.faceLandmark68Net}},Qm=class extends Jm{async run(){let t=await this.parentTask,n=t.map(a=>a.detection),r=this.input instanceof Ee?await Uu(this.input,n):await Vu(this.input,n),s=await Promise.all(r.map(a=>this.landmarkNet.detectLandmarks(a)));return r.forEach(a=>a instanceof Ee&&a.dispose()),t.map((a,o)=>qu(a,s[o]))}withFaceExpressions(){return new Ai(this,this.input)}withAgeAndGender(){return new $i(this,this.input)}withFaceDescriptors(){return new _a(this,this.input)}},eg=class extends Jm{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,r=this.input instanceof Ee?await Uu(this.input,[n]):await Vu(this.input,[n]),s=await this.landmarkNet.detectLandmarks(r[0]);return r.forEach(a=>a instanceof Ee&&a.dispose()),qu(t,s)}withFaceExpressions(){return new Di(this,this.input)}withAgeAndGender(){return new Fi(this,this.input)}withFaceDescriptor(){return new Ea(this,this.input)}};var tg=class extends Dr{constructor(t,n=new Ar){super();this.input=t;this.options=n}},op=class extends tg{async run(){let{input:t,options:n}=this,r;if(n instanceof Ym)r=Qe.tinyFaceDetector.locateFaces(t,n);else if(n instanceof Ar)r=Qe.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof ms)r=Qe.tinyYolov2.locateFaces(t,n);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return r}runAndExtendWithFaceDetections(){return new Promise((t,n)=>{this.run().then(r=>t(r.map(s=>wi({},s)))).catch(r=>n(r))})}withFaceLandmarks(t=!1){return new Qm(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new tl(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new rl(this.runAndExtendWithFaceDetections(),this.input)}},ng=class extends tg{async run(){let t=await new op(this.input,this.options),n=t[0];return t.forEach(r=>{r.score>n.score&&(n=r)}),n}runAndExtendWithFaceDetection(){return new Promise(async t=>{let n=await this.run();t(n?wi({},n):void 0)})}withFaceLandmarks(t=!1){return new eg(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new nl(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new sl(this.runAndExtendWithFaceDetection(),this.input)}};function Pce(e,t=new Ar){return new ng(e,t)}function rg(e,t=new Ar){return new op(e,t)}async function YE(e,t){return rg(e,new Ar(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Oce(e,t={}){return rg(e,new ms(t)).withFaceLandmarks().withFaceDescriptors()}var Mce=YE;function R0(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let n=Array.from(e),r=Array.from(t);return Math.sqrt(n.map((s,a)=>s-r[a]).reduce((s,a)=>s+a**2,0))}var sg=class{constructor(t,n=.6){this._distanceThreshold=n;let r=Array.isArray(t)?t:[t];if(!r.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let s=1,a=()=>`person ${s++}`;this._labeledDescriptors=r.map(o=>{if(o instanceof Ms)return o;if(o instanceof Float32Array)return new Ms(a(),[o]);if(o.descriptor&&o.descriptor instanceof Float32Array)return new Ms(a(),[o.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,n){return n.map(r=>R0(r,t)).reduce((r,s)=>r+s,0)/(n.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:n,label:r})=>new Xd(r,this.computeMeanDistance(t,n))).reduce((n,r)=>n.distancet.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(r=>Ms.fromJSON(r));return new sg(n,t.distanceThreshold)}};function Lce(e){let t=new el;return t.extractWeights(e),t}function ZE(e,t){let{width:n,height:r}=new Nn(t.width,t.height);if(n<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:r})}`);if(Array.isArray(e))return e.map(s=>ZE(s,{width:n,height:r}));if(Ti(e)){let s=e.detection.forSize(n,r),a=e.unshiftedLandmarks.forSize(s.box.width,s.box.height);return qu(wi(e,s),a)}return hs(e)?wi(e,e.detection.forSize(n,r)):e instanceof yr||e instanceof vt?e.forSize(n,r):e}var Bce=typeof process!="undefined",JE=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",zce={faceapi:mE,node:Bce,browser:JE};JE&&(Oa.set("CHECK_COMPUTATION_FOR_ERRORS",!1),Oa.set("WEBGL_CPU_FORWARD",!0),Oa.set("WEBGL_PACK_DEPTHWISECONV",!1),Oa.set("WEBGL_USE_SHAPES_UNIFORMS",!0));return Wce;})(); /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.node-gpu.js b/dist/face-api.node-gpu.js index e0688f5..f1a9702 100644 --- a/dist/face-api.node-gpu.js +++ b/dist/face-api.node-gpu.js @@ -2313,7 +2313,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) { } // package.json -var version = "1.5.2"; +var version = "1.5.3"; // src/ageGenderNet/AgeGenderNet.ts var tf20 = __toModule(require_tfjs_esm()); diff --git a/dist/face-api.node.js b/dist/face-api.node.js index 8990b38..eac9649 100644 --- a/dist/face-api.node.js +++ b/dist/face-api.node.js @@ -2313,7 +2313,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) { } // package.json -var version = "1.5.2"; +var version = "1.5.3"; // src/ageGenderNet/AgeGenderNet.ts var tf20 = __toModule(require_tfjs_esm()); diff --git a/typedoc/classes/AgeGenderNet.html b/typedoc/classes/AgeGenderNet.html index b0f69ab..c8172bc 100644 --- a/typedoc/classes/AgeGenderNet.html +++ b/typedoc/classes/AgeGenderNet.html @@ -3,8 +3,8 @@ - AgeGenderNet | @vladmandic/face-api - v1.5.2 - + AgeGenderNet | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
  • Preparing search index...
  • The search index is not available
  • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • AgeGenderNet diff --git a/typedoc/classes/BoundingBox.html b/typedoc/classes/BoundingBox.html index 3c08662..b73a269 100644 --- a/typedoc/classes/BoundingBox.html +++ b/typedoc/classes/BoundingBox.html @@ -3,8 +3,8 @@ - BoundingBox | @vladmandic/face-api - v1.5.2 - + BoundingBox | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • BoundingBox diff --git a/typedoc/classes/Box.html b/typedoc/classes/Box.html index 3fa9edb..f3e6eed 100644 --- a/typedoc/classes/Box.html +++ b/typedoc/classes/Box.html @@ -3,8 +3,8 @@ - Box | @vladmandic/face-api - v1.5.2 - + Box | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • Box diff --git a/typedoc/classes/ComposableTask.html b/typedoc/classes/ComposableTask.html index aed3a75..39b1495 100644 --- a/typedoc/classes/ComposableTask.html +++ b/typedoc/classes/ComposableTask.html @@ -3,8 +3,8 @@ - ComposableTask | @vladmandic/face-api - v1.5.2 - + ComposableTask | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • ComposableTask diff --git a/typedoc/classes/ComputeAllFaceDescriptorsTask.html b/typedoc/classes/ComputeAllFaceDescriptorsTask.html index 354593b..22e4725 100644 --- a/typedoc/classes/ComputeAllFaceDescriptorsTask.html +++ b/typedoc/classes/ComputeAllFaceDescriptorsTask.html @@ -3,8 +3,8 @@ - ComputeAllFaceDescriptorsTask | @vladmandic/face-api - v1.5.2 - + ComputeAllFaceDescriptorsTask | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • ComputeAllFaceDescriptorsTask diff --git a/typedoc/classes/ComputeFaceDescriptorsTaskBase.html b/typedoc/classes/ComputeFaceDescriptorsTaskBase.html index e7e3264..b2e75bb 100644 --- a/typedoc/classes/ComputeFaceDescriptorsTaskBase.html +++ b/typedoc/classes/ComputeFaceDescriptorsTaskBase.html @@ -3,8 +3,8 @@ - ComputeFaceDescriptorsTaskBase | @vladmandic/face-api - v1.5.2 - + ComputeFaceDescriptorsTaskBase | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • ComputeFaceDescriptorsTaskBase diff --git a/typedoc/classes/ComputeSingleFaceDescriptorTask.html b/typedoc/classes/ComputeSingleFaceDescriptorTask.html index 2b1a7d0..3a7c24e 100644 --- a/typedoc/classes/ComputeSingleFaceDescriptorTask.html +++ b/typedoc/classes/ComputeSingleFaceDescriptorTask.html @@ -3,8 +3,8 @@ - ComputeSingleFaceDescriptorTask | @vladmandic/face-api - v1.5.2 - + ComputeSingleFaceDescriptorTask | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • ComputeSingleFaceDescriptorTask diff --git a/typedoc/classes/DetectAllFaceLandmarksTask.html b/typedoc/classes/DetectAllFaceLandmarksTask.html index 70cc0a7..77aa53b 100644 --- a/typedoc/classes/DetectAllFaceLandmarksTask.html +++ b/typedoc/classes/DetectAllFaceLandmarksTask.html @@ -3,8 +3,8 @@ - DetectAllFaceLandmarksTask | @vladmandic/face-api - v1.5.2 - + DetectAllFaceLandmarksTask | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • DetectAllFaceLandmarksTask diff --git a/typedoc/classes/DetectAllFacesTask.html b/typedoc/classes/DetectAllFacesTask.html index 9163df4..f4442b3 100644 --- a/typedoc/classes/DetectAllFacesTask.html +++ b/typedoc/classes/DetectAllFacesTask.html @@ -3,8 +3,8 @@ - DetectAllFacesTask | @vladmandic/face-api - v1.5.2 - + DetectAllFacesTask | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • DetectAllFacesTask diff --git a/typedoc/classes/DetectFaceLandmarksTaskBase.html b/typedoc/classes/DetectFaceLandmarksTaskBase.html index 8b25969..5d34615 100644 --- a/typedoc/classes/DetectFaceLandmarksTaskBase.html +++ b/typedoc/classes/DetectFaceLandmarksTaskBase.html @@ -3,8 +3,8 @@ - DetectFaceLandmarksTaskBase | @vladmandic/face-api - v1.5.2 - + DetectFaceLandmarksTaskBase | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • DetectFaceLandmarksTaskBase diff --git a/typedoc/classes/DetectFacesTaskBase.html b/typedoc/classes/DetectFacesTaskBase.html index 0bc857a..b7aaa5f 100644 --- a/typedoc/classes/DetectFacesTaskBase.html +++ b/typedoc/classes/DetectFacesTaskBase.html @@ -3,8 +3,8 @@ - DetectFacesTaskBase | @vladmandic/face-api - v1.5.2 - + DetectFacesTaskBase | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • DetectFacesTaskBase diff --git a/typedoc/classes/DetectSingleFaceLandmarksTask.html b/typedoc/classes/DetectSingleFaceLandmarksTask.html index e3d61db..f8c94a8 100644 --- a/typedoc/classes/DetectSingleFaceLandmarksTask.html +++ b/typedoc/classes/DetectSingleFaceLandmarksTask.html @@ -3,8 +3,8 @@ - DetectSingleFaceLandmarksTask | @vladmandic/face-api - v1.5.2 - + DetectSingleFaceLandmarksTask | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • DetectSingleFaceLandmarksTask diff --git a/typedoc/classes/DetectSingleFaceTask.html b/typedoc/classes/DetectSingleFaceTask.html index 24da990..7c10003 100644 --- a/typedoc/classes/DetectSingleFaceTask.html +++ b/typedoc/classes/DetectSingleFaceTask.html @@ -3,8 +3,8 @@ - DetectSingleFaceTask | @vladmandic/face-api - v1.5.2 - + DetectSingleFaceTask | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • DetectSingleFaceTask diff --git a/typedoc/classes/Dimensions.html b/typedoc/classes/Dimensions.html index 41584e5..0413eb3 100644 --- a/typedoc/classes/Dimensions.html +++ b/typedoc/classes/Dimensions.html @@ -3,8 +3,8 @@ - Dimensions | @vladmandic/face-api - v1.5.2 - + Dimensions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • Dimensions diff --git a/typedoc/classes/FaceDetection.html b/typedoc/classes/FaceDetection.html index a949eeb..0d253c4 100644 --- a/typedoc/classes/FaceDetection.html +++ b/typedoc/classes/FaceDetection.html @@ -3,8 +3,8 @@ - FaceDetection | @vladmandic/face-api - v1.5.2 - + FaceDetection | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceDetection diff --git a/typedoc/classes/FaceDetectionNet.html b/typedoc/classes/FaceDetectionNet.html index 23dd7ea..284e170 100644 --- a/typedoc/classes/FaceDetectionNet.html +++ b/typedoc/classes/FaceDetectionNet.html @@ -3,8 +3,8 @@ - FaceDetectionNet | @vladmandic/face-api - v1.5.2 - + FaceDetectionNet | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceDetectionNet diff --git a/typedoc/classes/FaceExpressionNet.html b/typedoc/classes/FaceExpressionNet.html index 4a1815d..fc54059 100644 --- a/typedoc/classes/FaceExpressionNet.html +++ b/typedoc/classes/FaceExpressionNet.html @@ -3,8 +3,8 @@ - FaceExpressionNet | @vladmandic/face-api - v1.5.2 - + FaceExpressionNet | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceExpressionNet diff --git a/typedoc/classes/FaceExpressions.html b/typedoc/classes/FaceExpressions.html index bb1923b..fd0fc69 100644 --- a/typedoc/classes/FaceExpressions.html +++ b/typedoc/classes/FaceExpressions.html @@ -3,8 +3,8 @@ - FaceExpressions | @vladmandic/face-api - v1.5.2 - + FaceExpressions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceExpressions diff --git a/typedoc/classes/FaceLandmark68Net.html b/typedoc/classes/FaceLandmark68Net.html index b9e2df2..fb73639 100644 --- a/typedoc/classes/FaceLandmark68Net.html +++ b/typedoc/classes/FaceLandmark68Net.html @@ -3,8 +3,8 @@ - FaceLandmark68Net | @vladmandic/face-api - v1.5.2 - + FaceLandmark68Net | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceLandmark68Net diff --git a/typedoc/classes/FaceLandmark68TinyNet.html b/typedoc/classes/FaceLandmark68TinyNet.html index 7f94bf6..f299c76 100644 --- a/typedoc/classes/FaceLandmark68TinyNet.html +++ b/typedoc/classes/FaceLandmark68TinyNet.html @@ -3,8 +3,8 @@ - FaceLandmark68TinyNet | @vladmandic/face-api - v1.5.2 - + FaceLandmark68TinyNet | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceLandmark68TinyNet diff --git a/typedoc/classes/FaceLandmarkNet.html b/typedoc/classes/FaceLandmarkNet.html index 1f044cd..7e60476 100644 --- a/typedoc/classes/FaceLandmarkNet.html +++ b/typedoc/classes/FaceLandmarkNet.html @@ -3,8 +3,8 @@ - FaceLandmarkNet | @vladmandic/face-api - v1.5.2 - + FaceLandmarkNet | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceLandmarkNet diff --git a/typedoc/classes/FaceLandmarks.html b/typedoc/classes/FaceLandmarks.html index 62daa96..46ed717 100644 --- a/typedoc/classes/FaceLandmarks.html +++ b/typedoc/classes/FaceLandmarks.html @@ -3,8 +3,8 @@ - FaceLandmarks | @vladmandic/face-api - v1.5.2 - + FaceLandmarks | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceLandmarks diff --git a/typedoc/classes/FaceLandmarks5.html b/typedoc/classes/FaceLandmarks5.html index 69fe101..f7126e6 100644 --- a/typedoc/classes/FaceLandmarks5.html +++ b/typedoc/classes/FaceLandmarks5.html @@ -3,8 +3,8 @@ - FaceLandmarks5 | @vladmandic/face-api - v1.5.2 - + FaceLandmarks5 | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceLandmarks5 diff --git a/typedoc/classes/FaceLandmarks68.html b/typedoc/classes/FaceLandmarks68.html index bf0e3fc..572abcc 100644 --- a/typedoc/classes/FaceLandmarks68.html +++ b/typedoc/classes/FaceLandmarks68.html @@ -3,8 +3,8 @@ - FaceLandmarks68 | @vladmandic/face-api - v1.5.2 - + FaceLandmarks68 | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceLandmarks68 diff --git a/typedoc/classes/FaceMatch.html b/typedoc/classes/FaceMatch.html index 3caa9df..f41e9ed 100644 --- a/typedoc/classes/FaceMatch.html +++ b/typedoc/classes/FaceMatch.html @@ -3,8 +3,8 @@ - FaceMatch | @vladmandic/face-api - v1.5.2 - + FaceMatch | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceMatch diff --git a/typedoc/classes/FaceMatcher.html b/typedoc/classes/FaceMatcher.html index f7b1bcd..24e4844 100644 --- a/typedoc/classes/FaceMatcher.html +++ b/typedoc/classes/FaceMatcher.html @@ -3,8 +3,8 @@ - FaceMatcher | @vladmandic/face-api - v1.5.2 - + FaceMatcher | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceMatcher diff --git a/typedoc/classes/FaceRecognitionNet.html b/typedoc/classes/FaceRecognitionNet.html index 35341c1..81c788b 100644 --- a/typedoc/classes/FaceRecognitionNet.html +++ b/typedoc/classes/FaceRecognitionNet.html @@ -3,8 +3,8 @@ - FaceRecognitionNet | @vladmandic/face-api - v1.5.2 - + FaceRecognitionNet | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • FaceRecognitionNet diff --git a/typedoc/classes/LabeledBox.html b/typedoc/classes/LabeledBox.html index bafb5c1..c61f049 100644 --- a/typedoc/classes/LabeledBox.html +++ b/typedoc/classes/LabeledBox.html @@ -3,8 +3,8 @@ - LabeledBox | @vladmandic/face-api - v1.5.2 - + LabeledBox | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • LabeledBox diff --git a/typedoc/classes/LabeledFaceDescriptors.html b/typedoc/classes/LabeledFaceDescriptors.html index 83b5128..15ad97e 100644 --- a/typedoc/classes/LabeledFaceDescriptors.html +++ b/typedoc/classes/LabeledFaceDescriptors.html @@ -3,8 +3,8 @@ - LabeledFaceDescriptors | @vladmandic/face-api - v1.5.2 - + LabeledFaceDescriptors | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • LabeledFaceDescriptors diff --git a/typedoc/classes/NetInput.html b/typedoc/classes/NetInput.html index 176014b..c36e60b 100644 --- a/typedoc/classes/NetInput.html +++ b/typedoc/classes/NetInput.html @@ -3,8 +3,8 @@ - NetInput | @vladmandic/face-api - v1.5.2 - + NetInput | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • NetInput diff --git a/typedoc/classes/NeuralNetwork.html b/typedoc/classes/NeuralNetwork.html index 850b3b5..dc11738 100644 --- a/typedoc/classes/NeuralNetwork.html +++ b/typedoc/classes/NeuralNetwork.html @@ -3,8 +3,8 @@ - NeuralNetwork | @vladmandic/face-api - v1.5.2 - + NeuralNetwork | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • NeuralNetwork diff --git a/typedoc/classes/ObjectDetection.html b/typedoc/classes/ObjectDetection.html index 0b5658d..8421480 100644 --- a/typedoc/classes/ObjectDetection.html +++ b/typedoc/classes/ObjectDetection.html @@ -3,8 +3,8 @@ - ObjectDetection | @vladmandic/face-api - v1.5.2 - + ObjectDetection | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • ObjectDetection diff --git a/typedoc/classes/Point.html b/typedoc/classes/Point.html index d54d6ea..db292eb 100644 --- a/typedoc/classes/Point.html +++ b/typedoc/classes/Point.html @@ -3,8 +3,8 @@ - Point | @vladmandic/face-api - v1.5.2 - + Point | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • Point diff --git a/typedoc/classes/PredictedBox.html b/typedoc/classes/PredictedBox.html index 24d1697..c0d5ace 100644 --- a/typedoc/classes/PredictedBox.html +++ b/typedoc/classes/PredictedBox.html @@ -3,8 +3,8 @@ - PredictedBox | @vladmandic/face-api - v1.5.2 - + PredictedBox | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • PredictedBox diff --git a/typedoc/classes/Rect.html b/typedoc/classes/Rect.html index 4ff2821..15e5a1a 100644 --- a/typedoc/classes/Rect.html +++ b/typedoc/classes/Rect.html @@ -3,8 +3,8 @@ - Rect | @vladmandic/face-api - v1.5.2 - + Rect | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • Rect diff --git a/typedoc/classes/SsdMobilenetv1.html b/typedoc/classes/SsdMobilenetv1.html index 5e7e4b3..e632555 100644 --- a/typedoc/classes/SsdMobilenetv1.html +++ b/typedoc/classes/SsdMobilenetv1.html @@ -3,8 +3,8 @@ - SsdMobilenetv1 | @vladmandic/face-api - v1.5.2 - + SsdMobilenetv1 | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • SsdMobilenetv1 diff --git a/typedoc/classes/SsdMobilenetv1Options.html b/typedoc/classes/SsdMobilenetv1Options.html index 4e013e6..8f76321 100644 --- a/typedoc/classes/SsdMobilenetv1Options.html +++ b/typedoc/classes/SsdMobilenetv1Options.html @@ -3,8 +3,8 @@ - SsdMobilenetv1Options | @vladmandic/face-api - v1.5.2 - + SsdMobilenetv1Options | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • SsdMobilenetv1Options diff --git a/typedoc/classes/TinyFaceDetector.html b/typedoc/classes/TinyFaceDetector.html index 05b9720..29de756 100644 --- a/typedoc/classes/TinyFaceDetector.html +++ b/typedoc/classes/TinyFaceDetector.html @@ -3,8 +3,8 @@ - TinyFaceDetector | @vladmandic/face-api - v1.5.2 - + TinyFaceDetector | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • TinyFaceDetector diff --git a/typedoc/classes/TinyFaceDetectorOptions.html b/typedoc/classes/TinyFaceDetectorOptions.html index 14f504e..072501c 100644 --- a/typedoc/classes/TinyFaceDetectorOptions.html +++ b/typedoc/classes/TinyFaceDetectorOptions.html @@ -3,8 +3,8 @@ - TinyFaceDetectorOptions | @vladmandic/face-api - v1.5.2 - + TinyFaceDetectorOptions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • TinyFaceDetectorOptions diff --git a/typedoc/classes/TinyYolov2.html b/typedoc/classes/TinyYolov2.html index dce370a..b4e97c7 100644 --- a/typedoc/classes/TinyYolov2.html +++ b/typedoc/classes/TinyYolov2.html @@ -3,8 +3,8 @@ - TinyYolov2 | @vladmandic/face-api - v1.5.2 - + TinyYolov2 | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • TinyYolov2 diff --git a/typedoc/classes/TinyYolov2Options.html b/typedoc/classes/TinyYolov2Options.html index 7b76783..2754263 100644 --- a/typedoc/classes/TinyYolov2Options.html +++ b/typedoc/classes/TinyYolov2Options.html @@ -3,8 +3,8 @@ - TinyYolov2Options | @vladmandic/face-api - v1.5.2 - + TinyYolov2Options | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • TinyYolov2Options diff --git a/typedoc/classes/draw.DrawBox.html b/typedoc/classes/draw.DrawBox.html index 04d7d43..8ad8509 100644 --- a/typedoc/classes/draw.DrawBox.html +++ b/typedoc/classes/draw.DrawBox.html @@ -3,8 +3,8 @@ - DrawBox | @vladmandic/face-api - v1.5.2 - + DrawBox | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/classes/draw.DrawBoxOptions.html b/typedoc/classes/draw.DrawBoxOptions.html index 91106ba..c0dc956 100644 --- a/typedoc/classes/draw.DrawBoxOptions.html +++ b/typedoc/classes/draw.DrawBoxOptions.html @@ -3,8 +3,8 @@ - DrawBoxOptions | @vladmandic/face-api - v1.5.2 - + DrawBoxOptions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/classes/draw.DrawFaceLandmarks.html b/typedoc/classes/draw.DrawFaceLandmarks.html index 84aaaa0..f3d292f 100644 --- a/typedoc/classes/draw.DrawFaceLandmarks.html +++ b/typedoc/classes/draw.DrawFaceLandmarks.html @@ -3,8 +3,8 @@ - DrawFaceLandmarks | @vladmandic/face-api - v1.5.2 - + DrawFaceLandmarks | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/classes/draw.DrawFaceLandmarksOptions.html b/typedoc/classes/draw.DrawFaceLandmarksOptions.html index 5f45dc5..6b2fe8c 100644 --- a/typedoc/classes/draw.DrawFaceLandmarksOptions.html +++ b/typedoc/classes/draw.DrawFaceLandmarksOptions.html @@ -3,8 +3,8 @@ - DrawFaceLandmarksOptions | @vladmandic/face-api - v1.5.2 - + DrawFaceLandmarksOptions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/classes/draw.DrawTextField.html b/typedoc/classes/draw.DrawTextField.html index feb0ff2..ce43d2a 100644 --- a/typedoc/classes/draw.DrawTextField.html +++ b/typedoc/classes/draw.DrawTextField.html @@ -3,8 +3,8 @@ - DrawTextField | @vladmandic/face-api - v1.5.2 - + DrawTextField | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/classes/draw.DrawTextFieldOptions.html b/typedoc/classes/draw.DrawTextFieldOptions.html index 7b353ae..666e485 100644 --- a/typedoc/classes/draw.DrawTextFieldOptions.html +++ b/typedoc/classes/draw.DrawTextFieldOptions.html @@ -3,8 +3,8 @@ - DrawTextFieldOptions | @vladmandic/face-api - v1.5.2 - + DrawTextFieldOptions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/enums/Gender.html b/typedoc/enums/Gender.html index bf71fe3..932d1b8 100644 --- a/typedoc/enums/Gender.html +++ b/typedoc/enums/Gender.html @@ -3,8 +3,8 @@ - Gender | @vladmandic/face-api - v1.5.2 - + Gender | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • Gender diff --git a/typedoc/enums/draw.AnchorPosition.html b/typedoc/enums/draw.AnchorPosition.html index 2c67cc0..7840ff5 100644 --- a/typedoc/enums/draw.AnchorPosition.html +++ b/typedoc/enums/draw.AnchorPosition.html @@ -3,8 +3,8 @@ - AnchorPosition | @vladmandic/face-api - v1.5.2 - + AnchorPosition | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/index.html b/typedoc/index.html index fac66f8..dded430 100644 --- a/typedoc/index.html +++ b/typedoc/index.html @@ -3,8 +3,8 @@ - @vladmandic/face-api - v1.5.2 - + @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -48,7 +48,7 @@
    -

    @vladmandic/face-api - v1.5.2

    +

    @vladmandic/face-api - v1.5.3

    diff --git a/typedoc/interfaces/IBoundingBox.html b/typedoc/interfaces/IBoundingBox.html index f971ef3..0009cd0 100644 --- a/typedoc/interfaces/IBoundingBox.html +++ b/typedoc/interfaces/IBoundingBox.html @@ -3,8 +3,8 @@ - IBoundingBox | @vladmandic/face-api - v1.5.2 - + IBoundingBox | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
  • Preparing search index...
  • The search index is not available
  • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • IBoundingBox diff --git a/typedoc/interfaces/IDimensions.html b/typedoc/interfaces/IDimensions.html index 5295428..3baeaa9 100644 --- a/typedoc/interfaces/IDimensions.html +++ b/typedoc/interfaces/IDimensions.html @@ -3,8 +3,8 @@ - IDimensions | @vladmandic/face-api - v1.5.2 - + IDimensions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • IDimensions diff --git a/typedoc/interfaces/IFaceDetecion.html b/typedoc/interfaces/IFaceDetecion.html index 4bd22f9..1e9fdb8 100644 --- a/typedoc/interfaces/IFaceDetecion.html +++ b/typedoc/interfaces/IFaceDetecion.html @@ -3,8 +3,8 @@ - IFaceDetecion | @vladmandic/face-api - v1.5.2 - + IFaceDetecion | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • IFaceDetecion diff --git a/typedoc/interfaces/IFaceLandmarks.html b/typedoc/interfaces/IFaceLandmarks.html index 7a5bba3..4a14fca 100644 --- a/typedoc/interfaces/IFaceLandmarks.html +++ b/typedoc/interfaces/IFaceLandmarks.html @@ -3,8 +3,8 @@ - IFaceLandmarks | @vladmandic/face-api - v1.5.2 - + IFaceLandmarks | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • IFaceLandmarks diff --git a/typedoc/interfaces/IFaceMatch.html b/typedoc/interfaces/IFaceMatch.html index e2e0bb1..b173fee 100644 --- a/typedoc/interfaces/IFaceMatch.html +++ b/typedoc/interfaces/IFaceMatch.html @@ -3,8 +3,8 @@ - IFaceMatch | @vladmandic/face-api - v1.5.2 - + IFaceMatch | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • IFaceMatch diff --git a/typedoc/interfaces/IPoint.html b/typedoc/interfaces/IPoint.html index 3011810..3974dd2 100644 --- a/typedoc/interfaces/IPoint.html +++ b/typedoc/interfaces/IPoint.html @@ -3,8 +3,8 @@ - IPoint | @vladmandic/face-api - v1.5.2 - + IPoint | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • IPoint diff --git a/typedoc/interfaces/IRect.html b/typedoc/interfaces/IRect.html index a8bf873..234563f 100644 --- a/typedoc/interfaces/IRect.html +++ b/typedoc/interfaces/IRect.html @@ -3,8 +3,8 @@ - IRect | @vladmandic/face-api - v1.5.2 - + IRect | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • IRect diff --git a/typedoc/interfaces/ISsdMobilenetv1Options.html b/typedoc/interfaces/ISsdMobilenetv1Options.html index 5fd56bc..622aeb8 100644 --- a/typedoc/interfaces/ISsdMobilenetv1Options.html +++ b/typedoc/interfaces/ISsdMobilenetv1Options.html @@ -3,8 +3,8 @@ - ISsdMobilenetv1Options | @vladmandic/face-api - v1.5.2 - + ISsdMobilenetv1Options | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • ISsdMobilenetv1Options diff --git a/typedoc/interfaces/ITinyYolov2Options.html b/typedoc/interfaces/ITinyYolov2Options.html index 9bfa760..46a3930 100644 --- a/typedoc/interfaces/ITinyYolov2Options.html +++ b/typedoc/interfaces/ITinyYolov2Options.html @@ -3,8 +3,8 @@ - ITinyYolov2Options | @vladmandic/face-api - v1.5.2 - + ITinyYolov2Options | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • ITinyYolov2Options diff --git a/typedoc/interfaces/draw.IDrawBoxOptions.html b/typedoc/interfaces/draw.IDrawBoxOptions.html index 5a66cf2..fecb49c 100644 --- a/typedoc/interfaces/draw.IDrawBoxOptions.html +++ b/typedoc/interfaces/draw.IDrawBoxOptions.html @@ -3,8 +3,8 @@ - IDrawBoxOptions | @vladmandic/face-api - v1.5.2 - + IDrawBoxOptions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/interfaces/draw.IDrawFaceLandmarksOptions.html b/typedoc/interfaces/draw.IDrawFaceLandmarksOptions.html index 54ce068..e2b0203 100644 --- a/typedoc/interfaces/draw.IDrawFaceLandmarksOptions.html +++ b/typedoc/interfaces/draw.IDrawFaceLandmarksOptions.html @@ -3,8 +3,8 @@ - IDrawFaceLandmarksOptions | @vladmandic/face-api - v1.5.2 - + IDrawFaceLandmarksOptions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/interfaces/draw.IDrawTextFieldOptions.html b/typedoc/interfaces/draw.IDrawTextFieldOptions.html index 3dface9..68b7c00 100644 --- a/typedoc/interfaces/draw.IDrawTextFieldOptions.html +++ b/typedoc/interfaces/draw.IDrawTextFieldOptions.html @@ -3,8 +3,8 @@ - IDrawTextFieldOptions | @vladmandic/face-api - v1.5.2 - + IDrawTextFieldOptions | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/modules/draw.html b/typedoc/modules/draw.html index 6324b3a..e189a1b 100644 --- a/typedoc/modules/draw.html +++ b/typedoc/modules/draw.html @@ -3,8 +3,8 @@ - draw | @vladmandic/face-api - v1.5.2 - + draw | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    @@ -50,7 +50,7 @@
    • - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3
    • draw diff --git a/typedoc/modules/utils.html b/typedoc/modules/utils.html index 7a2a638..21152b9 100644 --- a/typedoc/modules/utils.html +++ b/typedoc/modules/utils.html @@ -3,8 +3,8 @@ - utils | @vladmandic/face-api - v1.5.2 - + utils | @vladmandic/face-api - v1.5.3 + @@ -23,7 +23,7 @@
    • Preparing search index...
    • The search index is not available
    - @vladmandic/face-api - v1.5.2 + @vladmandic/face-api - v1.5.3