add browser test

pull/293/head
Vladimir Mandic 2022-08-19 09:15:29 -04:00
parent 7f688743fd
commit 3db85dd8cc
11 changed files with 1039 additions and 1035 deletions

View File

@ -11,6 +11,8 @@
### **HEAD -> main** 2022/08/15 mandic00@live.com
- add tensorflow library detection
- fix wasm detection
- enumerate additional models
- release refresh

View File

@ -63,8 +63,8 @@ Model is supported using `WebGL` backend in browser
- Host models in <human-models>
Models can be directly used without downloading to local storage
Example: `modelPath: 'https://vladmandic.github.io/human-models/models/facemesh.json'`
- Host models in **Google Cloud Bucket**
Models can be directly used without downloading to local storage
- Allow hosting models in **Google Cloud Bucket**
Hosted models can be directly used without downloading to local storage
Example: `modelPath: 'https://storage.googleapis.com/human-models/facemesh.json'`
- Fix **MobileFaceNet** model as alternative for face embedding/descriptor detection
Configurable using `config.face.mobilefacenet` config section

4
dist/human.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,10 @@
"use strict";/*
/*
Human
homepage: <https://github.com/vladmandic/human>
author: <https://github.com/vladmandic>'
*/
var un=Object.create;var M2=Object.defineProperty;var hn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var Pn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var vn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},gt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of bn(t))!Mn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=hn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?un(gn(e)):{},gt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Rn=e=>gt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(Pn(e,typeof t!="symbol"?t+"":t,o),o),Mt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Mt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Mt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=vn((B7,L5)=>{"use strict";var vt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,wn=Object.getOwnPropertyNames,kn=Object.prototype.hasOwnProperty,N5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wn(t))!kn.call(e,r)&&r!==o&&vt(e,r,{get:()=>t[r],enumerable:!(n=Tn(t,r))||n.enumerable});return e},En=(e,t,o)=>(N5(e,t,"default"),o&&N5(o,t,"default")),zn=e=>N5(vt({},"__esModule",{value:!0}),e),Rt={};L5.exports=zn(Rt);En(Rt,require("@tensorflow/tfjs-node-gpu"),L5.exports)});var L7={};be(L7,{Human:()=>mt,default:()=>mt,defaults:()=>ge,draw:()=>it,env:()=>R,match:()=>ft,models:()=>m5});module.exports=Rn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function Pt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function O5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")O5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var Tt=`
"use strict";var un=Object.create;var M2=Object.defineProperty;var hn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var Pn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var vn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},gt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of bn(t))!Mn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=hn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?un(gn(e)):{},gt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Rn=e=>gt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(Pn(e,typeof t!="symbol"?t+"":t,o),o),Mt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Mt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Mt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=vn((B7,L5)=>{"use strict";var vt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,wn=Object.getOwnPropertyNames,kn=Object.prototype.hasOwnProperty,N5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wn(t))!kn.call(e,r)&&r!==o&&vt(e,r,{get:()=>t[r],enumerable:!(n=Tn(t,r))||n.enumerable});return e},En=(e,t,o)=>(N5(e,t,"default"),o&&N5(o,t,"default")),zn=e=>N5(vt({},"__esModule",{value:!0}),e),Rt={};L5.exports=zn(Rt);En(Rt,require("@tensorflow/tfjs-node-gpu"),L5.exports)});var L7={};be(L7,{Human:()=>mt,default:()=>mt,defaults:()=>ge,draw:()=>it,env:()=>R,match:()=>ft,models:()=>m5});module.exports=Rn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function Pt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function O5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")O5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var Tt=`
precision highp float;
attribute vec2 pos;
attribute vec2 uv;

View File

@ -1,10 +1,10 @@
"use strict";/*
/*
Human
homepage: <https://github.com/vladmandic/human>
author: <https://github.com/vladmandic>'
*/
var hn=Object.create;var M2=Object.defineProperty;var bn=Object.getOwnPropertyDescriptor;var gn=Object.getOwnPropertyNames;var Mn=Object.getPrototypeOf,Pn=Object.prototype.hasOwnProperty;var vn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Rn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},Mt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of gn(t))!Pn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=bn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?hn(Mn(e)):{},Mt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Tn=e=>Mt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(vn(e,typeof t!="symbol"?t+"":t,o),o),Pt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Pt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Pt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=Rn((B7,F2)=>{"use strict";var Rt=Object.defineProperty,wn=Object.getOwnPropertyDescriptor,kn=Object.getOwnPropertyNames,En=Object.prototype.hasOwnProperty,L5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of kn(t))!En.call(e,r)&&r!==o&&Rt(e,r,{get:()=>t[r],enumerable:!(n=wn(t,r))||n.enumerable});return e},Tt=(e,t,o)=>(L5(e,t,"default"),o&&L5(o,t,"default")),zn=e=>L5(Rt({},"__esModule",{value:!0}),e),W5={};F2.exports=zn(W5);Tt(W5,require("@tensorflow/tfjs"),F2.exports);Tt(W5,require("@tensorflow/tfjs-backend-wasm"),F2.exports)});var L7={};be(L7,{Human:()=>pt,default:()=>pt,defaults:()=>ge,draw:()=>lt,env:()=>R,match:()=>mt,models:()=>p5});module.exports=Tn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function vt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function N5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")N5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var wt=`
"use strict";var hn=Object.create;var M2=Object.defineProperty;var bn=Object.getOwnPropertyDescriptor;var gn=Object.getOwnPropertyNames;var Mn=Object.getPrototypeOf,Pn=Object.prototype.hasOwnProperty;var vn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Rn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},Mt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of gn(t))!Pn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=bn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?hn(Mn(e)):{},Mt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Tn=e=>Mt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(vn(e,typeof t!="symbol"?t+"":t,o),o),Pt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Pt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Pt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=Rn((B7,F2)=>{"use strict";var Rt=Object.defineProperty,wn=Object.getOwnPropertyDescriptor,kn=Object.getOwnPropertyNames,En=Object.prototype.hasOwnProperty,L5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of kn(t))!En.call(e,r)&&r!==o&&Rt(e,r,{get:()=>t[r],enumerable:!(n=wn(t,r))||n.enumerable});return e},Tt=(e,t,o)=>(L5(e,t,"default"),o&&L5(o,t,"default")),zn=e=>L5(Rt({},"__esModule",{value:!0}),e),W5={};F2.exports=zn(W5);Tt(W5,require("@tensorflow/tfjs"),F2.exports);Tt(W5,require("@tensorflow/tfjs-backend-wasm"),F2.exports)});var L7={};be(L7,{Human:()=>pt,default:()=>pt,defaults:()=>ge,draw:()=>lt,env:()=>R,match:()=>mt,models:()=>p5});module.exports=Tn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function vt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function N5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")N5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var wt=`
precision highp float;
attribute vec2 pos;
attribute vec2 uv;

4
dist/human.node.js vendored
View File

@ -1,10 +1,10 @@
"use strict";/*
/*
Human
homepage: <https://github.com/vladmandic/human>
author: <https://github.com/vladmandic>'
*/
var un=Object.create;var M2=Object.defineProperty;var hn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var Pn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var vn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},gt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of bn(t))!Mn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=hn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?un(gn(e)):{},gt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Rn=e=>gt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(Pn(e,typeof t!="symbol"?t+"":t,o),o),Mt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Mt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Mt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=vn((B7,L5)=>{"use strict";var vt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,wn=Object.getOwnPropertyNames,kn=Object.prototype.hasOwnProperty,N5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wn(t))!kn.call(e,r)&&r!==o&&vt(e,r,{get:()=>t[r],enumerable:!(n=Tn(t,r))||n.enumerable});return e},En=(e,t,o)=>(N5(e,t,"default"),o&&N5(o,t,"default")),zn=e=>N5(vt({},"__esModule",{value:!0}),e),Rt={};L5.exports=zn(Rt);En(Rt,require("@tensorflow/tfjs-node"),L5.exports)});var L7={};be(L7,{Human:()=>mt,default:()=>mt,defaults:()=>ge,draw:()=>it,env:()=>R,match:()=>ft,models:()=>m5});module.exports=Rn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function Pt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function O5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")O5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var Tt=`
"use strict";var un=Object.create;var M2=Object.defineProperty;var hn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var Pn=(e,t,o)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var vn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var o in t)M2(e,o,{get:t[o],enumerable:!0})},gt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of bn(t))!Mn.call(e,r)&&r!==o&&M2(e,r,{get:()=>t[r],enumerable:!(n=hn(t,r))||n.enumerable});return e};var Z=(e,t,o)=>(o=e!=null?un(gn(e)):{},gt(t||!e||!e.__esModule?M2(o,"default",{value:e,enumerable:!0}):o,e)),Rn=e=>gt(M2({},"__esModule",{value:!0}),e);var T=(e,t,o)=>(Pn(e,typeof t!="symbol"?t+"":t,o),o),Mt=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)};var P2=(e,t,o)=>(Mt(e,t,"read from private field"),o?o.call(e):t.get(e)),v2=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},R2=(e,t,o,n)=>(Mt(e,t,"write to private field"),n?n.call(e,o):t.set(e,o),o);var D=vn((B7,L5)=>{"use strict";var vt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,wn=Object.getOwnPropertyNames,kn=Object.prototype.hasOwnProperty,N5=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wn(t))!kn.call(e,r)&&r!==o&&vt(e,r,{get:()=>t[r],enumerable:!(n=Tn(t,r))||n.enumerable});return e},En=(e,t,o)=>(N5(e,t,"default"),o&&N5(o,t,"default")),zn=e=>N5(vt({},"__esModule",{value:!0}),e),Rt={};L5.exports=zn(Rt);En(Rt,require("@tensorflow/tfjs-node"),L5.exports)});var L7={};be(L7,{Human:()=>mt,default:()=>mt,defaults:()=>ge,draw:()=>it,env:()=>R,match:()=>ft,models:()=>m5});module.exports=Rn(L7);function p(...e){let t=new Date,o=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(o,"Human:",...e)}function Pt(e,t){let o=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${o}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var b=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function O5(e,t,o="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")O5(e[r],t[r],r,n);else{let A=e&&typeof e[r]!="undefined";A||n.push({reason:"unknown property",where:`${o}.${r} = ${t[r]}`});let s=e&&typeof e[r]==typeof t[r];A&&!s&&n.push({reason:"property type mismatch",where:`${o}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&o==="config"&&n.length>0&&p("invalid configuration",n),n}function a0(...e){let t=o=>o&&typeof o=="object";return e.reduce((o,n)=>(Object.keys(n||{}).forEach(r=>{let A=o[r],s=n[r];Array.isArray(A)&&Array.isArray(s)?o[r]=A.concat(...s):t(A)&&t(s)?o[r]=a0(A,s):o[r]=s}),o),{})}var ge={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"mb3-centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"selfie.json",blur:8}};var x0=Z(D());var O=Z(D());var Tt=`
precision highp float;
attribute vec2 pos;
attribute vec2 uv;

View File

@ -66,7 +66,7 @@
"node-webcam": "^0.8.1"
},
"devDependencies": {
"@microsoft/api-extractor": "^7.29.2",
"@microsoft/api-extractor": "^7.29.3",
"@tensorflow/tfjs": "^3.19.0",
"@tensorflow/tfjs-backend-cpu": "^3.19.0",
"@tensorflow/tfjs-backend-wasm": "^3.19.0",
@ -79,15 +79,15 @@
"@tensorflow/tfjs-node": "^3.19.0",
"@tensorflow/tfjs-node-gpu": "^3.19.0",
"@tensorflow/tfjs-tflite": "0.0.1-alpha.8",
"@types/node": "^18.7.4",
"@types/node": "^18.7.6",
"@types/offscreencanvas": "^2019.7.0",
"@typescript-eslint/eslint-plugin": "^5.33.0",
"@typescript-eslint/parser": "^5.33.0",
"@vladmandic/build": "^0.7.9",
"@typescript-eslint/eslint-plugin": "^5.33.1",
"@typescript-eslint/parser": "^5.33.1",
"@vladmandic/build": "^0.7.10",
"@vladmandic/pilogger": "^0.4.6",
"@vladmandic/tfjs": "github:vladmandic/tfjs",
"@webgpu/types": "^0.1.21",
"esbuild": "^0.15.3",
"esbuild": "^0.15.5",
"eslint": "8.22.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-html": "^7.1.0",

View File

@ -14,10 +14,10 @@
@font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 100; src: local('Lato'), url('../../assets/lato-light.woff2') }
html { font-family: 'Lato', 'Segoe UI'; font-size: 14px; font-variant: small-caps; }
body { margin: 0; background: black; color: white; width: 100vw; overflow-x: hidden; }
.canvas { position: absolute; bottom: 10px; right: 10px; width: 256px; height: 256px; z-index: 99; }
.canvas { position: fixed; bottom: 10px; right: 10px; width: 256px; height: 256px; z-index: 99; }
.events { position: fixed; top: 10px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
.state { position: fixed; top: 60px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
.pre { line-height: 150%; white-space: break-spaces; }
.events { position: absolute; top: 10px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
.state { position: absolute; top: 60px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
</style>
</head>
<body>
@ -56,7 +56,7 @@
const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;
const elap = (dt - last).toString().padStart(5, '0');
document.getElementById('log').innerHTML += ts + ' +' + elap + 'ms &nbsp' + str(false, ...msgs);
document.documentElement.scrollTop = document.documentElement.scrollHeight
document.documentElement.scrollTop = document.documentElement.scrollHeight;
console.log(ts, elap, ...msgs); // eslint-disable-line no-console
last = dt;
}
@ -66,7 +66,7 @@
const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;
const elap = (dt - last).toString().padStart(5, '0');
document.getElementById('log').innerHTML += ts + ' +' + elap + 'ms &nbsp' + str(true, ...msgs);
document.documentElement.scrollTop = document.documentElement.scrollHeight
document.documentElement.scrollTop = document.documentElement.scrollHeight;
console.log(ts, elap, ...msgs); // eslint-disable-line no-console
last = dt;
}

2
test/browser.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
"/mnt/c/Users/mandi/AppData/Local/Google/Chrome SxS/Application/chrome.exe" --enable-unsafe-gpu --allow-insecure-localhost --auto-open-devtools-for-tabs https://localhost:10031/test/browser.html

View File

@ -1,39 +1,39 @@
2022-08-15 11:36:04 DATA:  Build {"name":"@vladmandic/human","version":"2.9.3"}
2022-08-15 11:36:04 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.3"}
2022-08-15 11:36:04 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2022-08-15 11:36:04 INFO:  Toolchain: {"build":"0.7.9","esbuild":"0.15.3","typescript":"4.7.4","typedoc":"0.23.10","eslint":"8.22.0"}
2022-08-15 11:36:04 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2022-08-15 11:36:04 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]}
2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":608}
2022-08-15 11:36:04 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655451,"outputBytes":307474}
2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":612}
2022-08-15 11:36:04 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655455,"outputBytes":307478}
2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":664}
2022-08-15 11:36:04 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655507,"outputBytes":307528}
2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1069,"outputBytes":358}
2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1032,"outputBytes":583}
2022-08-15 11:36:04 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655426,"outputBytes":306323}
2022-08-15 11:36:04 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1271,"outputBytes":2787569}
2022-08-15 11:36:04 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3442412,"outputBytes":1669183}
2022-08-15 11:36:04 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3442412,"outputBytes":3073108}
2022-08-15 11:36:09 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30}
2022-08-15 11:36:11 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true}
2022-08-15 11:36:11 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6716,"outputBytes":3141}
2022-08-15 11:36:11 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15629,"outputBytes":7798}
2022-08-15 11:36:19 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":109,"errors":0,"warnings":0}
2022-08-15 11:36:19 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2022-08-15 11:36:19 STATE: Copy: {"input":"tfjs/tfjs.esm.d.ts"}
2022-08-15 11:36:19 INFO:  Done...
2022-08-15 11:36:20 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":198}
2022-08-15 11:36:20 STATE: Copy: {"input":"types/human.d.ts"}
2022-08-15 11:36:20 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2022-08-15 11:36:20 STATE: Models {"folder":"./models","models":13}
2022-08-15 11:36:20 STATE: Models {"folder":"../human-models/models","models":42}
2022-08-15 11:36:20 STATE: Models {"folder":"../blazepose/model/","models":4}
2022-08-15 11:36:20 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2022-08-15 11:36:20 STATE: Models {"folder":"../efficientpose/models","models":3}
2022-08-15 11:36:20 STATE: Models {"folder":"../insightface/models","models":5}
2022-08-15 11:36:20 STATE: Models {"folder":"../movenet/models","models":3}
2022-08-15 11:36:20 STATE: Models {"folder":"../nanodet/models","models":4}
2022-08-15 11:36:20 STATE: Models: {"count":57,"totalSize":383017442}
2022-08-15 11:36:20 INFO:  Human Build complete... {"logFile":"test/build.log"}
2022-08-19 09:12:22 DATA:  Build {"name":"@vladmandic/human","version":"2.9.3"}
2022-08-19 09:12:22 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.3"}
2022-08-19 09:12:22 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2022-08-19 09:12:22 INFO:  Toolchain: {"build":"0.7.10","esbuild":"0.15.5","typescript":"4.7.4","typedoc":"0.23.10","eslint":"8.22.0"}
2022-08-19 09:12:22 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2022-08-19 09:12:22 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]}
2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":608}
2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655452,"outputBytes":307474}
2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":612}
2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655456,"outputBytes":307478}
2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":664}
2022-08-19 09:12:22 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655508,"outputBytes":307528}
2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1069,"outputBytes":358}
2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1032,"outputBytes":583}
2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655427,"outputBytes":306323}
2022-08-19 09:12:22 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1271,"outputBytes":2787569}
2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3442413,"outputBytes":1669183}
2022-08-19 09:12:22 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3442413,"outputBytes":3073108}
2022-08-19 09:12:27 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30}
2022-08-19 09:12:29 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true}
2022-08-19 09:12:29 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6716,"outputBytes":3141}
2022-08-19 09:12:29 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15629,"outputBytes":7798}
2022-08-19 09:12:37 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":109,"errors":0,"warnings":0}
2022-08-19 09:12:37 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2022-08-19 09:12:37 STATE: Copy: {"input":"tfjs/tfjs.esm.d.ts"}
2022-08-19 09:12:37 INFO:  Done...
2022-08-19 09:12:37 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":198}
2022-08-19 09:12:37 STATE: Copy: {"input":"types/human.d.ts"}
2022-08-19 09:12:37 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2022-08-19 09:12:37 STATE: Models {"folder":"./models","models":13}
2022-08-19 09:12:37 STATE: Models {"folder":"../human-models/models","models":42}
2022-08-19 09:12:37 STATE: Models {"folder":"../blazepose/model/","models":4}
2022-08-19 09:12:37 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2022-08-19 09:12:37 STATE: Models {"folder":"../efficientpose/models","models":3}
2022-08-19 09:12:37 STATE: Models {"folder":"../insightface/models","models":5}
2022-08-19 09:12:37 STATE: Models {"folder":"../movenet/models","models":3}
2022-08-19 09:12:37 STATE: Models {"folder":"../nanodet/models","models":4}
2022-08-19 09:12:38 STATE: Models: {"count":57,"totalSize":383017442}
2022-08-19 09:12:38 INFO:  Human Build complete... {"logFile":"test/build.log"}

File diff suppressed because it is too large Load Diff