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
### **HEAD -> main** 2023/02/13 mandic00@live.com
### **HEAD -> main** 2023/02/22 mandic00@live.com
- add movenet-multipose workaround
- rebuild and publish
- add face.detector.minsize configurable setting
- add affectnet

View File

@ -4,6 +4,6 @@
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(" ")+`
`,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;
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(...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

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
// backend: 'webgpu',
// cacheSensitivity: 0,
// debug: false,
modelBasePath: '../../models',
cacheSensitivity: 0,
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 } },
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 = {};
async function check(instance, force = false) {
var _a2;
var _a2, _b2;
instance.state = "backend";
if (((_a2 = instance.config.backend) == null ? void 0 : _a2.length) === 0)
instance.config.backend = await getBestBackend();
@ -33058,12 +33058,23 @@ async function check(instance, force = false) {
if (instance.config.debug)
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)
log("override: backend set to tensorflow while running in browser");
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`);
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)) {
log(`error: backend ${instance.config.backend} not found in registry`);
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-node": "^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",
"@typescript-eslint/eslint-plugin": "^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 (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
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');
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`);
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)) {
log(`error: backend ${instance.config.backend} not found in registry`);
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-22 06:42:38 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-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-22 06:42:38 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-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-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-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-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-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-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-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-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-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-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-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-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-22 06:42:42 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-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-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-22 06:42:54 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-22 06:42:54 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-22 06:42:54 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-22 06:42:54 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-22 06:42:54 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-22 06:42:55 STATE: Filter: {"input":"types/human.d.ts"}
2023-02-22 06:42:55 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-22 06:42:55 STATE: Write: {"output":"dist/human.d.ts"}
2023-02-22 06:42:55 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-22 06:42:55 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-22 06:42:55 STATE: Models {"folder":"./models","models":12}
2023-02-22 06:42:55 STATE: Models {"folder":"../human-models/models","models":44}
2023-02-22 06:42:55 STATE: Models {"folder":"../blazepose/model/","models":4}
2023-02-22 06:42:55 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2023-02-22 06:42:55 STATE: Models {"folder":"../efficientpose/models","models":3}
2023-02-22 06:42:55 STATE: Models {"folder":"../insightface/models","models":5}
2023-02-22 06:42:55 STATE: Models {"folder":"../movenet/models","models":3}
2023-02-22 06:42:55 STATE: Models {"folder":"../nanodet/models","models":4}
2023-02-22 06:42:56 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:18 DATA:  Build {"name":"@vladmandic/human","version":"3.0.5"}
2023-02-25 09:37:18 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.5"}
2023-02-25 09:37:18 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
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-25 09:37:18 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2023-02-25 09:37:18 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]}
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-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-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-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-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-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-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-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-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-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-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-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-25 09:37:23 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15}
2023-02-25 09:37:26 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
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-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-25 09:37:35 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":170,"errors":0,"warnings":0}
2023-02-25 09:37:36 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
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-25 09:37:36 INFO:  Done...
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-25 09:37:36 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
2023-02-25 09:37:36 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
2023-02-25 09:37:36 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
2023-02-25 09:37:36 STATE: Filter: {"input":"types/tfjs-core.d.ts"}
2023-02-25 09:37:37 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":210}
2023-02-25 09:37:37 STATE: Filter: {"input":"types/human.d.ts"}
2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"}
2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.esm.d.ts"}
2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.d.ts"}
2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.node-gpu.d.ts"}
2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.node.d.ts"}
2023-02-25 09:37:37 STATE: Write: {"output":"dist/human.node-wasm.d.ts"}
2023-02-25 09:37:37 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2023-02-25 09:37:37 STATE: Models {"folder":"./models","models":12}
2023-02-25 09:37:37 STATE: Models {"folder":"../human-models/models","models":44}
2023-02-25 09:37:37 STATE: Models {"folder":"../blazepose/model/","models":4}
2023-02-25 09:37:37 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2023-02-25 09:37:37 STATE: Models {"folder":"../efficientpose/models","models":3}
2023-02-25 09:37:37 STATE: Models {"folder":"../insightface/models","models":5}
2023-02-25 09:37:37 STATE: Models {"folder":"../movenet/models","models":3}
2023-02-25 09:37:37 STATE: Models {"folder":"../nanodet/models","models":4}
2023-02-25 09:37:38 STATE: Models: {"count":58,"totalSize":380063249}
2023-02-25 09:37:38 INFO:  Human Build complete... {"logFile":"test/build.log"}

File diff suppressed because it is too large Load Diff