From 69525131beacf420bf85f1ec9db76bf44932570a Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 22 Apr 2021 19:47:04 -0400 Subject: [PATCH] major version rebuild --- CHANGELOG.md | 4 ++-- dist/human.esm-nobundle.js | 2 +- dist/human.esm.js | 2 +- dist/human.js | 2 +- dist/human.node-gpu.js | 2 +- dist/human.node-wasm.js | 2 +- dist/human.node.js | 2 +- server/build.log | 17 +++++++++++++++++ 8 files changed, 25 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a21ba351..ab5dafbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/human -Version: **1.6.0** +Version: **1.6.1** Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition** Author: **Vladimir Mandic ** @@ -9,7 +9,7 @@ Repository: **** ## Changelog -### **HEAD -> main** 2021/04/22 mandic00@live.com +### **1.6.1** 2021/04/22 mandic00@live.com ### **origin/main** 2021/04/20 mandic00@live.com diff --git a/dist/human.esm-nobundle.js b/dist/human.esm-nobundle.js index 380e4226..ebb0c8ae 100644 --- a/dist/human.esm-nobundle.js +++ b/dist/human.esm-nobundle.js @@ -731,5 +731,5 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var u0="1.6.0";var fe,Pe,Me,he,rt,ze,ct,At,_t,dn=class{constructor(t={}){fe.set(this,void 0);Pe.set(this,void 0);Me.set(this,void 0);he.set(this,void 0);this.analyze=(...t)=>{if(!C(this,Pe))return;let n=this.tf.engine().state.numTensors,c=C(this,fe);Ae(this,fe,n);let _=n-c;_!==0&&f(...t,_)};rt.set(this,t=>{if(!C(this,Me))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof o.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});ze.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let c=v();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&f("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&f("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let _=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),A=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&f(`wasm execution: ${_?"SIMD":"no SIMD"} ${A?"multithreaded":"singlethreaded"}`),this.config.debug&&!_&&f("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&T1();try{await this.tf.setBackend(this.config.backend)}catch(_){f("error: cannot set backend:",this.config.backend,_)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(f("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let _=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&f(`gl version:${_.getParameter(_.VERSION)} renderer:${_.getParameter(_.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(v()-c)}});ct.set(this,async()=>{let t=(_,A="application/octet-stream")=>fetch(`data:${A};base64,${_}`).then(r=>r.blob()),n,c;switch(this.config.warmup){case"face":n=await t(tt);break;case"full":n=await t(nt);break;default:n=null}if(n){let _=await createImageBitmap(n);c=await this.detect(_,this.config),_.close()}return c});At.set(this,async()=>new Promise(t=>{let n,c=0;switch(this.config.warmup){case"face":c=256,n="data:image/jpeg;base64,"+tt;break;case"full":case"body":c=1200,n="data:image/jpeg;base64,"+nt;break;default:n=null}let _=new Image;_.onload=async()=>{let A=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(c,c):document.createElement("canvas");A.width=_.naturalWidth,A.height=_.naturalHeight;let r=A.getContext("2d");r==null||r.drawImage(_,0,0);let s=await this.detect(A,this.config);t(s)},n?_.src=n:t(null)}));_t.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n;if(this.config.warmup==="face"&&(n=t(tt)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(nt)),!n)return null;let c;if(typeof o.node!="undefined"){let _=o.node.decodeJpeg(n),A=_.expandDims(0);this.tf.dispose(_),c=await this.detect(A,this.config),this.tf.dispose(A)}else this.config.debug&&f("Warmup tfjs-node not loaded");return c});this.tf=o,this.draw=a1,this.version=u0,this.config=U(j,t),this.state="idle",Ae(this,fe,0),Ae(this,Pe,!1),Ae(this,Me,!1),Ae(this,he,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>i1(n,this.config),this.classes={facemesh:St,age:st,gender:it,emotion:lt,faceres:bt,body:this.config.body.modelPath.includes("posenet")?qt:e1,hand:Dt,nanodet:A1},this.faceTriangulation=O1,this.faceUVMap=I1,this.sysinfo=f1()}profileData(){return this.config.profile?Ee:{}}similarity(t,n){return this.config.face.description.enabled?Tt(t,n):this.config.face.embedding.enabled?P1(t,n):0}enhance(t){return Pt(t)}match(t,n,c=0){return M1(t,n,c)}async load(t={}){this.state="load";let n=v();t&&(this.config=U(this.config,t)),C(this,he)&&(this.config.debug&&f(`version: ${this.version}`),this.config.debug&&f(`tfjs version: ${this.tf.version_core}`),this.config.debug&&f("platform:",this.sysinfo.platform),this.config.debug&&f("agent:",this.sysinfo.agent),await C(this,ze).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&f("configuration:",this.config),this.config.debug&&f("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?kt(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?ht(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?wt(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?mt(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?pt(this.config):null),this.models.handpose||(this.config.hand.enabled?$t(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?Ut(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?t1(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?r1(this.config):null),this.models.nanodet||(this.config.object.enabled?o1(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?gt(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await kt(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await ht(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await wt(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await mt(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await pt(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await $t(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await Ut(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await t1(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await r1(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await o1(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await gt(this.config))),C(this,he)&&(this.config.debug&&f("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),Ae(this,he,!1));let c=Math.trunc(v()-n);c>(this.perf.load||0)&&(this.perf.load=c)}async detect(t,n={}){return new Promise(async c=>{var p,b,M,E;this.state="config";let _;this.config=U(this.config,n),this.state="check";let A=C(this,rt).call(this,t);A&&(f(A,t),c({error:A}));let r=v();await C(this,ze).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let s;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&h1 instanceof ImageBitmap)&&(f("disabling video optimization"),s=this.config.videoOptimized,this.config.videoOptimized=!1),_=v();let h=i1(t,this.config);if(!h||!h.tensor){f("could not convert input to tensor"),c({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(v()-_),this.analyze("Get Image:");let a,x,i,w,m;this.config.async?(i=this.config.face.enabled?Mt(this,h.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",_=v(),i=this.config.face.enabled?await Mt(this,h.tensor):[],m=Math.trunc(v()-_),m>0&&(this.perf.face=m)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?a=this.config.body.enabled?(p=this.models.posenet)==null?void 0:p.estimatePoses(h.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?a=this.config.body.enabled?n1(h.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(a=this.config.body.enabled?c1(h.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",_=v(),this.config.body.modelPath.includes("posenet")?a=this.config.body.enabled?await((b=this.models.posenet)==null?void 0:b.estimatePoses(h.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?a=this.config.body.enabled?await n1(h.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(a=this.config.body.enabled?await c1(h.tensor,this.config):[]),m=Math.trunc(v()-_),m>0&&(this.perf.body=m)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(x=this.config.hand.enabled?(M=this.models.handpose)==null?void 0:M.estimateHands(h.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",_=v(),x=this.config.hand.enabled?await((E=this.models.handpose)==null?void 0:E.estimateHands(h.tensor,this.config)):[],m=Math.trunc(v()-_),m>0&&(this.perf.hand=m)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(w=this.config.object.enabled?s1(h.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",_=v(),w=this.config.object.enabled?await s1(h.tensor,this.config):[],m=Math.trunc(v()-_),m>0&&(this.perf.object=m)),this.analyze("End Object:"),this.config.async&&([i,a,x,w]=await Promise.all([i,a,x,w])),o.dispose(h.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let u=[];this.config.gesture.enabled&&(_=v(),u=[...a0(i),...i0(a),...y0(x),...x0(i)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(v()-_)),s&&(this.config.videoOptimized=s),this.perf.total=Math.trunc(v()-r),this.state="idle";let y={face:i,body:a,hand:x,gesture:u,object:w,performance:this.perf,canvas:h.canvas};c(y)})}async warmup(t={}){let n=v();if(t&&(this.config=U(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let c=this.config.videoOptimized;this.config.videoOptimized=!1;let _;typeof createImageBitmap=="function"?_=await C(this,ct).call(this):typeof Image!="undefined"?_=await C(this,At).call(this):_=await C(this,_t).call(this),this.config.videoOptimized=c;let A=v();return this.config.debug&&f("Warmup",this.config.warmup,Math.round(A-n),"ms",_),_}};fe=new WeakMap,Pe=new WeakMap,Me=new WeakMap,he=new WeakMap,rt=new WeakMap,ze=new WeakMap,ct=new WeakMap,At=new WeakMap,_t=new WeakMap;export{dn as Human,dn as default}; +2Q==`;var u0="1.6.1";var fe,Pe,Me,he,rt,ze,ct,At,_t,dn=class{constructor(t={}){fe.set(this,void 0);Pe.set(this,void 0);Me.set(this,void 0);he.set(this,void 0);this.analyze=(...t)=>{if(!C(this,Pe))return;let n=this.tf.engine().state.numTensors,c=C(this,fe);Ae(this,fe,n);let _=n-c;_!==0&&f(...t,_)};rt.set(this,t=>{if(!C(this,Me))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof o.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});ze.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let c=v();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&f("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&f("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let _=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),A=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&f(`wasm execution: ${_?"SIMD":"no SIMD"} ${A?"multithreaded":"singlethreaded"}`),this.config.debug&&!_&&f("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&T1();try{await this.tf.setBackend(this.config.backend)}catch(_){f("error: cannot set backend:",this.config.backend,_)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(f("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let _=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&f(`gl version:${_.getParameter(_.VERSION)} renderer:${_.getParameter(_.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(v()-c)}});ct.set(this,async()=>{let t=(_,A="application/octet-stream")=>fetch(`data:${A};base64,${_}`).then(r=>r.blob()),n,c;switch(this.config.warmup){case"face":n=await t(tt);break;case"full":n=await t(nt);break;default:n=null}if(n){let _=await createImageBitmap(n);c=await this.detect(_,this.config),_.close()}return c});At.set(this,async()=>new Promise(t=>{let n,c=0;switch(this.config.warmup){case"face":c=256,n="data:image/jpeg;base64,"+tt;break;case"full":case"body":c=1200,n="data:image/jpeg;base64,"+nt;break;default:n=null}let _=new Image;_.onload=async()=>{let A=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(c,c):document.createElement("canvas");A.width=_.naturalWidth,A.height=_.naturalHeight;let r=A.getContext("2d");r==null||r.drawImage(_,0,0);let s=await this.detect(A,this.config);t(s)},n?_.src=n:t(null)}));_t.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n;if(this.config.warmup==="face"&&(n=t(tt)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(nt)),!n)return null;let c;if(typeof o.node!="undefined"){let _=o.node.decodeJpeg(n),A=_.expandDims(0);this.tf.dispose(_),c=await this.detect(A,this.config),this.tf.dispose(A)}else this.config.debug&&f("Warmup tfjs-node not loaded");return c});this.tf=o,this.draw=a1,this.version=u0,this.config=U(j,t),this.state="idle",Ae(this,fe,0),Ae(this,Pe,!1),Ae(this,Me,!1),Ae(this,he,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>i1(n,this.config),this.classes={facemesh:St,age:st,gender:it,emotion:lt,faceres:bt,body:this.config.body.modelPath.includes("posenet")?qt:e1,hand:Dt,nanodet:A1},this.faceTriangulation=O1,this.faceUVMap=I1,this.sysinfo=f1()}profileData(){return this.config.profile?Ee:{}}similarity(t,n){return this.config.face.description.enabled?Tt(t,n):this.config.face.embedding.enabled?P1(t,n):0}enhance(t){return Pt(t)}match(t,n,c=0){return M1(t,n,c)}async load(t={}){this.state="load";let n=v();t&&(this.config=U(this.config,t)),C(this,he)&&(this.config.debug&&f(`version: ${this.version}`),this.config.debug&&f(`tfjs version: ${this.tf.version_core}`),this.config.debug&&f("platform:",this.sysinfo.platform),this.config.debug&&f("agent:",this.sysinfo.agent),await C(this,ze).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&f("configuration:",this.config),this.config.debug&&f("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?kt(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?ht(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?wt(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?mt(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?pt(this.config):null),this.models.handpose||(this.config.hand.enabled?$t(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?Ut(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?t1(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?r1(this.config):null),this.models.nanodet||(this.config.object.enabled?o1(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?gt(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await kt(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await ht(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await wt(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await mt(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await pt(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await $t(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await Ut(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await t1(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await r1(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await o1(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await gt(this.config))),C(this,he)&&(this.config.debug&&f("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),Ae(this,he,!1));let c=Math.trunc(v()-n);c>(this.perf.load||0)&&(this.perf.load=c)}async detect(t,n={}){return new Promise(async c=>{var p,b,M,E;this.state="config";let _;this.config=U(this.config,n),this.state="check";let A=C(this,rt).call(this,t);A&&(f(A,t),c({error:A}));let r=v();await C(this,ze).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let s;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&h1 instanceof ImageBitmap)&&(f("disabling video optimization"),s=this.config.videoOptimized,this.config.videoOptimized=!1),_=v();let h=i1(t,this.config);if(!h||!h.tensor){f("could not convert input to tensor"),c({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(v()-_),this.analyze("Get Image:");let a,x,i,w,m;this.config.async?(i=this.config.face.enabled?Mt(this,h.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",_=v(),i=this.config.face.enabled?await Mt(this,h.tensor):[],m=Math.trunc(v()-_),m>0&&(this.perf.face=m)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?a=this.config.body.enabled?(p=this.models.posenet)==null?void 0:p.estimatePoses(h.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?a=this.config.body.enabled?n1(h.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(a=this.config.body.enabled?c1(h.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",_=v(),this.config.body.modelPath.includes("posenet")?a=this.config.body.enabled?await((b=this.models.posenet)==null?void 0:b.estimatePoses(h.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?a=this.config.body.enabled?await n1(h.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(a=this.config.body.enabled?await c1(h.tensor,this.config):[]),m=Math.trunc(v()-_),m>0&&(this.perf.body=m)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(x=this.config.hand.enabled?(M=this.models.handpose)==null?void 0:M.estimateHands(h.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",_=v(),x=this.config.hand.enabled?await((E=this.models.handpose)==null?void 0:E.estimateHands(h.tensor,this.config)):[],m=Math.trunc(v()-_),m>0&&(this.perf.hand=m)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(w=this.config.object.enabled?s1(h.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",_=v(),w=this.config.object.enabled?await s1(h.tensor,this.config):[],m=Math.trunc(v()-_),m>0&&(this.perf.object=m)),this.analyze("End Object:"),this.config.async&&([i,a,x,w]=await Promise.all([i,a,x,w])),o.dispose(h.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let u=[];this.config.gesture.enabled&&(_=v(),u=[...a0(i),...i0(a),...y0(x),...x0(i)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(v()-_)),s&&(this.config.videoOptimized=s),this.perf.total=Math.trunc(v()-r),this.state="idle";let y={face:i,body:a,hand:x,gesture:u,object:w,performance:this.perf,canvas:h.canvas};c(y)})}async warmup(t={}){let n=v();if(t&&(this.config=U(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let c=this.config.videoOptimized;this.config.videoOptimized=!1;let _;typeof createImageBitmap=="function"?_=await C(this,ct).call(this):typeof Image!="undefined"?_=await C(this,At).call(this):_=await C(this,_t).call(this),this.config.videoOptimized=c;let A=v();return this.config.debug&&f("Warmup",this.config.warmup,Math.round(A-n),"ms",_),_}};fe=new WeakMap,Pe=new WeakMap,Me=new WeakMap,he=new WeakMap,rt=new WeakMap,ze=new WeakMap,ct=new WeakMap,At=new WeakMap,_t=new WeakMap;export{dn as Human,dn as default}; //# sourceMappingURL=human.esm-nobundle.js.map diff --git a/dist/human.esm.js b/dist/human.esm.js index 1fa68c0a..1aa39c4a 100644 --- a/dist/human.esm.js +++ b/dist/human.esm.js @@ -4912,7 +4912,7 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var kk="1.6.0";var iu,sh,ih,Gi,X0,oh,K0,Z0,Y0,woe=class{constructor(t={}){iu.set(this,void 0);sh.set(this,void 0);ih.set(this,void 0);Gi.set(this,void 0);this.analyze=(...t)=>{if(!ur(this,sh))return;let n=this.tf.engine().state.numTensors,r=ur(this,iu);us(this,iu,n);let a=n-r;a!==0&&le(...t,a)};X0.set(this,t=>{if(!ur(this,ih))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Pe))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});oh.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let r=Ye();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&le("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&le("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let a=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),s=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&le(`wasm execution: ${a?"SIMD":"no SIMD"} ${s?"multithreaded":"singlethreaded"}`),this.config.debug&&!a&&le("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&N8();try{await this.tf.setBackend(this.config.backend)}catch(a){le("error: cannot set backend:",this.config.backend,a)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(le("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let a=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&le(`gl version:${a.getParameter(a.VERSION)} renderer:${a.getParameter(a.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(Ye()-r)}});K0.set(this,async()=>{let t=(a,s="application/octet-stream")=>fetch(`data:${s};base64,${a}`).then(i=>i.blob()),n,r;switch(this.config.warmup){case"face":n=await t(G0);break;case"full":n=await t(q0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});Z0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+G0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+q0;break;default:n=null}let a=new Image;a.onload=async()=>{let s=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(r,r):document.createElement("canvas");s.width=a.naturalWidth,s.height=a.naturalHeight;let i=s.getContext("2d");i==null||i.drawImage(a,0,0);let o=await this.detect(s,this.config);t(o)},n?a.src=n:t(null)}));Y0.set(this,async()=>{let t=a=>Buffer.from(a,"base64"),n;if(this.config.warmup==="face"&&(n=t(G0)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(q0)),!n)return null;let r;if(typeof void 0!="undefined"){let a=(void 0).decodeJpeg(n),s=a.expandDims(0);this.tf.dispose(a),r=await this.detect(s,this.config),this.tf.dispose(s)}else this.config.debug&&le("Warmup tfjs-node not loaded");return r});this.tf=gu,this.draw=K2,this.version=kk,this.config=Jn(ht,t),this.state="idle",us(this,iu,0),us(this,sh,!1),us(this,ih,!1),us(this,Gi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>X2(n,this.config),this.classes={facemesh:m2,age:Gg,gender:Xg,emotion:Qg,faceres:s2,body:this.config.body.modelPath.includes("posenet")?N2:P2,hand:$2,nanodet:j2},this.faceTriangulation=L8,this.faceUVMap=W8,this.sysinfo=c5()}profileData(){return this.config.profile?x0:{}}similarity(t,n){return this.config.face.description.enabled?o2(t,n):this.config.face.embedding.enabled?T8(t,n):0}enhance(t){return l2(t)}match(t,n,r=0){return E8(t,n,r)}async load(t={}){this.state="load";let n=Ye();t&&(this.config=Jn(this.config,t)),ur(this,Gi)&&(this.config.debug&&le(`version: ${this.version}`),this.config.debug&&le(`tfjs version: ${this.tf.version_core}`),this.config.debug&&le("platform:",this.sysinfo.platform),this.config.debug&&le("agent:",this.sysinfo.agent),await ur(this,oh).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&le("configuration:",this.config),this.config.debug&&le("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?y2(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?qg(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Jg(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?n2(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?r2(this.config):null),this.models.handpose||(this.config.hand.enabled?z2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?E2(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?L2(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?B2(this.config):null),this.models.nanodet||(this.config.object.enabled?H2(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?i2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await y2(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await qg(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Jg(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await n2(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await r2(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await z2(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await E2(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await L2(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await B2(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await H2(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await i2(this.config))),ur(this,Gi)&&(this.config.debug&&le("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),us(this,Gi,!1));let r=Math.trunc(Ye()-n);r>(this.perf.load||0)&&(this.perf.load=r)}async detect(t,n={}){return new Promise(async r=>{var A,y,g,x;this.state="config";let a;this.config=Jn(this.config,n),this.state="check";let s=ur(this,X0).call(this,t);s&&(le(s,t),r({error:s}));let i=Ye();await ur(this,oh).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&q2 instanceof ImageBitmap)&&(le("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),a=Ye();let l=X2(t,this.config);if(!l||!l.tensor){le("could not convert input to tensor"),r({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(Ye()-a),this.analyze("Get Image:");let c,u,h,d,p;this.config.async?(h=this.config.face.enabled?u2(this,l.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=Ye(),h=this.config.face.enabled?await u2(this,l.tensor):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.face=p)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?c=this.config.body.enabled?(A=this.models.posenet)==null?void 0:A.estimatePoses(l.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?c=this.config.body.enabled?W2(l.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(c=this.config.body.enabled?V2(l.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",a=Ye(),this.config.body.modelPath.includes("posenet")?c=this.config.body.enabled?await((y=this.models.posenet)==null?void 0:y.estimatePoses(l.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?c=this.config.body.enabled?await W2(l.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(c=this.config.body.enabled?await V2(l.tensor,this.config):[]),p=Math.trunc(Ye()-a),p>0&&(this.perf.body=p)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(g=this.models.handpose)==null?void 0:g.estimateHands(l.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=Ye(),u=this.config.hand.enabled?await((x=this.models.handpose)==null?void 0:x.estimateHands(l.tensor,this.config)):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.hand=p)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(d=this.config.object.enabled?G2(l.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=Ye(),d=this.config.object.enabled?await G2(l.tensor,this.config):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.object=p)),this.analyze("End Object:"),this.config.async&&([h,c,u,d]=await Promise.all([h,c,u,d])),_e(l.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let f=[];this.config.gesture.enabled&&(a=Ye(),f=[...mk(h),...fk(c),...yk(u),...Ak(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(Ye()-a)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(Ye()-i),this.state="idle";let m={face:h,body:c,hand:u,gesture:f,object:d,performance:this.perf,canvas:l.canvas};r(m)})}async warmup(t={}){let n=Ye();if(t&&(this.config=Jn(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await ur(this,K0).call(this):typeof Image!="undefined"?a=await ur(this,Z0).call(this):a=await ur(this,Y0).call(this),this.config.videoOptimized=r;let s=Ye();return this.config.debug&&le("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};iu=new WeakMap,sh=new WeakMap,ih=new WeakMap,Gi=new WeakMap,X0=new WeakMap,oh=new WeakMap,K0=new WeakMap,Z0=new WeakMap,Y0=new WeakMap;export{woe as Human,woe as default}; +2Q==`;var kk="1.6.1";var iu,sh,ih,Gi,X0,oh,K0,Z0,Y0,woe=class{constructor(t={}){iu.set(this,void 0);sh.set(this,void 0);ih.set(this,void 0);Gi.set(this,void 0);this.analyze=(...t)=>{if(!ur(this,sh))return;let n=this.tf.engine().state.numTensors,r=ur(this,iu);us(this,iu,n);let a=n-r;a!==0&&le(...t,a)};X0.set(this,t=>{if(!ur(this,ih))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Pe))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});oh.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let r=Ye();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&le("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&le("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let a=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),s=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&le(`wasm execution: ${a?"SIMD":"no SIMD"} ${s?"multithreaded":"singlethreaded"}`),this.config.debug&&!a&&le("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&N8();try{await this.tf.setBackend(this.config.backend)}catch(a){le("error: cannot set backend:",this.config.backend,a)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(le("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let a=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&le(`gl version:${a.getParameter(a.VERSION)} renderer:${a.getParameter(a.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(Ye()-r)}});K0.set(this,async()=>{let t=(a,s="application/octet-stream")=>fetch(`data:${s};base64,${a}`).then(i=>i.blob()),n,r;switch(this.config.warmup){case"face":n=await t(G0);break;case"full":n=await t(q0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});Z0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+G0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+q0;break;default:n=null}let a=new Image;a.onload=async()=>{let s=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(r,r):document.createElement("canvas");s.width=a.naturalWidth,s.height=a.naturalHeight;let i=s.getContext("2d");i==null||i.drawImage(a,0,0);let o=await this.detect(s,this.config);t(o)},n?a.src=n:t(null)}));Y0.set(this,async()=>{let t=a=>Buffer.from(a,"base64"),n;if(this.config.warmup==="face"&&(n=t(G0)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(q0)),!n)return null;let r;if(typeof void 0!="undefined"){let a=(void 0).decodeJpeg(n),s=a.expandDims(0);this.tf.dispose(a),r=await this.detect(s,this.config),this.tf.dispose(s)}else this.config.debug&&le("Warmup tfjs-node not loaded");return r});this.tf=gu,this.draw=K2,this.version=kk,this.config=Jn(ht,t),this.state="idle",us(this,iu,0),us(this,sh,!1),us(this,ih,!1),us(this,Gi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>X2(n,this.config),this.classes={facemesh:m2,age:Gg,gender:Xg,emotion:Qg,faceres:s2,body:this.config.body.modelPath.includes("posenet")?N2:P2,hand:$2,nanodet:j2},this.faceTriangulation=L8,this.faceUVMap=W8,this.sysinfo=c5()}profileData(){return this.config.profile?x0:{}}similarity(t,n){return this.config.face.description.enabled?o2(t,n):this.config.face.embedding.enabled?T8(t,n):0}enhance(t){return l2(t)}match(t,n,r=0){return E8(t,n,r)}async load(t={}){this.state="load";let n=Ye();t&&(this.config=Jn(this.config,t)),ur(this,Gi)&&(this.config.debug&&le(`version: ${this.version}`),this.config.debug&&le(`tfjs version: ${this.tf.version_core}`),this.config.debug&&le("platform:",this.sysinfo.platform),this.config.debug&&le("agent:",this.sysinfo.agent),await ur(this,oh).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&le("configuration:",this.config),this.config.debug&&le("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?y2(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?qg(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Jg(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?n2(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?r2(this.config):null),this.models.handpose||(this.config.hand.enabled?z2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?E2(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?L2(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?B2(this.config):null),this.models.nanodet||(this.config.object.enabled?H2(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?i2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await y2(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await qg(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Jg(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await n2(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await r2(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await z2(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await E2(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await L2(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await B2(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await H2(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await i2(this.config))),ur(this,Gi)&&(this.config.debug&&le("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),us(this,Gi,!1));let r=Math.trunc(Ye()-n);r>(this.perf.load||0)&&(this.perf.load=r)}async detect(t,n={}){return new Promise(async r=>{var A,y,g,x;this.state="config";let a;this.config=Jn(this.config,n),this.state="check";let s=ur(this,X0).call(this,t);s&&(le(s,t),r({error:s}));let i=Ye();await ur(this,oh).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&q2 instanceof ImageBitmap)&&(le("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),a=Ye();let l=X2(t,this.config);if(!l||!l.tensor){le("could not convert input to tensor"),r({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(Ye()-a),this.analyze("Get Image:");let c,u,h,d,p;this.config.async?(h=this.config.face.enabled?u2(this,l.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=Ye(),h=this.config.face.enabled?await u2(this,l.tensor):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.face=p)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?c=this.config.body.enabled?(A=this.models.posenet)==null?void 0:A.estimatePoses(l.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?c=this.config.body.enabled?W2(l.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(c=this.config.body.enabled?V2(l.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",a=Ye(),this.config.body.modelPath.includes("posenet")?c=this.config.body.enabled?await((y=this.models.posenet)==null?void 0:y.estimatePoses(l.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?c=this.config.body.enabled?await W2(l.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(c=this.config.body.enabled?await V2(l.tensor,this.config):[]),p=Math.trunc(Ye()-a),p>0&&(this.perf.body=p)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(g=this.models.handpose)==null?void 0:g.estimateHands(l.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=Ye(),u=this.config.hand.enabled?await((x=this.models.handpose)==null?void 0:x.estimateHands(l.tensor,this.config)):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.hand=p)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(d=this.config.object.enabled?G2(l.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=Ye(),d=this.config.object.enabled?await G2(l.tensor,this.config):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.object=p)),this.analyze("End Object:"),this.config.async&&([h,c,u,d]=await Promise.all([h,c,u,d])),_e(l.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let f=[];this.config.gesture.enabled&&(a=Ye(),f=[...mk(h),...fk(c),...yk(u),...Ak(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(Ye()-a)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(Ye()-i),this.state="idle";let m={face:h,body:c,hand:u,gesture:f,object:d,performance:this.perf,canvas:l.canvas};r(m)})}async warmup(t={}){let n=Ye();if(t&&(this.config=Jn(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await ur(this,K0).call(this):typeof Image!="undefined"?a=await ur(this,Z0).call(this):a=await ur(this,Y0).call(this),this.config.videoOptimized=r;let s=Ye();return this.config.debug&&le("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};iu=new WeakMap,sh=new WeakMap,ih=new WeakMap,Gi=new WeakMap,X0=new WeakMap,oh=new WeakMap,K0=new WeakMap,Z0=new WeakMap,Y0=new WeakMap;export{woe as Human,woe as default}; /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/human.js b/dist/human.js index 3d0c5e59..4a6ce9f5 100644 --- a/dist/human.js +++ b/dist/human.js @@ -4912,7 +4912,7 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var kk="1.6.0";var iu,sh,ih,Gi,X0,oh,K0,Z0,Y0,Ik=class{constructor(t={}){iu.set(this,void 0);sh.set(this,void 0);ih.set(this,void 0);Gi.set(this,void 0);this.analyze=(...t)=>{if(!ur(this,sh))return;let n=this.tf.engine().state.numTensors,r=ur(this,iu);us(this,iu,n);let a=n-r;a!==0&&le(...t,a)};X0.set(this,t=>{if(!ur(this,ih))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Pe))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});oh.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let r=Ye();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&le("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&le("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let a=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),s=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&le(`wasm execution: ${a?"SIMD":"no SIMD"} ${s?"multithreaded":"singlethreaded"}`),this.config.debug&&!a&&le("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&N8();try{await this.tf.setBackend(this.config.backend)}catch(a){le("error: cannot set backend:",this.config.backend,a)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(le("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let a=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&le(`gl version:${a.getParameter(a.VERSION)} renderer:${a.getParameter(a.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(Ye()-r)}});K0.set(this,async()=>{let t=(a,s="application/octet-stream")=>fetch(`data:${s};base64,${a}`).then(i=>i.blob()),n,r;switch(this.config.warmup){case"face":n=await t(G0);break;case"full":n=await t(q0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});Z0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+G0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+q0;break;default:n=null}let a=new Image;a.onload=async()=>{let s=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(r,r):document.createElement("canvas");s.width=a.naturalWidth,s.height=a.naturalHeight;let i=s.getContext("2d");i==null||i.drawImage(a,0,0);let o=await this.detect(s,this.config);t(o)},n?a.src=n:t(null)}));Y0.set(this,async()=>{let t=a=>Buffer.from(a,"base64"),n;if(this.config.warmup==="face"&&(n=t(G0)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(q0)),!n)return null;let r;if(typeof void 0!="undefined"){let a=(void 0).decodeJpeg(n),s=a.expandDims(0);this.tf.dispose(a),r=await this.detect(s,this.config),this.tf.dispose(s)}else this.config.debug&&le("Warmup tfjs-node not loaded");return r});this.tf=gu,this.draw=K2,this.version=kk,this.config=Qn(ht,t),this.state="idle",us(this,iu,0),us(this,sh,!1),us(this,ih,!1),us(this,Gi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>X2(n,this.config),this.classes={facemesh:m2,age:Gg,gender:Xg,emotion:Qg,faceres:s2,body:this.config.body.modelPath.includes("posenet")?N2:P2,hand:$2,nanodet:j2},this.faceTriangulation=L8,this.faceUVMap=W8,this.sysinfo=c5()}profileData(){return this.config.profile?x0:{}}similarity(t,n){return this.config.face.description.enabled?o2(t,n):this.config.face.embedding.enabled?T8(t,n):0}enhance(t){return l2(t)}match(t,n,r=0){return E8(t,n,r)}async load(t={}){this.state="load";let n=Ye();t&&(this.config=Qn(this.config,t)),ur(this,Gi)&&(this.config.debug&&le(`version: ${this.version}`),this.config.debug&&le(`tfjs version: ${this.tf.version_core}`),this.config.debug&&le("platform:",this.sysinfo.platform),this.config.debug&&le("agent:",this.sysinfo.agent),await ur(this,oh).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&le("configuration:",this.config),this.config.debug&&le("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?y2(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?qg(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Jg(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?n2(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?r2(this.config):null),this.models.handpose||(this.config.hand.enabled?z2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?E2(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?L2(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?B2(this.config):null),this.models.nanodet||(this.config.object.enabled?H2(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?i2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await y2(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await qg(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Jg(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await n2(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await r2(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await z2(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await E2(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await L2(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await B2(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await H2(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await i2(this.config))),ur(this,Gi)&&(this.config.debug&&le("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),us(this,Gi,!1));let r=Math.trunc(Ye()-n);r>(this.perf.load||0)&&(this.perf.load=r)}async detect(t,n={}){return new Promise(async r=>{var A,y,g,x;this.state="config";let a;this.config=Qn(this.config,n),this.state="check";let s=ur(this,X0).call(this,t);s&&(le(s,t),r({error:s}));let i=Ye();await ur(this,oh).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&q2 instanceof ImageBitmap)&&(le("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),a=Ye();let l=X2(t,this.config);if(!l||!l.tensor){le("could not convert input to tensor"),r({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(Ye()-a),this.analyze("Get Image:");let c,u,h,d,p;this.config.async?(h=this.config.face.enabled?u2(this,l.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=Ye(),h=this.config.face.enabled?await u2(this,l.tensor):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.face=p)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?c=this.config.body.enabled?(A=this.models.posenet)==null?void 0:A.estimatePoses(l.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?c=this.config.body.enabled?W2(l.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(c=this.config.body.enabled?V2(l.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",a=Ye(),this.config.body.modelPath.includes("posenet")?c=this.config.body.enabled?await((y=this.models.posenet)==null?void 0:y.estimatePoses(l.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?c=this.config.body.enabled?await W2(l.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(c=this.config.body.enabled?await V2(l.tensor,this.config):[]),p=Math.trunc(Ye()-a),p>0&&(this.perf.body=p)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(g=this.models.handpose)==null?void 0:g.estimateHands(l.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=Ye(),u=this.config.hand.enabled?await((x=this.models.handpose)==null?void 0:x.estimateHands(l.tensor,this.config)):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.hand=p)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(d=this.config.object.enabled?G2(l.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=Ye(),d=this.config.object.enabled?await G2(l.tensor,this.config):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.object=p)),this.analyze("End Object:"),this.config.async&&([h,c,u,d]=await Promise.all([h,c,u,d])),_e(l.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let f=[];this.config.gesture.enabled&&(a=Ye(),f=[...mk(h),...fk(c),...yk(u),...Ak(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(Ye()-a)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(Ye()-i),this.state="idle";let m={face:h,body:c,hand:u,gesture:f,object:d,performance:this.perf,canvas:l.canvas};r(m)})}async warmup(t={}){let n=Ye();if(t&&(this.config=Qn(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await ur(this,K0).call(this):typeof Image!="undefined"?a=await ur(this,Z0).call(this):a=await ur(this,Y0).call(this),this.config.videoOptimized=r;let s=Ye();return this.config.debug&&le("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};iu=new WeakMap,sh=new WeakMap,ih=new WeakMap,Gi=new WeakMap,X0=new WeakMap,oh=new WeakMap,K0=new WeakMap,Z0=new WeakMap,Y0=new WeakMap;return boe;})(); +2Q==`;var kk="1.6.1";var iu,sh,ih,Gi,X0,oh,K0,Z0,Y0,Ik=class{constructor(t={}){iu.set(this,void 0);sh.set(this,void 0);ih.set(this,void 0);Gi.set(this,void 0);this.analyze=(...t)=>{if(!ur(this,sh))return;let n=this.tf.engine().state.numTensors,r=ur(this,iu);us(this,iu,n);let a=n-r;a!==0&&le(...t,a)};X0.set(this,t=>{if(!ur(this,ih))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Pe))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});oh.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let r=Ye();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&le("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&le("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let a=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),s=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&le(`wasm execution: ${a?"SIMD":"no SIMD"} ${s?"multithreaded":"singlethreaded"}`),this.config.debug&&!a&&le("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&N8();try{await this.tf.setBackend(this.config.backend)}catch(a){le("error: cannot set backend:",this.config.backend,a)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(le("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let a=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&le(`gl version:${a.getParameter(a.VERSION)} renderer:${a.getParameter(a.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(Ye()-r)}});K0.set(this,async()=>{let t=(a,s="application/octet-stream")=>fetch(`data:${s};base64,${a}`).then(i=>i.blob()),n,r;switch(this.config.warmup){case"face":n=await t(G0);break;case"full":n=await t(q0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});Z0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+G0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+q0;break;default:n=null}let a=new Image;a.onload=async()=>{let s=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(r,r):document.createElement("canvas");s.width=a.naturalWidth,s.height=a.naturalHeight;let i=s.getContext("2d");i==null||i.drawImage(a,0,0);let o=await this.detect(s,this.config);t(o)},n?a.src=n:t(null)}));Y0.set(this,async()=>{let t=a=>Buffer.from(a,"base64"),n;if(this.config.warmup==="face"&&(n=t(G0)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(q0)),!n)return null;let r;if(typeof void 0!="undefined"){let a=(void 0).decodeJpeg(n),s=a.expandDims(0);this.tf.dispose(a),r=await this.detect(s,this.config),this.tf.dispose(s)}else this.config.debug&&le("Warmup tfjs-node not loaded");return r});this.tf=gu,this.draw=K2,this.version=kk,this.config=Qn(ht,t),this.state="idle",us(this,iu,0),us(this,sh,!1),us(this,ih,!1),us(this,Gi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>X2(n,this.config),this.classes={facemesh:m2,age:Gg,gender:Xg,emotion:Qg,faceres:s2,body:this.config.body.modelPath.includes("posenet")?N2:P2,hand:$2,nanodet:j2},this.faceTriangulation=L8,this.faceUVMap=W8,this.sysinfo=c5()}profileData(){return this.config.profile?x0:{}}similarity(t,n){return this.config.face.description.enabled?o2(t,n):this.config.face.embedding.enabled?T8(t,n):0}enhance(t){return l2(t)}match(t,n,r=0){return E8(t,n,r)}async load(t={}){this.state="load";let n=Ye();t&&(this.config=Qn(this.config,t)),ur(this,Gi)&&(this.config.debug&&le(`version: ${this.version}`),this.config.debug&&le(`tfjs version: ${this.tf.version_core}`),this.config.debug&&le("platform:",this.sysinfo.platform),this.config.debug&&le("agent:",this.sysinfo.agent),await ur(this,oh).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&le("configuration:",this.config),this.config.debug&&le("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?y2(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?qg(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Jg(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?n2(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?r2(this.config):null),this.models.handpose||(this.config.hand.enabled?z2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?E2(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?L2(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?B2(this.config):null),this.models.nanodet||(this.config.object.enabled?H2(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?i2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await y2(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await qg(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Jg(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await n2(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await r2(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await z2(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await E2(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await L2(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await B2(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await H2(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await i2(this.config))),ur(this,Gi)&&(this.config.debug&&le("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),us(this,Gi,!1));let r=Math.trunc(Ye()-n);r>(this.perf.load||0)&&(this.perf.load=r)}async detect(t,n={}){return new Promise(async r=>{var A,y,g,x;this.state="config";let a;this.config=Qn(this.config,n),this.state="check";let s=ur(this,X0).call(this,t);s&&(le(s,t),r({error:s}));let i=Ye();await ur(this,oh).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&q2 instanceof ImageBitmap)&&(le("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),a=Ye();let l=X2(t,this.config);if(!l||!l.tensor){le("could not convert input to tensor"),r({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(Ye()-a),this.analyze("Get Image:");let c,u,h,d,p;this.config.async?(h=this.config.face.enabled?u2(this,l.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=Ye(),h=this.config.face.enabled?await u2(this,l.tensor):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.face=p)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?c=this.config.body.enabled?(A=this.models.posenet)==null?void 0:A.estimatePoses(l.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?c=this.config.body.enabled?W2(l.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(c=this.config.body.enabled?V2(l.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",a=Ye(),this.config.body.modelPath.includes("posenet")?c=this.config.body.enabled?await((y=this.models.posenet)==null?void 0:y.estimatePoses(l.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?c=this.config.body.enabled?await W2(l.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(c=this.config.body.enabled?await V2(l.tensor,this.config):[]),p=Math.trunc(Ye()-a),p>0&&(this.perf.body=p)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(g=this.models.handpose)==null?void 0:g.estimateHands(l.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=Ye(),u=this.config.hand.enabled?await((x=this.models.handpose)==null?void 0:x.estimateHands(l.tensor,this.config)):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.hand=p)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(d=this.config.object.enabled?G2(l.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=Ye(),d=this.config.object.enabled?await G2(l.tensor,this.config):[],p=Math.trunc(Ye()-a),p>0&&(this.perf.object=p)),this.analyze("End Object:"),this.config.async&&([h,c,u,d]=await Promise.all([h,c,u,d])),_e(l.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let f=[];this.config.gesture.enabled&&(a=Ye(),f=[...mk(h),...fk(c),...yk(u),...Ak(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(Ye()-a)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(Ye()-i),this.state="idle";let m={face:h,body:c,hand:u,gesture:f,object:d,performance:this.perf,canvas:l.canvas};r(m)})}async warmup(t={}){let n=Ye();if(t&&(this.config=Qn(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await ur(this,K0).call(this):typeof Image!="undefined"?a=await ur(this,Z0).call(this):a=await ur(this,Y0).call(this),this.config.videoOptimized=r;let s=Ye();return this.config.debug&&le("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};iu=new WeakMap,sh=new WeakMap,ih=new WeakMap,Gi=new WeakMap,X0=new WeakMap,oh=new WeakMap,K0=new WeakMap,Z0=new WeakMap,Y0=new WeakMap;return boe;})(); /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index d337a9d0..25eccdc5 100644 --- a/dist/human.node-gpu.js +++ b/dist/human.node-gpu.js @@ -731,5 +731,5 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var F0="1.6.0";var je,He,Ve,Te,ut,Xe,bt,gt,Tt,q0=class{constructor(t={}){je.set(this,void 0);He.set(this,void 0);Ve.set(this,void 0);Te.set(this,void 0);this.analyze=(...t)=>{if(!Ae(this,He))return;let n=this.tf.engine().state.numTensors,c=Ae(this,je);pe(this,je,n);let _=n-c;_!==0&&l(...t,_)};ut.set(this,t=>{if(!Ae(this,Ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ze.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});Xe.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let c=E();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&l("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&l("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let _=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),A=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&l(`wasm execution: ${_?"SIMD":"no SIMD"} ${A?"multithreaded":"singlethreaded"}`),this.config.debug&&!_&&l("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&X1();try{await this.tf.setBackend(this.config.backend)}catch(_){l("error: cannot set backend:",this.config.backend,_)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(l("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let _=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&l(`gl version:${_.getParameter(_.VERSION)} renderer:${_.getParameter(_.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(E()-c)}});bt.set(this,async()=>{let t=(_,A="application/octet-stream")=>fetch(`data:${A};base64,${_}`).then(r=>r.blob()),n,c;switch(this.config.warmup){case"face":n=await t(mt);break;case"full":n=await t(pt);break;default:n=null}if(n){let _=await createImageBitmap(n);c=await this.detect(_,this.config),_.close()}return c});gt.set(this,async()=>new Promise(t=>{let n,c=0;switch(this.config.warmup){case"face":c=256,n="data:image/jpeg;base64,"+mt;break;case"full":case"body":c=1200,n="data:image/jpeg;base64,"+pt;break;default:n=null}let _=new Image;_.onload=async()=>{let A=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(c,c):document.createElement("canvas");A.width=_.naturalWidth,A.height=_.naturalHeight;let r=A.getContext("2d");r==null||r.drawImage(_,0,0);let o=await this.detect(A,this.config);t(o)},n?_.src=n:t(null)}));Tt.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n;if(this.config.warmup==="face"&&(n=t(mt)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(pt)),!n)return null;let c;if(typeof Ze.node!="undefined"){let _=Ze.node.decodeJpeg(n),A=_.expandDims(0);this.tf.dispose(_),c=await this.detect(A,this.config),this.tf.dispose(A)}else this.config.debug&&l("Warmup tfjs-node not loaded");return c});this.tf=Ze,this.draw=W1,this.version=F0,this.config=ee(j,t),this.state="idle",pe(this,je,0),pe(this,He,!1),pe(this,Ve,!1),pe(this,Te,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>j1(n,this.config),this.classes={facemesh:Dt,age:Et,gender:Rt,emotion:kt,faceres:Vt,body:this.config.body.modelPath.includes("posenet")?h1:b1,hand:d1,nanodet:z1},this.faceTriangulation=e0,this.faceUVMap=t0,this.sysinfo=Z1()}profileData(){return this.config.profile?Be:{}}similarity(t,n){return this.config.face.description.enabled?Ft(t,n):this.config.face.embedding.enabled?F1(t,n):0}enhance(t){return qt(t)}match(t,n,c=0){return q1(t,n,c)}async load(t={}){this.state="load";let n=E();t&&(this.config=ee(this.config,t)),Ae(this,Te)&&(this.config.debug&&l(`version: ${this.version}`),this.config.debug&&l(`tfjs version: ${this.tf.version_core}`),this.config.debug&&l("platform:",this.sysinfo.platform),this.config.debug&&l("agent:",this.sysinfo.agent),await Ae(this,Xe).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&l("configuration:",this.config),this.config.debug&&l("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?$t(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?vt(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Nt(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Lt(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?Zt(this.config):null),this.models.handpose||(this.config.hand.enabled?u1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?a1(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?g1(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?P1(this.config):null),this.models.nanodet||(this.config.object.enabled?v1(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Xt(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await $t(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await vt(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Nt(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Lt(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await Zt(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await u1(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await a1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await g1(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await P1(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await v1(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Xt(this.config))),Ae(this,Te)&&(this.config.debug&&l("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),pe(this,Te,!1));let c=Math.trunc(E()-n);c>(this.perf.load||0)&&(this.perf.load=c)}async detect(t,n={}){return new Promise(async c=>{var f,p,T,v;this.state="config";let _;this.config=ee(this.config,n),this.state="check";let A=Ae(this,ut).call(this,t);A&&(l(A,t),c({error:A}));let r=E();await Ae(this,Xe).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&S1 instanceof ImageBitmap)&&(l("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),_=E();let s=j1(t,this.config);if(!s||!s.tensor){l("could not convert input to tensor"),c({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(E()-_),this.analyze("Get Image:");let i,a,h,x,d;this.config.async?(h=this.config.face.enabled?Bt(this,s.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",_=E(),h=this.config.face.enabled?await Bt(this,s.tensor):[],d=Math.trunc(E()-_),d>0&&(this.perf.face=d)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(s.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?T1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?M1(s.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",_=E(),this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?await((p=this.models.posenet)==null?void 0:p.estimatePoses(s.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?await T1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?await M1(s.tensor,this.config):[]),d=Math.trunc(E()-_),d>0&&(this.perf.body=d)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(a=this.config.hand.enabled?(T=this.models.handpose)==null?void 0:T.estimateHands(s.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",_=E(),a=this.config.hand.enabled?await((v=this.models.handpose)==null?void 0:v.estimateHands(s.tensor,this.config)):[],d=Math.trunc(E()-_),d>0&&(this.perf.hand=d)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(x=this.config.object.enabled?R1(s.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",_=E(),x=this.config.object.enabled?await R1(s.tensor,this.config):[],d=Math.trunc(E()-_),d>0&&(this.perf.object=d)),this.analyze("End Object:"),this.config.async&&([h,i,a,x]=await Promise.all([h,i,a,x])),Ze.dispose(s.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let m=[];this.config.gesture.enabled&&(_=E(),m=[...N0(h),...W0(i),...O0(a),...k0(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(E()-_)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(E()-r),this.state="idle";let y={face:h,body:i,hand:a,gesture:m,object:x,performance:this.perf,canvas:s.canvas};c(y)})}async warmup(t={}){let n=E();if(t&&(this.config=ee(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let c=this.config.videoOptimized;this.config.videoOptimized=!1;let _;typeof createImageBitmap=="function"?_=await Ae(this,bt).call(this):typeof Image!="undefined"?_=await Ae(this,gt).call(this):_=await Ae(this,Tt).call(this),this.config.videoOptimized=c;let A=E();return this.config.debug&&l("Warmup",this.config.warmup,Math.round(A-n),"ms",_),_}};je=new WeakMap,He=new WeakMap,Ve=new WeakMap,Te=new WeakMap,ut=new WeakMap,Xe=new WeakMap,bt=new WeakMap,gt=new WeakMap,Tt=new WeakMap;0&&(module.exports={Human}); +2Q==`;var F0="1.6.1";var je,He,Ve,Te,ut,Xe,bt,gt,Tt,q0=class{constructor(t={}){je.set(this,void 0);He.set(this,void 0);Ve.set(this,void 0);Te.set(this,void 0);this.analyze=(...t)=>{if(!Ae(this,He))return;let n=this.tf.engine().state.numTensors,c=Ae(this,je);pe(this,je,n);let _=n-c;_!==0&&l(...t,_)};ut.set(this,t=>{if(!Ae(this,Ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ze.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});Xe.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let c=E();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&l("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&l("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let _=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),A=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&l(`wasm execution: ${_?"SIMD":"no SIMD"} ${A?"multithreaded":"singlethreaded"}`),this.config.debug&&!_&&l("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&X1();try{await this.tf.setBackend(this.config.backend)}catch(_){l("error: cannot set backend:",this.config.backend,_)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(l("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let _=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&l(`gl version:${_.getParameter(_.VERSION)} renderer:${_.getParameter(_.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(E()-c)}});bt.set(this,async()=>{let t=(_,A="application/octet-stream")=>fetch(`data:${A};base64,${_}`).then(r=>r.blob()),n,c;switch(this.config.warmup){case"face":n=await t(mt);break;case"full":n=await t(pt);break;default:n=null}if(n){let _=await createImageBitmap(n);c=await this.detect(_,this.config),_.close()}return c});gt.set(this,async()=>new Promise(t=>{let n,c=0;switch(this.config.warmup){case"face":c=256,n="data:image/jpeg;base64,"+mt;break;case"full":case"body":c=1200,n="data:image/jpeg;base64,"+pt;break;default:n=null}let _=new Image;_.onload=async()=>{let A=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(c,c):document.createElement("canvas");A.width=_.naturalWidth,A.height=_.naturalHeight;let r=A.getContext("2d");r==null||r.drawImage(_,0,0);let o=await this.detect(A,this.config);t(o)},n?_.src=n:t(null)}));Tt.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n;if(this.config.warmup==="face"&&(n=t(mt)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(pt)),!n)return null;let c;if(typeof Ze.node!="undefined"){let _=Ze.node.decodeJpeg(n),A=_.expandDims(0);this.tf.dispose(_),c=await this.detect(A,this.config),this.tf.dispose(A)}else this.config.debug&&l("Warmup tfjs-node not loaded");return c});this.tf=Ze,this.draw=W1,this.version=F0,this.config=ee(j,t),this.state="idle",pe(this,je,0),pe(this,He,!1),pe(this,Ve,!1),pe(this,Te,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>j1(n,this.config),this.classes={facemesh:Dt,age:Et,gender:Rt,emotion:kt,faceres:Vt,body:this.config.body.modelPath.includes("posenet")?h1:b1,hand:d1,nanodet:z1},this.faceTriangulation=e0,this.faceUVMap=t0,this.sysinfo=Z1()}profileData(){return this.config.profile?Be:{}}similarity(t,n){return this.config.face.description.enabled?Ft(t,n):this.config.face.embedding.enabled?F1(t,n):0}enhance(t){return qt(t)}match(t,n,c=0){return q1(t,n,c)}async load(t={}){this.state="load";let n=E();t&&(this.config=ee(this.config,t)),Ae(this,Te)&&(this.config.debug&&l(`version: ${this.version}`),this.config.debug&&l(`tfjs version: ${this.tf.version_core}`),this.config.debug&&l("platform:",this.sysinfo.platform),this.config.debug&&l("agent:",this.sysinfo.agent),await Ae(this,Xe).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&l("configuration:",this.config),this.config.debug&&l("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?$t(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?vt(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Nt(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Lt(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?Zt(this.config):null),this.models.handpose||(this.config.hand.enabled?u1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?a1(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?g1(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?P1(this.config):null),this.models.nanodet||(this.config.object.enabled?v1(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Xt(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await $t(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await vt(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Nt(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Lt(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await Zt(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await u1(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await a1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await g1(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await P1(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await v1(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Xt(this.config))),Ae(this,Te)&&(this.config.debug&&l("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),pe(this,Te,!1));let c=Math.trunc(E()-n);c>(this.perf.load||0)&&(this.perf.load=c)}async detect(t,n={}){return new Promise(async c=>{var f,p,T,v;this.state="config";let _;this.config=ee(this.config,n),this.state="check";let A=Ae(this,ut).call(this,t);A&&(l(A,t),c({error:A}));let r=E();await Ae(this,Xe).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&S1 instanceof ImageBitmap)&&(l("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),_=E();let s=j1(t,this.config);if(!s||!s.tensor){l("could not convert input to tensor"),c({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(E()-_),this.analyze("Get Image:");let i,a,h,x,d;this.config.async?(h=this.config.face.enabled?Bt(this,s.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",_=E(),h=this.config.face.enabled?await Bt(this,s.tensor):[],d=Math.trunc(E()-_),d>0&&(this.perf.face=d)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(s.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?T1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?M1(s.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",_=E(),this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?await((p=this.models.posenet)==null?void 0:p.estimatePoses(s.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?await T1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?await M1(s.tensor,this.config):[]),d=Math.trunc(E()-_),d>0&&(this.perf.body=d)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(a=this.config.hand.enabled?(T=this.models.handpose)==null?void 0:T.estimateHands(s.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",_=E(),a=this.config.hand.enabled?await((v=this.models.handpose)==null?void 0:v.estimateHands(s.tensor,this.config)):[],d=Math.trunc(E()-_),d>0&&(this.perf.hand=d)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(x=this.config.object.enabled?R1(s.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",_=E(),x=this.config.object.enabled?await R1(s.tensor,this.config):[],d=Math.trunc(E()-_),d>0&&(this.perf.object=d)),this.analyze("End Object:"),this.config.async&&([h,i,a,x]=await Promise.all([h,i,a,x])),Ze.dispose(s.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let m=[];this.config.gesture.enabled&&(_=E(),m=[...N0(h),...W0(i),...O0(a),...k0(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(E()-_)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(E()-r),this.state="idle";let y={face:h,body:i,hand:a,gesture:m,object:x,performance:this.perf,canvas:s.canvas};c(y)})}async warmup(t={}){let n=E();if(t&&(this.config=ee(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let c=this.config.videoOptimized;this.config.videoOptimized=!1;let _;typeof createImageBitmap=="function"?_=await Ae(this,bt).call(this):typeof Image!="undefined"?_=await Ae(this,gt).call(this):_=await Ae(this,Tt).call(this),this.config.videoOptimized=c;let A=E();return this.config.debug&&l("Warmup",this.config.warmup,Math.round(A-n),"ms",_),_}};je=new WeakMap,He=new WeakMap,Ve=new WeakMap,Te=new WeakMap,ut=new WeakMap,Xe=new WeakMap,bt=new WeakMap,gt=new WeakMap,Tt=new WeakMap;0&&(module.exports={Human}); //# sourceMappingURL=human.node-gpu.js.map diff --git a/dist/human.node-wasm.js b/dist/human.node-wasm.js index 57d12ba6..7414de98 100644 --- a/dist/human.node-wasm.js +++ b/dist/human.node-wasm.js @@ -731,5 +731,5 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var q0="1.6.0";var je,He,Ve,Te,bt,Xe,gt,Tt,Pt,B0=class{constructor(t={}){je.set(this,void 0);He.set(this,void 0);Ve.set(this,void 0);Te.set(this,void 0);this.analyze=(...t)=>{if(!Ae(this,He))return;let n=this.tf.engine().state.numTensors,c=Ae(this,je);pe(this,je,n);let _=n-c;_!==0&&l(...t,_)};bt.set(this,t=>{if(!Ae(this,Ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ze.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});Xe.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let c=E();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&l("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&l("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let _=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),A=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&l(`wasm execution: ${_?"SIMD":"no SIMD"} ${A?"multithreaded":"singlethreaded"}`),this.config.debug&&!_&&l("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&F1();try{await this.tf.setBackend(this.config.backend)}catch(_){l("error: cannot set backend:",this.config.backend,_)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(l("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let _=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&l(`gl version:${_.getParameter(_.VERSION)} renderer:${_.getParameter(_.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(E()-c)}});gt.set(this,async()=>{let t=(_,A="application/octet-stream")=>fetch(`data:${A};base64,${_}`).then(r=>r.blob()),n,c;switch(this.config.warmup){case"face":n=await t(pt);break;case"full":n=await t(ut);break;default:n=null}if(n){let _=await createImageBitmap(n);c=await this.detect(_,this.config),_.close()}return c});Tt.set(this,async()=>new Promise(t=>{let n,c=0;switch(this.config.warmup){case"face":c=256,n="data:image/jpeg;base64,"+pt;break;case"full":case"body":c=1200,n="data:image/jpeg;base64,"+ut;break;default:n=null}let _=new Image;_.onload=async()=>{let A=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(c,c):document.createElement("canvas");A.width=_.naturalWidth,A.height=_.naturalHeight;let r=A.getContext("2d");r==null||r.drawImage(_,0,0);let o=await this.detect(A,this.config);t(o)},n?_.src=n:t(null)}));Pt.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n;if(this.config.warmup==="face"&&(n=t(pt)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(ut)),!n)return null;let c;if(typeof Ze.node!="undefined"){let _=Ze.node.decodeJpeg(n),A=_.expandDims(0);this.tf.dispose(_),c=await this.detect(A,this.config),this.tf.dispose(A)}else this.config.debug&&l("Warmup tfjs-node not loaded");return c});this.tf=Ze,this.draw=N1,this.version=q0,this.config=ee(j,t),this.state="idle",pe(this,je,0),pe(this,He,!1),pe(this,Ve,!1),pe(this,Te,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>W1(n,this.config),this.classes={facemesh:Gt,age:vt,gender:St,emotion:Ot,faceres:Xt,body:this.config.body.modelPath.includes("posenet")?i1:g1,hand:f1,nanodet:E1},this.faceTriangulation=t0,this.faceUVMap=n0,this.sysinfo=H1()}profileData(){return this.config.profile?Ue:{}}similarity(t,n){return this.config.face.description.enabled?qt(t,n):this.config.face.embedding.enabled?q1(t,n):0}enhance(t){return Bt(t)}match(t,n,c=0){return B1(t,n,c)}async load(t={}){this.state="load";let n=E();t&&(this.config=ee(this.config,t)),Ae(this,Te)&&(this.config.debug&&l(`version: ${this.version}`),this.config.debug&&l(`tfjs version: ${this.tf.version_core}`),this.config.debug&&l("platform:",this.sysinfo.platform),this.config.debug&&l("agent:",this.sysinfo.agent),await Ae(this,Xe).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&l("configuration:",this.config),this.config.debug&&l("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?e1(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?Rt(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?kt(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Zt(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?Ht(this.config):null),this.models.handpose||(this.config.hand.enabled?b1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?y1(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?T1(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?M1(this.config):null),this.models.nanodet||(this.config.object.enabled?R1(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Ft(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await e1(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await Rt(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await kt(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Zt(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await Ht(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await b1(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await y1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await T1(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await M1(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await R1(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Ft(this.config))),Ae(this,Te)&&(this.config.debug&&l("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),pe(this,Te,!1));let c=Math.trunc(E()-n);c>(this.perf.load||0)&&(this.perf.load=c)}async detect(t,n={}){return new Promise(async c=>{var f,p,T,v;this.state="config";let _;this.config=ee(this.config,n),this.state="check";let A=Ae(this,bt).call(this,t);A&&(l(A,t),c({error:A}));let r=E();await Ae(this,Xe).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&j1 instanceof ImageBitmap)&&(l("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),_=E();let s=W1(t,this.config);if(!s||!s.tensor){l("could not convert input to tensor"),c({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(E()-_),this.analyze("Get Image:");let i,a,h,x,d;this.config.async?(h=this.config.face.enabled?Ut(this,s.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",_=E(),h=this.config.face.enabled?await Ut(this,s.tensor):[],d=Math.trunc(E()-_),d>0&&(this.perf.face=d)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(s.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?P1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?z1(s.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",_=E(),this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?await((p=this.models.posenet)==null?void 0:p.estimatePoses(s.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?await P1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?await z1(s.tensor,this.config):[]),d=Math.trunc(E()-_),d>0&&(this.perf.body=d)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(a=this.config.hand.enabled?(T=this.models.handpose)==null?void 0:T.estimateHands(s.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",_=E(),a=this.config.hand.enabled?await((v=this.models.handpose)==null?void 0:v.estimateHands(s.tensor,this.config)):[],d=Math.trunc(E()-_),d>0&&(this.perf.hand=d)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(x=this.config.object.enabled?S1(s.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",_=E(),x=this.config.object.enabled?await S1(s.tensor,this.config):[],d=Math.trunc(E()-_),d>0&&(this.perf.object=d)),this.analyze("End Object:"),this.config.async&&([h,i,a,x]=await Promise.all([h,i,a,x])),Ze.dispose(s.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let m=[];this.config.gesture.enabled&&(_=E(),m=[...k0(h),...N0(i),...I0(a),...O0(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(E()-_)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(E()-r),this.state="idle";let y={face:h,body:i,hand:a,gesture:m,object:x,performance:this.perf,canvas:s.canvas};c(y)})}async warmup(t={}){let n=E();if(t&&(this.config=ee(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let c=this.config.videoOptimized;this.config.videoOptimized=!1;let _;typeof createImageBitmap=="function"?_=await Ae(this,gt).call(this):typeof Image!="undefined"?_=await Ae(this,Tt).call(this):_=await Ae(this,Pt).call(this),this.config.videoOptimized=c;let A=E();return this.config.debug&&l("Warmup",this.config.warmup,Math.round(A-n),"ms",_),_}};je=new WeakMap,He=new WeakMap,Ve=new WeakMap,Te=new WeakMap,bt=new WeakMap,Xe=new WeakMap,gt=new WeakMap,Tt=new WeakMap,Pt=new WeakMap;0&&(module.exports={Human}); +2Q==`;var q0="1.6.1";var je,He,Ve,Te,bt,Xe,gt,Tt,Pt,B0=class{constructor(t={}){je.set(this,void 0);He.set(this,void 0);Ve.set(this,void 0);Te.set(this,void 0);this.analyze=(...t)=>{if(!Ae(this,He))return;let n=this.tf.engine().state.numTensors,c=Ae(this,je);pe(this,je,n);let _=n-c;_!==0&&l(...t,_)};bt.set(this,t=>{if(!Ae(this,Ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ze.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});Xe.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let c=E();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&l("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&l("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let _=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),A=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&l(`wasm execution: ${_?"SIMD":"no SIMD"} ${A?"multithreaded":"singlethreaded"}`),this.config.debug&&!_&&l("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&F1();try{await this.tf.setBackend(this.config.backend)}catch(_){l("error: cannot set backend:",this.config.backend,_)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(l("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let _=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&l(`gl version:${_.getParameter(_.VERSION)} renderer:${_.getParameter(_.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(E()-c)}});gt.set(this,async()=>{let t=(_,A="application/octet-stream")=>fetch(`data:${A};base64,${_}`).then(r=>r.blob()),n,c;switch(this.config.warmup){case"face":n=await t(pt);break;case"full":n=await t(ut);break;default:n=null}if(n){let _=await createImageBitmap(n);c=await this.detect(_,this.config),_.close()}return c});Tt.set(this,async()=>new Promise(t=>{let n,c=0;switch(this.config.warmup){case"face":c=256,n="data:image/jpeg;base64,"+pt;break;case"full":case"body":c=1200,n="data:image/jpeg;base64,"+ut;break;default:n=null}let _=new Image;_.onload=async()=>{let A=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(c,c):document.createElement("canvas");A.width=_.naturalWidth,A.height=_.naturalHeight;let r=A.getContext("2d");r==null||r.drawImage(_,0,0);let o=await this.detect(A,this.config);t(o)},n?_.src=n:t(null)}));Pt.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n;if(this.config.warmup==="face"&&(n=t(pt)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(ut)),!n)return null;let c;if(typeof Ze.node!="undefined"){let _=Ze.node.decodeJpeg(n),A=_.expandDims(0);this.tf.dispose(_),c=await this.detect(A,this.config),this.tf.dispose(A)}else this.config.debug&&l("Warmup tfjs-node not loaded");return c});this.tf=Ze,this.draw=N1,this.version=q0,this.config=ee(j,t),this.state="idle",pe(this,je,0),pe(this,He,!1),pe(this,Ve,!1),pe(this,Te,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>W1(n,this.config),this.classes={facemesh:Gt,age:vt,gender:St,emotion:Ot,faceres:Xt,body:this.config.body.modelPath.includes("posenet")?i1:g1,hand:f1,nanodet:E1},this.faceTriangulation=t0,this.faceUVMap=n0,this.sysinfo=H1()}profileData(){return this.config.profile?Ue:{}}similarity(t,n){return this.config.face.description.enabled?qt(t,n):this.config.face.embedding.enabled?q1(t,n):0}enhance(t){return Bt(t)}match(t,n,c=0){return B1(t,n,c)}async load(t={}){this.state="load";let n=E();t&&(this.config=ee(this.config,t)),Ae(this,Te)&&(this.config.debug&&l(`version: ${this.version}`),this.config.debug&&l(`tfjs version: ${this.tf.version_core}`),this.config.debug&&l("platform:",this.sysinfo.platform),this.config.debug&&l("agent:",this.sysinfo.agent),await Ae(this,Xe).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&l("configuration:",this.config),this.config.debug&&l("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?e1(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?Rt(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?kt(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Zt(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?Ht(this.config):null),this.models.handpose||(this.config.hand.enabled?b1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?y1(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?T1(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?M1(this.config):null),this.models.nanodet||(this.config.object.enabled?R1(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Ft(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await e1(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await Rt(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await kt(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Zt(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await Ht(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await b1(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await y1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await T1(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await M1(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await R1(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Ft(this.config))),Ae(this,Te)&&(this.config.debug&&l("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),pe(this,Te,!1));let c=Math.trunc(E()-n);c>(this.perf.load||0)&&(this.perf.load=c)}async detect(t,n={}){return new Promise(async c=>{var f,p,T,v;this.state="config";let _;this.config=ee(this.config,n),this.state="check";let A=Ae(this,bt).call(this,t);A&&(l(A,t),c({error:A}));let r=E();await Ae(this,Xe).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&j1 instanceof ImageBitmap)&&(l("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),_=E();let s=W1(t,this.config);if(!s||!s.tensor){l("could not convert input to tensor"),c({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(E()-_),this.analyze("Get Image:");let i,a,h,x,d;this.config.async?(h=this.config.face.enabled?Ut(this,s.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",_=E(),h=this.config.face.enabled?await Ut(this,s.tensor):[],d=Math.trunc(E()-_),d>0&&(this.perf.face=d)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(s.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?P1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?z1(s.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",_=E(),this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?await((p=this.models.posenet)==null?void 0:p.estimatePoses(s.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?await P1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?await z1(s.tensor,this.config):[]),d=Math.trunc(E()-_),d>0&&(this.perf.body=d)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(a=this.config.hand.enabled?(T=this.models.handpose)==null?void 0:T.estimateHands(s.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",_=E(),a=this.config.hand.enabled?await((v=this.models.handpose)==null?void 0:v.estimateHands(s.tensor,this.config)):[],d=Math.trunc(E()-_),d>0&&(this.perf.hand=d)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(x=this.config.object.enabled?S1(s.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",_=E(),x=this.config.object.enabled?await S1(s.tensor,this.config):[],d=Math.trunc(E()-_),d>0&&(this.perf.object=d)),this.analyze("End Object:"),this.config.async&&([h,i,a,x]=await Promise.all([h,i,a,x])),Ze.dispose(s.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let m=[];this.config.gesture.enabled&&(_=E(),m=[...k0(h),...N0(i),...I0(a),...O0(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(E()-_)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(E()-r),this.state="idle";let y={face:h,body:i,hand:a,gesture:m,object:x,performance:this.perf,canvas:s.canvas};c(y)})}async warmup(t={}){let n=E();if(t&&(this.config=ee(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let c=this.config.videoOptimized;this.config.videoOptimized=!1;let _;typeof createImageBitmap=="function"?_=await Ae(this,gt).call(this):typeof Image!="undefined"?_=await Ae(this,Tt).call(this):_=await Ae(this,Pt).call(this),this.config.videoOptimized=c;let A=E();return this.config.debug&&l("Warmup",this.config.warmup,Math.round(A-n),"ms",_),_}};je=new WeakMap,He=new WeakMap,Ve=new WeakMap,Te=new WeakMap,bt=new WeakMap,Xe=new WeakMap,gt=new WeakMap,Tt=new WeakMap,Pt=new WeakMap;0&&(module.exports={Human}); //# sourceMappingURL=human.node-wasm.js.map diff --git a/dist/human.node.js b/dist/human.node.js index b5c866af..1c34feb2 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -731,5 +731,5 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var F0="1.6.0";var je,He,Ve,Te,ut,Xe,bt,gt,Tt,q0=class{constructor(t={}){je.set(this,void 0);He.set(this,void 0);Ve.set(this,void 0);Te.set(this,void 0);this.analyze=(...t)=>{if(!Ae(this,He))return;let n=this.tf.engine().state.numTensors,c=Ae(this,je);pe(this,je,n);let _=n-c;_!==0&&l(...t,_)};ut.set(this,t=>{if(!Ae(this,Ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ze.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});Xe.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let c=E();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&l("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&l("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let _=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),A=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&l(`wasm execution: ${_?"SIMD":"no SIMD"} ${A?"multithreaded":"singlethreaded"}`),this.config.debug&&!_&&l("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&X1();try{await this.tf.setBackend(this.config.backend)}catch(_){l("error: cannot set backend:",this.config.backend,_)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(l("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let _=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&l(`gl version:${_.getParameter(_.VERSION)} renderer:${_.getParameter(_.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(E()-c)}});bt.set(this,async()=>{let t=(_,A="application/octet-stream")=>fetch(`data:${A};base64,${_}`).then(r=>r.blob()),n,c;switch(this.config.warmup){case"face":n=await t(mt);break;case"full":n=await t(pt);break;default:n=null}if(n){let _=await createImageBitmap(n);c=await this.detect(_,this.config),_.close()}return c});gt.set(this,async()=>new Promise(t=>{let n,c=0;switch(this.config.warmup){case"face":c=256,n="data:image/jpeg;base64,"+mt;break;case"full":case"body":c=1200,n="data:image/jpeg;base64,"+pt;break;default:n=null}let _=new Image;_.onload=async()=>{let A=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(c,c):document.createElement("canvas");A.width=_.naturalWidth,A.height=_.naturalHeight;let r=A.getContext("2d");r==null||r.drawImage(_,0,0);let o=await this.detect(A,this.config);t(o)},n?_.src=n:t(null)}));Tt.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n;if(this.config.warmup==="face"&&(n=t(mt)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(pt)),!n)return null;let c;if(typeof Ze.node!="undefined"){let _=Ze.node.decodeJpeg(n),A=_.expandDims(0);this.tf.dispose(_),c=await this.detect(A,this.config),this.tf.dispose(A)}else this.config.debug&&l("Warmup tfjs-node not loaded");return c});this.tf=Ze,this.draw=W1,this.version=F0,this.config=ee(j,t),this.state="idle",pe(this,je,0),pe(this,He,!1),pe(this,Ve,!1),pe(this,Te,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>j1(n,this.config),this.classes={facemesh:Dt,age:Et,gender:Rt,emotion:kt,faceres:Vt,body:this.config.body.modelPath.includes("posenet")?h1:b1,hand:d1,nanodet:z1},this.faceTriangulation=e0,this.faceUVMap=t0,this.sysinfo=Z1()}profileData(){return this.config.profile?Be:{}}similarity(t,n){return this.config.face.description.enabled?Ft(t,n):this.config.face.embedding.enabled?F1(t,n):0}enhance(t){return qt(t)}match(t,n,c=0){return q1(t,n,c)}async load(t={}){this.state="load";let n=E();t&&(this.config=ee(this.config,t)),Ae(this,Te)&&(this.config.debug&&l(`version: ${this.version}`),this.config.debug&&l(`tfjs version: ${this.tf.version_core}`),this.config.debug&&l("platform:",this.sysinfo.platform),this.config.debug&&l("agent:",this.sysinfo.agent),await Ae(this,Xe).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&l("configuration:",this.config),this.config.debug&&l("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?$t(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?vt(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Nt(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Lt(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?Zt(this.config):null),this.models.handpose||(this.config.hand.enabled?u1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?a1(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?g1(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?P1(this.config):null),this.models.nanodet||(this.config.object.enabled?v1(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Xt(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await $t(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await vt(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Nt(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Lt(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await Zt(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await u1(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await a1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await g1(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await P1(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await v1(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Xt(this.config))),Ae(this,Te)&&(this.config.debug&&l("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),pe(this,Te,!1));let c=Math.trunc(E()-n);c>(this.perf.load||0)&&(this.perf.load=c)}async detect(t,n={}){return new Promise(async c=>{var f,p,T,v;this.state="config";let _;this.config=ee(this.config,n),this.state="check";let A=Ae(this,ut).call(this,t);A&&(l(A,t),c({error:A}));let r=E();await Ae(this,Xe).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&S1 instanceof ImageBitmap)&&(l("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),_=E();let s=j1(t,this.config);if(!s||!s.tensor){l("could not convert input to tensor"),c({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(E()-_),this.analyze("Get Image:");let i,a,h,x,d;this.config.async?(h=this.config.face.enabled?Bt(this,s.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",_=E(),h=this.config.face.enabled?await Bt(this,s.tensor):[],d=Math.trunc(E()-_),d>0&&(this.perf.face=d)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(s.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?T1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?M1(s.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",_=E(),this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?await((p=this.models.posenet)==null?void 0:p.estimatePoses(s.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?await T1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?await M1(s.tensor,this.config):[]),d=Math.trunc(E()-_),d>0&&(this.perf.body=d)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(a=this.config.hand.enabled?(T=this.models.handpose)==null?void 0:T.estimateHands(s.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",_=E(),a=this.config.hand.enabled?await((v=this.models.handpose)==null?void 0:v.estimateHands(s.tensor,this.config)):[],d=Math.trunc(E()-_),d>0&&(this.perf.hand=d)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(x=this.config.object.enabled?R1(s.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",_=E(),x=this.config.object.enabled?await R1(s.tensor,this.config):[],d=Math.trunc(E()-_),d>0&&(this.perf.object=d)),this.analyze("End Object:"),this.config.async&&([h,i,a,x]=await Promise.all([h,i,a,x])),Ze.dispose(s.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let m=[];this.config.gesture.enabled&&(_=E(),m=[...N0(h),...W0(i),...O0(a),...k0(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(E()-_)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(E()-r),this.state="idle";let y={face:h,body:i,hand:a,gesture:m,object:x,performance:this.perf,canvas:s.canvas};c(y)})}async warmup(t={}){let n=E();if(t&&(this.config=ee(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let c=this.config.videoOptimized;this.config.videoOptimized=!1;let _;typeof createImageBitmap=="function"?_=await Ae(this,bt).call(this):typeof Image!="undefined"?_=await Ae(this,gt).call(this):_=await Ae(this,Tt).call(this),this.config.videoOptimized=c;let A=E();return this.config.debug&&l("Warmup",this.config.warmup,Math.round(A-n),"ms",_),_}};je=new WeakMap,He=new WeakMap,Ve=new WeakMap,Te=new WeakMap,ut=new WeakMap,Xe=new WeakMap,bt=new WeakMap,gt=new WeakMap,Tt=new WeakMap;0&&(module.exports={Human}); +2Q==`;var F0="1.6.1";var je,He,Ve,Te,ut,Xe,bt,gt,Tt,q0=class{constructor(t={}){je.set(this,void 0);He.set(this,void 0);Ve.set(this,void 0);Te.set(this,void 0);this.analyze=(...t)=>{if(!Ae(this,He))return;let n=this.tf.engine().state.numTensors,c=Ae(this,je);pe(this,je,n);let _=n-c;_!==0&&l(...t,_)};ut.set(this,t=>{if(!Ae(this,Ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ze.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});Xe.set(this,async(t=!1)=>{var n;if(this.config.backend&&this.config.backend.length>0&&t||this.tf.getBackend()!==this.config.backend){let c=E();if(this.state="backend",this.config.backend&&this.config.backend.length>0){if(this.tf.ENV.flags.IS_BROWSER&&this.config.backend==="tensorflow"&&(this.config.backend="webgl"),this.tf.ENV.flags.IS_NODE&&(this.config.backend==="webgl"||this.config.backend==="humangl")&&(this.config.backend="tensorflow"),this.config.debug&&l("setting backend:",this.config.backend),this.config.backend==="wasm"){if(this.config.debug&&l("wasm path:",this.config.wasmPath),typeof((n=this.tf)==null?void 0:n.setWasmPaths)!="undefined")this.tf.setWasmPaths(this.config.wasmPath);else throw new Error("Human: WASM backend is not loaded");let _=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),A=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&l(`wasm execution: ${_?"SIMD":"no SIMD"} ${A?"multithreaded":"singlethreaded"}`),this.config.debug&&!_&&l("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&X1();try{await this.tf.setBackend(this.config.backend)}catch(_){l("error: cannot set backend:",this.config.backend,_)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"||this.tf.getBackend()==="humangl"){this.tf.ENV.set("CHECK_COMPUTATION_FOR_ERRORS",!1),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0),this.config.deallocate&&(l("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let _=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&l(`gl version:${_.getParameter(_.VERSION)} renderer:${_.getParameter(_.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(E()-c)}});bt.set(this,async()=>{let t=(_,A="application/octet-stream")=>fetch(`data:${A};base64,${_}`).then(r=>r.blob()),n,c;switch(this.config.warmup){case"face":n=await t(mt);break;case"full":n=await t(pt);break;default:n=null}if(n){let _=await createImageBitmap(n);c=await this.detect(_,this.config),_.close()}return c});gt.set(this,async()=>new Promise(t=>{let n,c=0;switch(this.config.warmup){case"face":c=256,n="data:image/jpeg;base64,"+mt;break;case"full":case"body":c=1200,n="data:image/jpeg;base64,"+pt;break;default:n=null}let _=new Image;_.onload=async()=>{let A=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(c,c):document.createElement("canvas");A.width=_.naturalWidth,A.height=_.naturalHeight;let r=A.getContext("2d");r==null||r.drawImage(_,0,0);let o=await this.detect(A,this.config);t(o)},n?_.src=n:t(null)}));Tt.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n;if(this.config.warmup==="face"&&(n=t(mt)),(this.config.warmup==="body"||this.config.warmup==="full")&&(n=t(pt)),!n)return null;let c;if(typeof Ze.node!="undefined"){let _=Ze.node.decodeJpeg(n),A=_.expandDims(0);this.tf.dispose(_),c=await this.detect(A,this.config),this.tf.dispose(A)}else this.config.debug&&l("Warmup tfjs-node not loaded");return c});this.tf=Ze,this.draw=W1,this.version=F0,this.config=ee(j,t),this.state="idle",pe(this,je,0),pe(this,He,!1),pe(this,Ve,!1),pe(this,Te,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,efficientpose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>j1(n,this.config),this.classes={facemesh:Dt,age:Et,gender:Rt,emotion:kt,faceres:Vt,body:this.config.body.modelPath.includes("posenet")?h1:b1,hand:d1,nanodet:z1},this.faceTriangulation=e0,this.faceUVMap=t0,this.sysinfo=Z1()}profileData(){return this.config.profile?Be:{}}similarity(t,n){return this.config.face.description.enabled?Ft(t,n):this.config.face.embedding.enabled?F1(t,n):0}enhance(t){return qt(t)}match(t,n,c=0){return q1(t,n,c)}async load(t={}){this.state="load";let n=E();t&&(this.config=ee(this.config,t)),Ae(this,Te)&&(this.config.debug&&l(`version: ${this.version}`),this.config.debug&&l(`tfjs version: ${this.tf.version_core}`),this.config.debug&&l("platform:",this.sysinfo.platform),this.config.debug&&l("agent:",this.sysinfo.agent),await Ae(this,Xe).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&l("configuration:",this.config),this.config.debug&&l("tf flags:",this.tf.ENV.flags))),this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.handpose,this.models.posenet,this.models.blazepose,this.models.efficientpose,this.models.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?$t(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?vt(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Nt(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Lt(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?Zt(this.config):null),this.models.handpose||(this.config.hand.enabled?u1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?a1(this.config):null),this.models.blazepose||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?g1(this.config):null),this.models.efficientpose||(this.config.body.enabled&&this.config.body.modelPath.includes("efficientpose")?P1(this.config):null),this.models.nanodet||(this.config.object.enabled?v1(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Xt(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await $t(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await vt(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Nt(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Lt(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await Zt(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await u1(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await a1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await g1(this.config)),this.config.body.enabled&&!this.models.efficientpose&&this.config.body.modelPath.includes("efficientpose")&&(this.models.efficientpose=await P1(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await v1(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Xt(this.config))),Ae(this,Te)&&(this.config.debug&&l("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),pe(this,Te,!1));let c=Math.trunc(E()-n);c>(this.perf.load||0)&&(this.perf.load=c)}async detect(t,n={}){return new Promise(async c=>{var f,p,T,v;this.state="config";let _;this.config=ee(this.config,n),this.state="check";let A=Ae(this,ut).call(this,t);A&&(l(A,t),c({error:A}));let r=E();await Ae(this,Xe).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:");let o;t&&this.config.videoOptimized&&(typeof HTMLImageElement!="undefined"&&t instanceof HTMLImageElement||typeof Image!="undefined"&&t instanceof Image||typeof ImageData!="undefined"&&t instanceof ImageData||typeof ImageBitmap!="undefined"&&S1 instanceof ImageBitmap)&&(l("disabling video optimization"),o=this.config.videoOptimized,this.config.videoOptimized=!1),_=E();let s=j1(t,this.config);if(!s||!s.tensor){l("could not convert input to tensor"),c({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(E()-_),this.analyze("Get Image:");let i,a,h,x,d;this.config.async?(h=this.config.face.enabled?Bt(this,s.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",_=E(),h=this.config.face.enabled?await Bt(this,s.tensor):[],d=Math.trunc(E()-_),d>0&&(this.perf.face=d)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(s.tensor,this.config):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?T1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?M1(s.tensor,this.config):[]),this.perf.body&&delete this.perf.body):(this.state="run:body",_=E(),this.config.body.modelPath.includes("posenet")?i=this.config.body.enabled?await((p=this.models.posenet)==null?void 0:p.estimatePoses(s.tensor,this.config)):[]:this.config.body.modelPath.includes("blazepose")?i=this.config.body.enabled?await T1(s.tensor,this.config):[]:this.config.body.modelPath.includes("efficientpose")&&(i=this.config.body.enabled?await M1(s.tensor,this.config):[]),d=Math.trunc(E()-_),d>0&&(this.perf.body=d)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(a=this.config.hand.enabled?(T=this.models.handpose)==null?void 0:T.estimateHands(s.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",_=E(),a=this.config.hand.enabled?await((v=this.models.handpose)==null?void 0:v.estimateHands(s.tensor,this.config)):[],d=Math.trunc(E()-_),d>0&&(this.perf.hand=d)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(x=this.config.object.enabled?R1(s.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",_=E(),x=this.config.object.enabled?await R1(s.tensor,this.config):[],d=Math.trunc(E()-_),d>0&&(this.perf.object=d)),this.analyze("End Object:"),this.config.async&&([h,i,a,x]=await Promise.all([h,i,a,x])),Ze.dispose(s.tensor),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let m=[];this.config.gesture.enabled&&(_=E(),m=[...N0(h),...W0(i),...O0(a),...k0(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(E()-_)),o&&(this.config.videoOptimized=o),this.perf.total=Math.trunc(E()-r),this.state="idle";let y={face:h,body:i,hand:a,gesture:m,object:x,performance:this.perf,canvas:s.canvas};c(y)})}async warmup(t={}){let n=E();if(t&&(this.config=ee(this.config,t)),!this.config.warmup||this.config.warmup==="none")return{error:"null"};let c=this.config.videoOptimized;this.config.videoOptimized=!1;let _;typeof createImageBitmap=="function"?_=await Ae(this,bt).call(this):typeof Image!="undefined"?_=await Ae(this,gt).call(this):_=await Ae(this,Tt).call(this),this.config.videoOptimized=c;let A=E();return this.config.debug&&l("Warmup",this.config.warmup,Math.round(A-n),"ms",_),_}};je=new WeakMap,He=new WeakMap,Ve=new WeakMap,Te=new WeakMap,ut=new WeakMap,Xe=new WeakMap,bt=new WeakMap,gt=new WeakMap,Tt=new WeakMap;0&&(module.exports={Human}); //# sourceMappingURL=human.node.js.map diff --git a/server/build.log b/server/build.log index 3e32c140..4b7f931e 100644 --- a/server/build.log +++ b/server/build.log @@ -117,3 +117,20 @@ 2021-04-22 19:41:13 INFO:  Generate types: ["src/human.ts"] 2021-04-22 19:41:18 INFO:  Update Change log: ["/home/vlado/dev/human/CHANGELOG.md"] 2021-04-22 19:41:18 INFO:  Generate TypeDocs: ["src/human.ts"] +2021-04-22 19:46:35 INFO:  @vladmandic/human version 1.6.1 +2021-04-22 19:46:35 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.0.0 +2021-04-22 19:46:35 INFO:  Build: file startup all type: production config: {"minifyWhitespace":true,"minifyIdentifiers":true,"minifySyntax":true,"sourcemap":true,"bundle":true,"metafile":true,"target":"es2018"} +2021-04-22 19:46:35 STATE: Build for: node type: tfjs: {"imports":1,"importBytes":39,"outputBytes":733,"outputFiles":"dist/tfjs.esm.js"} +2021-04-22 19:46:35 STATE: Build for: node type: node: {"imports":46,"importBytes":547988,"outputBytes":305576,"outputFiles":"dist/human.node.js"} +2021-04-22 19:46:35 STATE: Build for: nodeGPU type: tfjs: {"imports":1,"importBytes":43,"outputBytes":737,"outputFiles":"dist/tfjs.esm.js"} +2021-04-22 19:46:35 STATE: Build for: nodeGPU type: node: {"imports":46,"importBytes":547992,"outputBytes":305584,"outputFiles":"dist/human.node-gpu.js"} +2021-04-22 19:46:35 STATE: Build for: nodeWASM type: tfjs: {"imports":1,"importBytes":81,"outputBytes":783,"outputFiles":"dist/tfjs.esm.js"} +2021-04-22 19:46:35 STATE: Build for: nodeWASM type: node: {"imports":46,"importBytes":548038,"outputBytes":305628,"outputFiles":"dist/human.node-wasm.js"} +2021-04-22 19:46:35 STATE: Build for: browserNoBundle type: tfjs: {"imports":1,"importBytes":2488,"outputBytes":1394,"outputFiles":"dist/tfjs.esm.js"} +2021-04-22 19:46:35 STATE: Build for: browserNoBundle type: esm: {"imports":46,"importBytes":548649,"outputBytes":305575,"outputFiles":"dist/human.esm-nobundle.js"} +2021-04-22 19:46:36 STATE: Build for: browserBundle type: tfjs: {"modules":1267,"moduleBytes":4085087,"imports":7,"importBytes":2488,"outputBytes":1101728,"outputFiles":"dist/tfjs.esm.js"} +2021-04-22 19:46:36 STATE: Build for: browserBundle type: iife: {"imports":46,"importBytes":1648983,"outputBytes":1403464,"outputFiles":"dist/human.js"} +2021-04-22 19:46:37 STATE: Build for: browserBundle type: esm: {"imports":46,"importBytes":1648983,"outputBytes":1403422,"outputFiles":"dist/human.esm.js"} +2021-04-22 19:46:37 INFO:  Generate types: ["src/human.ts"] +2021-04-22 19:46:41 INFO:  Update Change log: ["/home/vlado/dev/human/CHANGELOG.md"] +2021-04-22 19:46:41 INFO:  Generate TypeDocs: ["src/human.ts"]