add electron detection

pull/356/head
Vladimir Mandic 2023-02-25 09:40:12 -05:00
parent da3cf359fd
commit 059ebe5e36
15 changed files with 1124 additions and 1114 deletions

View File

@ -9,8 +9,9 @@
## Changelog ## Changelog
### **HEAD -> main** 2023/02/13 mandic00@live.com ### **HEAD -> main** 2023/02/22 mandic00@live.com
- add movenet-multipose workaround
- rebuild and publish - rebuild and publish
- add face.detector.minsize configurable setting - add face.detector.minsize configurable setting
- add affectnet - add affectnet

View File

@ -4,6 +4,6 @@
author: <https://github.com/vladmandic>' author: <https://github.com/vladmandic>'
*/ */
import*as m from"../../dist/human.esm.js";var v=1920,b={modelBasePath:"../../models",cacheSensitivity:0,filter:{enabled:!0,equalization:!1,flip:!1},face:{enabled:!0,detector:{rotation:!0},mesh:{enabled:!0},attention:{enabled:!1},iris:{enabled:!0},description:{enabled:!0},emotion:{enabled:!0},antispoof:{enabled:!0},liveness:{enabled:!0}},body:{enabled:!0},hand:{enabled:!0},object:{enabled:!1},segmentation:{enabled:!1},gesture:{enabled:!0}},e=new m.Human(b);e.env.perfadd=!1;e.draw.options.font='small-caps 18px "Lato"';e.draw.options.lineHeight=20;e.draw.options.drawPoints=!0;var t={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("status"),perf:document.getElementById("performance")},n={detect:0,draw:0,tensors:0,start:0},s={detectFPS:0,drawFPS:0,frames:0,averageMs:0},o=(...a)=>{t.log.innerText+=a.join(" ")+` import*as m from"../../dist/human.esm.js";var v=1920,b={modelBasePath:"../../models",filter:{enabled:!0,equalization:!1,flip:!1},face:{enabled:!0,detector:{rotation:!0},mesh:{enabled:!0},attention:{enabled:!1},iris:{enabled:!0},description:{enabled:!0},emotion:{enabled:!0},antispoof:{enabled:!0},liveness:{enabled:!0}},body:{enabled:!0},hand:{enabled:!0},object:{enabled:!1},segmentation:{enabled:!1},gesture:{enabled:!0}},e=new m.Human(b);e.env.perfadd=!1;e.draw.options.font='small-caps 18px "Lato"';e.draw.options.lineHeight=20;e.draw.options.drawPoints=!0;var a={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("status"),perf:document.getElementById("performance")},n={detect:0,draw:0,tensors:0,start:0},s={detectFPS:0,drawFPS:0,frames:0,averageMs:0},o=(...t)=>{a.log.innerText+=t.join(" ")+`
`,console.log(...a)},r=a=>t.fps.innerText=a,g=a=>t.perf.innerText="tensors:"+e.tf.memory().numTensors.toString()+" | performance: "+JSON.stringify(a).replace(/"|{|}/g,"").replace(/,/g," | ");async function f(){if(!t.video.paused){n.start===0&&(n.start=e.now()),await e.detect(t.video);let a=e.tf.memory().numTensors;a-n.tensors!==0&&o("allocated tensors:",a-n.tensors),n.tensors=a,s.detectFPS=Math.round(1e3*1e3/(e.now()-n.detect))/1e3,s.frames++,s.averageMs=Math.round(1e3*(e.now()-n.start)/s.frames)/1e3,s.frames%100===0&&!t.video.paused&&o("performance",{...s,tensors:n.tensors})}n.detect=e.now(),requestAnimationFrame(f)}async function u(){var d,i,c;if(!t.video.paused){let l=e.next(e.result),p=await e.image(t.video);e.draw.canvas(p.canvas,t.canvas);let w={bodyLabels:`person confidence [score] and ${(c=(i=(d=e.result)==null?void 0:d.body)==null?void 0:i[0])==null?void 0:c.keypoints.length} keypoints`};await e.draw.all(t.canvas,l,w),g(l.performance)}let a=e.now();s.drawFPS=Math.round(1e3*1e3/(a-n.draw))/1e3,n.draw=a,r(t.video.paused?"paused":`fps: ${s.detectFPS.toFixed(1).padStart(5," ")} detect | ${s.drawFPS.toFixed(1).padStart(5," ")} draw`),setTimeout(u,30)}async function y(){let d=(await e.webcam.enumerate())[0].deviceId;await e.webcam.start({element:t.video,crop:!1,width:v,id:d}),t.canvas.width=e.webcam.width,t.canvas.height=e.webcam.height,t.canvas.onclick=async()=>{e.webcam.paused?await e.webcam.play():e.webcam.pause()}}async function h(){o("human version:",e.version,"| tfjs version:",e.tf.version["tfjs-core"]),o("platform:",e.env.platform,"| agent:",e.env.agent),r("loading..."),await e.load(),o("backend:",e.tf.getBackend(),"| available:",e.env.backends),o("models stats:",e.models.stats()),o("models loaded:",e.models.loaded()),o("environment",e.env),r("initializing..."),await e.warmup(),await y(),await f(),await u()}window.onload=h; `,console.log(...t)},r=t=>a.fps.innerText=t,g=t=>a.perf.innerText="tensors:"+e.tf.memory().numTensors.toString()+" | performance: "+JSON.stringify(t).replace(/"|{|}/g,"").replace(/,/g," | ");async function f(){if(!a.video.paused){n.start===0&&(n.start=e.now()),await e.detect(a.video);let t=e.tf.memory().numTensors;t-n.tensors!==0&&o("allocated tensors:",t-n.tensors),n.tensors=t,s.detectFPS=Math.round(1e3*1e3/(e.now()-n.detect))/1e3,s.frames++,s.averageMs=Math.round(1e3*(e.now()-n.start)/s.frames)/1e3,s.frames%100===0&&!a.video.paused&&o("performance",{...s,tensors:n.tensors})}n.detect=e.now(),requestAnimationFrame(f)}async function u(){var d,i,c;if(!a.video.paused){let l=e.next(e.result),p=await e.image(a.video);e.draw.canvas(p.canvas,a.canvas);let w={bodyLabels:`person confidence [score] and ${(c=(i=(d=e.result)==null?void 0:d.body)==null?void 0:i[0])==null?void 0:c.keypoints.length} keypoints`};await e.draw.all(a.canvas,l,w),g(l.performance)}let t=e.now();s.drawFPS=Math.round(1e3*1e3/(t-n.draw))/1e3,n.draw=t,r(a.video.paused?"paused":`fps: ${s.detectFPS.toFixed(1).padStart(5," ")} detect | ${s.drawFPS.toFixed(1).padStart(5," ")} draw`),setTimeout(u,30)}async function y(){let d=(await e.webcam.enumerate())[0].deviceId;await e.webcam.start({element:a.video,crop:!1,width:v,id:d}),a.canvas.width=e.webcam.width,a.canvas.height=e.webcam.height,a.canvas.onclick=async()=>{e.webcam.paused?await e.webcam.play():e.webcam.pause()}}async function h(){o("human version:",e.version,"| tfjs version:",e.tf.version["tfjs-core"]),o("platform:",e.env.platform,"| agent:",e.env.agent),r("loading..."),await e.load(),o("backend:",e.tf.getBackend(),"| available:",e.env.backends),o("models stats:",e.models.stats()),o("models loaded:",e.models.loaded()),o("environment",e.env),r("initializing..."),await e.warmup(),await y(),await f(),await u()}window.onload=h;
//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map

File diff suppressed because one or more lines are too long

View File

@ -13,8 +13,9 @@ const width = 1920; // used by webcam config as well as human maximum resultion
const humanConfig: Partial<H.Config> = { // user configuration for human, used to fine-tune behavior const humanConfig: Partial<H.Config> = { // user configuration for human, used to fine-tune behavior
// backend: 'webgpu', // backend: 'webgpu',
// cacheSensitivity: 0,
// debug: false,
modelBasePath: '../../models', modelBasePath: '../../models',
cacheSensitivity: 0,
filter: { enabled: true, equalization: false, flip: false }, filter: { enabled: true, equalization: false, flip: false },
face: { enabled: true, detector: { rotation: true }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true }, antispoof: { enabled: true }, liveness: { enabled: true } }, face: { enabled: true, detector: { rotation: true }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true }, antispoof: { enabled: true }, liveness: { enabled: true } },
body: { enabled: true }, body: { enabled: true },

File diff suppressed because one or more lines are too long

24
dist/human.esm.js vendored
View File

@ -33047,7 +33047,7 @@ function registerCustomOps(config3) {
} }
var defaultFlags = {}; var defaultFlags = {};
async function check(instance, force = false) { async function check(instance, force = false) {
var _a2; var _a2, _b2;
instance.state = "backend"; instance.state = "backend";
if (((_a2 = instance.config.backend) == null ? void 0 : _a2.length) === 0) if (((_a2 = instance.config.backend) == null ? void 0 : _a2.length) === 0)
instance.config.backend = await getBestBackend(); instance.config.backend = await getBestBackend();
@ -33058,12 +33058,23 @@ async function check(instance, force = false) {
if (instance.config.debug) if (instance.config.debug)
log("running inside web worker"); log("running inside web worker");
} }
if (env.browser && instance.config.backend === "tensorflow") { if (typeof navigator !== "undefined" && ((_b2 = navigator == null ? void 0 : navigator.userAgent) == null ? void 0 : _b2.toLowerCase().includes("electron"))) {
if (instance.config.debug)
log("running inside electron");
}
let available = Object.keys(sr().registryFactory);
if (instance.config.backend === "humangl" && !available.includes("humangl")) {
register(instance);
available = Object.keys(sr().registryFactory);
}
if (instance.config.debug)
log("available backends:", available);
if (env.browser && !env.node && instance.config.backend === "tensorflow" && available.includes("webgl")) {
if (instance.config.debug) if (instance.config.debug)
log("override: backend set to tensorflow while running in browser"); log("override: backend set to tensorflow while running in browser");
instance.config.backend = "webgl"; instance.config.backend = "webgl";
} }
if (env.node && (instance.config.backend === "webgl" || instance.config.backend === "humangl")) { if (env.node && !env.browser && (instance.config.backend === "webgl" || instance.config.backend === "humangl") && available.includes("tensorflow")) {
if (instance.config.debug) if (instance.config.debug)
log(`override: backend set to ${instance.config.backend} while running in nodejs`); log(`override: backend set to ${instance.config.backend} while running in nodejs`);
instance.config.backend = "tensorflow"; instance.config.backend = "tensorflow";
@ -33085,13 +33096,6 @@ async function check(instance, force = false) {
} }
} }
} }
let available = Object.keys(sr().registryFactory);
if (instance.config.backend === "humangl" && !available.includes("humangl")) {
register(instance);
available = Object.keys(sr().registryFactory);
}
if (instance.config.debug)
log("available backends:", available);
if (!available.includes(instance.config.backend)) { if (!available.includes(instance.config.backend)) {
log(`error: backend ${instance.config.backend} not found in registry`); log(`error: backend ${instance.config.backend} not found in registry`);
instance.config.backend = env.node ? "tensorflow" : "webgl"; instance.config.backend = env.node ? "tensorflow" : "webgl";

File diff suppressed because one or more lines are too long

18
dist/human.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

14
dist/human.node.js vendored

File diff suppressed because one or more lines are too long

View File

@ -91,7 +91,7 @@
"@tensorflow/tfjs-layers": "^4.2.0", "@tensorflow/tfjs-layers": "^4.2.0",
"@tensorflow/tfjs-node": "^4.2.0", "@tensorflow/tfjs-node": "^4.2.0",
"@tensorflow/tfjs-node-gpu": "^4.2.0", "@tensorflow/tfjs-node-gpu": "^4.2.0",
"@types/node": "^18.14.0", "@types/node": "^18.14.1",
"@types/offscreencanvas": "^2019.7.0", "@types/offscreencanvas": "^2019.7.0",
"@typescript-eslint/eslint-plugin": "^5.53.0", "@typescript-eslint/eslint-plugin": "^5.53.0",
"@typescript-eslint/parser": "^5.53.0", "@typescript-eslint/parser": "^5.53.0",

View File

@ -93,12 +93,24 @@ export async function check(instance: Human, force = false) {
if (instance.config.debug) log('running inside web worker'); if (instance.config.debug) log('running inside web worker');
} }
if (typeof navigator !== 'undefined' && navigator?.userAgent?.toLowerCase().includes('electron')) {
if (instance.config.debug) log('running inside electron');
}
// check available backends
let available = Object.keys(tf.engine().registryFactory as Record<string, unknown>);
if (instance.config.backend === 'humangl' && !available.includes('humangl')) {
humangl.register(instance);
available = Object.keys(tf.engine().registryFactory as Record<string, unknown>);
}
if (instance.config.debug) log('available backends:', available);
// force browser vs node backend // force browser vs node backend
if (env.browser && instance.config.backend === 'tensorflow') { if (env.browser && !env.node && (instance.config.backend === 'tensorflow') && available.includes('webgl')) {
if (instance.config.debug) log('override: backend set to tensorflow while running in browser'); if (instance.config.debug) log('override: backend set to tensorflow while running in browser');
instance.config.backend = 'webgl'; instance.config.backend = 'webgl';
} }
if (env.node && (instance.config.backend === 'webgl' || instance.config.backend === 'humangl')) { if (env.node && !env.browser && (instance.config.backend === 'webgl' || instance.config.backend === 'humangl') && available.includes('tensorflow')) {
if (instance.config.debug) log(`override: backend set to ${instance.config.backend} while running in nodejs`); if (instance.config.debug) log(`override: backend set to ${instance.config.backend} while running in nodejs`);
instance.config.backend = 'tensorflow'; instance.config.backend = 'tensorflow';
} }
@ -123,14 +135,6 @@ export async function check(instance: Human, force = false) {
} }
} }
// check available backends
let available = Object.keys(tf.engine().registryFactory as Record<string, unknown>);
if (instance.config.backend === 'humangl' && !available.includes('humangl')) {
humangl.register(instance);
available = Object.keys(tf.engine().registryFactory as Record<string, unknown>);
}
if (instance.config.debug) log('available backends:', available);
if (!available.includes(instance.config.backend)) { if (!available.includes(instance.config.backend)) {
log(`error: backend ${instance.config.backend} not found in registry`); log(`error: backend ${instance.config.backend} not found in registry`);
instance.config.backend = env.node ? 'tensorflow' : 'webgl'; instance.config.backend = env.node ? 'tensorflow' : 'webgl';

View File

@ -1,50 +1,50 @@
2023-02-22 06:42:38 DATA:  Build {"name":"@vladmandic/human","version":"3.0.5"} 2023-02-25 09:37:18 DATA:  Build {"name":"@vladmandic/human","version":"3.0.5"}
2023-02-22 06:42:38 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.5"} 2023-02-25 09:37:18 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.5"}
2023-02-22 06:42:38 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} 2023-02-25 09:37:18 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2023-02-22 06:42:38 INFO:  Toolchain: {"build":"0.8.2","esbuild":"0.17.10","typescript":"4.9.5","typedoc":"0.23.25","eslint":"8.34.0"} 2023-02-25 09:37:18 INFO:  Toolchain: {"build":"0.8.2","esbuild":"0.17.10","typescript":"4.9.5","typedoc":"0.23.25","eslint":"8.34.0"}
2023-02-22 06:42:38 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} 2023-02-25 09:37:18 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2023-02-22 06:42:38 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} 2023-02-25 09:37:18 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]}
2023-02-22 06:42:38 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} 2023-02-25 09:37:18 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361}
2023-02-22 06:42:38 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} 2023-02-25 09:37:18 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924}
2023-02-22 06:42:38 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":672601,"outputBytes":319120} 2023-02-25 09:37:18 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":672881,"outputBytes":319360}
2023-02-22 06:42:38 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} 2023-02-25 09:37:18 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928}
2023-02-22 06:42:38 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":672605,"outputBytes":319124} 2023-02-25 09:37:18 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":672885,"outputBytes":319364}
2023-02-22 06:42:38 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} 2023-02-25 09:37:18 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876}
2023-02-22 06:42:38 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":673553,"outputBytes":319235} 2023-02-25 09:37:18 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":673833,"outputBytes":319475}
2023-02-22 06:42:38 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} 2023-02-25 09:37:18 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670}
2023-02-22 06:42:38 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":672347,"outputBytes":317690} 2023-02-25 09:37:18 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":672627,"outputBytes":317930}
2023-02-22 06:42:38 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1151306} 2023-02-25 09:37:18 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1151306}
2023-02-22 06:42:38 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1822983,"outputBytes":1464928} 2023-02-25 09:37:18 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1823263,"outputBytes":1465170}
2023-02-22 06:42:38 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1822983,"outputBytes":1931994} 2023-02-25 09:37:18 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1823263,"outputBytes":1932346}
2023-02-22 06:42:42 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} 2023-02-25 09:37:23 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15}
2023-02-22 06:42:45 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true} 2023-02-25 09:37:26 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
2023-02-22 06:42:45 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6140,"outputBytes":2920} 2023-02-25 09:37:26 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6162,"outputBytes":2901}
2023-02-22 06:42:45 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17503,"outputBytes":9403} 2023-02-25 09:37:26 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17503,"outputBytes":9403}
2023-02-22 06:42:54 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":170,"errors":0,"warnings":0} 2023-02-25 09:37:35 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":170,"errors":0,"warnings":0}
2023-02-22 06:42:54 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} 2023-02-25 09:37:36 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2023-02-22 06:42:54 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} 2023-02-25 09:37:36 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
2023-02-22 06:42:54 INFO:  Done... 2023-02-25 09:37:36 INFO:  Done...
2023-02-22 06:42:54 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} 2023-02-25 09:37:36 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
2023-02-22 06:42:54 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} 2023-02-25 09:37:36 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
2023-02-22 06:42:54 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} 2023-02-25 09:37:36 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
2023-02-22 06:42:54 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} 2023-02-25 09:37:36 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
2023-02-22 06:42:54 STATE: Filter: {"input":"types/tfjs-core.d.ts"} 2023-02-25 09:37:36 STATE: Filter: {"input":"types/tfjs-core.d.ts"}
2023-02-22 06:42:55 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":210} 2023-02-25 09:37:37 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":210}
2023-02-22 06:42:55 STATE: Filter: {"input":"types/human.d.ts"} 2023-02-25 09:37:37 STATE: Filter: {"input":"types/human.d.ts"}
2023-02-22 06:42:55 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} 2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"}
2023-02-22 06:42:55 STATE: Write: {"output":"dist/human.esm.d.ts"} 2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.esm.d.ts"}
2023-02-22 06:42:55 STATE: Write: {"output":"dist/human.d.ts"} 2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.d.ts"}
2023-02-22 06:42:55 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} 2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.node-gpu.d.ts"}
2023-02-22 06:42:55 STATE: Write: {"output":"dist/human.node.d.ts"} 2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.node.d.ts"}
2023-02-22 06:42:55 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} 2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.node-wasm.d.ts"}
2023-02-22 06:42:55 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} 2023-02-25 09:37:37 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2023-02-22 06:42:55 STATE: Models {"folder":"./models","models":12} 2023-02-25 09:37:37 STATE: Models {"folder":"./models","models":12}
2023-02-22 06:42:55 STATE: Models {"folder":"../human-models/models","models":44} 2023-02-25 09:37:37 STATE: Models {"folder":"../human-models/models","models":44}
2023-02-22 06:42:55 STATE: Models {"folder":"../blazepose/model/","models":4} 2023-02-25 09:37:37 STATE: Models {"folder":"../blazepose/model/","models":4}
2023-02-22 06:42:55 STATE: Models {"folder":"../anti-spoofing/model","models":1} 2023-02-25 09:37:37 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2023-02-22 06:42:55 STATE: Models {"folder":"../efficientpose/models","models":3} 2023-02-25 09:37:37 STATE: Models {"folder":"../efficientpose/models","models":3}
2023-02-22 06:42:55 STATE: Models {"folder":"../insightface/models","models":5} 2023-02-25 09:37:37 STATE: Models {"folder":"../insightface/models","models":5}
2023-02-22 06:42:55 STATE: Models {"folder":"../movenet/models","models":3} 2023-02-25 09:37:37 STATE: Models {"folder":"../movenet/models","models":3}
2023-02-22 06:42:55 STATE: Models {"folder":"../nanodet/models","models":4} 2023-02-25 09:37:37 STATE: Models {"folder":"../nanodet/models","models":4}
2023-02-22 06:42:56 STATE: Models: {"count":58,"totalSize":380063249} 2023-02-25 09:37:38 STATE: Models: {"count":58,"totalSize":380063249}
2023-02-22 06:42:56 INFO:  Human Build complete... {"logFile":"test/build.log"} 2023-02-25 09:37:38 INFO:  Human Build complete... {"logFile":"test/build.log"}

File diff suppressed because it is too large Load Diff