switch to central logger

pull/50/head
Vladimir Mandic 2020-12-08 09:00:44 -05:00
parent 7a1e6f491f
commit 7c0fe6dbf3
31 changed files with 13341 additions and 13299 deletions

View File

@ -5,7 +5,6 @@ export default {
backend: 'webgl', // select tfjs backend to use backend: 'webgl', // select tfjs backend to use
wasmPath: '../assets/', // path for wasm binaries wasmPath: '../assets/', // path for wasm binaries
// only used for backend: wasm // only used for backend: wasm
console: true, // enable debugging output to console
async: true, // execute enabled models in parallel async: true, // execute enabled models in parallel
// this disables per-model performance data but // this disables per-model performance data but
// slightly increases performance // slightly increases performance

View File

@ -1,13 +1,14 @@
import Human from '../dist/human.esm.js'; import Human from '../dist/human.esm.js';
let config;
let busy = false; let busy = false;
const human = new Human(); const human = new Human();
const log = (...msg) => { function log(...msg) {
const dt = new Date();
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')}`;
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
if (config.console) console.log(...msg); if (msg) console.log(ts, 'Human:', ...msg);
}; }
onmessage = async (msg) => { onmessage = async (msg) => {
if (busy) return; if (busy) return;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,21 @@
{ {
"inputs": { "inputs": {
"dist/human.esm.js": {
"bytes": 1774883,
"imports": []
},
"demo/draw.js": {
"bytes": 10630,
"imports": []
},
"demo/menu.js": {
"bytes": 13858,
"imports": []
},
"demo/gl-bench.js": {
"bytes": 10782,
"imports": []
},
"demo/browser.js": { "demo/browser.js": {
"bytes": 25194, "bytes": 25194,
"imports": [ "imports": [
@ -16,36 +32,20 @@
"path": "demo/gl-bench.js" "path": "demo/gl-bench.js"
} }
] ]
},
"demo/draw.js": {
"bytes": 10630,
"imports": []
},
"demo/gl-bench.js": {
"bytes": 10782,
"imports": []
},
"demo/menu.js": {
"bytes": 13858,
"imports": []
},
"dist/human.esm.js": {
"bytes": 1774844,
"imports": []
} }
}, },
"outputs": { "outputs": {
"dist/demo-browser-index.js.map": { "dist/demo-browser-index.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 2679258 "bytes": 2678694
}, },
"dist/demo-browser-index.js": { "dist/demo-browser-index.js": {
"imports": [], "imports": [],
"exports": [], "exports": [],
"inputs": { "inputs": {
"dist/human.esm.js": { "dist/human.esm.js": {
"bytesInOutput": 1767603 "bytesInOutput": 1767642
}, },
"demo/draw.js": { "demo/draw.js": {
"bytesInOutput": 7776 "bytesInOutput": 7776
@ -60,7 +60,7 @@
"bytesInOutput": 19361 "bytesInOutput": 19361
} }
}, },
"bytes": 1821311 "bytes": 1821350
} }
} }
} }

14
dist/human.esm.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

405
dist/human.esm.json vendored
View File

@ -1,20 +1,91 @@
{ {
"inputs": { "inputs": {
"config.js": { "src/log.js": {
"bytes": 8721, "bytes": 401,
"imports": [] "imports": []
}, },
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytes": 1522251, "bytes": 1522244,
"imports": [] "imports": []
}, },
"package.json": { "src/face/blazeface.js": {
"bytes": 2323, "bytes": 6993,
"imports": [
{
"path": "src/log.js"
},
{
"path": "dist/tfjs.esm.js"
}
]
},
"src/face/box.js": {
"bytes": 1935,
"imports": [
{
"path": "dist/tfjs.esm.js"
}
]
},
"src/face/util.js": {
"bytes": 3078,
"imports": [] "imports": []
}, },
"src/face/coords.js": {
"bytes": 37909,
"imports": []
},
"src/face/facepipeline.js": {
"bytes": 13876,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/face/box.js"
},
{
"path": "src/face/util.js"
},
{
"path": "src/face/coords.js"
}
]
},
"src/face/facemesh.js": {
"bytes": 2675,
"imports": [
{
"path": "src/log.js"
},
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/face/blazeface.js"
},
{
"path": "src/face/facepipeline.js"
},
{
"path": "src/face/coords.js"
}
]
},
"src/profile.js": {
"bytes": 1045,
"imports": [
{
"path": "src/log.js"
}
]
},
"src/age/age.js": { "src/age/age.js": {
"bytes": 1968, "bytes": 1993,
"imports": [ "imports": [
{
"path": "src/log.js"
},
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
}, },
@ -23,47 +94,48 @@
} }
] ]
}, },
"src/body/buildParts.js": { "src/gender/gender.js": {
"bytes": 2035, "bytes": 3391,
"imports": [ "imports": [
{ {
"path": "src/body/heapSort.js" "path": "src/log.js"
},
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
} }
] ]
}, },
"src/body/decodeMultiple.js": { "src/emotion/emotion.js": {
"bytes": 5605, "bytes": 2988,
"imports": [ "imports": [
{ {
"path": "src/body/buildParts.js" "path": "src/log.js"
}, },
{ {
"path": "src/body/decodePose.js" "path": "dist/tfjs.esm.js"
}, },
{ {
"path": "src/body/vectors.js" "path": "src/profile.js"
} }
] ]
}, },
"src/body/decodePose.js": { "src/embedding/embedding.js": {
"bytes": 4540, "bytes": 2048,
"imports": [ "imports": [
{ {
"path": "src/body/keypoints.js" "path": "src/log.js"
}, },
{ {
"path": "src/body/vectors.js" "path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
} }
] ]
}, },
"src/body/heapSort.js": {
"bytes": 1590,
"imports": []
},
"src/body/keypoints.js": {
"bytes": 2291,
"imports": []
},
"src/body/modelBase.js": { "src/body/modelBase.js": {
"bytes": 889, "bytes": 889,
"imports": [ "imports": [
@ -83,9 +155,69 @@
} }
] ]
}, },
"src/body/modelPoseNet.js": { "src/body/heapSort.js": {
"bytes": 1928, "bytes": 1590,
"imports": []
},
"src/body/buildParts.js": {
"bytes": 2035,
"imports": [ "imports": [
{
"path": "src/body/heapSort.js"
}
]
},
"src/body/keypoints.js": {
"bytes": 2291,
"imports": []
},
"src/body/vectors.js": {
"bytes": 1273,
"imports": [
{
"path": "src/body/keypoints.js"
}
]
},
"src/body/decodePose.js": {
"bytes": 4540,
"imports": [
{
"path": "src/body/keypoints.js"
},
{
"path": "src/body/vectors.js"
}
]
},
"src/body/decodeMultiple.js": {
"bytes": 5605,
"imports": [
{
"path": "src/body/buildParts.js"
},
{
"path": "src/body/decodePose.js"
},
{
"path": "src/body/vectors.js"
}
]
},
"src/body/util.js": {
"bytes": 2262,
"imports": [
{
"path": "src/body/keypoints.js"
}
]
},
"src/body/modelPoseNet.js": {
"bytes": 1912,
"imports": [
{
"path": "src/log.js"
},
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
}, },
@ -120,121 +252,6 @@
} }
] ]
}, },
"src/body/util.js": {
"bytes": 2262,
"imports": [
{
"path": "src/body/keypoints.js"
}
]
},
"src/body/vectors.js": {
"bytes": 1273,
"imports": [
{
"path": "src/body/keypoints.js"
}
]
},
"src/embedding/embedding.js": {
"bytes": 2066,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
}
]
},
"src/emotion/emotion.js": {
"bytes": 3006,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
}
]
},
"src/face/blazeface.js": {
"bytes": 7009,
"imports": [
{
"path": "dist/tfjs.esm.js"
}
]
},
"src/face/box.js": {
"bytes": 1935,
"imports": [
{
"path": "dist/tfjs.esm.js"
}
]
},
"src/face/coords.js": {
"bytes": 37909,
"imports": []
},
"src/face/facemesh.js": {
"bytes": 2740,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/face/blazeface.js"
},
{
"path": "src/face/facepipeline.js"
},
{
"path": "src/face/coords.js"
}
]
},
"src/face/facepipeline.js": {
"bytes": 13884,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/face/box.js"
},
{
"path": "src/face/util.js"
},
{
"path": "src/face/coords.js"
}
]
},
"src/face/util.js": {
"bytes": 3078,
"imports": []
},
"src/gender/gender.js": {
"bytes": 3409,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
}
]
},
"src/gesture/gesture.js": {
"bytes": 3308,
"imports": []
},
"src/hand/anchors.js": {
"bytes": 224151,
"imports": []
},
"src/hand/box.js": { "src/hand/box.js": {
"bytes": 3226, "bytes": 3226,
"imports": [ "imports": [
@ -254,8 +271,12 @@
} }
] ]
}, },
"src/hand/util.js": {
"bytes": 3030,
"imports": []
},
"src/hand/handpipeline.js": { "src/hand/handpipeline.js": {
"bytes": 7615, "bytes": 7607,
"imports": [ "imports": [
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
@ -268,9 +289,16 @@
} }
] ]
}, },
"src/hand/anchors.js": {
"bytes": 224151,
"imports": []
},
"src/hand/handpose.js": { "src/hand/handpose.js": {
"bytes": 3187, "bytes": 3122,
"imports": [ "imports": [
{
"path": "src/log.js"
},
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
}, },
@ -285,13 +313,42 @@
} }
] ]
}, },
"src/hand/util.js": { "src/gesture/gesture.js": {
"bytes": 3030, "bytes": 3308,
"imports": []
},
"src/imagefx.js": {
"bytes": 19352,
"imports": []
},
"src/image.js": {
"bytes": 5841,
"imports": [
{
"path": "src/log.js"
},
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/imagefx.js"
}
]
},
"config.js": {
"bytes": 8654,
"imports": []
},
"package.json": {
"bytes": 2323,
"imports": [] "imports": []
}, },
"src/human.js": { "src/human.js": {
"bytes": 16046, "bytes": 15825,
"imports": [ "imports": [
{
"path": "src/log.js"
},
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
}, },
@ -332,32 +389,13 @@
"path": "package.json" "path": "package.json"
} }
] ]
},
"src/image.js": {
"bytes": 5862,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/imagefx.js"
}
]
},
"src/imagefx.js": {
"bytes": 19352,
"imports": []
},
"src/profile.js": {
"bytes": 1061,
"imports": []
} }
}, },
"outputs": { "outputs": {
"dist/human.esm.js.map": { "dist/human.esm.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 2583490 "bytes": 2582934
}, },
"dist/human.esm.js": { "dist/human.esm.js": {
"imports": [], "imports": [],
@ -366,7 +404,7 @@
], ],
"inputs": { "inputs": {
"src/face/blazeface.js": { "src/face/blazeface.js": {
"bytesInOutput": 5121 "bytesInOutput": 5113
}, },
"src/face/box.js": { "src/face/box.js": {
"bytesInOutput": 1578 "bytesInOutput": 1578
@ -381,22 +419,22 @@
"bytesInOutput": 9403 "bytesInOutput": 9403
}, },
"src/face/facemesh.js": { "src/face/facemesh.js": {
"bytesInOutput": 2124 "bytesInOutput": 2108
}, },
"src/profile.js": { "src/profile.js": {
"bytesInOutput": 854 "bytesInOutput": 846
}, },
"src/age/age.js": { "src/age/age.js": {
"bytesInOutput": 1138 "bytesInOutput": 1130
}, },
"src/gender/gender.js": { "src/gender/gender.js": {
"bytesInOutput": 1886 "bytesInOutput": 1878
}, },
"src/emotion/emotion.js": { "src/emotion/emotion.js": {
"bytesInOutput": 1764 "bytesInOutput": 1756
}, },
"src/embedding/embedding.js": { "src/embedding/embedding.js": {
"bytesInOutput": 1333 "bytesInOutput": 1325
}, },
"src/body/modelBase.js": { "src/body/modelBase.js": {
"bytesInOutput": 615 "bytesInOutput": 615
@ -426,7 +464,7 @@
"bytesInOutput": 1913 "bytesInOutput": 1913
}, },
"src/body/modelPoseNet.js": { "src/body/modelPoseNet.js": {
"bytesInOutput": 1584 "bytesInOutput": 1576
}, },
"src/body/posenet.js": { "src/body/posenet.js": {
"bytesInOutput": 832 "bytesInOutput": 832
@ -441,7 +479,7 @@
"bytesInOutput": 127032 "bytesInOutput": 127032
}, },
"src/hand/handpose.js": { "src/hand/handpose.js": {
"bytesInOutput": 1914 "bytesInOutput": 1898
}, },
"src/gesture/gesture.js": { "src/gesture/gesture.js": {
"bytesInOutput": 2463 "bytesInOutput": 2463
@ -450,13 +488,16 @@
"bytesInOutput": 13576 "bytesInOutput": 13576
}, },
"src/image.js": { "src/image.js": {
"bytesInOutput": 4048 "bytesInOutput": 4041
},
"src/log.js": {
"bytesInOutput": 266
}, },
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytesInOutput": 1520547 "bytesInOutput": 1520559
}, },
"src/human.js": { "src/human.js": {
"bytesInOutput": 10548 "bytesInOutput": 10416
}, },
"src/hand/box.js": { "src/hand/box.js": {
"bytesInOutput": 1868 "bytesInOutput": 1868
@ -465,13 +506,13 @@
"bytesInOutput": 1796 "bytesInOutput": 1796
}, },
"config.js": { "config.js": {
"bytesInOutput": 1364 "bytesInOutput": 1353
}, },
"package.json": { "package.json": {
"bytesInOutput": 21 "bytesInOutput": 21
} }
}, },
"bytes": 1774844 "bytes": 1774883
} }
} }
} }

14
dist/human.js vendored

File diff suppressed because one or more lines are too long

6
dist/human.js.map vendored

File diff suppressed because one or more lines are too long

405
dist/human.json vendored
View File

@ -1,20 +1,91 @@
{ {
"inputs": { "inputs": {
"config.js": { "src/log.js": {
"bytes": 8721, "bytes": 401,
"imports": [] "imports": []
}, },
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytes": 1522251, "bytes": 1522244,
"imports": [] "imports": []
}, },
"package.json": { "src/face/blazeface.js": {
"bytes": 2323, "bytes": 6993,
"imports": [
{
"path": "src/log.js"
},
{
"path": "dist/tfjs.esm.js"
}
]
},
"src/face/box.js": {
"bytes": 1935,
"imports": [
{
"path": "dist/tfjs.esm.js"
}
]
},
"src/face/util.js": {
"bytes": 3078,
"imports": [] "imports": []
}, },
"src/face/coords.js": {
"bytes": 37909,
"imports": []
},
"src/face/facepipeline.js": {
"bytes": 13876,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/face/box.js"
},
{
"path": "src/face/util.js"
},
{
"path": "src/face/coords.js"
}
]
},
"src/face/facemesh.js": {
"bytes": 2675,
"imports": [
{
"path": "src/log.js"
},
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/face/blazeface.js"
},
{
"path": "src/face/facepipeline.js"
},
{
"path": "src/face/coords.js"
}
]
},
"src/profile.js": {
"bytes": 1045,
"imports": [
{
"path": "src/log.js"
}
]
},
"src/age/age.js": { "src/age/age.js": {
"bytes": 1968, "bytes": 1993,
"imports": [ "imports": [
{
"path": "src/log.js"
},
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
}, },
@ -23,47 +94,48 @@
} }
] ]
}, },
"src/body/buildParts.js": { "src/gender/gender.js": {
"bytes": 2035, "bytes": 3391,
"imports": [ "imports": [
{ {
"path": "src/body/heapSort.js" "path": "src/log.js"
},
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
} }
] ]
}, },
"src/body/decodeMultiple.js": { "src/emotion/emotion.js": {
"bytes": 5605, "bytes": 2988,
"imports": [ "imports": [
{ {
"path": "src/body/buildParts.js" "path": "src/log.js"
}, },
{ {
"path": "src/body/decodePose.js" "path": "dist/tfjs.esm.js"
}, },
{ {
"path": "src/body/vectors.js" "path": "src/profile.js"
} }
] ]
}, },
"src/body/decodePose.js": { "src/embedding/embedding.js": {
"bytes": 4540, "bytes": 2048,
"imports": [ "imports": [
{ {
"path": "src/body/keypoints.js" "path": "src/log.js"
}, },
{ {
"path": "src/body/vectors.js" "path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
} }
] ]
}, },
"src/body/heapSort.js": {
"bytes": 1590,
"imports": []
},
"src/body/keypoints.js": {
"bytes": 2291,
"imports": []
},
"src/body/modelBase.js": { "src/body/modelBase.js": {
"bytes": 889, "bytes": 889,
"imports": [ "imports": [
@ -83,9 +155,69 @@
} }
] ]
}, },
"src/body/modelPoseNet.js": { "src/body/heapSort.js": {
"bytes": 1928, "bytes": 1590,
"imports": []
},
"src/body/buildParts.js": {
"bytes": 2035,
"imports": [ "imports": [
{
"path": "src/body/heapSort.js"
}
]
},
"src/body/keypoints.js": {
"bytes": 2291,
"imports": []
},
"src/body/vectors.js": {
"bytes": 1273,
"imports": [
{
"path": "src/body/keypoints.js"
}
]
},
"src/body/decodePose.js": {
"bytes": 4540,
"imports": [
{
"path": "src/body/keypoints.js"
},
{
"path": "src/body/vectors.js"
}
]
},
"src/body/decodeMultiple.js": {
"bytes": 5605,
"imports": [
{
"path": "src/body/buildParts.js"
},
{
"path": "src/body/decodePose.js"
},
{
"path": "src/body/vectors.js"
}
]
},
"src/body/util.js": {
"bytes": 2262,
"imports": [
{
"path": "src/body/keypoints.js"
}
]
},
"src/body/modelPoseNet.js": {
"bytes": 1912,
"imports": [
{
"path": "src/log.js"
},
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
}, },
@ -120,121 +252,6 @@
} }
] ]
}, },
"src/body/util.js": {
"bytes": 2262,
"imports": [
{
"path": "src/body/keypoints.js"
}
]
},
"src/body/vectors.js": {
"bytes": 1273,
"imports": [
{
"path": "src/body/keypoints.js"
}
]
},
"src/embedding/embedding.js": {
"bytes": 2066,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
}
]
},
"src/emotion/emotion.js": {
"bytes": 3006,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
}
]
},
"src/face/blazeface.js": {
"bytes": 7009,
"imports": [
{
"path": "dist/tfjs.esm.js"
}
]
},
"src/face/box.js": {
"bytes": 1935,
"imports": [
{
"path": "dist/tfjs.esm.js"
}
]
},
"src/face/coords.js": {
"bytes": 37909,
"imports": []
},
"src/face/facemesh.js": {
"bytes": 2740,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/face/blazeface.js"
},
{
"path": "src/face/facepipeline.js"
},
{
"path": "src/face/coords.js"
}
]
},
"src/face/facepipeline.js": {
"bytes": 13884,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/face/box.js"
},
{
"path": "src/face/util.js"
},
{
"path": "src/face/coords.js"
}
]
},
"src/face/util.js": {
"bytes": 3078,
"imports": []
},
"src/gender/gender.js": {
"bytes": 3409,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/profile.js"
}
]
},
"src/gesture/gesture.js": {
"bytes": 3308,
"imports": []
},
"src/hand/anchors.js": {
"bytes": 224151,
"imports": []
},
"src/hand/box.js": { "src/hand/box.js": {
"bytes": 3226, "bytes": 3226,
"imports": [ "imports": [
@ -254,8 +271,12 @@
} }
] ]
}, },
"src/hand/util.js": {
"bytes": 3030,
"imports": []
},
"src/hand/handpipeline.js": { "src/hand/handpipeline.js": {
"bytes": 7615, "bytes": 7607,
"imports": [ "imports": [
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
@ -268,9 +289,16 @@
} }
] ]
}, },
"src/hand/anchors.js": {
"bytes": 224151,
"imports": []
},
"src/hand/handpose.js": { "src/hand/handpose.js": {
"bytes": 3187, "bytes": 3122,
"imports": [ "imports": [
{
"path": "src/log.js"
},
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
}, },
@ -285,13 +313,42 @@
} }
] ]
}, },
"src/hand/util.js": { "src/gesture/gesture.js": {
"bytes": 3030, "bytes": 3308,
"imports": []
},
"src/imagefx.js": {
"bytes": 19352,
"imports": []
},
"src/image.js": {
"bytes": 5841,
"imports": [
{
"path": "src/log.js"
},
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/imagefx.js"
}
]
},
"config.js": {
"bytes": 8654,
"imports": []
},
"package.json": {
"bytes": 2323,
"imports": [] "imports": []
}, },
"src/human.js": { "src/human.js": {
"bytes": 16046, "bytes": 15825,
"imports": [ "imports": [
{
"path": "src/log.js"
},
{ {
"path": "dist/tfjs.esm.js" "path": "dist/tfjs.esm.js"
}, },
@ -332,39 +389,20 @@
"path": "package.json" "path": "package.json"
} }
] ]
},
"src/image.js": {
"bytes": 5862,
"imports": [
{
"path": "dist/tfjs.esm.js"
},
{
"path": "src/imagefx.js"
}
]
},
"src/imagefx.js": {
"bytes": 19352,
"imports": []
},
"src/profile.js": {
"bytes": 1061,
"imports": []
} }
}, },
"outputs": { "outputs": {
"dist/human.js.map": { "dist/human.js.map": {
"imports": [], "imports": [],
"inputs": {}, "inputs": {},
"bytes": 2599995 "bytes": 2599215
}, },
"dist/human.js": { "dist/human.js": {
"imports": [], "imports": [],
"exports": [], "exports": [],
"inputs": { "inputs": {
"src/face/blazeface.js": { "src/face/blazeface.js": {
"bytesInOutput": 5121 "bytesInOutput": 5113
}, },
"src/face/box.js": { "src/face/box.js": {
"bytesInOutput": 1578 "bytesInOutput": 1578
@ -379,22 +417,22 @@
"bytesInOutput": 9403 "bytesInOutput": 9403
}, },
"src/face/facemesh.js": { "src/face/facemesh.js": {
"bytesInOutput": 2124 "bytesInOutput": 2108
}, },
"src/profile.js": { "src/profile.js": {
"bytesInOutput": 854 "bytesInOutput": 846
}, },
"src/age/age.js": { "src/age/age.js": {
"bytesInOutput": 1138 "bytesInOutput": 1130
}, },
"src/gender/gender.js": { "src/gender/gender.js": {
"bytesInOutput": 1886 "bytesInOutput": 1878
}, },
"src/emotion/emotion.js": { "src/emotion/emotion.js": {
"bytesInOutput": 1764 "bytesInOutput": 1756
}, },
"src/embedding/embedding.js": { "src/embedding/embedding.js": {
"bytesInOutput": 1333 "bytesInOutput": 1325
}, },
"src/body/modelBase.js": { "src/body/modelBase.js": {
"bytesInOutput": 615 "bytesInOutput": 615
@ -424,7 +462,7 @@
"bytesInOutput": 1913 "bytesInOutput": 1913
}, },
"src/body/modelPoseNet.js": { "src/body/modelPoseNet.js": {
"bytesInOutput": 1584 "bytesInOutput": 1576
}, },
"src/body/posenet.js": { "src/body/posenet.js": {
"bytesInOutput": 832 "bytesInOutput": 832
@ -439,7 +477,7 @@
"bytesInOutput": 127032 "bytesInOutput": 127032
}, },
"src/hand/handpose.js": { "src/hand/handpose.js": {
"bytesInOutput": 1914 "bytesInOutput": 1898
}, },
"src/gesture/gesture.js": { "src/gesture/gesture.js": {
"bytesInOutput": 2463 "bytesInOutput": 2463
@ -448,13 +486,16 @@
"bytesInOutput": 13576 "bytesInOutput": 13576
}, },
"src/image.js": { "src/image.js": {
"bytesInOutput": 4048 "bytesInOutput": 4040
}, },
"src/human.js": { "src/human.js": {
"bytesInOutput": 10609 "bytesInOutput": 10477
},
"src/log.js": {
"bytesInOutput": 266
}, },
"dist/tfjs.esm.js": { "dist/tfjs.esm.js": {
"bytesInOutput": 1520551 "bytesInOutput": 1520559
}, },
"src/hand/box.js": { "src/hand/box.js": {
"bytesInOutput": 1868 "bytesInOutput": 1868
@ -463,13 +504,13 @@
"bytesInOutput": 1796 "bytesInOutput": 1796
}, },
"config.js": { "config.js": {
"bytesInOutput": 1364 "bytesInOutput": 1353
}, },
"package.json": { "package.json": {
"bytesInOutput": 21 "bytesInOutput": 21
} }
}, },
"bytes": 1774922 "bytes": 1774957
} }
} }
} }

2
dist/tfjs.esm.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

25198
dist/tfjs.esm.json vendored

File diff suppressed because it is too large Load Diff

216
package-lock.json generated
View File

@ -83,9 +83,9 @@
} }
}, },
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "0.2.1", "version": "0.2.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz",
"integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
@ -650,9 +650,9 @@
"dev": true "dev": true
}, },
"core-js": { "core-js": {
"version": "3.7.0", "version": "3.8.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.7.0.tgz", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.1.tgz",
"integrity": "sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA==", "integrity": "sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg==",
"dev": true "dev": true
}, },
"core-util-is": { "core-util-is": {
@ -673,9 +673,9 @@
} }
}, },
"dayjs": { "dayjs": {
"version": "1.9.6", "version": "1.9.7",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.6.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.7.tgz",
"integrity": "sha512-HngNLtPEBWRo8EFVmHFmSXAjtCX8rGNqeXQI0Gh7wCTSqwaKgPIDqu9m07wABVopNwzvOeCb+2711vQhDlcIXw==", "integrity": "sha512-IC877KBdMhBrCfBfJXHQlo0G8keZ0Opy7YIIq5QKtUbCuHMzim8S4PyiVK4YmihI3iOF9lhfUBW4AQWHTR5WHA==",
"dev": true "dev": true
}, },
"debug": { "debug": {
@ -806,9 +806,9 @@
} }
}, },
"esbuild": { "esbuild": {
"version": "0.8.15", "version": "0.8.21",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.15.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.21.tgz",
"integrity": "sha512-mSaLo9t/oYtQE6FRUEdO47Pr8PisSPzHtgr+LcihIcjBEhbYwjT6WLCQ7noDoTBfIatBCw229rtmIwl9u9UQwg==", "integrity": "sha512-vRRx5MZmiekw2R7jK5BppvBUFCJA0Zkl0wYxrDmyUvMPBcQC/xJvxJUM4R+Hgjgb3gp5P1W655AsuoqDeQQDVw==",
"dev": true "dev": true
}, },
"escalade": { "escalade": {
@ -824,13 +824,13 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "7.14.0", "version": "7.15.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.15.0.tgz",
"integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==", "integrity": "sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.0.0", "@babel/code-frame": "^7.0.0",
"@eslint/eslintrc": "^0.2.1", "@eslint/eslintrc": "^0.2.2",
"ajv": "^6.10.0", "ajv": "^6.10.0",
"chalk": "^4.0.0", "chalk": "^4.0.0",
"cross-spawn": "^7.0.2", "cross-spawn": "^7.0.2",
@ -840,10 +840,10 @@
"eslint-scope": "^5.1.1", "eslint-scope": "^5.1.1",
"eslint-utils": "^2.1.0", "eslint-utils": "^2.1.0",
"eslint-visitor-keys": "^2.0.0", "eslint-visitor-keys": "^2.0.0",
"espree": "^7.3.0", "espree": "^7.3.1",
"esquery": "^1.2.0", "esquery": "^1.2.0",
"esutils": "^2.0.2", "esutils": "^2.0.2",
"file-entry-cache": "^5.0.1", "file-entry-cache": "^6.0.0",
"functional-red-black-tree": "^1.0.1", "functional-red-black-tree": "^1.0.1",
"glob-parent": "^5.0.0", "glob-parent": "^5.0.0",
"globals": "^12.1.0", "globals": "^12.1.0",
@ -878,10 +878,13 @@
} }
}, },
"semver": { "semver": {
"version": "7.3.2", "version": "7.3.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"dev": true "dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
}, },
"strip-json-comments": { "strip-json-comments": {
"version": "3.1.1", "version": "3.1.1",
@ -1092,13 +1095,13 @@
"dev": true "dev": true
}, },
"espree": { "espree": {
"version": "7.3.0", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true, "dev": true,
"requires": { "requires": {
"acorn": "^7.4.0", "acorn": "^7.4.0",
"acorn-jsx": "^5.2.0", "acorn-jsx": "^5.3.1",
"eslint-visitor-keys": "^1.3.0" "eslint-visitor-keys": "^1.3.0"
}, },
"dependencies": { "dependencies": {
@ -1181,12 +1184,12 @@
"dev": true "dev": true
}, },
"file-entry-cache": { "file-entry-cache": {
"version": "5.0.1", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
"integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==",
"dev": true, "dev": true,
"requires": { "requires": {
"flat-cache": "^2.0.1" "flat-cache": "^3.0.4"
} }
}, },
"fill-range": { "fill-range": {
@ -1208,31 +1211,19 @@
} }
}, },
"flat-cache": { "flat-cache": {
"version": "2.0.1", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
"integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
"dev": true, "dev": true,
"requires": { "requires": {
"flatted": "^2.0.0", "flatted": "^3.1.0",
"rimraf": "2.6.3", "rimraf": "^3.0.2"
"write": "1.0.3"
},
"dependencies": {
"rimraf": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
}
} }
}, },
"flatted": { "flatted": {
"version": "2.0.2", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz",
"integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==",
"dev": true "dev": true
}, },
"form-data": { "form-data": {
@ -1521,9 +1512,9 @@
"dev": true "dev": true
}, },
"is-core-module": { "is-core-module": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
"integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"has": "^1.0.3" "has": "^1.0.3"
@ -1611,9 +1602,9 @@
"dev": true "dev": true
}, },
"js-yaml": { "js-yaml": {
"version": "3.14.0", "version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true, "dev": true,
"requires": { "requires": {
"argparse": "^1.0.7", "argparse": "^1.0.7",
@ -1642,9 +1633,9 @@
} }
}, },
"jsonc-parser": { "jsonc-parser": {
"version": "2.3.1", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
"integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
"dev": true "dev": true
}, },
"levn": { "levn": {
@ -1685,6 +1676,23 @@
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
"dev": true "dev": true
}, },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
},
"dependencies": {
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
}
},
"mime-db": { "mime-db": {
"version": "1.44.0", "version": "1.44.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
@ -1904,68 +1912,27 @@
} }
}, },
"object.entries": { "object.entries": {
"version": "1.1.2", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz",
"integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==",
"dev": true, "dev": true,
"requires": { "requires": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.5", "es-abstract": "^1.18.0-next.1",
"has": "^1.0.3" "has": "^1.0.3"
},
"dependencies": {
"es-abstract": {
"version": "1.17.7",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
"integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
"dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1",
"is-callable": "^1.2.2",
"is-regex": "^1.1.1",
"object-inspect": "^1.8.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.1",
"string.prototype.trimend": "^1.0.1",
"string.prototype.trimstart": "^1.0.1"
}
}
} }
}, },
"object.values": { "object.values": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
"integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
"dev": true, "dev": true,
"requires": { "requires": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1", "es-abstract": "^1.18.0-next.1",
"function-bind": "^1.1.1",
"has": "^1.0.3" "has": "^1.0.3"
},
"dependencies": {
"es-abstract": {
"version": "1.17.7",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
"integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
"dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1",
"is-callable": "^1.2.2",
"is-regex": "^1.1.1",
"object-inspect": "^1.8.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.1",
"string.prototype.trimend": "^1.0.1",
"string.prototype.trimstart": "^1.0.1"
}
}
} }
}, },
"once": { "once": {
@ -2291,9 +2258,9 @@
"dev": true "dev": true
}, },
"simple-git": { "simple-git": {
"version": "2.23.0", "version": "2.25.0",
"resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.23.0.tgz", "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.25.0.tgz",
"integrity": "sha512-s/gEkxFV2WGTN4kO1uQoA4cE4rq0FRzQPR5Yhgg8JUuA4IhOeccjlKSFhwF3rrpo7797ZvQc7L6hJJNA4szHCw==", "integrity": "sha512-RMBFWKiPDl3rAoFbEaCVsjQ0v6sgR0q7cyUF9e/4lR81Mf2/5xwop0aCQatUDXKMIXnkuOG6aTEadQmGtOw4mg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@kwsites/file-exists": "^1.1.1", "@kwsites/file-exists": "^1.1.1",
@ -2604,12 +2571,12 @@
} }
}, },
"vscode-json-languageservice": { "vscode-json-languageservice": {
"version": "3.10.0", "version": "3.11.0",
"resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.10.0.tgz", "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.11.0.tgz",
"integrity": "sha512-8IvuRSQnjznu+obqy6Dy4S4H68Ke7a3Kb+A0FcdctyAMAWEnrORpCpMOMqEYiPLm/OTYLVWJ7ql3qToDTozu4w==", "integrity": "sha512-QxI+qV97uD7HHOCjh3MrM1TfbdwmTXrMckri5Tus1/FQiG3baDZb2C9Y0y8QThs7PwHYBIQXcAc59ZveCRZKPA==",
"dev": true, "dev": true,
"requires": { "requires": {
"jsonc-parser": "^2.3.1", "jsonc-parser": "^3.0.0",
"vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-textdocument": "^1.0.1",
"vscode-languageserver-types": "3.16.0-next.2", "vscode-languageserver-types": "3.16.0-next.2",
"vscode-nls": "^5.0.0", "vscode-nls": "^5.0.0",
@ -2714,15 +2681,6 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true "dev": true
}, },
"write": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
"integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
"dev": true,
"requires": {
"mkdirp": "^0.5.1"
}
},
"y18n": { "y18n": {
"version": "5.0.5", "version": "5.0.5",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
@ -2736,9 +2694,9 @@
"dev": true "dev": true
}, },
"yargs": { "yargs": {
"version": "16.1.1", "version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true, "dev": true,
"requires": { "requires": {
"cliui": "^7.0.2", "cliui": "^7.0.2",

View File

@ -34,9 +34,9 @@
"@tensorflow/tfjs-node-gpu": "^2.7.0", "@tensorflow/tfjs-node-gpu": "^2.7.0",
"@vladmandic/pilogger": "^0.2.9", "@vladmandic/pilogger": "^0.2.9",
"chokidar": "^3.4.3", "chokidar": "^3.4.3",
"dayjs": "^1.9.6", "dayjs": "^1.9.7",
"esbuild": "^0.8.15", "esbuild": "^0.8.21",
"eslint": "^7.14.0", "eslint": "^7.15.0",
"eslint-config-airbnb-base": "^14.2.1", "eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.22.1", "eslint-plugin-import": "^2.22.1",
"eslint-plugin-json": "^2.1.2", "eslint-plugin-json": "^2.1.2",
@ -44,7 +44,7 @@
"eslint-plugin-promise": "^4.2.1", "eslint-plugin-promise": "^4.2.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"seedrandom": "^3.0.5", "seedrandom": "^3.0.5",
"simple-git": "^2.23.0" "simple-git": "^2.25.0"
}, },
"scripts": { "scripts": {
"start": "node --trace-warnings --unhandled-rejections=strict --trace-uncaught --no-deprecation src/node.js", "start": "node --trace-warnings --unhandled-rejections=strict --trace-uncaught --no-deprecation src/node.js",

View File

@ -12,8 +12,8 @@ async function analyzeGraph(modelPath) {
if (stat.isFile()) model = await tf.loadGraphModel(`file://${modelPath}`); if (stat.isFile()) model = await tf.loadGraphModel(`file://${modelPath}`);
else model = await tf.loadGraphModel(`file://${path.join(modelPath, 'model.json')}`); else model = await tf.loadGraphModel(`file://${path.join(modelPath, 'model.json')}`);
log.info('graph model:', modelPath, tf.memory()); log.info('graph model:', modelPath, tf.memory());
// console.log(model.executor.graph.signature.inputs); // log(model.executor.graph.signature.inputs);
// console.log(model.executor.graph.inputs); // log(model.executor.graph.inputs);
if (model.executor.graph.signature.inputs) { if (model.executor.graph.signature.inputs) {
const inputs = Object.values(model.executor.graph.signature.inputs)[0]; const inputs = Object.values(model.executor.graph.signature.inputs)[0];
log.data('inputs:', { name: inputs.name, dtype: inputs.dtype, shape: inputs.tensorShape.dim }); log.data('inputs:', { name: inputs.name, dtype: inputs.dtype, shape: inputs.tensorShape.dim });

View File

@ -1,3 +1,4 @@
import { log } from '../log.js';
import * as tf from '../../dist/tfjs.esm.js'; import * as tf from '../../dist/tfjs.esm.js';
import * as profile from '../profile.js'; import * as profile from '../profile.js';
@ -9,7 +10,7 @@ async function load(config) {
if (!models.age) { if (!models.age) {
models.age = await tf.loadGraphModel(config.face.age.modelPath); models.age = await tf.loadGraphModel(config.face.age.modelPath);
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log(`Human: load model: ${config.face.age.modelPath.match(/\/(.*)\./)[1]}`); log(`Human: load model: ${config.face.age.modelPath.match(/\/(.*)\./)[1]}`);
} }
return models.age; return models.age;
} }

View File

@ -1,3 +1,4 @@
import { log } from '../log.js';
import * as tf from '../../dist/tfjs.esm.js'; import * as tf from '../../dist/tfjs.esm.js';
import * as modelMobileNet from './modelMobileNet'; import * as modelMobileNet from './modelMobileNet';
import * as decodeMultiple from './decodeMultiple'; import * as decodeMultiple from './decodeMultiple';
@ -40,8 +41,7 @@ exports.PoseNet = PoseNet;
async function load(config) { async function load(config) {
const graphModel = await tf.loadGraphModel(config.body.modelPath); const graphModel = await tf.loadGraphModel(config.body.modelPath);
const mobilenet = new modelMobileNet.MobileNet(graphModel, this.outputStride); const mobilenet = new modelMobileNet.MobileNet(graphModel, this.outputStride);
// eslint-disable-next-line no-console log(`Human: load model: ${config.body.modelPath.match(/\/(.*)\./)[1]}`);
console.log(`Human: load model: ${config.body.modelPath.match(/\/(.*)\./)[1]}`);
return new PoseNet(mobilenet); return new PoseNet(mobilenet);
} }
exports.load = load; exports.load = load;

View File

@ -1,3 +1,4 @@
import { log } from '../log.js';
import * as tf from '../../dist/tfjs.esm.js'; import * as tf from '../../dist/tfjs.esm.js';
import * as profile from '../profile.js'; import * as profile from '../profile.js';
@ -9,8 +10,7 @@ const models = {};
async function load(config) { async function load(config) {
if (!models.embedding) { if (!models.embedding) {
models.embedding = await tf.loadGraphModel(config.face.embedding.modelPath); models.embedding = await tf.loadGraphModel(config.face.embedding.modelPath);
// eslint-disable-next-line no-console log(`Human: load model: ${config.face.embedding.modelPath.match(/\/(.*)\./)[1]}`);
console.log(`Human: load model: ${config.face.embedding.modelPath.match(/\/(.*)\./)[1]}`);
} }
return models.embedding; return models.embedding;
} }

View File

@ -1,3 +1,4 @@
import { log } from '../log.js';
import * as tf from '../../dist/tfjs.esm.js'; import * as tf from '../../dist/tfjs.esm.js';
import * as profile from '../profile.js'; import * as profile from '../profile.js';
@ -13,8 +14,7 @@ const scale = 1; // score multiplication factor
async function load(config) { async function load(config) {
if (!models.emotion) { if (!models.emotion) {
models.emotion = await tf.loadGraphModel(config.face.emotion.modelPath); models.emotion = await tf.loadGraphModel(config.face.emotion.modelPath);
// eslint-disable-next-line no-console log(`Human: load model: ${config.face.emotion.modelPath.match(/\/(.*)\./)[1]}`);
console.log(`Human: load model: ${config.face.emotion.modelPath.match(/\/(.*)\./)[1]}`);
} }
return models.emotion; return models.emotion;
} }

View File

@ -1,3 +1,4 @@
import { log } from '../log.js';
import * as tf from '../../dist/tfjs.esm.js'; import * as tf from '../../dist/tfjs.esm.js';
const NUM_LANDMARKS = 6; const NUM_LANDMARKS = 6;
@ -166,8 +167,7 @@ class BlazeFaceModel {
async function load(config) { async function load(config) {
const blazeface = await tf.loadGraphModel(config.face.detector.modelPath, { fromTFHub: config.face.detector.modelPath.includes('tfhub.dev') }); const blazeface = await tf.loadGraphModel(config.face.detector.modelPath, { fromTFHub: config.face.detector.modelPath.includes('tfhub.dev') });
const model = new BlazeFaceModel(blazeface, config); const model = new BlazeFaceModel(blazeface, config);
// eslint-disable-next-line no-console log(`Human: load model: ${config.face.detector.modelPath.match(/\/(.*)\./)[1]}`);
console.log(`Human: load model: ${config.face.detector.modelPath.match(/\/(.*)\./)[1]}`);
return model; return model;
} }

View File

@ -1,3 +1,4 @@
import { log } from '../log.js';
import * as tf from '../../dist/tfjs.esm.js'; import * as tf from '../../dist/tfjs.esm.js';
import * as blazeface from './blazeface.js'; import * as blazeface from './blazeface.js';
import * as pipe from './facepipeline.js'; import * as pipe from './facepipeline.js';
@ -46,10 +47,8 @@ async function load(config) {
(!faceModels[2] && config.face.iris.enabled) ? tf.loadGraphModel(config.face.iris.modelPath, { fromTFHub: config.face.iris.modelPath.includes('tfhub.dev') }) : null, (!faceModels[2] && config.face.iris.enabled) ? tf.loadGraphModel(config.face.iris.modelPath, { fromTFHub: config.face.iris.modelPath.includes('tfhub.dev') }) : null,
]); ]);
const faceMesh = new MediaPipeFaceMesh(faceModels[0], faceModels[1], faceModels[2], config); const faceMesh = new MediaPipeFaceMesh(faceModels[0], faceModels[1], faceModels[2], config);
// eslint-disable-next-line no-console if (config.face.mesh.enabled) log(`Human: load model: ${config.face.mesh.modelPath.match(/\/(.*)\./)[1]}`);
if (config.face.mesh.enabled) console.log(`Human: load model: ${config.face.mesh.modelPath.match(/\/(.*)\./)[1]}`); if (config.face.iris.enabled) log(`Human: load model: ${config.face.iris.modelPath.match(/\/(.*)\./)[1]}`);
// eslint-disable-next-line no-console
if (config.face.iris.enabled) console.log(`Human: load model: ${config.face.iris.modelPath.match(/\/(.*)\./)[1]}`);
return faceMesh; return faceMesh;
} }

View File

@ -173,7 +173,7 @@ class Pipeline {
}); });
} }
// console.log(this.skipped, config.face.detector.skipFrames, this.detectedFaces, config.face.detector.maxFaces, detector?.boxes.length, this.storedBoxes.length); // log(this.skipped, config.face.detector.skipFrames, this.detectedFaces, config.face.detector.maxFaces, detector?.boxes.length, this.storedBoxes.length);
let results = tf.tidy(() => this.storedBoxes.map((box, i) => { let results = tf.tidy(() => this.storedBoxes.map((box, i) => {
let angle = 0; let angle = 0;

View File

@ -1,3 +1,4 @@
import { log } from '../log.js';
import * as tf from '../../dist/tfjs.esm.js'; import * as tf from '../../dist/tfjs.esm.js';
import * as profile from '../profile.js'; import * as profile from '../profile.js';
@ -13,8 +14,7 @@ async function load(config) {
if (!models.gender) { if (!models.gender) {
models.gender = await tf.loadGraphModel(config.face.gender.modelPath); models.gender = await tf.loadGraphModel(config.face.gender.modelPath);
alternative = models.gender.inputs[0].shape[3] === 1; alternative = models.gender.inputs[0].shape[3] === 1;
// eslint-disable-next-line no-console log(`Human: load model: ${config.face.gender.modelPath.match(/\/(.*)\./)[1]}`);
console.log(`Human: load model: ${config.face.gender.modelPath.match(/\/(.*)\./)[1]}`);
} }
return models.gender; return models.gender;
} }

View File

@ -103,7 +103,7 @@ class HandPipeline {
if (this.storedBoxes.length > 0) useFreshBox = true; if (this.storedBoxes.length > 0) useFreshBox = true;
} }
const hands = []; const hands = [];
// console.log(`skipped: ${this.skipped} max: ${config.hand.maxHands} detected: ${this.detectedHands} stored: ${this.storedBoxes.length} new: ${boxes?.length}`); // log(`skipped: ${this.skipped} max: ${config.hand.maxHands} detected: ${this.detectedHands} stored: ${this.storedBoxes.length} new: ${boxes?.length}`);
// go through working set of boxes // go through working set of boxes
for (let i = 0; i < this.storedBoxes.length; i++) { for (let i = 0; i < this.storedBoxes.length; i++) {

View File

@ -16,6 +16,7 @@
*/ */
// https://storage.googleapis.com/tfjs-models/demos/handpose/index.html // https://storage.googleapis.com/tfjs-models/demos/handpose/index.html
import { log } from '../log.js';
import * as tf from '../../dist/tfjs.esm.js'; import * as tf from '../../dist/tfjs.esm.js';
import * as handdetector from './handdetector'; import * as handdetector from './handdetector';
import * as pipeline from './handpipeline'; import * as pipeline from './handpipeline';
@ -75,10 +76,8 @@ async function load(config) {
const detector = new handdetector.HandDetector(handDetectorModel, config.hand.inputSize, anchors.anchors); const detector = new handdetector.HandDetector(handDetectorModel, config.hand.inputSize, anchors.anchors);
const pipe = new pipeline.HandPipeline(detector, handPoseModel, config.hand.inputSize); const pipe = new pipeline.HandPipeline(detector, handPoseModel, config.hand.inputSize);
const handpose = new HandPose(pipe); const handpose = new HandPose(pipe);
// eslint-disable-next-line no-console if (config.hand.enabled) log(`Human: load model: ${config.hand.detector.modelPath.match(/\/(.*)\./)[1]}`);
if (config.hand.enabled) console.log(`Human: load model: ${config.hand.detector.modelPath.match(/\/(.*)\./)[1]}`); if (config.hand.landmarks) log(`Human: load model: ${config.hand.skeleton.modelPath.match(/\/(.*)\./)[1]}`);
// eslint-disable-next-line no-console
if (config.hand.landmarks) console.log(`Human: load model: ${config.hand.skeleton.modelPath.match(/\/(.*)\./)[1]}`);
return handpose; return handpose;
} }
exports.load = load; exports.load = load;

View File

@ -1,3 +1,4 @@
import { log } from './log.js';
import * as tf from '../dist/tfjs.esm.js'; import * as tf from '../dist/tfjs.esm.js';
import * as facemesh from './face/facemesh.js'; import * as facemesh from './face/facemesh.js';
import * as age from './age/age.js'; import * as age from './age/age.js';
@ -68,12 +69,6 @@ class Human {
this.hand = handpose; this.hand = handpose;
} }
// helper function: wrapper around console output
log(...msg) {
// eslint-disable-next-line no-console
if (msg && this.config.console) console.log('Human:', ...msg);
}
profile() { profile() {
if (this.config.profile) return profile.data; if (this.config.profile) return profile.data;
return {}; return {};
@ -86,7 +81,7 @@ class Human {
const previous = this.numTensors; const previous = this.numTensors;
this.numTensors = current; this.numTensors = current;
const leaked = current - previous; const leaked = current - previous;
if (leaked !== 0) this.log(...msg, leaked); if (leaked !== 0) log(...msg, leaked);
} }
// quick sanity check on inputs // quick sanity check on inputs
@ -116,11 +111,11 @@ class Human {
if (userConfig) this.config = mergeDeep(this.config, userConfig); if (userConfig) this.config = mergeDeep(this.config, userConfig);
if (this.firstRun) { if (this.firstRun) {
this.log(`version: ${this.version} TensorFlow/JS version: ${tf.version_core}`); log(`version: ${this.version} TensorFlow/JS version: ${tf.version_core}`);
await this.checkBackend(true); await this.checkBackend(true);
if (tf.ENV.flags.IS_BROWSER) { if (tf.ENV.flags.IS_BROWSER) {
this.log('configuration:', this.config); log('configuration:', this.config);
this.log('tf flags:', tf.ENV.flags); log('tf flags:', tf.ENV.flags);
} }
this.firstRun = false; this.firstRun = false;
} }
@ -166,17 +161,17 @@ class Human {
tf.removeBackend(this.config.backend); tf.removeBackend(this.config.backend);
tf.registerBackend(this.config.backend, backendFactory); tf.registerBackend(this.config.backend, backendFactory);
} else { } else {
this.log('Backend not registred:', this.config.backend); log('Backend not registred:', this.config.backend);
} }
*/ */
this.log('setting backend:', this.config.backend); log('setting backend:', this.config.backend);
if (this.config.backend === 'wasm') { if (this.config.backend === 'wasm') {
this.log('settings wasm path:', this.config.wasmPath); log('settings wasm path:', this.config.wasmPath);
tf.setWasmPaths(this.config.wasmPath); tf.setWasmPaths(this.config.wasmPath);
const simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT'); const simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT');
if (!simd) this.log('warning: wasm simd support is not enabled'); if (!simd) log('warning: wasm simd support is not enabled');
} }
await tf.setBackend(this.config.backend); await tf.setBackend(this.config.backend);
@ -186,13 +181,13 @@ class Human {
*/ */
if (tf.getBackend() === 'webgl') { if (tf.getBackend() === 'webgl') {
if (this.config.deallocate) { if (this.config.deallocate) {
this.log('changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:', this.config.deallocate); log('changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:', this.config.deallocate);
tf.ENV.set('WEBGL_DELETE_TEXTURE_THRESHOLD', this.config.deallocate ? 0 : -1); tf.ENV.set('WEBGL_DELETE_TEXTURE_THRESHOLD', this.config.deallocate ? 0 : -1);
} }
tf.ENV.set('WEBGL_FORCE_F16_TEXTURES', true); tf.ENV.set('WEBGL_FORCE_F16_TEXTURES', true);
tf.ENV.set('WEBGL_PACK_DEPTHWISECONV', true); tf.ENV.set('WEBGL_PACK_DEPTHWISECONV', true);
const gl = await tf.backend().getGPGPUContext().gl; const gl = await tf.backend().getGPGPUContext().gl;
this.log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`); log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
} }
await tf.ready(); await tf.ready();
this.perf.backend = Math.trunc(now() - timeStamp); this.perf.backend = Math.trunc(now() - timeStamp);
@ -217,7 +212,7 @@ class Human {
// is something went wrong, skip the face // is something went wrong, skip the face
if (!face.image || face.image.isDisposedInternal) { if (!face.image || face.image.isDisposedInternal) {
this.log('Face object is disposed:', face.image); log('Face object is disposed:', face.image);
continue; continue;
} }
@ -330,7 +325,7 @@ class Human {
this.state = 'check'; this.state = 'check';
const error = this.sanity(input); const error = this.sanity(input);
if (error) { if (error) {
this.log(error, input); log(error, input);
resolve({ error }); resolve({ error });
} }
@ -352,7 +347,7 @@ class Human {
timeStamp = now(); timeStamp = now();
const process = image.process(input, this.config); const process = image.process(input, this.config);
if (!process || !process.tensor) { if (!process || !process.tensor) {
this.log('could not convert input to tensor'); log('could not convert input to tensor');
resolve({ error: 'could not convert input to tensor' }); resolve({ error: 'could not convert input to tensor' });
return; return;
} }
@ -423,7 +418,7 @@ class Human {
if (!sample) sample = new ImageData(255, 255); if (!sample) sample = new ImageData(255, 255);
// const sample = tf.zeros([1, 255, 255, 3]); // const sample = tf.zeros([1, 255, 255, 3]);
const warmup = await this.detect(sample, userConfig); const warmup = await this.detect(sample, userConfig);
this.log('warmed up'); log('warmed up');
return warmup; return warmup;
} }
} }

View File

@ -1,3 +1,4 @@
import { log } from './log.js';
import * as tf from '../dist/tfjs.esm.js'; import * as tf from '../dist/tfjs.esm.js';
import * as fxImage from './imagefx.js'; import * as fxImage from './imagefx.js';
@ -22,8 +23,7 @@ function process(input, config) {
if (config.filter.height > 0) targetHeight = config.filter.height; if (config.filter.height > 0) targetHeight = config.filter.height;
else if (config.filter.width > 0) targetHeight = originalHeight * (config.filter.width / originalWidth); else if (config.filter.width > 0) targetHeight = originalHeight * (config.filter.width / originalWidth);
if (!targetWidth || !targetHeight) { if (!targetWidth || !targetHeight) {
// eslint-disable-next-line no-console log('Human: invalid input', input);
console.log('Human: invalid input', input);
return null; return null;
} }
if (!inCanvas || (inCanvas.width !== targetWidth) || (inCanvas.height !== targetHeight)) { if (!inCanvas || (inCanvas.width !== targetWidth) || (inCanvas.height !== targetHeight)) {

7
src/log.js Normal file
View File

@ -0,0 +1,7 @@
// helper function: wrapper around console output
export function log(...msg) {
const dt = new Date();
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')}`;
// eslint-disable-next-line no-console
if (msg) console.log(ts, 'Human:', ...msg);
}

View File

@ -1,3 +1,5 @@
import { log } from './log.js';
const profileData = {}; const profileData = {};
function profile(name, data) { function profile(name, data) {
@ -18,8 +20,7 @@ function profile(name, data) {
if (largest.length > maxResults) largest.length = maxResults; if (largest.length > maxResults) largest.length = maxResults;
const res = { newBytes: data.newBytes, newTensors: data.newTensors, peakBytes: data.peakBytes, numKernelOps: data.kernels.length, timeKernelOps: time, slowestKernelOps: slowest, largestKernelOps: largest }; const res = { newBytes: data.newBytes, newTensors: data.newTensors, peakBytes: data.peakBytes, numKernelOps: data.kernels.length, timeKernelOps: time, slowestKernelOps: slowest, largestKernelOps: largest };
profileData[name] = res; profileData[name] = res;
// eslint-disable-next-line no-console log('Human profiler', name, res);
console.log('Human profiler', name, res);
} }
exports.run = profile; exports.run = profile;