diff --git a/CHANGELOG.md b/CHANGELOG.md index 6de75eac..d86fec44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/human -Version: **1.2.0** +Version: **1.2.1** Description: **Human: AI-powered 3D Face Detection, Face Embedding & Recognition, Body Pose Tracking, Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction & Gesture Recognition** Author: **Vladimir Mandic ** @@ -9,6 +9,10 @@ Repository: **** ## Changelog +### **1.2.1** 2021/03/21 mandic00@live.com + +- new module: face description + ### **1.1.11** 2021/03/21 mandic00@live.com - refactor face classes diff --git a/dist/demo-browser-index.js b/dist/demo-browser-index.js index b5727010..aaaf57e5 100644 --- a/dist/demo-browser-index.js +++ b/dist/demo-browser-index.js @@ -4889,7 +4889,7 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var F4="1.2.0";var au,Yc,Jc,Wi,X0,Qc,K0,Z0,Y0,W2=class{constructor(t={}){au.set(this,void 0);Yc.set(this,void 0);Jc.set(this,void 0);Wi.set(this,void 0);this.analyze=(...t)=>{if(!sr(this,Yc))return;let n=this.tf.engine().state.numTensors,r=sr(this,au);cs(this,au,n);let a=n-r;a!==0&&Ee(...t,a)};X0.set(this,t=>{if(!sr(this,Jc))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ge))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});Qc.set(this,async(t=!1)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=et();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&Ee("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&Ee("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let r=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&Ee(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),r||Ee("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&D6();try{await this.tf.setBackend(this.config.backend)}catch(r){Ee("error: cannot set backend:",this.config.backend,r)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(Ee("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let r=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&Ee(`gl version:${r.getParameter(r.VERSION)} renderer:${r.getParameter(r.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(et()-n)}});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=i=>Buffer.from(i,"base64"),n=this.config.warmup==="face"?t(G0):t(q0),r=(void 0).decodeJpeg(n),a=r.expandDims(0);this.tf.dispose(r);let s=await this.detect(a,this.config);return this.tf.dispose(a),s});this.tf=Th,this.draw=z2,this.version=F4,this.config=to(mt,t),this.state="idle",cs(this,au,0),cs(this,Yc,!1),cs(this,Jc,!1),cs(this,Wi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>O2(n,this.config),this.classes={facemesh:L2,age:Og,gender:Pg,emotion:Ug,faceres:Kg,body:this.config.body.modelPath.includes("posenet")?g2:E2,hand:I2,nanodet:F2},this.sysinfo=t5()}profileData(){return this.config.profile?Dg:{}}similarity(t,n){return this.config.face.description.enabled?Yg(t,n):this.config.face.embedding.enabled?O6(t,n):0}enhance(t){return Jg(t)}match(t,n,r=0){return z6(t,n,r)}async load(t={}){this.state="load";let n=et();t&&(this.config=to(this.config,t)),sr(this,Wi)&&(this.config.debug&&Ee(`version: ${this.version}`),this.config.debug&&Ee(`tfjs version: ${this.tf.version_core}`),this.config.debug&&Ee("platform:",this.sysinfo.platform),this.config.debug&&Ee("agent:",this.sysinfo.agent),await sr(this,Qc).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&Ee("configuration:",this.config),this.config.debug&&Ee("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?L2.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?zg(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Vg(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Gg(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?qg(this.config):null),this.models.handpose||(this.config.hand.enabled?T2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?w2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?C2(this.config):null),this.models.nanodet||(this.config.object.enabled?$2(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Zg(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await L2.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await zg(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Vg(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Gg(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await qg(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await T2(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await w2(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await C2(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await $2(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Zg(this.config))),sr(this,Wi)&&(this.config.debug&&Ee("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),cs(this,Wi,!1));let r=Math.trunc(et()-n);r>(this.perf.load||0)&&(this.perf.load=r)}async detect(t,n={}){return new Promise(async r=>{var f,m,A,y;this.state="config";let a;this.config=to(this.config,n),this.state="check";let s=sr(this,X0).call(this,t);s&&(Ee(s,t),r({error:s}));let i=et();await sr(this,Qc).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),a=et();let o=O2(t,this.config);if(!o||!o.tensor){Ee("could not convert input to tensor"),r({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(et()-a),this.analyze("Get Image:");let l,u,c,h;this.config.async?(c=this.config.face.enabled?Qg(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=et(),c=this.config.face.enabled?await Qg(this,o.tensor):[],this.perf.face=Math.trunc(et()-a)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:l=this.config.body.enabled?R2(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",a=et(),this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?await((m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config)):[]:l=this.config.body.enabled?await R2(o.tensor,this.config):[],this.perf.body=Math.trunc(et()-a)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(A=this.models.handpose)==null?void 0:A.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=et(),u=this.config.hand.enabled?await((y=this.models.handpose)==null?void 0:y.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(et()-a)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(h=this.config.object.enabled?D2(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=et(),h=this.config.object.enabled?await D2(o.tensor,this.config):[],this.perf.object=Math.trunc(et()-a)),this.analyze("End Object:"),this.config.async&&([c,l,u,h]=await Promise.all([c,l,u,h])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let d=[];this.config.gesture.enabled&&(a=et(),d=[...v4(c),..._4(l),...I4(u),...k4(c)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(et()-a)),this.perf.total=Math.trunc(et()-i),this.state="idle";let p={face:c,body:l,hand:u,gesture:d,object:h,performance:this.perf,canvas:o.canvas};r(p)})}async warmup(t={}){let n=et();t&&(this.config=to(this.config,t));let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await sr(this,K0).call(this):typeof Image!="undefined"?a=await sr(this,Z0).call(this):a=await sr(this,Y0).call(this),this.config.videoOptimized=r;let s=et();return this.config.debug&&Ee("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};au=new WeakMap,Yc=new WeakMap,Jc=new WeakMap,Wi=new WeakMap,X0=new WeakMap,Qc=new WeakMap,K0=new WeakMap,Z0=new WeakMap,Y0=new WeakMap;var eh=0,M4=!1,_t={background:"darkslategray",hover:"lightgray",itemBackground:"black",itemColor:"white",buttonBackground:"lightblue",buttonHover:"lightgreen",checkboxOn:"lightgreen",checkboxOff:"lightcoral",rangeBackground:"lightblue",rangeLabel:"white",chartColor:"lightblue"};function mse(){if(M4)return;let e=` +2Q==`;var F4="1.2.1";var au,Yc,Jc,Wi,X0,Qc,K0,Z0,Y0,W2=class{constructor(t={}){au.set(this,void 0);Yc.set(this,void 0);Jc.set(this,void 0);Wi.set(this,void 0);this.analyze=(...t)=>{if(!sr(this,Yc))return;let n=this.tf.engine().state.numTensors,r=sr(this,au);cs(this,au,n);let a=n-r;a!==0&&Ee(...t,a)};X0.set(this,t=>{if(!sr(this,Jc))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ge))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});Qc.set(this,async(t=!1)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=et();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&Ee("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&Ee("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let r=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&Ee(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),r||Ee("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&D6();try{await this.tf.setBackend(this.config.backend)}catch(r){Ee("error: cannot set backend:",this.config.backend,r)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(Ee("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let r=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&Ee(`gl version:${r.getParameter(r.VERSION)} renderer:${r.getParameter(r.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(et()-n)}});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=i=>Buffer.from(i,"base64"),n=this.config.warmup==="face"?t(G0):t(q0),r=(void 0).decodeJpeg(n),a=r.expandDims(0);this.tf.dispose(r);let s=await this.detect(a,this.config);return this.tf.dispose(a),s});this.tf=Th,this.draw=z2,this.version=F4,this.config=to(mt,t),this.state="idle",cs(this,au,0),cs(this,Yc,!1),cs(this,Jc,!1),cs(this,Wi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>O2(n,this.config),this.classes={facemesh:L2,age:Og,gender:Pg,emotion:Ug,faceres:Kg,body:this.config.body.modelPath.includes("posenet")?g2:E2,hand:I2,nanodet:F2},this.sysinfo=t5()}profileData(){return this.config.profile?Dg:{}}similarity(t,n){return this.config.face.description.enabled?Yg(t,n):this.config.face.embedding.enabled?O6(t,n):0}enhance(t){return Jg(t)}match(t,n,r=0){return z6(t,n,r)}async load(t={}){this.state="load";let n=et();t&&(this.config=to(this.config,t)),sr(this,Wi)&&(this.config.debug&&Ee(`version: ${this.version}`),this.config.debug&&Ee(`tfjs version: ${this.tf.version_core}`),this.config.debug&&Ee("platform:",this.sysinfo.platform),this.config.debug&&Ee("agent:",this.sysinfo.agent),await sr(this,Qc).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&Ee("configuration:",this.config),this.config.debug&&Ee("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?L2.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?zg(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?Vg(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?Gg(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?qg(this.config):null),this.models.handpose||(this.config.hand.enabled?T2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?w2(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?C2(this.config):null),this.models.nanodet||(this.config.object.enabled?$2(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?Zg(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await L2.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await zg(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await Vg(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await Gg(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await qg(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await T2(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await w2(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await C2(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await $2(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await Zg(this.config))),sr(this,Wi)&&(this.config.debug&&Ee("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),cs(this,Wi,!1));let r=Math.trunc(et()-n);r>(this.perf.load||0)&&(this.perf.load=r)}async detect(t,n={}){return new Promise(async r=>{var f,m,A,y;this.state="config";let a;this.config=to(this.config,n),this.state="check";let s=sr(this,X0).call(this,t);s&&(Ee(s,t),r({error:s}));let i=et();await sr(this,Qc).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),a=et();let o=O2(t,this.config);if(!o||!o.tensor){Ee("could not convert input to tensor"),r({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(et()-a),this.analyze("Get Image:");let l,u,c,h;this.config.async?(c=this.config.face.enabled?Qg(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=et(),c=this.config.face.enabled?await Qg(this,o.tensor):[],this.perf.face=Math.trunc(et()-a)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:l=this.config.body.enabled?R2(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",a=et(),this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?await((m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config)):[]:l=this.config.body.enabled?await R2(o.tensor,this.config):[],this.perf.body=Math.trunc(et()-a)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(A=this.models.handpose)==null?void 0:A.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=et(),u=this.config.hand.enabled?await((y=this.models.handpose)==null?void 0:y.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(et()-a)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(h=this.config.object.enabled?D2(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=et(),h=this.config.object.enabled?await D2(o.tensor,this.config):[],this.perf.object=Math.trunc(et()-a)),this.analyze("End Object:"),this.config.async&&([c,l,u,h]=await Promise.all([c,l,u,h])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let d=[];this.config.gesture.enabled&&(a=et(),d=[...v4(c),..._4(l),...I4(u),...k4(c)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(et()-a)),this.perf.total=Math.trunc(et()-i),this.state="idle";let p={face:c,body:l,hand:u,gesture:d,object:h,performance:this.perf,canvas:o.canvas};r(p)})}async warmup(t={}){let n=et();t&&(this.config=to(this.config,t));let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await sr(this,K0).call(this):typeof Image!="undefined"?a=await sr(this,Z0).call(this):a=await sr(this,Y0).call(this),this.config.videoOptimized=r;let s=et();return this.config.debug&&Ee("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};au=new WeakMap,Yc=new WeakMap,Jc=new WeakMap,Wi=new WeakMap,X0=new WeakMap,Qc=new WeakMap,K0=new WeakMap,Z0=new WeakMap,Y0=new WeakMap;var eh=0,M4=!1,_t={background:"darkslategray",hover:"lightgray",itemBackground:"black",itemColor:"white",buttonBackground:"lightblue",buttonHover:"lightgreen",checkboxOn:"lightgreen",checkboxOff:"lightcoral",rangeBackground:"lightblue",rangeLabel:"white",chartColor:"lightblue"};function mse(){if(M4)return;let e=` :root { --rounded: 0.1rem; } .menu { position: absolute; top: 0rem; right: 0; width: max-content; padding: 0 0.2rem 0 0.2rem; line-height: 1.8rem; z-index: 10; box-shadow: 0 0 8px dimgrey; background: ${_t.background}; border-radius: var(--rounded); border-color: black; border-style: solid; border-width: thin; } diff --git a/dist/human.esm-nobundle.js b/dist/human.esm-nobundle.js index a0315d07..c1d032a8 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 z0="1.2.0";var be,Pe,ve,we,_1,ze,o1,h1,s1,M0=class{constructor(t={}){be.set(this,void 0);Pe.set(this,void 0);ve.set(this,void 0);we.set(this,void 0);this.analyze=(...t)=>{if(!J(this,Pe))return;let n=this.tf.engine().state.numTensors,A=J(this,be);ae(this,be,n);let r=n-A;r!==0&&b(...t,r)};_1.set(this,t=>{if(!J(this,ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof ft.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)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=v();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&b("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&b("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let A=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),r=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&b(`wasm execution: ${A?"SIMD":"no SIMD"} ${r?"multithreaded":"singlethreaded"}`),A||b("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&vt();try{await this.tf.setBackend(this.config.backend)}catch(A){b("error: cannot set backend:",this.config.backend,A)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(b("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&&b(`gl version:${A.getParameter(A.VERSION)} renderer:${A.getParameter(A.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(v()-n)}});o1.set(this,async()=>{let t=(r,c="application/octet-stream")=>fetch(`data:${c};base64,${r}`).then(_=>_.blob()),n,A;switch(this.config.warmup){case"face":n=await t(A1);break;case"full":n=await t(c1);break;default:n=null}if(n){let r=await createImageBitmap(n);A=await this.detect(r,this.config),r.close()}return A});h1.set(this,async()=>new Promise(t=>{let n,A=0;switch(this.config.warmup){case"face":A=256,n="data:image/jpeg;base64,"+A1;break;case"full":case"body":A=1200,n="data:image/jpeg;base64,"+c1;break;default:n=null}let r=new Image;r.onload=async()=>{let c=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(A,A):document.createElement("canvas");c.width=r.naturalWidth,c.height=r.naturalHeight;let _=c.getContext("2d");_==null||_.drawImage(r,0,0);let o=await this.detect(c,this.config);t(o)},n?r.src=n:t(null)}));s1.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n=this.config.warmup==="face"?t(A1):t(c1),A=ft.node.decodeJpeg(n),r=A.expandDims(0);this.tf.dispose(A);let c=await this.detect(r,this.config);return this.tf.dispose(r),c});this.tf=ft,this.draw=lt,this.version=z0,this.config=le(S,t),this.state="idle",ae(this,be,0),ae(this,Pe,!1),ae(this,ve,!1),ae(this,we,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>wt(n,this.config),this.classes={facemesh:mt,age:x1,gender:w1,emotion:p1,faceres:v1,body:this.config.body.modelPath.includes("posenet")?U1:ot,hand:nt,nanodet:it},this.sysinfo=Pt()}profileData(){return this.config.profile?a1:{}}similarity(t,n){return this.config.face.description.enabled?M1(t,n):this.config.face.embedding.enabled?zt(t,n):0}enhance(t){return R1(t)}match(t,n,A=0){return Mt(t,n,A)}async load(t={}){this.state="load";let n=v();t&&(this.config=le(this.config,t)),J(this,we)&&(this.config.debug&&b(`version: ${this.version}`),this.config.debug&&b(`tfjs version: ${this.tf.version_core}`),this.config.debug&&b("platform:",this.sysinfo.platform),this.config.debug&&b("agent:",this.sysinfo.agent),await J(this,ze).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&b("configuration:",this.config),this.config.debug&&b("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?mt.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?y1(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?m1(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?g1(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?T1(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")?G1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?ht(this.config):null),this.models.nanodet||(this.config.object.enabled?xt(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?z1(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await mt.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await y1(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await m1(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await g1(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await T1(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 G1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await ht(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await xt(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await z1(this.config))),J(this,we)&&(this.config.debug&&b("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),ae(this,we,!1));let A=Math.trunc(v()-n);A>(this.perf.load||0)&&(this.perf.load=A)}async detect(t,n={}){return new Promise(async A=>{var m,a,z,g;this.state="config";let r;this.config=le(this.config,n),this.state="check";let c=J(this,_1).call(this,t);c&&(b(c,t),A({error:c}));let _=v();await J(this,ze).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),r=v();let o=wt(t,this.config);if(!o||!o.tensor){b("could not convert input to tensor"),A({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(v()-r),this.analyze("Get Image:");let h,s,x,i;this.config.async?(x=this.config.face.enabled?E1(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",r=v(),x=this.config.face.enabled?await E1(this,o.tensor):[],this.perf.face=Math.trunc(v()-r)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?(m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config):[]:h=this.config.body.enabled?st(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",r=v(),this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?await((a=this.models.posenet)==null?void 0:a.estimatePoses(o.tensor,this.config)):[]:h=this.config.body.enabled?await st(o.tensor,this.config):[],this.perf.body=Math.trunc(v()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(s=this.config.hand.enabled?(z=this.models.handpose)==null?void 0:z.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",r=v(),s=this.config.hand.enabled?await((g=this.models.handpose)==null?void 0:g.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(v()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(i=this.config.object.enabled?yt(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",r=v(),i=this.config.object.enabled?await yt(o.tensor,this.config):[],this.perf.object=Math.trunc(v()-r)),this.analyze("End Object:"),this.config.async&&([x,h,s,i]=await Promise.all([x,h,s,i])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let d=[];this.config.gesture.enabled&&(r=v(),d=[...f0(x),...d0(h),...p0(s),...m0(x)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(v()-r)),this.perf.total=Math.trunc(v()-_),this.state="idle";let p={face:x,body:h,hand:s,gesture:d,object:i,performance:this.perf,canvas:o.canvas};A(p)})}async warmup(t={}){let n=v();t&&(this.config=le(this.config,t));let A=this.config.videoOptimized;this.config.videoOptimized=!1;let r;typeof createImageBitmap=="function"?r=await J(this,o1).call(this):typeof Image!="undefined"?r=await J(this,h1).call(this):r=await J(this,s1).call(this),this.config.videoOptimized=A;let c=v();return this.config.debug&&b("Warmup",this.config.warmup,Math.round(c-n),"ms",r),r}};be=new WeakMap,Pe=new WeakMap,ve=new WeakMap,we=new WeakMap,_1=new WeakMap,ze=new WeakMap,o1=new WeakMap,h1=new WeakMap,s1=new WeakMap;export{M0 as Human,M0 as default}; +2Q==`;var z0="1.2.1";var be,Pe,ve,we,_1,ze,o1,h1,s1,M0=class{constructor(t={}){be.set(this,void 0);Pe.set(this,void 0);ve.set(this,void 0);we.set(this,void 0);this.analyze=(...t)=>{if(!J(this,Pe))return;let n=this.tf.engine().state.numTensors,A=J(this,be);ae(this,be,n);let r=n-A;r!==0&&b(...t,r)};_1.set(this,t=>{if(!J(this,ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof ft.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)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=v();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&b("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&b("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let A=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),r=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&b(`wasm execution: ${A?"SIMD":"no SIMD"} ${r?"multithreaded":"singlethreaded"}`),A||b("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&vt();try{await this.tf.setBackend(this.config.backend)}catch(A){b("error: cannot set backend:",this.config.backend,A)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(b("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&&b(`gl version:${A.getParameter(A.VERSION)} renderer:${A.getParameter(A.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(v()-n)}});o1.set(this,async()=>{let t=(r,c="application/octet-stream")=>fetch(`data:${c};base64,${r}`).then(_=>_.blob()),n,A;switch(this.config.warmup){case"face":n=await t(A1);break;case"full":n=await t(c1);break;default:n=null}if(n){let r=await createImageBitmap(n);A=await this.detect(r,this.config),r.close()}return A});h1.set(this,async()=>new Promise(t=>{let n,A=0;switch(this.config.warmup){case"face":A=256,n="data:image/jpeg;base64,"+A1;break;case"full":case"body":A=1200,n="data:image/jpeg;base64,"+c1;break;default:n=null}let r=new Image;r.onload=async()=>{let c=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(A,A):document.createElement("canvas");c.width=r.naturalWidth,c.height=r.naturalHeight;let _=c.getContext("2d");_==null||_.drawImage(r,0,0);let o=await this.detect(c,this.config);t(o)},n?r.src=n:t(null)}));s1.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n=this.config.warmup==="face"?t(A1):t(c1),A=ft.node.decodeJpeg(n),r=A.expandDims(0);this.tf.dispose(A);let c=await this.detect(r,this.config);return this.tf.dispose(r),c});this.tf=ft,this.draw=lt,this.version=z0,this.config=le(S,t),this.state="idle",ae(this,be,0),ae(this,Pe,!1),ae(this,ve,!1),ae(this,we,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>wt(n,this.config),this.classes={facemesh:mt,age:x1,gender:w1,emotion:p1,faceres:v1,body:this.config.body.modelPath.includes("posenet")?U1:ot,hand:nt,nanodet:it},this.sysinfo=Pt()}profileData(){return this.config.profile?a1:{}}similarity(t,n){return this.config.face.description.enabled?M1(t,n):this.config.face.embedding.enabled?zt(t,n):0}enhance(t){return R1(t)}match(t,n,A=0){return Mt(t,n,A)}async load(t={}){this.state="load";let n=v();t&&(this.config=le(this.config,t)),J(this,we)&&(this.config.debug&&b(`version: ${this.version}`),this.config.debug&&b(`tfjs version: ${this.tf.version_core}`),this.config.debug&&b("platform:",this.sysinfo.platform),this.config.debug&&b("agent:",this.sysinfo.agent),await J(this,ze).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&b("configuration:",this.config),this.config.debug&&b("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?mt.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?y1(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?m1(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?g1(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?T1(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")?G1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?ht(this.config):null),this.models.nanodet||(this.config.object.enabled?xt(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?z1(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await mt.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await y1(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await m1(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await g1(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await T1(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 G1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await ht(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await xt(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await z1(this.config))),J(this,we)&&(this.config.debug&&b("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),ae(this,we,!1));let A=Math.trunc(v()-n);A>(this.perf.load||0)&&(this.perf.load=A)}async detect(t,n={}){return new Promise(async A=>{var m,a,z,g;this.state="config";let r;this.config=le(this.config,n),this.state="check";let c=J(this,_1).call(this,t);c&&(b(c,t),A({error:c}));let _=v();await J(this,ze).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),r=v();let o=wt(t,this.config);if(!o||!o.tensor){b("could not convert input to tensor"),A({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(v()-r),this.analyze("Get Image:");let h,s,x,i;this.config.async?(x=this.config.face.enabled?E1(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",r=v(),x=this.config.face.enabled?await E1(this,o.tensor):[],this.perf.face=Math.trunc(v()-r)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?(m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config):[]:h=this.config.body.enabled?st(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",r=v(),this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?await((a=this.models.posenet)==null?void 0:a.estimatePoses(o.tensor,this.config)):[]:h=this.config.body.enabled?await st(o.tensor,this.config):[],this.perf.body=Math.trunc(v()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(s=this.config.hand.enabled?(z=this.models.handpose)==null?void 0:z.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",r=v(),s=this.config.hand.enabled?await((g=this.models.handpose)==null?void 0:g.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(v()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(i=this.config.object.enabled?yt(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",r=v(),i=this.config.object.enabled?await yt(o.tensor,this.config):[],this.perf.object=Math.trunc(v()-r)),this.analyze("End Object:"),this.config.async&&([x,h,s,i]=await Promise.all([x,h,s,i])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let d=[];this.config.gesture.enabled&&(r=v(),d=[...f0(x),...d0(h),...p0(s),...m0(x)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(v()-r)),this.perf.total=Math.trunc(v()-_),this.state="idle";let p={face:x,body:h,hand:s,gesture:d,object:i,performance:this.perf,canvas:o.canvas};A(p)})}async warmup(t={}){let n=v();t&&(this.config=le(this.config,t));let A=this.config.videoOptimized;this.config.videoOptimized=!1;let r;typeof createImageBitmap=="function"?r=await J(this,o1).call(this):typeof Image!="undefined"?r=await J(this,h1).call(this):r=await J(this,s1).call(this),this.config.videoOptimized=A;let c=v();return this.config.debug&&b("Warmup",this.config.warmup,Math.round(c-n),"ms",r),r}};be=new WeakMap,Pe=new WeakMap,ve=new WeakMap,we=new WeakMap,_1=new WeakMap,ze=new WeakMap,o1=new WeakMap,h1=new WeakMap,s1=new WeakMap;export{M0 as Human,M0 as default}; //# sourceMappingURL=human.esm-nobundle.js.map diff --git a/dist/human.esm.js b/dist/human.esm.js index 0f23a521..6410336e 100644 --- a/dist/human.esm.js +++ b/dist/human.esm.js @@ -4889,7 +4889,7 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var m4="1.2.0";var Kl,Vc,Uc,Fi,O0,jc,z0,P0,L0,A4=class{constructor(t={}){Kl.set(this,void 0);Vc.set(this,void 0);Uc.set(this,void 0);Fi.set(this,void 0);this.analyze=(...t)=>{if(!Qn(this,Vc))return;let n=this.tf.engine().state.numTensors,r=Qn(this,Kl);rs(this,Kl,n);let a=n-r;a!==0&&Ne(...t,a)};O0.set(this,t=>{if(!Qn(this,Uc))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ue))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});jc.set(this,async(t=!1)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=Ye();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&Ne("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&Ne("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let r=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&Ne(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),r||Ne("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&g6();try{await this.tf.setBackend(this.config.backend)}catch(r){Ne("error: cannot set backend:",this.config.backend,r)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(Ne("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let r=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&Ne(`gl version:${r.getParameter(r.VERSION)} renderer:${r.getParameter(r.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(Ye()-n)}});z0.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($0);break;case"full":n=await t(D0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});P0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+$0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+D0;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)}));L0.set(this,async()=>{let t=i=>Buffer.from(i,"base64"),n=this.config.warmup==="face"?t($0):t(D0),r=(void 0).decodeJpeg(n),a=r.expandDims(0);this.tf.dispose(r);let s=await this.detect(a,this.config);return this.tf.dispose(a),s});this.tf=Ah,this.draw=bg,this.version=m4,this.config=Gi(dt,t),this.state="idle",rs(this,Kl,0),rs(this,Vc,!1),rs(this,Uc,!1),rs(this,Fi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>wg(n,this.config),this.classes={facemesh:vg,age:w2,gender:_2,emotion:S2,faceres:F2,body:this.config.body.modelPath.includes("posenet")?ng:pg,hand:ug,nanodet:Ag},this.sysinfo=Pg()}profileData(){return this.config.profile?x2:{}}similarity(t,n){return this.config.face.description.enabled?D2(t,n):this.config.face.embedding.enabled?x6(t,n):0}enhance(t){return O2(t)}match(t,n,r=0){return w6(t,n,r)}async load(t={}){this.state="load";let n=Ye();t&&(this.config=Gi(this.config,t)),Qn(this,Fi)&&(this.config.debug&&Ne(`version: ${this.version}`),this.config.debug&&Ne(`tfjs version: ${this.tf.version_core}`),this.config.debug&&Ne("platform:",this.sysinfo.platform),this.config.debug&&Ne("agent:",this.sysinfo.agent),await Qn(this,jc).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&Ne("configuration:",this.config),this.config.debug&&Ne("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?vg.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?b2(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?N2(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?E2(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?dg(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?ag(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?fg(this.config):null),this.models.nanodet||(this.config.object.enabled?gg(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?$2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await vg.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await b2(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await N2(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await E2(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 dg(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await ag(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await fg(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await gg(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await $2(this.config))),Qn(this,Fi)&&(this.config.debug&&Ne("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),rs(this,Fi,!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 f,m,A,y;this.state="config";let a;this.config=Gi(this.config,n),this.state="check";let s=Qn(this,O0).call(this,t);s&&(Ne(s,t),r({error:s}));let i=Ye();await Qn(this,jc).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),a=Ye();let o=wg(t,this.config);if(!o||!o.tensor){Ne("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 l,c,u,h;this.config.async?(u=this.config.face.enabled?z2(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=Ye(),u=this.config.face.enabled?await z2(this,o.tensor):[],this.perf.face=Math.trunc(Ye()-a)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:l=this.config.body.enabled?mg(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",a=Ye(),this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?await((m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config)):[]:l=this.config.body.enabled?await mg(o.tensor,this.config):[],this.perf.body=Math.trunc(Ye()-a)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(c=this.config.hand.enabled?(A=this.models.handpose)==null?void 0:A.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=Ye(),c=this.config.hand.enabled?await((y=this.models.handpose)==null?void 0:y.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(Ye()-a)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(h=this.config.object.enabled?xg(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=Ye(),h=this.config.object.enabled?await xg(o.tensor,this.config):[],this.perf.object=Math.trunc(Ye()-a)),this.analyze("End Object:"),this.config.async&&([u,l,c,h]=await Promise.all([u,l,c,h])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let d=[];this.config.gesture.enabled&&(a=Ye(),d=[...i4(u),...s4(l),...l4(c),...o4(u)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(Ye()-a)),this.perf.total=Math.trunc(Ye()-i),this.state="idle";let p={face:u,body:l,hand:c,gesture:d,object:h,performance:this.perf,canvas:o.canvas};r(p)})}async warmup(t={}){let n=Ye();t&&(this.config=Gi(this.config,t));let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await Qn(this,z0).call(this):typeof Image!="undefined"?a=await Qn(this,P0).call(this):a=await Qn(this,L0).call(this),this.config.videoOptimized=r;let s=Ye();return this.config.debug&&Ne("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};Kl=new WeakMap,Vc=new WeakMap,Uc=new WeakMap,Fi=new WeakMap,O0=new WeakMap,jc=new WeakMap,z0=new WeakMap,P0=new WeakMap,L0=new WeakMap;export{A4 as Human,A4 as default}; +2Q==`;var m4="1.2.1";var Kl,Vc,Uc,Fi,O0,jc,z0,P0,L0,A4=class{constructor(t={}){Kl.set(this,void 0);Vc.set(this,void 0);Uc.set(this,void 0);Fi.set(this,void 0);this.analyze=(...t)=>{if(!Qn(this,Vc))return;let n=this.tf.engine().state.numTensors,r=Qn(this,Kl);rs(this,Kl,n);let a=n-r;a!==0&&Ne(...t,a)};O0.set(this,t=>{if(!Qn(this,Uc))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ue))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});jc.set(this,async(t=!1)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=Ye();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&Ne("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&Ne("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let r=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&Ne(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),r||Ne("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&g6();try{await this.tf.setBackend(this.config.backend)}catch(r){Ne("error: cannot set backend:",this.config.backend,r)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(Ne("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let r=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&Ne(`gl version:${r.getParameter(r.VERSION)} renderer:${r.getParameter(r.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(Ye()-n)}});z0.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($0);break;case"full":n=await t(D0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});P0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+$0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+D0;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)}));L0.set(this,async()=>{let t=i=>Buffer.from(i,"base64"),n=this.config.warmup==="face"?t($0):t(D0),r=(void 0).decodeJpeg(n),a=r.expandDims(0);this.tf.dispose(r);let s=await this.detect(a,this.config);return this.tf.dispose(a),s});this.tf=Ah,this.draw=bg,this.version=m4,this.config=Gi(dt,t),this.state="idle",rs(this,Kl,0),rs(this,Vc,!1),rs(this,Uc,!1),rs(this,Fi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>wg(n,this.config),this.classes={facemesh:vg,age:w2,gender:_2,emotion:S2,faceres:F2,body:this.config.body.modelPath.includes("posenet")?ng:pg,hand:ug,nanodet:Ag},this.sysinfo=Pg()}profileData(){return this.config.profile?x2:{}}similarity(t,n){return this.config.face.description.enabled?D2(t,n):this.config.face.embedding.enabled?x6(t,n):0}enhance(t){return O2(t)}match(t,n,r=0){return w6(t,n,r)}async load(t={}){this.state="load";let n=Ye();t&&(this.config=Gi(this.config,t)),Qn(this,Fi)&&(this.config.debug&&Ne(`version: ${this.version}`),this.config.debug&&Ne(`tfjs version: ${this.tf.version_core}`),this.config.debug&&Ne("platform:",this.sysinfo.platform),this.config.debug&&Ne("agent:",this.sysinfo.agent),await Qn(this,jc).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&Ne("configuration:",this.config),this.config.debug&&Ne("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?vg.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?b2(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?N2(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?E2(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?dg(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?ag(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?fg(this.config):null),this.models.nanodet||(this.config.object.enabled?gg(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?$2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await vg.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await b2(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await N2(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await E2(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 dg(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await ag(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await fg(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await gg(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await $2(this.config))),Qn(this,Fi)&&(this.config.debug&&Ne("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),rs(this,Fi,!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 f,m,A,y;this.state="config";let a;this.config=Gi(this.config,n),this.state="check";let s=Qn(this,O0).call(this,t);s&&(Ne(s,t),r({error:s}));let i=Ye();await Qn(this,jc).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),a=Ye();let o=wg(t,this.config);if(!o||!o.tensor){Ne("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 l,c,u,h;this.config.async?(u=this.config.face.enabled?z2(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=Ye(),u=this.config.face.enabled?await z2(this,o.tensor):[],this.perf.face=Math.trunc(Ye()-a)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:l=this.config.body.enabled?mg(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",a=Ye(),this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?await((m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config)):[]:l=this.config.body.enabled?await mg(o.tensor,this.config):[],this.perf.body=Math.trunc(Ye()-a)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(c=this.config.hand.enabled?(A=this.models.handpose)==null?void 0:A.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=Ye(),c=this.config.hand.enabled?await((y=this.models.handpose)==null?void 0:y.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(Ye()-a)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(h=this.config.object.enabled?xg(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=Ye(),h=this.config.object.enabled?await xg(o.tensor,this.config):[],this.perf.object=Math.trunc(Ye()-a)),this.analyze("End Object:"),this.config.async&&([u,l,c,h]=await Promise.all([u,l,c,h])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let d=[];this.config.gesture.enabled&&(a=Ye(),d=[...i4(u),...s4(l),...l4(c),...o4(u)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(Ye()-a)),this.perf.total=Math.trunc(Ye()-i),this.state="idle";let p={face:u,body:l,hand:c,gesture:d,object:h,performance:this.perf,canvas:o.canvas};r(p)})}async warmup(t={}){let n=Ye();t&&(this.config=Gi(this.config,t));let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await Qn(this,z0).call(this):typeof Image!="undefined"?a=await Qn(this,P0).call(this):a=await Qn(this,L0).call(this),this.config.videoOptimized=r;let s=Ye();return this.config.debug&&Ne("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};Kl=new WeakMap,Vc=new WeakMap,Uc=new WeakMap,Fi=new WeakMap,O0=new WeakMap,jc=new WeakMap,z0=new WeakMap,P0=new WeakMap,L0=new WeakMap;export{A4 as Human,A4 as default}; /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/human.js b/dist/human.js index d7b79bfd..71474b63 100644 --- a/dist/human.js +++ b/dist/human.js @@ -4889,7 +4889,7 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var A4="1.2.0";var Kl,Vc,Uc,Fi,O0,jc,z0,P0,L0,kg=class{constructor(t={}){Kl.set(this,void 0);Vc.set(this,void 0);Uc.set(this,void 0);Fi.set(this,void 0);this.analyze=(...t)=>{if(!Qn(this,Vc))return;let n=this.tf.engine().state.numTensors,r=Qn(this,Kl);rs(this,Kl,n);let a=n-r;a!==0&&Ne(...t,a)};O0.set(this,t=>{if(!Qn(this,Uc))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ue))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});jc.set(this,async(t=!1)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=Ye();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&Ne("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&Ne("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let r=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&Ne(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),r||Ne("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&x6();try{await this.tf.setBackend(this.config.backend)}catch(r){Ne("error: cannot set backend:",this.config.backend,r)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(Ne("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let r=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&Ne(`gl version:${r.getParameter(r.VERSION)} renderer:${r.getParameter(r.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(Ye()-n)}});z0.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($0);break;case"full":n=await t(D0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});P0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+$0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+D0;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)}));L0.set(this,async()=>{let t=i=>Buffer.from(i,"base64"),n=this.config.warmup==="face"?t($0):t(D0),r=(void 0).decodeJpeg(n),a=r.expandDims(0);this.tf.dispose(r);let s=await this.detect(a,this.config);return this.tf.dispose(a),s});this.tf=Ah,this.draw=bg,this.version=A4,this.config=Gi(dt,t),this.state="idle",rs(this,Kl,0),rs(this,Vc,!1),rs(this,Uc,!1),rs(this,Fi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>wg(n,this.config),this.classes={facemesh:vg,age:w2,gender:_2,emotion:S2,faceres:F2,body:this.config.body.modelPath.includes("posenet")?ng:pg,hand:ug,nanodet:Ag},this.sysinfo=Lg()}profileData(){return this.config.profile?x2:{}}similarity(t,n){return this.config.face.description.enabled?D2(t,n):this.config.face.embedding.enabled?w6(t,n):0}enhance(t){return O2(t)}match(t,n,r=0){return b6(t,n,r)}async load(t={}){this.state="load";let n=Ye();t&&(this.config=Gi(this.config,t)),Qn(this,Fi)&&(this.config.debug&&Ne(`version: ${this.version}`),this.config.debug&&Ne(`tfjs version: ${this.tf.version_core}`),this.config.debug&&Ne("platform:",this.sysinfo.platform),this.config.debug&&Ne("agent:",this.sysinfo.agent),await Qn(this,jc).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&Ne("configuration:",this.config),this.config.debug&&Ne("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?vg.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?b2(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?N2(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?E2(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?dg(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?ag(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?fg(this.config):null),this.models.nanodet||(this.config.object.enabled?gg(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?$2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await vg.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await b2(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await N2(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await E2(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 dg(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await ag(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await fg(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await gg(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await $2(this.config))),Qn(this,Fi)&&(this.config.debug&&Ne("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),rs(this,Fi,!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 f,m,A,y;this.state="config";let a;this.config=Gi(this.config,n),this.state="check";let s=Qn(this,O0).call(this,t);s&&(Ne(s,t),r({error:s}));let i=Ye();await Qn(this,jc).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),a=Ye();let o=wg(t,this.config);if(!o||!o.tensor){Ne("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 l,c,u,h;this.config.async?(u=this.config.face.enabled?z2(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=Ye(),u=this.config.face.enabled?await z2(this,o.tensor):[],this.perf.face=Math.trunc(Ye()-a)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:l=this.config.body.enabled?mg(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",a=Ye(),this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?await((m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config)):[]:l=this.config.body.enabled?await mg(o.tensor,this.config):[],this.perf.body=Math.trunc(Ye()-a)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(c=this.config.hand.enabled?(A=this.models.handpose)==null?void 0:A.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=Ye(),c=this.config.hand.enabled?await((y=this.models.handpose)==null?void 0:y.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(Ye()-a)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(h=this.config.object.enabled?xg(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=Ye(),h=this.config.object.enabled?await xg(o.tensor,this.config):[],this.perf.object=Math.trunc(Ye()-a)),this.analyze("End Object:"),this.config.async&&([u,l,c,h]=await Promise.all([u,l,c,h])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let d=[];this.config.gesture.enabled&&(a=Ye(),d=[...o4(u),...i4(l),...u4(c),...l4(u)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(Ye()-a)),this.perf.total=Math.trunc(Ye()-i),this.state="idle";let p={face:u,body:l,hand:c,gesture:d,object:h,performance:this.perf,canvas:o.canvas};r(p)})}async warmup(t={}){let n=Ye();t&&(this.config=Gi(this.config,t));let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await Qn(this,z0).call(this):typeof Image!="undefined"?a=await Qn(this,P0).call(this):a=await Qn(this,L0).call(this),this.config.videoOptimized=r;let s=Ye();return this.config.debug&&Ne("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};Kl=new WeakMap,Vc=new WeakMap,Uc=new WeakMap,Fi=new WeakMap,O0=new WeakMap,jc=new WeakMap,z0=new WeakMap,P0=new WeakMap,L0=new WeakMap;return Gae;})(); +2Q==`;var A4="1.2.1";var Kl,Vc,Uc,Fi,O0,jc,z0,P0,L0,kg=class{constructor(t={}){Kl.set(this,void 0);Vc.set(this,void 0);Uc.set(this,void 0);Fi.set(this,void 0);this.analyze=(...t)=>{if(!Qn(this,Vc))return;let n=this.tf.engine().state.numTensors,r=Qn(this,Kl);rs(this,Kl,n);let a=n-r;a!==0&&Ne(...t,a)};O0.set(this,t=>{if(!Qn(this,Uc))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof Ue))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});jc.set(this,async(t=!1)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=Ye();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&Ne("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&Ne("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let r=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),a=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&Ne(`wasm execution: ${r?"SIMD":"no SIMD"} ${a?"multithreaded":"singlethreaded"}`),r||Ne("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&x6();try{await this.tf.setBackend(this.config.backend)}catch(r){Ne("error: cannot set backend:",this.config.backend,r)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(Ne("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1));let r=await this.tf.backend().getGPGPUContext().gl;this.config.debug&&Ne(`gl version:${r.getParameter(r.VERSION)} renderer:${r.getParameter(r.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(Ye()-n)}});z0.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($0);break;case"full":n=await t(D0);break;default:n=null}if(n){let a=await createImageBitmap(n);r=await this.detect(a,this.config),a.close()}return r});P0.set(this,async()=>new Promise(t=>{let n,r=0;switch(this.config.warmup){case"face":r=256,n="data:image/jpeg;base64,"+$0;break;case"full":case"body":r=1200,n="data:image/jpeg;base64,"+D0;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)}));L0.set(this,async()=>{let t=i=>Buffer.from(i,"base64"),n=this.config.warmup==="face"?t($0):t(D0),r=(void 0).decodeJpeg(n),a=r.expandDims(0);this.tf.dispose(r);let s=await this.detect(a,this.config);return this.tf.dispose(a),s});this.tf=Ah,this.draw=bg,this.version=A4,this.config=Gi(dt,t),this.state="idle",rs(this,Kl,0),rs(this,Vc,!1),rs(this,Uc,!1),rs(this,Fi,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>wg(n,this.config),this.classes={facemesh:vg,age:w2,gender:_2,emotion:S2,faceres:F2,body:this.config.body.modelPath.includes("posenet")?ng:pg,hand:ug,nanodet:Ag},this.sysinfo=Lg()}profileData(){return this.config.profile?x2:{}}similarity(t,n){return this.config.face.description.enabled?D2(t,n):this.config.face.embedding.enabled?w6(t,n):0}enhance(t){return O2(t)}match(t,n,r=0){return b6(t,n,r)}async load(t={}){this.state="load";let n=Ye();t&&(this.config=Gi(this.config,t)),Qn(this,Fi)&&(this.config.debug&&Ne(`version: ${this.version}`),this.config.debug&&Ne(`tfjs version: ${this.tf.version_core}`),this.config.debug&&Ne("platform:",this.sysinfo.platform),this.config.debug&&Ne("agent:",this.sysinfo.agent),await Qn(this,jc).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&Ne("configuration:",this.config),this.config.debug&&Ne("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?vg.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?b2(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?N2(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?E2(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?dg(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?ag(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?fg(this.config):null),this.models.nanodet||(this.config.object.enabled?gg(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?$2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await vg.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await b2(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await N2(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await E2(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 dg(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await ag(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await fg(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await gg(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await $2(this.config))),Qn(this,Fi)&&(this.config.debug&&Ne("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),rs(this,Fi,!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 f,m,A,y;this.state="config";let a;this.config=Gi(this.config,n),this.state="check";let s=Qn(this,O0).call(this,t);s&&(Ne(s,t),r({error:s}));let i=Ye();await Qn(this,jc).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),a=Ye();let o=wg(t,this.config);if(!o||!o.tensor){Ne("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 l,c,u,h;this.config.async?(u=this.config.face.enabled?z2(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",a=Ye(),u=this.config.face.enabled?await z2(this,o.tensor):[],this.perf.face=Math.trunc(Ye()-a)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:l=this.config.body.enabled?mg(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",a=Ye(),this.config.body.modelPath.includes("posenet")?l=this.config.body.enabled?await((m=this.models.posenet)==null?void 0:m.estimatePoses(o.tensor,this.config)):[]:l=this.config.body.enabled?await mg(o.tensor,this.config):[],this.perf.body=Math.trunc(Ye()-a)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(c=this.config.hand.enabled?(A=this.models.handpose)==null?void 0:A.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",a=Ye(),c=this.config.hand.enabled?await((y=this.models.handpose)==null?void 0:y.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(Ye()-a)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(h=this.config.object.enabled?xg(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",a=Ye(),h=this.config.object.enabled?await xg(o.tensor,this.config):[],this.perf.object=Math.trunc(Ye()-a)),this.analyze("End Object:"),this.config.async&&([u,l,c,h]=await Promise.all([u,l,c,h])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let d=[];this.config.gesture.enabled&&(a=Ye(),d=[...o4(u),...i4(l),...u4(c),...l4(u)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(Ye()-a)),this.perf.total=Math.trunc(Ye()-i),this.state="idle";let p={face:u,body:l,hand:c,gesture:d,object:h,performance:this.perf,canvas:o.canvas};r(p)})}async warmup(t={}){let n=Ye();t&&(this.config=Gi(this.config,t));let r=this.config.videoOptimized;this.config.videoOptimized=!1;let a;typeof createImageBitmap=="function"?a=await Qn(this,z0).call(this):typeof Image!="undefined"?a=await Qn(this,P0).call(this):a=await Qn(this,L0).call(this),this.config.videoOptimized=r;let s=Ye();return this.config.debug&&Ne("Warmup",this.config.warmup,Math.round(s-n),"ms",a),a}};Kl=new WeakMap,Vc=new WeakMap,Uc=new WeakMap,Fi=new WeakMap,O0=new WeakMap,jc=new WeakMap,z0=new WeakMap,P0=new WeakMap,L0=new WeakMap;return Gae;})(); /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index 41827c8e..0a24b9d6 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 S0="1.2.0";var be,Pe,ve,we,c1,ze,_1,o1,h1,ut=class{constructor(t={}){be.set(this,void 0);Pe.set(this,void 0);ve.set(this,void 0);we.set(this,void 0);this.analyze=(...t)=>{if(!J(this,Pe))return;let n=this.tf.engine().state.numTensors,A=J(this,be);ae(this,be,n);let r=n-A;r!==0&&u(...t,r)};c1.set(this,t=>{if(!J(this,ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof mt.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)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=P();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&u("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&u("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let A=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),r=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&u(`wasm execution: ${A?"SIMD":"no SIMD"} ${r?"multithreaded":"singlethreaded"}`),A||u("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&Et();try{await this.tf.setBackend(this.config.backend)}catch(A){u("error: cannot set backend:",this.config.backend,A)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(u("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&&u(`gl version:${A.getParameter(A.VERSION)} renderer:${A.getParameter(A.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(P()-n)}});_1.set(this,async()=>{let t=(r,c="application/octet-stream")=>fetch(`data:${c};base64,${r}`).then(_=>_.blob()),n,A;switch(this.config.warmup){case"face":n=await t(r1);break;case"full":n=await t(A1);break;default:n=null}if(n){let r=await createImageBitmap(n);A=await this.detect(r,this.config),r.close()}return A});o1.set(this,async()=>new Promise(t=>{let n,A=0;switch(this.config.warmup){case"face":A=256,n="data:image/jpeg;base64,"+r1;break;case"full":case"body":A=1200,n="data:image/jpeg;base64,"+A1;break;default:n=null}let r=new Image;r.onload=async()=>{let c=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(A,A):document.createElement("canvas");c.width=r.naturalWidth,c.height=r.naturalHeight;let _=c.getContext("2d");_==null||_.drawImage(r,0,0);let o=await this.detect(c,this.config);t(o)},n?r.src=n:t(null)}));h1.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n=this.config.warmup==="face"?t(r1):t(A1),A=mt.node.decodeJpeg(n),r=A.expandDims(0);this.tf.dispose(A);let c=await this.detect(r,this.config);return this.tf.dispose(r),c});this.tf=mt,this.draw=dt,this.version=S0,this.config=le(S,t),this.state="idle",ae(this,be,0),ae(this,Pe,!1),ae(this,ve,!1),ae(this,we,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>lt(n,this.config),this.classes={facemesh:pt,age:y1,gender:l1,emotion:u1,faceres:z1,body:this.config.body.modelPath.includes("posenet")?D1:ht,hand:rt,nanodet:at},this.sysinfo=zt()}profileData(){return this.config.profile?x1:{}}similarity(t,n){return this.config.face.description.enabled?R1(t,n):this.config.face.embedding.enabled?St(t,n):0}enhance(t){return E1(t)}match(t,n,A=0){return jt(t,n,A)}async load(t={}){this.state="load";let n=P();t&&(this.config=le(this.config,t)),J(this,we)&&(this.config.debug&&u(`version: ${this.version}`),this.config.debug&&u(`tfjs version: ${this.tf.version_core}`),this.config.debug&&u("platform:",this.sysinfo.platform),this.config.debug&&u("agent:",this.sysinfo.agent),await J(this,ze).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&u("configuration:",this.config),this.config.debug&&u("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?pt.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?w1(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?p1(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?T1(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?P1(this.config):null),this.models.handpose||(this.config.hand.enabled?ot(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?Q1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?st(this.config):null),this.models.nanodet||(this.config.object.enabled?yt(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?M1(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await pt.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await w1(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await p1(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await T1(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await P1(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await ot(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await Q1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await st(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await yt(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await M1(this.config))),J(this,we)&&(this.config.debug&&u("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),ae(this,we,!1));let A=Math.trunc(P()-n);A>(this.perf.load||0)&&(this.perf.load=A)}async detect(t,n={}){return new Promise(async A=>{var f,a,v,b;this.state="config";let r;this.config=le(this.config,n),this.state="check";let c=J(this,c1).call(this,t);c&&(u(c,t),A({error:c}));let _=P();await J(this,ze).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),r=P();let o=lt(t,this.config);if(!o||!o.tensor){u("could not convert input to tensor"),A({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(P()-r),this.analyze("Get Image:");let h,s,x,i;this.config.async?(x=this.config.face.enabled?S1(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",r=P(),x=this.config.face.enabled?await S1(this,o.tensor):[],this.perf.face=Math.trunc(P()-r)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:h=this.config.body.enabled?it(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",r=P(),this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?await((a=this.models.posenet)==null?void 0:a.estimatePoses(o.tensor,this.config)):[]:h=this.config.body.enabled?await it(o.tensor,this.config):[],this.perf.body=Math.trunc(P()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(s=this.config.hand.enabled?(v=this.models.handpose)==null?void 0:v.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",r=P(),s=this.config.hand.enabled?await((b=this.models.handpose)==null?void 0:b.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(P()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(i=this.config.object.enabled?wt(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",r=P(),i=this.config.object.enabled?await wt(o.tensor,this.config):[],this.perf.object=Math.trunc(P()-r)),this.analyze("End Object:"),this.config.async&&([x,h,s,i]=await Promise.all([x,h,s,i])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let l=[];this.config.gesture.enabled&&(r=P(),l=[...b0(x),...u0(h),...T0(s),...g0(x)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(P()-r)),this.perf.total=Math.trunc(P()-_),this.state="idle";let m={face:x,body:h,hand:s,gesture:l,object:i,performance:this.perf,canvas:o.canvas};A(m)})}async warmup(t={}){let n=P();t&&(this.config=le(this.config,t));let A=this.config.videoOptimized;this.config.videoOptimized=!1;let r;typeof createImageBitmap=="function"?r=await J(this,_1).call(this):typeof Image!="undefined"?r=await J(this,o1).call(this):r=await J(this,h1).call(this),this.config.videoOptimized=A;let c=P();return this.config.debug&&u("Warmup",this.config.warmup,Math.round(c-n),"ms",r),r}};be=new WeakMap,Pe=new WeakMap,ve=new WeakMap,we=new WeakMap,c1=new WeakMap,ze=new WeakMap,_1=new WeakMap,o1=new WeakMap,h1=new WeakMap;0&&(module.exports={Human}); +2Q==`;var S0="1.2.1";var be,Pe,ve,we,c1,ze,_1,o1,h1,ut=class{constructor(t={}){be.set(this,void 0);Pe.set(this,void 0);ve.set(this,void 0);we.set(this,void 0);this.analyze=(...t)=>{if(!J(this,Pe))return;let n=this.tf.engine().state.numTensors,A=J(this,be);ae(this,be,n);let r=n-A;r!==0&&u(...t,r)};c1.set(this,t=>{if(!J(this,ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof mt.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)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=P();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&u("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&u("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let A=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),r=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&u(`wasm execution: ${A?"SIMD":"no SIMD"} ${r?"multithreaded":"singlethreaded"}`),A||u("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&Et();try{await this.tf.setBackend(this.config.backend)}catch(A){u("error: cannot set backend:",this.config.backend,A)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(u("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&&u(`gl version:${A.getParameter(A.VERSION)} renderer:${A.getParameter(A.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(P()-n)}});_1.set(this,async()=>{let t=(r,c="application/octet-stream")=>fetch(`data:${c};base64,${r}`).then(_=>_.blob()),n,A;switch(this.config.warmup){case"face":n=await t(r1);break;case"full":n=await t(A1);break;default:n=null}if(n){let r=await createImageBitmap(n);A=await this.detect(r,this.config),r.close()}return A});o1.set(this,async()=>new Promise(t=>{let n,A=0;switch(this.config.warmup){case"face":A=256,n="data:image/jpeg;base64,"+r1;break;case"full":case"body":A=1200,n="data:image/jpeg;base64,"+A1;break;default:n=null}let r=new Image;r.onload=async()=>{let c=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(A,A):document.createElement("canvas");c.width=r.naturalWidth,c.height=r.naturalHeight;let _=c.getContext("2d");_==null||_.drawImage(r,0,0);let o=await this.detect(c,this.config);t(o)},n?r.src=n:t(null)}));h1.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n=this.config.warmup==="face"?t(r1):t(A1),A=mt.node.decodeJpeg(n),r=A.expandDims(0);this.tf.dispose(A);let c=await this.detect(r,this.config);return this.tf.dispose(r),c});this.tf=mt,this.draw=dt,this.version=S0,this.config=le(S,t),this.state="idle",ae(this,be,0),ae(this,Pe,!1),ae(this,ve,!1),ae(this,we,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>lt(n,this.config),this.classes={facemesh:pt,age:y1,gender:l1,emotion:u1,faceres:z1,body:this.config.body.modelPath.includes("posenet")?D1:ht,hand:rt,nanodet:at},this.sysinfo=zt()}profileData(){return this.config.profile?x1:{}}similarity(t,n){return this.config.face.description.enabled?R1(t,n):this.config.face.embedding.enabled?St(t,n):0}enhance(t){return E1(t)}match(t,n,A=0){return jt(t,n,A)}async load(t={}){this.state="load";let n=P();t&&(this.config=le(this.config,t)),J(this,we)&&(this.config.debug&&u(`version: ${this.version}`),this.config.debug&&u(`tfjs version: ${this.tf.version_core}`),this.config.debug&&u("platform:",this.sysinfo.platform),this.config.debug&&u("agent:",this.sysinfo.agent),await J(this,ze).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&u("configuration:",this.config),this.config.debug&&u("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?pt.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?w1(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?p1(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?T1(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?P1(this.config):null),this.models.handpose||(this.config.hand.enabled?ot(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?Q1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?st(this.config):null),this.models.nanodet||(this.config.object.enabled?yt(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?M1(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await pt.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await w1(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await p1(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await T1(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await P1(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await ot(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await Q1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await st(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await yt(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await M1(this.config))),J(this,we)&&(this.config.debug&&u("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),ae(this,we,!1));let A=Math.trunc(P()-n);A>(this.perf.load||0)&&(this.perf.load=A)}async detect(t,n={}){return new Promise(async A=>{var f,a,v,b;this.state="config";let r;this.config=le(this.config,n),this.state="check";let c=J(this,c1).call(this,t);c&&(u(c,t),A({error:c}));let _=P();await J(this,ze).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),r=P();let o=lt(t,this.config);if(!o||!o.tensor){u("could not convert input to tensor"),A({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(P()-r),this.analyze("Get Image:");let h,s,x,i;this.config.async?(x=this.config.face.enabled?S1(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",r=P(),x=this.config.face.enabled?await S1(this,o.tensor):[],this.perf.face=Math.trunc(P()-r)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:h=this.config.body.enabled?it(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",r=P(),this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?await((a=this.models.posenet)==null?void 0:a.estimatePoses(o.tensor,this.config)):[]:h=this.config.body.enabled?await it(o.tensor,this.config):[],this.perf.body=Math.trunc(P()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(s=this.config.hand.enabled?(v=this.models.handpose)==null?void 0:v.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",r=P(),s=this.config.hand.enabled?await((b=this.models.handpose)==null?void 0:b.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(P()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(i=this.config.object.enabled?wt(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",r=P(),i=this.config.object.enabled?await wt(o.tensor,this.config):[],this.perf.object=Math.trunc(P()-r)),this.analyze("End Object:"),this.config.async&&([x,h,s,i]=await Promise.all([x,h,s,i])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let l=[];this.config.gesture.enabled&&(r=P(),l=[...b0(x),...u0(h),...T0(s),...g0(x)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(P()-r)),this.perf.total=Math.trunc(P()-_),this.state="idle";let m={face:x,body:h,hand:s,gesture:l,object:i,performance:this.perf,canvas:o.canvas};A(m)})}async warmup(t={}){let n=P();t&&(this.config=le(this.config,t));let A=this.config.videoOptimized;this.config.videoOptimized=!1;let r;typeof createImageBitmap=="function"?r=await J(this,_1).call(this):typeof Image!="undefined"?r=await J(this,o1).call(this):r=await J(this,h1).call(this),this.config.videoOptimized=A;let c=P();return this.config.debug&&u("Warmup",this.config.warmup,Math.round(c-n),"ms",r),r}};be=new WeakMap,Pe=new WeakMap,ve=new WeakMap,we=new WeakMap,c1=new WeakMap,ze=new WeakMap,_1=new WeakMap,o1=new WeakMap,h1=new WeakMap;0&&(module.exports={Human}); //# sourceMappingURL=human.node-gpu.js.map diff --git a/dist/human.node.js b/dist/human.node.js index a35a5ce0..e5b1415f 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -731,5 +731,5 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;var S0="1.2.0";var be,Pe,ve,we,c1,ze,_1,o1,h1,ut=class{constructor(t={}){be.set(this,void 0);Pe.set(this,void 0);ve.set(this,void 0);we.set(this,void 0);this.analyze=(...t)=>{if(!J(this,Pe))return;let n=this.tf.engine().state.numTensors,A=J(this,be);ae(this,be,n);let r=n-A;r!==0&&u(...t,r)};c1.set(this,t=>{if(!J(this,ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof mt.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)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=P();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&u("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&u("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let A=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),r=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&u(`wasm execution: ${A?"SIMD":"no SIMD"} ${r?"multithreaded":"singlethreaded"}`),A||u("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&Et();try{await this.tf.setBackend(this.config.backend)}catch(A){u("error: cannot set backend:",this.config.backend,A)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(u("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&&u(`gl version:${A.getParameter(A.VERSION)} renderer:${A.getParameter(A.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(P()-n)}});_1.set(this,async()=>{let t=(r,c="application/octet-stream")=>fetch(`data:${c};base64,${r}`).then(_=>_.blob()),n,A;switch(this.config.warmup){case"face":n=await t(r1);break;case"full":n=await t(A1);break;default:n=null}if(n){let r=await createImageBitmap(n);A=await this.detect(r,this.config),r.close()}return A});o1.set(this,async()=>new Promise(t=>{let n,A=0;switch(this.config.warmup){case"face":A=256,n="data:image/jpeg;base64,"+r1;break;case"full":case"body":A=1200,n="data:image/jpeg;base64,"+A1;break;default:n=null}let r=new Image;r.onload=async()=>{let c=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(A,A):document.createElement("canvas");c.width=r.naturalWidth,c.height=r.naturalHeight;let _=c.getContext("2d");_==null||_.drawImage(r,0,0);let o=await this.detect(c,this.config);t(o)},n?r.src=n:t(null)}));h1.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n=this.config.warmup==="face"?t(r1):t(A1),A=mt.node.decodeJpeg(n),r=A.expandDims(0);this.tf.dispose(A);let c=await this.detect(r,this.config);return this.tf.dispose(r),c});this.tf=mt,this.draw=dt,this.version=S0,this.config=le(S,t),this.state="idle",ae(this,be,0),ae(this,Pe,!1),ae(this,ve,!1),ae(this,we,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>lt(n,this.config),this.classes={facemesh:pt,age:y1,gender:l1,emotion:u1,faceres:z1,body:this.config.body.modelPath.includes("posenet")?D1:ht,hand:rt,nanodet:at},this.sysinfo=zt()}profileData(){return this.config.profile?x1:{}}similarity(t,n){return this.config.face.description.enabled?R1(t,n):this.config.face.embedding.enabled?St(t,n):0}enhance(t){return E1(t)}match(t,n,A=0){return jt(t,n,A)}async load(t={}){this.state="load";let n=P();t&&(this.config=le(this.config,t)),J(this,we)&&(this.config.debug&&u(`version: ${this.version}`),this.config.debug&&u(`tfjs version: ${this.tf.version_core}`),this.config.debug&&u("platform:",this.sysinfo.platform),this.config.debug&&u("agent:",this.sysinfo.agent),await J(this,ze).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&u("configuration:",this.config),this.config.debug&&u("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?pt.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?w1(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?p1(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?T1(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?P1(this.config):null),this.models.handpose||(this.config.hand.enabled?ot(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?Q1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?st(this.config):null),this.models.nanodet||(this.config.object.enabled?yt(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?M1(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await pt.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await w1(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await p1(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await T1(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await P1(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await ot(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await Q1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await st(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await yt(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await M1(this.config))),J(this,we)&&(this.config.debug&&u("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),ae(this,we,!1));let A=Math.trunc(P()-n);A>(this.perf.load||0)&&(this.perf.load=A)}async detect(t,n={}){return new Promise(async A=>{var f,a,v,b;this.state="config";let r;this.config=le(this.config,n),this.state="check";let c=J(this,c1).call(this,t);c&&(u(c,t),A({error:c}));let _=P();await J(this,ze).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),r=P();let o=lt(t,this.config);if(!o||!o.tensor){u("could not convert input to tensor"),A({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(P()-r),this.analyze("Get Image:");let h,s,x,i;this.config.async?(x=this.config.face.enabled?S1(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",r=P(),x=this.config.face.enabled?await S1(this,o.tensor):[],this.perf.face=Math.trunc(P()-r)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:h=this.config.body.enabled?it(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",r=P(),this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?await((a=this.models.posenet)==null?void 0:a.estimatePoses(o.tensor,this.config)):[]:h=this.config.body.enabled?await it(o.tensor,this.config):[],this.perf.body=Math.trunc(P()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(s=this.config.hand.enabled?(v=this.models.handpose)==null?void 0:v.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",r=P(),s=this.config.hand.enabled?await((b=this.models.handpose)==null?void 0:b.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(P()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(i=this.config.object.enabled?wt(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",r=P(),i=this.config.object.enabled?await wt(o.tensor,this.config):[],this.perf.object=Math.trunc(P()-r)),this.analyze("End Object:"),this.config.async&&([x,h,s,i]=await Promise.all([x,h,s,i])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let l=[];this.config.gesture.enabled&&(r=P(),l=[...b0(x),...u0(h),...T0(s),...g0(x)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(P()-r)),this.perf.total=Math.trunc(P()-_),this.state="idle";let m={face:x,body:h,hand:s,gesture:l,object:i,performance:this.perf,canvas:o.canvas};A(m)})}async warmup(t={}){let n=P();t&&(this.config=le(this.config,t));let A=this.config.videoOptimized;this.config.videoOptimized=!1;let r;typeof createImageBitmap=="function"?r=await J(this,_1).call(this):typeof Image!="undefined"?r=await J(this,o1).call(this):r=await J(this,h1).call(this),this.config.videoOptimized=A;let c=P();return this.config.debug&&u("Warmup",this.config.warmup,Math.round(c-n),"ms",r),r}};be=new WeakMap,Pe=new WeakMap,ve=new WeakMap,we=new WeakMap,c1=new WeakMap,ze=new WeakMap,_1=new WeakMap,o1=new WeakMap,h1=new WeakMap;0&&(module.exports={Human}); +2Q==`;var S0="1.2.1";var be,Pe,ve,we,c1,ze,_1,o1,h1,ut=class{constructor(t={}){be.set(this,void 0);Pe.set(this,void 0);ve.set(this,void 0);we.set(this,void 0);this.analyze=(...t)=>{if(!J(this,Pe))return;let n=this.tf.engine().state.numTensors,A=J(this,be);ae(this,be,n);let r=n-A;r!==0&&u(...t,r)};c1.set(this,t=>{if(!J(this,ve))return null;if(!t)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(t instanceof mt.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)=>{if(this.config.backend&&this.config.backend!==""&&t||this.tf.getBackend()!==this.config.backend){let n=P();if(this.state="backend",this.config.backend&&this.config.backend!==""){if(this.config.debug&&u("setting backend:",this.config.backend),this.config.backend==="wasm"){this.config.debug&&u("wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath);let A=await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT"),r=await this.tf.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT");this.config.debug&&u(`wasm execution: ${A?"SIMD":"no SIMD"} ${r?"multithreaded":"singlethreaded"}`),A||u("warning: wasm simd support is not enabled")}this.config.backend==="humangl"&&Et();try{await this.tf.setBackend(this.config.backend)}catch(A){u("error: cannot set backend:",this.config.backend,A)}}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(u("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&&u(`gl version:${A.getParameter(A.VERSION)} renderer:${A.getParameter(A.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(P()-n)}});_1.set(this,async()=>{let t=(r,c="application/octet-stream")=>fetch(`data:${c};base64,${r}`).then(_=>_.blob()),n,A;switch(this.config.warmup){case"face":n=await t(r1);break;case"full":n=await t(A1);break;default:n=null}if(n){let r=await createImageBitmap(n);A=await this.detect(r,this.config),r.close()}return A});o1.set(this,async()=>new Promise(t=>{let n,A=0;switch(this.config.warmup){case"face":A=256,n="data:image/jpeg;base64,"+r1;break;case"full":case"body":A=1200,n="data:image/jpeg;base64,"+A1;break;default:n=null}let r=new Image;r.onload=async()=>{let c=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(A,A):document.createElement("canvas");c.width=r.naturalWidth,c.height=r.naturalHeight;let _=c.getContext("2d");_==null||_.drawImage(r,0,0);let o=await this.detect(c,this.config);t(o)},n?r.src=n:t(null)}));h1.set(this,async()=>{let t=_=>Buffer.from(_,"base64"),n=this.config.warmup==="face"?t(r1):t(A1),A=mt.node.decodeJpeg(n),r=A.expandDims(0);this.tf.dispose(A);let c=await this.detect(r,this.config);return this.tf.dispose(r),c});this.tf=mt,this.draw=dt,this.version=S0,this.config=le(S,t),this.state="idle",ae(this,be,0),ae(this,Pe,!1),ae(this,ve,!1),ae(this,we,!0),this.perf={},this.models={face:null,posenet:null,blazepose:null,handpose:null,iris:null,age:null,gender:null,emotion:null,embedding:null,nanodet:null,faceres:null},this.image=n=>lt(n,this.config),this.classes={facemesh:pt,age:y1,gender:l1,emotion:u1,faceres:z1,body:this.config.body.modelPath.includes("posenet")?D1:ht,hand:rt,nanodet:at},this.sysinfo=zt()}profileData(){return this.config.profile?x1:{}}similarity(t,n){return this.config.face.description.enabled?R1(t,n):this.config.face.embedding.enabled?St(t,n):0}enhance(t){return E1(t)}match(t,n,A=0){return jt(t,n,A)}async load(t={}){this.state="load";let n=P();t&&(this.config=le(this.config,t)),J(this,we)&&(this.config.debug&&u(`version: ${this.version}`),this.config.debug&&u(`tfjs version: ${this.tf.version_core}`),this.config.debug&&u("platform:",this.sysinfo.platform),this.config.debug&&u("agent:",this.sysinfo.agent),await J(this,ze).call(this,!0),this.tf.ENV.flags.IS_BROWSER&&(this.config.debug&&u("configuration:",this.config),this.config.debug&&u("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.nanodet,this.models.faceres]=await Promise.all([this.models.face||(this.config.face.enabled?pt.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?w1(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?p1(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?T1(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?P1(this.config):null),this.models.handpose||(this.config.hand.enabled?ot(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("posenet")?Q1(this.config):null),this.models.posenet||(this.config.body.enabled&&this.config.body.modelPath.includes("blazepose")?st(this.config):null),this.models.nanodet||(this.config.object.enabled?yt(this.config):null),this.models.faceres||(this.config.face.enabled&&this.config.face.description.enabled?M1(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await pt.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await w1(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await p1(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await T1(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await P1(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await ot(this.config)),this.config.body.enabled&&!this.models.posenet&&this.config.body.modelPath.includes("posenet")&&(this.models.posenet=await Q1(this.config)),this.config.body.enabled&&!this.models.blazepose&&this.config.body.modelPath.includes("blazepose")&&(this.models.blazepose=await st(this.config)),this.config.object.enabled&&!this.models.nanodet&&(this.models.nanodet=await yt(this.config)),this.config.face.enabled&&this.config.face.description.enabled&&!this.models.faceres&&(this.models.faceres=await M1(this.config))),J(this,we)&&(this.config.debug&&u("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),ae(this,we,!1));let A=Math.trunc(P()-n);A>(this.perf.load||0)&&(this.perf.load=A)}async detect(t,n={}){return new Promise(async A=>{var f,a,v,b;this.state="config";let r;this.config=le(this.config,n),this.state="check";let c=J(this,c1).call(this,t);c&&(u(c,t),A({error:c}));let _=P();await J(this,ze).call(this),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),r=P();let o=lt(t,this.config);if(!o||!o.tensor){u("could not convert input to tensor"),A({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(P()-r),this.analyze("Get Image:");let h,s,x,i;this.config.async?(x=this.config.face.enabled?S1(this,o.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",r=P(),x=this.config.face.enabled?await S1(this,o.tensor):[],this.perf.face=Math.trunc(P()-r)),this.analyze("Start Body:"),this.config.async?(this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?(f=this.models.posenet)==null?void 0:f.estimatePoses(o.tensor,this.config):[]:h=this.config.body.enabled?it(o.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",r=P(),this.config.body.modelPath.includes("posenet")?h=this.config.body.enabled?await((a=this.models.posenet)==null?void 0:a.estimatePoses(o.tensor,this.config)):[]:h=this.config.body.enabled?await it(o.tensor,this.config):[],this.perf.body=Math.trunc(P()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(s=this.config.hand.enabled?(v=this.models.handpose)==null?void 0:v.estimateHands(o.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",r=P(),s=this.config.hand.enabled?await((b=this.models.handpose)==null?void 0:b.estimateHands(o.tensor,this.config)):[],this.perf.hand=Math.trunc(P()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.config.async?(i=this.config.object.enabled?wt(o.tensor,this.config):[],this.perf.object&&delete this.perf.object):(this.state="run:object",r=P(),i=this.config.object.enabled?await wt(o.tensor,this.config):[],this.perf.object=Math.trunc(P()-r)),this.analyze("End Object:"),this.config.async&&([x,h,s,i]=await Promise.all([x,h,s,i])),o.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let l=[];this.config.gesture.enabled&&(r=P(),l=[...b0(x),...u0(h),...T0(s),...g0(x)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(P()-r)),this.perf.total=Math.trunc(P()-_),this.state="idle";let m={face:x,body:h,hand:s,gesture:l,object:i,performance:this.perf,canvas:o.canvas};A(m)})}async warmup(t={}){let n=P();t&&(this.config=le(this.config,t));let A=this.config.videoOptimized;this.config.videoOptimized=!1;let r;typeof createImageBitmap=="function"?r=await J(this,_1).call(this):typeof Image!="undefined"?r=await J(this,o1).call(this):r=await J(this,h1).call(this),this.config.videoOptimized=A;let c=P();return this.config.debug&&u("Warmup",this.config.warmup,Math.round(c-n),"ms",r),r}};be=new WeakMap,Pe=new WeakMap,ve=new WeakMap,we=new WeakMap,c1=new WeakMap,ze=new WeakMap,_1=new WeakMap,o1=new WeakMap,h1=new WeakMap;0&&(module.exports={Human}); //# sourceMappingURL=human.node.js.map