remove blazeface-front and faceboxes

pull/91/head
Vladimir Mandic 2021-03-09 18:32:35 -05:00
parent 797bf5de60
commit 30bc77a99d
37 changed files with 446995 additions and 43862 deletions

View File

@ -66,13 +66,11 @@ export default {
// detector, mesh, iris, age, gender, emotion
// (note: module is not loaded until it is required)
detector: {
modelPath: '../models/blazeface-back.json', // can be 'blazeface-front', 'blazeface-back' or 'faceboxes'
// 'blazeface-front' is blazeface model optimized for large faces such as front-facing camera
// 'blazeface-back' is blazeface model optimized for smaller and/or distanct faces
// 'faceboxes' is alternative model to 'blazeface'
inputSize: 256, // fixed value: 128 for front and 256 for 'back'
modelPath: '../models/blazeface-back.json',
inputSize: 256, // fixed value
rotation: true, // use best-guess rotated face image or just box with rotation as-is
// false means higher performance, but incorrect mesh mapping if face angle is above 20 degrees
// this parameter is not valid in nodejs
maxFaces: 10, // maximum number of faces detected in the input
// should be set to the minimum number for performance
skipFrames: 21, // how many frames to go without re-running the face bounding box detector
@ -136,7 +134,7 @@ export default {
body: {
enabled: true,
modelPath: '../models/posenet.json', // can be 'posenet', 'blazepose' or 'blazepose-upper'
modelPath: '../models/posenet.json', // can be 'posenet' or 'blazepose'
inputSize: 257, // fixed value, 257 for posenet and 256 for blazepose
maxDetections: 10, // maximum number of people detected in the input
// should be set to the minimum number for performance

View File

@ -4,7 +4,7 @@
const UICSS = `
#gl-bench { position: absolute; right: 1rem; bottom: 1rem; z-index:1000; -webkit-user-select: none; -moz-user-select: none; user-select: none; }
#gl-bench div { position: relative; display: block; margin: 4px; padding: 0 7px 0 10px; background: darkslategray; border-radius: 0.2rem; cursor: pointer; opacity: 0.9; }
#gl-bench div { position: relative; display: block; margin: 4px; padding: 0 2px 0 2px; background: darkslategray; border-radius: 0.1rem; cursor: pointer; opacity: 0.9; }
#gl-bench svg { height: 60px; margin: 0 0px 0px 4px; }
#gl-bench text { font-size: 16px; font-family: 'Lato', 'Segoe UI'; dominant-baseline: middle; text-anchor: middle; }
#gl-bench .gl-mem { font-size: 12px; fill: white; }
@ -17,10 +17,10 @@ const UICSS = `
const UISVG = `
<div class="gl-box">
<svg viewBox="0 0 55 60">
<svg viewBox="0 0 60 60">
<text x="27" y="56" class="gl-fps">00 FPS</text>
<text x="30" y="8" class="gl-mem"></text>
<rect x="0" y="14" rx="4" ry="4" width="65" height="32"></rect>
<rect x="0" y="14" rx="4" ry="4" width="60" height="32"></rect>
<polyline class="gl-chart"></polyline>
</svg>
<svg viewBox="0 0 14 60" class="gl-cpu-svg">
@ -163,7 +163,7 @@ class GLBench {
const len = chart.length;
for (let j = 0; j < len; j++) {
const id = (circularId + j + 1) % len;
if (chart[id] !== undefined) points = points + ' ' + (55 * j / (len - 1)).toFixed(1) + ',' + (45 - chart[id] * 22 / 60 / this.detected).toFixed(1);
if (chart[id] !== undefined) points = points + ' ' + (60 * j / (len - 1)).toFixed(1) + ',' + (45 - chart[id] * 0.5 / this.detected).toFixed(1);
}
nodes['gl-chart'][i].setAttribute('points', points);
logger(this.names[i], chart, circularId);

View File

@ -15,9 +15,8 @@ const myConfig = {
async: false,
face: {
enabled: true,
detector: { modelPath: 'file://models/faceboxes.json', enabled: true, minConfidence: 0.5 },
// detector: { modelPath: 'file://models/blazeface-back.json', enabled: false }, // cannot use blazeface in nodejs due to missing required kernel function in tfjs-node
mesh: { modelPath: 'file://models/facemesh.json', enabled: false }, // depends on blazeface detector
detector: { modelPath: 'file://models/blazeface-back.json', enabled: true },
mesh: { modelPath: 'file://models/facemesh.json', enabled: true },
iris: { modelPath: 'file://models/iris.json', enabled: true },
age: { modelPath: 'file://models/age-ssrnet-imdb.json', enabled: true },
gender: { modelPath: 'file://models/gender.json', enabled: true },
@ -58,13 +57,11 @@ async function detect(input) {
log.state('Processing:', image.shape);
// run actual detection
const result = await human.detect(image, myConfig);
// no need to print results as they are printed to console during detection from within the library due to human.config.debug set
// dispose image tensor as we no longer need it
image.dispose();
// print data to console
log.data('Face: ', result.face);
log.data('Body:', result.body);
log.data('Hand:', result.hand);
log.data('Gesture:', result.gesture);
return result;
}
async function test() {
@ -74,14 +71,12 @@ async function test() {
log.state('Processing embedded warmup image: face');
myConfig.warmup = 'face';
result = await human.warmup(myConfig);
log.data('Face: ', result.face);
log.state('Processing embedded warmup image: full');
myConfig.warmup = 'full';
result = await human.warmup(myConfig);
log.data('Body:', result.body);
log.data('Hand:', result.hand);
log.data('Gesture:', result.gesture);
// no need to print results as they are printed to console during detection from within the library due to human.config.debug set
return result;
}
async function main() {

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,61 +0,0 @@
{
"inputs": {
"dist/human.esm.js": {
"bytes": 1353275,
"imports": []
},
"demo/menu.js": {
"bytes": 13858,
"imports": []
},
"demo/gl-bench.js": {
"bytes": 10920,
"imports": []
},
"demo/browser.js": {
"bytes": 28044,
"imports": [
{
"path": "dist/human.esm.js",
"kind": "import-statement"
},
{
"path": "demo/menu.js",
"kind": "import-statement"
},
{
"path": "demo/gl-bench.js",
"kind": "import-statement"
}
]
}
},
"outputs": {
"dist/demo-browser-index.js.map": {
"imports": [],
"exports": [],
"inputs": {},
"bytes": 2061685
},
"dist/demo-browser-index.js": {
"imports": [],
"exports": [],
"entryPoint": "demo/browser.js",
"inputs": {
"dist/human.esm.js": {
"bytesInOutput": 1345779
},
"demo/menu.js": {
"bytesInOutput": 10696
},
"demo/gl-bench.js": {
"bytesInOutput": 6759
},
"demo/browser.js": {
"bytesInOutput": 17538
}
},
"bytes": 1388157
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

99066
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

695
dist/human.esm.json vendored
View File

@ -1,695 +0,0 @@
{
"inputs": {
"src/log.ts": {
"bytes": 401,
"imports": []
},
"src/sysinfo.ts": {
"bytes": 612,
"imports": []
},
"dist/tfjs.esm.js": {
"bytes": 1065682,
"imports": []
},
"src/tfjs/backend.ts": {
"bytes": 2237,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/blazeface.ts": {
"bytes": 5704,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/box.ts": {
"bytes": 1727,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/util.ts": {
"bytes": 2809,
"imports": []
},
"src/blazeface/coords.ts": {
"bytes": 37783,
"imports": []
},
"src/blazeface/facepipeline.ts": {
"bytes": 14105,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/box.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/util.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/blazeface/facemesh.ts": {
"bytes": 3061,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/blazeface.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/facepipeline.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/profile.ts": {
"bytes": 1017,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
}
]
},
"src/faceboxes/faceboxes.ts": {
"bytes": 2837,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/age/age.ts": {
"bytes": 1964,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/gender/gender.ts": {
"bytes": 2826,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/emotion/emotion.ts": {
"bytes": 3057,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/embedding/embedding.ts": {
"bytes": 2041,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/posenet/modelBase.ts": {
"bytes": 1349,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/posenet/heapSort.ts": {
"bytes": 1645,
"imports": []
},
"src/posenet/buildParts.ts": {
"bytes": 1723,
"imports": [
{
"path": "src/posenet/heapSort.ts",
"kind": "import-statement"
}
]
},
"src/posenet/keypoints.ts": {
"bytes": 2041,
"imports": []
},
"src/posenet/vectors.ts": {
"bytes": 1075,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decoders.ts": {
"bytes": 1958,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decodePose.ts": {
"bytes": 5182,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/vectors.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decoders.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decodeMultiple.ts": {
"bytes": 2323,
"imports": [
{
"path": "src/posenet/buildParts.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodePose.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/vectors.ts",
"kind": "import-statement"
}
]
},
"src/posenet/util.ts": {
"bytes": 2041,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/posenet.ts": {
"bytes": 2394,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/posenet/modelBase.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodeMultiple.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodePose.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/util.ts",
"kind": "import-statement"
}
]
},
"src/handpose/box.ts": {
"bytes": 2443,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/handpose/handdetector.ts": {
"bytes": 3697,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/box.ts",
"kind": "import-statement"
}
]
},
"src/handpose/util.ts": {
"bytes": 2286,
"imports": []
},
"src/handpose/handpipeline.ts": {
"bytes": 7120,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/box.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/util.ts",
"kind": "import-statement"
}
]
},
"src/handpose/anchors.ts": {
"bytes": 224156,
"imports": []
},
"src/handpose/handpose.ts": {
"bytes": 2597,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/handdetector.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/handpipeline.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/anchors.ts",
"kind": "import-statement"
}
]
},
"src/blazepose/annotations.ts": {
"bytes": 1108,
"imports": []
},
"src/blazepose/blazepose.ts": {
"bytes": 2939,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
},
{
"path": "src/blazepose/annotations.ts",
"kind": "import-statement"
}
]
},
"src/gesture/gesture.ts": {
"bytes": 4496,
"imports": []
},
"src/imagefx.js": {
"bytes": 19267,
"imports": []
},
"src/image.ts": {
"bytes": 5872,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/imagefx.js",
"kind": "import-statement"
}
]
},
"config.js": {
"bytes": 10308,
"imports": []
},
"src/sample.ts": {
"bytes": 55382,
"imports": []
},
"package.json": {
"bytes": 2604,
"imports": []
},
"src/draw.ts": {
"bytes": 16408,
"imports": [
{
"path": "config.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/human.ts": {
"bytes": 22807,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "src/sysinfo.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/tfjs/backend.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/facemesh.ts",
"kind": "import-statement"
},
{
"path": "src/faceboxes/faceboxes.ts",
"kind": "import-statement"
},
{
"path": "src/age/age.ts",
"kind": "import-statement"
},
{
"path": "src/gender/gender.ts",
"kind": "import-statement"
},
{
"path": "src/emotion/emotion.ts",
"kind": "import-statement"
},
{
"path": "src/embedding/embedding.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/posenet.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/handpose.ts",
"kind": "import-statement"
},
{
"path": "src/blazepose/blazepose.ts",
"kind": "import-statement"
},
{
"path": "src/gesture/gesture.ts",
"kind": "import-statement"
},
{
"path": "src/image.ts",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
},
{
"path": "config.js",
"kind": "import-statement"
},
{
"path": "src/sample.ts",
"kind": "import-statement"
},
{
"path": "package.json",
"kind": "import-statement"
},
{
"path": "src/draw.ts",
"kind": "import-statement"
}
]
}
},
"outputs": {
"dist/human.esm.js.map": {
"imports": [],
"exports": [],
"inputs": {},
"bytes": 1979841
},
"dist/human.esm.js": {
"imports": [],
"exports": [
"default"
],
"entryPoint": "src/human.ts",
"inputs": {
"src/blazeface/facemesh.ts": {
"bytesInOutput": 1519
},
"src/posenet/keypoints.ts": {
"bytesInOutput": 1690
},
"src/log.ts": {
"bytesInOutput": 252
},
"src/sysinfo.ts": {
"bytesInOutput": 394
},
"dist/tfjs.esm.js": {
"bytesInOutput": 1056717
},
"src/tfjs/backend.ts": {
"bytesInOutput": 1053
},
"src/blazeface/blazeface.ts": {
"bytesInOutput": 2192
},
"src/blazeface/box.ts": {
"bytesInOutput": 834
},
"src/blazeface/util.ts": {
"bytesInOutput": 858
},
"src/blazeface/coords.ts": {
"bytesInOutput": 28983
},
"src/blazeface/facepipeline.ts": {
"bytesInOutput": 5160
},
"src/human.ts": {
"bytesInOutput": 11955
},
"src/faceboxes/faceboxes.ts": {
"bytesInOutput": 1535
},
"src/profile.ts": {
"bytesInOutput": 606
},
"src/age/age.ts": {
"bytesInOutput": 784
},
"src/gender/gender.ts": {
"bytesInOutput": 1246
},
"src/emotion/emotion.ts": {
"bytesInOutput": 1189
},
"src/embedding/embedding.ts": {
"bytesInOutput": 804
},
"src/posenet/posenet.ts": {
"bytesInOutput": 1016
},
"src/posenet/modelBase.ts": {
"bytesInOutput": 662
},
"src/posenet/heapSort.ts": {
"bytesInOutput": 1017
},
"src/posenet/buildParts.ts": {
"bytesInOutput": 456
},
"src/posenet/decodePose.ts": {
"bytesInOutput": 1283
},
"src/posenet/vectors.ts": {
"bytesInOutput": 346
},
"src/posenet/decoders.ts": {
"bytesInOutput": 768
},
"src/posenet/decodeMultiple.ts": {
"bytesInOutput": 529
},
"src/posenet/util.ts": {
"bytesInOutput": 378
},
"src/handpose/handpose.ts": {
"bytesInOutput": 1281
},
"src/handpose/box.ts": {
"bytesInOutput": 938
},
"src/handpose/handdetector.ts": {
"bytesInOutput": 1668
},
"src/handpose/util.ts": {
"bytesInOutput": 816
},
"src/handpose/handpipeline.ts": {
"bytesInOutput": 2510
},
"src/handpose/anchors.ts": {
"bytesInOutput": 126985
},
"src/blazepose/blazepose.ts": {
"bytesInOutput": 1167
},
"src/blazepose/annotations.ts": {
"bytesInOutput": 860
},
"src/gesture/gesture.ts": {
"bytesInOutput": 2391
},
"src/imagefx.js": {
"bytesInOutput": 10975
},
"src/image.ts": {
"bytesInOutput": 2355
},
"config.js": {
"bytesInOutput": 1422
},
"src/sample.ts": {
"bytesInOutput": 55295
},
"package.json": {
"bytesInOutput": 2578
},
"src/draw.ts": {
"bytesInOutput": 9754
}
},
"bytes": 1353275
}
}
}

693
dist/human.iife.json vendored
View File

@ -1,693 +0,0 @@
{
"inputs": {
"src/log.ts": {
"bytes": 401,
"imports": []
},
"src/sysinfo.ts": {
"bytes": 612,
"imports": []
},
"dist/tfjs.esm.js": {
"bytes": 1065682,
"imports": []
},
"src/tfjs/backend.ts": {
"bytes": 2237,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/blazeface.ts": {
"bytes": 5704,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/box.ts": {
"bytes": 1727,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/util.ts": {
"bytes": 2809,
"imports": []
},
"src/blazeface/coords.ts": {
"bytes": 37783,
"imports": []
},
"src/blazeface/facepipeline.ts": {
"bytes": 14105,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/box.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/util.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/blazeface/facemesh.ts": {
"bytes": 3061,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/blazeface.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/facepipeline.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/profile.ts": {
"bytes": 1017,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
}
]
},
"src/faceboxes/faceboxes.ts": {
"bytes": 2837,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/age/age.ts": {
"bytes": 1964,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/gender/gender.ts": {
"bytes": 2826,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/emotion/emotion.ts": {
"bytes": 3057,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/embedding/embedding.ts": {
"bytes": 2041,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/posenet/modelBase.ts": {
"bytes": 1349,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/posenet/heapSort.ts": {
"bytes": 1645,
"imports": []
},
"src/posenet/buildParts.ts": {
"bytes": 1723,
"imports": [
{
"path": "src/posenet/heapSort.ts",
"kind": "import-statement"
}
]
},
"src/posenet/keypoints.ts": {
"bytes": 2041,
"imports": []
},
"src/posenet/vectors.ts": {
"bytes": 1075,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decoders.ts": {
"bytes": 1958,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decodePose.ts": {
"bytes": 5182,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/vectors.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decoders.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decodeMultiple.ts": {
"bytes": 2323,
"imports": [
{
"path": "src/posenet/buildParts.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodePose.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/vectors.ts",
"kind": "import-statement"
}
]
},
"src/posenet/util.ts": {
"bytes": 2041,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/posenet.ts": {
"bytes": 2394,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/posenet/modelBase.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodeMultiple.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodePose.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/util.ts",
"kind": "import-statement"
}
]
},
"src/handpose/box.ts": {
"bytes": 2443,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/handpose/handdetector.ts": {
"bytes": 3697,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/box.ts",
"kind": "import-statement"
}
]
},
"src/handpose/util.ts": {
"bytes": 2286,
"imports": []
},
"src/handpose/handpipeline.ts": {
"bytes": 7120,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/box.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/util.ts",
"kind": "import-statement"
}
]
},
"src/handpose/anchors.ts": {
"bytes": 224156,
"imports": []
},
"src/handpose/handpose.ts": {
"bytes": 2597,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/handdetector.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/handpipeline.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/anchors.ts",
"kind": "import-statement"
}
]
},
"src/blazepose/annotations.ts": {
"bytes": 1108,
"imports": []
},
"src/blazepose/blazepose.ts": {
"bytes": 2939,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
},
{
"path": "src/blazepose/annotations.ts",
"kind": "import-statement"
}
]
},
"src/gesture/gesture.ts": {
"bytes": 4496,
"imports": []
},
"src/imagefx.js": {
"bytes": 19267,
"imports": []
},
"src/image.ts": {
"bytes": 5872,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/imagefx.js",
"kind": "import-statement"
}
]
},
"config.js": {
"bytes": 10308,
"imports": []
},
"src/sample.ts": {
"bytes": 55382,
"imports": []
},
"package.json": {
"bytes": 2604,
"imports": []
},
"src/draw.ts": {
"bytes": 16408,
"imports": [
{
"path": "config.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/human.ts": {
"bytes": 22807,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "src/sysinfo.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/tfjs/backend.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/facemesh.ts",
"kind": "import-statement"
},
{
"path": "src/faceboxes/faceboxes.ts",
"kind": "import-statement"
},
{
"path": "src/age/age.ts",
"kind": "import-statement"
},
{
"path": "src/gender/gender.ts",
"kind": "import-statement"
},
{
"path": "src/emotion/emotion.ts",
"kind": "import-statement"
},
{
"path": "src/embedding/embedding.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/posenet.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/handpose.ts",
"kind": "import-statement"
},
{
"path": "src/blazepose/blazepose.ts",
"kind": "import-statement"
},
{
"path": "src/gesture/gesture.ts",
"kind": "import-statement"
},
{
"path": "src/image.ts",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
},
{
"path": "config.js",
"kind": "import-statement"
},
{
"path": "src/sample.ts",
"kind": "import-statement"
},
{
"path": "package.json",
"kind": "import-statement"
},
{
"path": "src/draw.ts",
"kind": "import-statement"
}
]
}
},
"outputs": {
"dist/human.ts.map": {
"imports": [],
"exports": [],
"inputs": {},
"bytes": 1979852
},
"dist/human.ts": {
"imports": [],
"exports": [],
"entryPoint": "src/human.ts",
"inputs": {
"src/blazeface/facemesh.ts": {
"bytesInOutput": 1519
},
"src/posenet/keypoints.ts": {
"bytesInOutput": 1690
},
"src/human.ts": {
"bytesInOutput": 11991
},
"src/log.ts": {
"bytesInOutput": 252
},
"src/sysinfo.ts": {
"bytesInOutput": 394
},
"dist/tfjs.esm.js": {
"bytesInOutput": 1056717
},
"src/tfjs/backend.ts": {
"bytesInOutput": 1053
},
"src/blazeface/blazeface.ts": {
"bytesInOutput": 2192
},
"src/blazeface/box.ts": {
"bytesInOutput": 834
},
"src/blazeface/util.ts": {
"bytesInOutput": 858
},
"src/blazeface/coords.ts": {
"bytesInOutput": 28983
},
"src/blazeface/facepipeline.ts": {
"bytesInOutput": 5160
},
"src/faceboxes/faceboxes.ts": {
"bytesInOutput": 1535
},
"src/profile.ts": {
"bytesInOutput": 606
},
"src/age/age.ts": {
"bytesInOutput": 784
},
"src/gender/gender.ts": {
"bytesInOutput": 1246
},
"src/emotion/emotion.ts": {
"bytesInOutput": 1189
},
"src/embedding/embedding.ts": {
"bytesInOutput": 804
},
"src/posenet/posenet.ts": {
"bytesInOutput": 1016
},
"src/posenet/modelBase.ts": {
"bytesInOutput": 662
},
"src/posenet/heapSort.ts": {
"bytesInOutput": 1017
},
"src/posenet/buildParts.ts": {
"bytesInOutput": 456
},
"src/posenet/decodePose.ts": {
"bytesInOutput": 1283
},
"src/posenet/vectors.ts": {
"bytesInOutput": 346
},
"src/posenet/decoders.ts": {
"bytesInOutput": 768
},
"src/posenet/decodeMultiple.ts": {
"bytesInOutput": 529
},
"src/posenet/util.ts": {
"bytesInOutput": 378
},
"src/handpose/handpose.ts": {
"bytesInOutput": 1281
},
"src/handpose/box.ts": {
"bytesInOutput": 938
},
"src/handpose/handdetector.ts": {
"bytesInOutput": 1668
},
"src/handpose/util.ts": {
"bytesInOutput": 816
},
"src/handpose/handpipeline.ts": {
"bytesInOutput": 2510
},
"src/handpose/anchors.ts": {
"bytesInOutput": 126985
},
"src/blazepose/blazepose.ts": {
"bytesInOutput": 1167
},
"src/blazepose/annotations.ts": {
"bytesInOutput": 860
},
"src/gesture/gesture.ts": {
"bytesInOutput": 2391
},
"src/imagefx.js": {
"bytesInOutput": 10975
},
"src/image.ts": {
"bytesInOutput": 2355
},
"config.js": {
"bytesInOutput": 1422
},
"src/sample.ts": {
"bytesInOutput": 55295
},
"package.json": {
"bytesInOutput": 2578
},
"src/draw.ts": {
"bytesInOutput": 9754
}
},
"bytes": 1353317
}
}
}

100813
dist/human.js vendored Normal file

File diff suppressed because it is too large Load Diff

7
dist/human.js.map vendored Normal file

File diff suppressed because one or more lines are too long

24996
dist/human.node-gpu.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

24996
dist/human.node.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

693
dist/human.node.json vendored
View File

@ -1,693 +0,0 @@
{
"inputs": {
"src/log.ts": {
"bytes": 401,
"imports": []
},
"src/sysinfo.ts": {
"bytes": 612,
"imports": []
},
"dist/tfjs.esm.js": {
"bytes": 737,
"imports": []
},
"src/tfjs/backend.ts": {
"bytes": 2237,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/blazeface.ts": {
"bytes": 5704,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/box.ts": {
"bytes": 1727,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/blazeface/util.ts": {
"bytes": 2809,
"imports": []
},
"src/blazeface/coords.ts": {
"bytes": 37783,
"imports": []
},
"src/blazeface/facepipeline.ts": {
"bytes": 14105,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/box.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/util.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/blazeface/facemesh.ts": {
"bytes": 3061,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/blazeface.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/facepipeline.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/profile.ts": {
"bytes": 1017,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
}
]
},
"src/faceboxes/faceboxes.ts": {
"bytes": 2837,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/age/age.ts": {
"bytes": 1964,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/gender/gender.ts": {
"bytes": 2826,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/emotion/emotion.ts": {
"bytes": 3057,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/embedding/embedding.ts": {
"bytes": 2041,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
}
]
},
"src/posenet/modelBase.ts": {
"bytes": 1349,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/posenet/heapSort.ts": {
"bytes": 1645,
"imports": []
},
"src/posenet/buildParts.ts": {
"bytes": 1723,
"imports": [
{
"path": "src/posenet/heapSort.ts",
"kind": "import-statement"
}
]
},
"src/posenet/keypoints.ts": {
"bytes": 2041,
"imports": []
},
"src/posenet/vectors.ts": {
"bytes": 1075,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decoders.ts": {
"bytes": 1958,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decodePose.ts": {
"bytes": 5182,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/vectors.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decoders.ts",
"kind": "import-statement"
}
]
},
"src/posenet/decodeMultiple.ts": {
"bytes": 2323,
"imports": [
{
"path": "src/posenet/buildParts.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodePose.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/vectors.ts",
"kind": "import-statement"
}
]
},
"src/posenet/util.ts": {
"bytes": 2041,
"imports": [
{
"path": "src/posenet/keypoints.ts",
"kind": "import-statement"
}
]
},
"src/posenet/posenet.ts": {
"bytes": 2394,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/posenet/modelBase.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodeMultiple.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/decodePose.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/util.ts",
"kind": "import-statement"
}
]
},
"src/handpose/box.ts": {
"bytes": 2443,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
}
]
},
"src/handpose/handdetector.ts": {
"bytes": 3697,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/box.ts",
"kind": "import-statement"
}
]
},
"src/handpose/util.ts": {
"bytes": 2286,
"imports": []
},
"src/handpose/handpipeline.ts": {
"bytes": 7120,
"imports": [
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/box.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/util.ts",
"kind": "import-statement"
}
]
},
"src/handpose/anchors.ts": {
"bytes": 224156,
"imports": []
},
"src/handpose/handpose.ts": {
"bytes": 2597,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/handpose/handdetector.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/handpipeline.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/anchors.ts",
"kind": "import-statement"
}
]
},
"src/blazepose/annotations.ts": {
"bytes": 1108,
"imports": []
},
"src/blazepose/blazepose.ts": {
"bytes": 2939,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
},
{
"path": "src/blazepose/annotations.ts",
"kind": "import-statement"
}
]
},
"src/gesture/gesture.ts": {
"bytes": 4496,
"imports": []
},
"src/imagefx.js": {
"bytes": 19267,
"imports": []
},
"src/image.ts": {
"bytes": 5872,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/imagefx.js",
"kind": "import-statement"
}
]
},
"config.js": {
"bytes": 10308,
"imports": []
},
"src/sample.ts": {
"bytes": 55382,
"imports": []
},
"package.json": {
"bytes": 2604,
"imports": []
},
"src/draw.ts": {
"bytes": 16408,
"imports": [
{
"path": "config.js",
"kind": "import-statement"
},
{
"path": "src/blazeface/coords.ts",
"kind": "import-statement"
}
]
},
"src/human.ts": {
"bytes": 22807,
"imports": [
{
"path": "src/log.ts",
"kind": "import-statement"
},
{
"path": "src/sysinfo.ts",
"kind": "import-statement"
},
{
"path": "dist/tfjs.esm.js",
"kind": "import-statement"
},
{
"path": "src/tfjs/backend.ts",
"kind": "import-statement"
},
{
"path": "src/blazeface/facemesh.ts",
"kind": "import-statement"
},
{
"path": "src/faceboxes/faceboxes.ts",
"kind": "import-statement"
},
{
"path": "src/age/age.ts",
"kind": "import-statement"
},
{
"path": "src/gender/gender.ts",
"kind": "import-statement"
},
{
"path": "src/emotion/emotion.ts",
"kind": "import-statement"
},
{
"path": "src/embedding/embedding.ts",
"kind": "import-statement"
},
{
"path": "src/posenet/posenet.ts",
"kind": "import-statement"
},
{
"path": "src/handpose/handpose.ts",
"kind": "import-statement"
},
{
"path": "src/blazepose/blazepose.ts",
"kind": "import-statement"
},
{
"path": "src/gesture/gesture.ts",
"kind": "import-statement"
},
{
"path": "src/image.ts",
"kind": "import-statement"
},
{
"path": "src/profile.ts",
"kind": "import-statement"
},
{
"path": "config.js",
"kind": "import-statement"
},
{
"path": "src/sample.ts",
"kind": "import-statement"
},
{
"path": "package.json",
"kind": "import-statement"
},
{
"path": "src/draw.ts",
"kind": "import-statement"
}
]
}
},
"outputs": {
"dist/human.node-gpu.js.map": {
"imports": [],
"exports": [],
"inputs": {},
"bytes": 746597
},
"dist/human.node-gpu.js": {
"imports": [],
"exports": [],
"entryPoint": "src/human.ts",
"inputs": {
"dist/tfjs.esm.js": {
"bytesInOutput": 598
},
"src/blazeface/facemesh.ts": {
"bytesInOutput": 1558
},
"src/posenet/keypoints.ts": {
"bytesInOutput": 1677
},
"src/human.ts": {
"bytesInOutput": 11958
},
"src/log.ts": {
"bytesInOutput": 251
},
"src/sysinfo.ts": {
"bytesInOutput": 394
},
"src/tfjs/backend.ts": {
"bytesInOutput": 1145
},
"src/blazeface/blazeface.ts": {
"bytesInOutput": 2333
},
"src/blazeface/facepipeline.ts": {
"bytesInOutput": 5207
},
"src/blazeface/box.ts": {
"bytesInOutput": 854
},
"src/blazeface/util.ts": {
"bytesInOutput": 848
},
"src/blazeface/coords.ts": {
"bytesInOutput": 28973
},
"src/faceboxes/faceboxes.ts": {
"bytesInOutput": 1577
},
"src/profile.ts": {
"bytesInOutput": 604
},
"src/age/age.ts": {
"bytesInOutput": 831
},
"src/gender/gender.ts": {
"bytesInOutput": 1319
},
"src/emotion/emotion.ts": {
"bytesInOutput": 1256
},
"src/embedding/embedding.ts": {
"bytesInOutput": 848
},
"src/posenet/posenet.ts": {
"bytesInOutput": 1039
},
"src/posenet/modelBase.ts": {
"bytesInOutput": 672
},
"src/posenet/heapSort.ts": {
"bytesInOutput": 1017
},
"src/posenet/buildParts.ts": {
"bytesInOutput": 454
},
"src/posenet/decodePose.ts": {
"bytesInOutput": 1271
},
"src/posenet/vectors.ts": {
"bytesInOutput": 345
},
"src/posenet/decoders.ts": {
"bytesInOutput": 823
},
"src/posenet/decodeMultiple.ts": {
"bytesInOutput": 525
},
"src/posenet/util.ts": {
"bytesInOutput": 376
},
"src/handpose/handpose.ts": {
"bytesInOutput": 1322
},
"src/handpose/handdetector.ts": {
"bytesInOutput": 1813
},
"src/handpose/box.ts": {
"bytesInOutput": 958
},
"src/handpose/handpipeline.ts": {
"bytesInOutput": 2533
},
"src/handpose/util.ts": {
"bytesInOutput": 812
},
"src/handpose/anchors.ts": {
"bytesInOutput": 126985
},
"src/blazepose/blazepose.ts": {
"bytesInOutput": 1198
},
"src/blazepose/annotations.ts": {
"bytesInOutput": 860
},
"src/gesture/gesture.ts": {
"bytesInOutput": 2391
},
"src/image.ts": {
"bytesInOutput": 2339
},
"src/imagefx.js": {
"bytesInOutput": 10973
},
"config.js": {
"bytesInOutput": 1421
},
"src/sample.ts": {
"bytesInOutput": 55295
},
"package.json": {
"bytesInOutput": 2575
},
"src/draw.ts": {
"bytesInOutput": 9643
}
},
"bytes": 290690
}
}
}

4949
dist/human.ts vendored

File diff suppressed because one or more lines are too long

7
dist/human.ts.map vendored

File diff suppressed because one or more lines are too long

76758
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

29766
dist/tfjs.esm.json vendored

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

391
package-lock.json generated
View File

@ -9,23 +9,23 @@
"version": "1.0.1",
"license": "MIT",
"devDependencies": {
"@tensorflow/tfjs": "^3.2.0",
"@tensorflow/tfjs-backend-cpu": "^3.2.0",
"@tensorflow/tfjs-backend-wasm": "^3.2.0",
"@tensorflow/tfjs-backend-webgl": "^3.2.0",
"@tensorflow/tfjs-converter": "^3.2.0",
"@tensorflow/tfjs-core": "^3.2.0",
"@tensorflow/tfjs-data": "^3.2.0",
"@tensorflow/tfjs-layers": "^3.2.0",
"@tensorflow/tfjs-node": "^3.2.0",
"@tensorflow/tfjs-node-gpu": "^3.2.0",
"@types/node": "^14.14.32",
"@typescript-eslint/eslint-plugin": "^4.16.1",
"@typescript-eslint/parser": "^4.16.1",
"@tensorflow/tfjs": "^3.3.0",
"@tensorflow/tfjs-backend-cpu": "^3.3.0",
"@tensorflow/tfjs-backend-wasm": "^3.3.0",
"@tensorflow/tfjs-backend-webgl": "^3.3.0",
"@tensorflow/tfjs-converter": "^3.3.0",
"@tensorflow/tfjs-core": "^3.3.0",
"@tensorflow/tfjs-data": "^3.3.0",
"@tensorflow/tfjs-layers": "^3.3.0",
"@tensorflow/tfjs-node": "^3.3.0",
"@tensorflow/tfjs-node-gpu": "^3.3.0",
"@types/node": "^14.14.33",
"@typescript-eslint/eslint-plugin": "^4.17.0",
"@typescript-eslint/parser": "^4.17.0",
"@vladmandic/pilogger": "^0.2.14",
"chokidar": "^3.5.1",
"dayjs": "^1.10.4",
"esbuild": "^0.8.57",
"esbuild": "^0.9.0",
"eslint": "^7.21.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.22.1",
@ -33,7 +33,6 @@
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.3.1",
"rimraf": "^3.0.2",
"seedrandom": "^3.0.5",
"simple-git": "^2.36.1",
"tslib": "^2.1.0",
"typescript": "^4.2.3"
@ -58,9 +57,9 @@
"dev": true
},
"node_modules/@babel/highlight": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz",
"integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==",
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
"integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.12.11",
@ -201,17 +200,17 @@
}
},
"node_modules/@tensorflow/tfjs": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.2.0.tgz",
"integrity": "sha512-rgcHHhzI+JVl206eMbYO8WzBW3DO9pinEbgtUWdxjfk+a4ojlqvJ34RPEISMSQZRR5KRCA7E/dHFv9+EULfqmw==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.3.0.tgz",
"integrity": "sha512-xo22GCUCGcPtNGIdDpLPrp9ms3atXmzX8AF4y3aIBEwK5KlvGe+ZhcoQ2xEOCPQGBr7NB7AO6rwT8gRoziAHVg==",
"dev": true,
"dependencies": {
"@tensorflow/tfjs-backend-cpu": "3.2.0",
"@tensorflow/tfjs-backend-webgl": "3.2.0",
"@tensorflow/tfjs-converter": "3.2.0",
"@tensorflow/tfjs-core": "3.2.0",
"@tensorflow/tfjs-data": "3.2.0",
"@tensorflow/tfjs-layers": "3.2.0",
"@tensorflow/tfjs-backend-cpu": "3.3.0",
"@tensorflow/tfjs-backend-webgl": "3.3.0",
"@tensorflow/tfjs-converter": "3.3.0",
"@tensorflow/tfjs-core": "3.3.0",
"@tensorflow/tfjs-data": "3.3.0",
"@tensorflow/tfjs-layers": "3.3.0",
"argparse": "^1.0.10",
"chalk": "^4.1.0",
"core-js": "3",
@ -223,9 +222,9 @@
}
},
"node_modules/@tensorflow/tfjs-backend-cpu": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.2.0.tgz",
"integrity": "sha512-L3Pp7FHO92BaeG8Uuc/RJMJ/e61UrIbKgFHS3MKr0zcbmEsqGfos6/5yR1EHj7SoYG2nPlC5+6HxbYy0zp22IA==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.3.0.tgz",
"integrity": "sha512-DLctv+PUZni26kQW1hq8jwQQ8u+GGc/p764WQIC4/IDagGtfGAUW1mHzWcTxtni2l4re1VrwE41ogWLhv4sGHg==",
"dev": true,
"dependencies": {
"@types/seedrandom": "2.4.27",
@ -235,7 +234,7 @@
"yarn": ">= 1.3.2"
},
"peerDependencies": {
"@tensorflow/tfjs-core": "3.2.0"
"@tensorflow/tfjs-core": "3.3.0"
}
},
"node_modules/@tensorflow/tfjs-backend-cpu/node_modules/seedrandom": {
@ -245,25 +244,25 @@
"dev": true
},
"node_modules/@tensorflow/tfjs-backend-wasm": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-3.2.0.tgz",
"integrity": "sha512-gXxhJWRCmkcwSNatG7eGrmHKmjJC/AxvQdToHymkp1KtRazrsMWFrROoj1HuHwK1hCZyGa90ldmXlY9QdzFkuQ==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-3.3.0.tgz",
"integrity": "sha512-1mU3+GuCc0tPzG65qIVwlJoIOyOOvVVkNl1NsId7PTt/PwE/QwiofsCmfPDqH47rTMxBzhvnHZTi+Nj9VBaz1g==",
"dev": true,
"dependencies": {
"@tensorflow/tfjs-backend-cpu": "3.2.0",
"@tensorflow/tfjs-backend-cpu": "3.3.0",
"@types/emscripten": "~0.0.34"
},
"peerDependencies": {
"@tensorflow/tfjs-core": "3.2.0"
"@tensorflow/tfjs-core": "3.3.0"
}
},
"node_modules/@tensorflow/tfjs-backend-webgl": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.2.0.tgz",
"integrity": "sha512-WORXpDt5Ey5/+a4NioyrJkfbJUlleaSELpHnxeDsGt6BpRC2P/1pVJS1IjnBD/f4QlOm3mhouN2Oq28dRhRvqA==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.3.0.tgz",
"integrity": "sha512-GWCtXbrjPTyye3ooId9GlcNDwnIMskZarUpNIQ5g/zeISLfwEQoutA/UqJF+HzuEHgGMsWFkmaO3xKVT7UMpdg==",
"dev": true,
"dependencies": {
"@tensorflow/tfjs-backend-cpu": "3.2.0",
"@tensorflow/tfjs-backend-cpu": "3.3.0",
"@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27",
"@types/webgl-ext": "0.0.30",
@ -274,7 +273,7 @@
"yarn": ">= 1.3.2"
},
"peerDependencies": {
"@tensorflow/tfjs-core": "3.2.0"
"@tensorflow/tfjs-core": "3.3.0"
}
},
"node_modules/@tensorflow/tfjs-backend-webgl/node_modules/seedrandom": {
@ -284,18 +283,18 @@
"dev": true
},
"node_modules/@tensorflow/tfjs-converter": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.2.0.tgz",
"integrity": "sha512-iE2Q0naHR8OVcMc9RluebMObsPysru7X1y+mWtkPNnYlNUJORxfkEitrMbVDAKw6lsivIfo4Ar5UcstiG8/ckQ==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.3.0.tgz",
"integrity": "sha512-k57wN4yelePhmO9orcT/wzGMIuyedrMpVtg0FhxpV6BQu0+TZ/ti3W4Kb97GWJsoHKXMoing9SnioKfVnBW6hw==",
"dev": true,
"peerDependencies": {
"@tensorflow/tfjs-core": "3.2.0"
"@tensorflow/tfjs-core": "3.3.0"
}
},
"node_modules/@tensorflow/tfjs-core": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.2.0.tgz",
"integrity": "sha512-MZnTk9wcJai5lTfkC8T1rr6/M9C4eO0DfojZghopZXDflCTndLPIKcudx6E8qfrmZOkRSqMIwB7A8UFs7f+3Kg==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.3.0.tgz",
"integrity": "sha512-6G+LcCiQBl4Kza5mDbWbf8QSWBTW3l7SDjGhQzMO1ITtQatHzxkuHGHcJ4CTUJvNA0JmKf4QJWOvlFqEmxwyLQ==",
"dev": true,
"dependencies": {
"@types/offscreencanvas": "~2019.3.0",
@ -315,36 +314,36 @@
"dev": true
},
"node_modules/@tensorflow/tfjs-data": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.2.0.tgz",
"integrity": "sha512-fG4rYJlxh/B9fzgc+/qdj5gPI485RsDUM99mErxovlh3UMIdRgMeHHdFse44VlyAShEAgsOehuWovhY5520kEw==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.3.0.tgz",
"integrity": "sha512-0x28tRe6RJu5GmYq3IYN2GNnOgXU0nY+o6zZrlijkK+W3vjSTJlZzaBSifoeD6J8gzVpjs8W8qd/JKHQ1MQp8w==",
"dev": true,
"dependencies": {
"@types/node-fetch": "^2.1.2",
"node-fetch": "~2.6.1"
},
"peerDependencies": {
"@tensorflow/tfjs-core": "3.2.0",
"@tensorflow/tfjs-core": "3.3.0",
"seedrandom": "~2.4.3"
}
},
"node_modules/@tensorflow/tfjs-layers": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.2.0.tgz",
"integrity": "sha512-TgTpH6RI+NmL4s8pQ76wkq15p79SfSQLOfFL2rGmJgatQRuA/mxLlH5GLir5HwwER3a0Vj8lMbexxCAGTqr2Xg==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.3.0.tgz",
"integrity": "sha512-qO+TL2I29vWUiuFcQJXNyayWFYagwR+SIfbex8p5jjYaCGHGwE5GQcrH+ngoCgKZxm5tdMvYJsJPnih2M3fYzQ==",
"dev": true,
"peerDependencies": {
"@tensorflow/tfjs-core": "3.2.0"
"@tensorflow/tfjs-core": "3.3.0"
}
},
"node_modules/@tensorflow/tfjs-node": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-3.2.0.tgz",
"integrity": "sha512-4k8HvT+lFauy30EMoKhLvXykQ4xKfi5yTs0EdWue80z9XNNDIMG3932owBpWMeaRb5P0ONUuv9MSu+pi17rNnA==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-3.3.0.tgz",
"integrity": "sha512-grRgaXereQt5mQnu31gHCPkzA6SGReXW94b5FEMk1Psenmb0APnT7MGgZbujiMruQ81vG0/8gYA28uyZeZKcJw==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
"@tensorflow/tfjs": "3.2.0",
"@tensorflow/tfjs": "3.3.0",
"adm-zip": "^0.4.11",
"google-protobuf": "^3.9.2",
"https-proxy-agent": "^2.2.1",
@ -358,13 +357,13 @@
}
},
"node_modules/@tensorflow/tfjs-node-gpu": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node-gpu/-/tfjs-node-gpu-3.2.0.tgz",
"integrity": "sha512-zAQPT9RwA5KOFFtkRzUGXE+9loJeJWbxkw2OnIPdB8+18c8s6/ICsHpN9nYLhelR+9wl877aaN4wQVR5T7iQDw==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node-gpu/-/tfjs-node-gpu-3.3.0.tgz",
"integrity": "sha512-a641ugrLvVjz2p0eGD0V+jyh9mtxrUSxVvX+aH2aQvOnz4BTFv/zOlPPCI/7D8zIiLBzSJCXMB5DdI3qg92n8Q==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
"@tensorflow/tfjs": "3.2.0",
"@tensorflow/tfjs": "3.3.0",
"adm-zip": "^0.4.11",
"google-protobuf": "^3.9.2",
"https-proxy-agent": "^2.2.1",
@ -420,9 +419,9 @@
"dev": true
},
"node_modules/@types/node": {
"version": "14.14.32",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.32.tgz",
"integrity": "sha512-/Ctrftx/zp4m8JOujM5ZhwzlWLx22nbQJiVqz8/zE15gOeEW+uly3FSX4fGFpcfEvFzXcMCJwq9lGVWgyARXhg==",
"version": "14.14.33",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz",
"integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==",
"dev": true
},
"node_modules/@types/node-fetch": {
@ -460,13 +459,13 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz",
"integrity": "sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.17.0.tgz",
"integrity": "sha512-/fKFDcoHg8oNan39IKFOb5WmV7oWhQe1K6CDaAVfJaNWEhmfqlA24g+u1lqU5bMH7zuNasfMId4LaYWC5ijRLw==",
"dev": true,
"dependencies": {
"@typescript-eslint/experimental-utils": "4.16.1",
"@typescript-eslint/scope-manager": "4.16.1",
"@typescript-eslint/experimental-utils": "4.17.0",
"@typescript-eslint/scope-manager": "4.17.0",
"debug": "^4.1.1",
"functional-red-black-tree": "^1.0.1",
"lodash": "^4.17.15",
@ -492,15 +491,15 @@
}
},
"node_modules/@typescript-eslint/experimental-utils": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz",
"integrity": "sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.17.0.tgz",
"integrity": "sha512-ZR2NIUbnIBj+LGqCFGQ9yk2EBQrpVVFOh9/Kd0Lm6gLpSAcCuLLe5lUCibKGCqyH9HPwYC0GIJce2O1i8VYmWA==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.3",
"@typescript-eslint/scope-manager": "4.16.1",
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/typescript-estree": "4.16.1",
"@typescript-eslint/scope-manager": "4.17.0",
"@typescript-eslint/types": "4.17.0",
"@typescript-eslint/typescript-estree": "4.17.0",
"eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0"
},
@ -516,14 +515,14 @@
}
},
"node_modules/@typescript-eslint/parser": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.16.1.tgz",
"integrity": "sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.17.0.tgz",
"integrity": "sha512-KYdksiZQ0N1t+6qpnl6JeK9ycCFprS9xBAiIrw4gSphqONt8wydBw4BXJi3C11ywZmyHulvMaLjWsxDjUSDwAw==",
"dev": true,
"dependencies": {
"@typescript-eslint/scope-manager": "4.16.1",
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/typescript-estree": "4.16.1",
"@typescript-eslint/scope-manager": "4.17.0",
"@typescript-eslint/types": "4.17.0",
"@typescript-eslint/typescript-estree": "4.17.0",
"debug": "^4.1.1"
},
"engines": {
@ -543,13 +542,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz",
"integrity": "sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.17.0.tgz",
"integrity": "sha512-OJ+CeTliuW+UZ9qgULrnGpPQ1bhrZNFpfT/Bc0pzNeyZwMik7/ykJ0JHnQ7krHanFN9wcnPK89pwn84cRUmYjw==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/visitor-keys": "4.16.1"
"@typescript-eslint/types": "4.17.0",
"@typescript-eslint/visitor-keys": "4.17.0"
},
"engines": {
"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
@ -560,9 +559,9 @@
}
},
"node_modules/@typescript-eslint/types": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.16.1.tgz",
"integrity": "sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.17.0.tgz",
"integrity": "sha512-RN5z8qYpJ+kXwnLlyzZkiJwfW2AY458Bf8WqllkondQIcN2ZxQowAToGSd9BlAUZDB5Ea8I6mqL2quGYCLT+2g==",
"dev": true,
"engines": {
"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
@ -573,13 +572,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz",
"integrity": "sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.17.0.tgz",
"integrity": "sha512-lRhSFIZKUEPPWpWfwuZBH9trYIEJSI0vYsrxbvVvNyIUDoKWaklOAelsSkeh3E2VBSZiNe9BZ4E5tYBZbUczVQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/visitor-keys": "4.16.1",
"@typescript-eslint/types": "4.17.0",
"@typescript-eslint/visitor-keys": "4.17.0",
"debug": "^4.1.1",
"globby": "^11.0.1",
"is-glob": "^4.0.1",
@ -600,12 +599,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz",
"integrity": "sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.17.0.tgz",
"integrity": "sha512-WfuMN8mm5SSqXuAr9NM+fItJ0SVVphobWYkWOwQ1odsfC014Vdxk/92t4JwS1Q6fCA/ABfCKpa3AVtpUKTNKGQ==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/types": "4.17.0",
"eslint-visitor-keys": "^2.0.0"
},
"engines": {
@ -1244,9 +1243,9 @@
}
},
"node_modules/esbuild": {
"version": "0.8.57",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.57.tgz",
"integrity": "sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==",
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.0.tgz",
"integrity": "sha512-IqYFO7ZKHf0y4uJpJfGqInmSRn8jMPMbyI1W0Y2PSjSjJcVP538tC8TleJAS4Y8QeqwajqBTwFKayWVzYlMIgg==",
"dev": true,
"hasInstallScript": true,
"bin": {
@ -3244,10 +3243,11 @@
"dev": true
},
"node_modules/seedrandom": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
"integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
"dev": true
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz",
"integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==",
"dev": true,
"peer": true
},
"node_modules/semver": {
"version": "7.3.4",
@ -3929,9 +3929,9 @@
"dev": true
},
"@babel/highlight": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz",
"integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==",
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
"integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.12.11",
@ -4050,17 +4050,17 @@
}
},
"@tensorflow/tfjs": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.2.0.tgz",
"integrity": "sha512-rgcHHhzI+JVl206eMbYO8WzBW3DO9pinEbgtUWdxjfk+a4ojlqvJ34RPEISMSQZRR5KRCA7E/dHFv9+EULfqmw==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.3.0.tgz",
"integrity": "sha512-xo22GCUCGcPtNGIdDpLPrp9ms3atXmzX8AF4y3aIBEwK5KlvGe+ZhcoQ2xEOCPQGBr7NB7AO6rwT8gRoziAHVg==",
"dev": true,
"requires": {
"@tensorflow/tfjs-backend-cpu": "3.2.0",
"@tensorflow/tfjs-backend-webgl": "3.2.0",
"@tensorflow/tfjs-converter": "3.2.0",
"@tensorflow/tfjs-core": "3.2.0",
"@tensorflow/tfjs-data": "3.2.0",
"@tensorflow/tfjs-layers": "3.2.0",
"@tensorflow/tfjs-backend-cpu": "3.3.0",
"@tensorflow/tfjs-backend-webgl": "3.3.0",
"@tensorflow/tfjs-converter": "3.3.0",
"@tensorflow/tfjs-core": "3.3.0",
"@tensorflow/tfjs-data": "3.3.0",
"@tensorflow/tfjs-layers": "3.3.0",
"argparse": "^1.0.10",
"chalk": "^4.1.0",
"core-js": "3",
@ -4069,9 +4069,9 @@
}
},
"@tensorflow/tfjs-backend-cpu": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.2.0.tgz",
"integrity": "sha512-L3Pp7FHO92BaeG8Uuc/RJMJ/e61UrIbKgFHS3MKr0zcbmEsqGfos6/5yR1EHj7SoYG2nPlC5+6HxbYy0zp22IA==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.3.0.tgz",
"integrity": "sha512-DLctv+PUZni26kQW1hq8jwQQ8u+GGc/p764WQIC4/IDagGtfGAUW1mHzWcTxtni2l4re1VrwE41ogWLhv4sGHg==",
"dev": true,
"requires": {
"@types/seedrandom": "2.4.27",
@ -4087,22 +4087,22 @@
}
},
"@tensorflow/tfjs-backend-wasm": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-3.2.0.tgz",
"integrity": "sha512-gXxhJWRCmkcwSNatG7eGrmHKmjJC/AxvQdToHymkp1KtRazrsMWFrROoj1HuHwK1hCZyGa90ldmXlY9QdzFkuQ==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-wasm/-/tfjs-backend-wasm-3.3.0.tgz",
"integrity": "sha512-1mU3+GuCc0tPzG65qIVwlJoIOyOOvVVkNl1NsId7PTt/PwE/QwiofsCmfPDqH47rTMxBzhvnHZTi+Nj9VBaz1g==",
"dev": true,
"requires": {
"@tensorflow/tfjs-backend-cpu": "3.2.0",
"@tensorflow/tfjs-backend-cpu": "3.3.0",
"@types/emscripten": "~0.0.34"
}
},
"@tensorflow/tfjs-backend-webgl": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.2.0.tgz",
"integrity": "sha512-WORXpDt5Ey5/+a4NioyrJkfbJUlleaSELpHnxeDsGt6BpRC2P/1pVJS1IjnBD/f4QlOm3mhouN2Oq28dRhRvqA==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.3.0.tgz",
"integrity": "sha512-GWCtXbrjPTyye3ooId9GlcNDwnIMskZarUpNIQ5g/zeISLfwEQoutA/UqJF+HzuEHgGMsWFkmaO3xKVT7UMpdg==",
"dev": true,
"requires": {
"@tensorflow/tfjs-backend-cpu": "3.2.0",
"@tensorflow/tfjs-backend-cpu": "3.3.0",
"@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27",
"@types/webgl-ext": "0.0.30",
@ -4119,16 +4119,16 @@
}
},
"@tensorflow/tfjs-converter": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.2.0.tgz",
"integrity": "sha512-iE2Q0naHR8OVcMc9RluebMObsPysru7X1y+mWtkPNnYlNUJORxfkEitrMbVDAKw6lsivIfo4Ar5UcstiG8/ckQ==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.3.0.tgz",
"integrity": "sha512-k57wN4yelePhmO9orcT/wzGMIuyedrMpVtg0FhxpV6BQu0+TZ/ti3W4Kb97GWJsoHKXMoing9SnioKfVnBW6hw==",
"dev": true,
"requires": {}
},
"@tensorflow/tfjs-core": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.2.0.tgz",
"integrity": "sha512-MZnTk9wcJai5lTfkC8T1rr6/M9C4eO0DfojZghopZXDflCTndLPIKcudx6E8qfrmZOkRSqMIwB7A8UFs7f+3Kg==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.3.0.tgz",
"integrity": "sha512-6G+LcCiQBl4Kza5mDbWbf8QSWBTW3l7SDjGhQzMO1ITtQatHzxkuHGHcJ4CTUJvNA0JmKf4QJWOvlFqEmxwyLQ==",
"dev": true,
"requires": {
"@types/offscreencanvas": "~2019.3.0",
@ -4147,9 +4147,9 @@
}
},
"@tensorflow/tfjs-data": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.2.0.tgz",
"integrity": "sha512-fG4rYJlxh/B9fzgc+/qdj5gPI485RsDUM99mErxovlh3UMIdRgMeHHdFse44VlyAShEAgsOehuWovhY5520kEw==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.3.0.tgz",
"integrity": "sha512-0x28tRe6RJu5GmYq3IYN2GNnOgXU0nY+o6zZrlijkK+W3vjSTJlZzaBSifoeD6J8gzVpjs8W8qd/JKHQ1MQp8w==",
"dev": true,
"requires": {
"@types/node-fetch": "^2.1.2",
@ -4157,19 +4157,19 @@
}
},
"@tensorflow/tfjs-layers": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.2.0.tgz",
"integrity": "sha512-TgTpH6RI+NmL4s8pQ76wkq15p79SfSQLOfFL2rGmJgatQRuA/mxLlH5GLir5HwwER3a0Vj8lMbexxCAGTqr2Xg==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.3.0.tgz",
"integrity": "sha512-qO+TL2I29vWUiuFcQJXNyayWFYagwR+SIfbex8p5jjYaCGHGwE5GQcrH+ngoCgKZxm5tdMvYJsJPnih2M3fYzQ==",
"dev": true,
"requires": {}
},
"@tensorflow/tfjs-node": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-3.2.0.tgz",
"integrity": "sha512-4k8HvT+lFauy30EMoKhLvXykQ4xKfi5yTs0EdWue80z9XNNDIMG3932owBpWMeaRb5P0ONUuv9MSu+pi17rNnA==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-3.3.0.tgz",
"integrity": "sha512-grRgaXereQt5mQnu31gHCPkzA6SGReXW94b5FEMk1Psenmb0APnT7MGgZbujiMruQ81vG0/8gYA28uyZeZKcJw==",
"dev": true,
"requires": {
"@tensorflow/tfjs": "3.2.0",
"@tensorflow/tfjs": "3.3.0",
"adm-zip": "^0.4.11",
"google-protobuf": "^3.9.2",
"https-proxy-agent": "^2.2.1",
@ -4191,12 +4191,12 @@
}
},
"@tensorflow/tfjs-node-gpu": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node-gpu/-/tfjs-node-gpu-3.2.0.tgz",
"integrity": "sha512-zAQPT9RwA5KOFFtkRzUGXE+9loJeJWbxkw2OnIPdB8+18c8s6/ICsHpN9nYLhelR+9wl877aaN4wQVR5T7iQDw==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node-gpu/-/tfjs-node-gpu-3.3.0.tgz",
"integrity": "sha512-a641ugrLvVjz2p0eGD0V+jyh9mtxrUSxVvX+aH2aQvOnz4BTFv/zOlPPCI/7D8zIiLBzSJCXMB5DdI3qg92n8Q==",
"dev": true,
"requires": {
"@tensorflow/tfjs": "3.2.0",
"@tensorflow/tfjs": "3.3.0",
"adm-zip": "^0.4.11",
"google-protobuf": "^3.9.2",
"https-proxy-agent": "^2.2.1",
@ -4236,9 +4236,9 @@
"dev": true
},
"@types/node": {
"version": "14.14.32",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.32.tgz",
"integrity": "sha512-/Ctrftx/zp4m8JOujM5ZhwzlWLx22nbQJiVqz8/zE15gOeEW+uly3FSX4fGFpcfEvFzXcMCJwq9lGVWgyARXhg==",
"version": "14.14.33",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz",
"integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==",
"dev": true
},
"@types/node-fetch": {
@ -4276,13 +4276,13 @@
"dev": true
},
"@typescript-eslint/eslint-plugin": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz",
"integrity": "sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.17.0.tgz",
"integrity": "sha512-/fKFDcoHg8oNan39IKFOb5WmV7oWhQe1K6CDaAVfJaNWEhmfqlA24g+u1lqU5bMH7zuNasfMId4LaYWC5ijRLw==",
"dev": true,
"requires": {
"@typescript-eslint/experimental-utils": "4.16.1",
"@typescript-eslint/scope-manager": "4.16.1",
"@typescript-eslint/experimental-utils": "4.17.0",
"@typescript-eslint/scope-manager": "4.17.0",
"debug": "^4.1.1",
"functional-red-black-tree": "^1.0.1",
"lodash": "^4.17.15",
@ -4292,55 +4292,55 @@
}
},
"@typescript-eslint/experimental-utils": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz",
"integrity": "sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.17.0.tgz",
"integrity": "sha512-ZR2NIUbnIBj+LGqCFGQ9yk2EBQrpVVFOh9/Kd0Lm6gLpSAcCuLLe5lUCibKGCqyH9HPwYC0GIJce2O1i8VYmWA==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.3",
"@typescript-eslint/scope-manager": "4.16.1",
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/typescript-estree": "4.16.1",
"@typescript-eslint/scope-manager": "4.17.0",
"@typescript-eslint/types": "4.17.0",
"@typescript-eslint/typescript-estree": "4.17.0",
"eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0"
}
},
"@typescript-eslint/parser": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.16.1.tgz",
"integrity": "sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.17.0.tgz",
"integrity": "sha512-KYdksiZQ0N1t+6qpnl6JeK9ycCFprS9xBAiIrw4gSphqONt8wydBw4BXJi3C11ywZmyHulvMaLjWsxDjUSDwAw==",
"dev": true,
"requires": {
"@typescript-eslint/scope-manager": "4.16.1",
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/typescript-estree": "4.16.1",
"@typescript-eslint/scope-manager": "4.17.0",
"@typescript-eslint/types": "4.17.0",
"@typescript-eslint/typescript-estree": "4.17.0",
"debug": "^4.1.1"
}
},
"@typescript-eslint/scope-manager": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz",
"integrity": "sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.17.0.tgz",
"integrity": "sha512-OJ+CeTliuW+UZ9qgULrnGpPQ1bhrZNFpfT/Bc0pzNeyZwMik7/ykJ0JHnQ7krHanFN9wcnPK89pwn84cRUmYjw==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/visitor-keys": "4.16.1"
"@typescript-eslint/types": "4.17.0",
"@typescript-eslint/visitor-keys": "4.17.0"
}
},
"@typescript-eslint/types": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.16.1.tgz",
"integrity": "sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.17.0.tgz",
"integrity": "sha512-RN5z8qYpJ+kXwnLlyzZkiJwfW2AY458Bf8WqllkondQIcN2ZxQowAToGSd9BlAUZDB5Ea8I6mqL2quGYCLT+2g==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz",
"integrity": "sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.17.0.tgz",
"integrity": "sha512-lRhSFIZKUEPPWpWfwuZBH9trYIEJSI0vYsrxbvVvNyIUDoKWaklOAelsSkeh3E2VBSZiNe9BZ4E5tYBZbUczVQ==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/visitor-keys": "4.16.1",
"@typescript-eslint/types": "4.17.0",
"@typescript-eslint/visitor-keys": "4.17.0",
"debug": "^4.1.1",
"globby": "^11.0.1",
"is-glob": "^4.0.1",
@ -4349,12 +4349,12 @@
}
},
"@typescript-eslint/visitor-keys": {
"version": "4.16.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz",
"integrity": "sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w==",
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.17.0.tgz",
"integrity": "sha512-WfuMN8mm5SSqXuAr9NM+fItJ0SVVphobWYkWOwQ1odsfC014Vdxk/92t4JwS1Q6fCA/ABfCKpa3AVtpUKTNKGQ==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.16.1",
"@typescript-eslint/types": "4.17.0",
"eslint-visitor-keys": "^2.0.0"
}
},
@ -4841,9 +4841,9 @@
}
},
"esbuild": {
"version": "0.8.57",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.57.tgz",
"integrity": "sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==",
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.0.tgz",
"integrity": "sha512-IqYFO7ZKHf0y4uJpJfGqInmSRn8jMPMbyI1W0Y2PSjSjJcVP538tC8TleJAS4Y8QeqwajqBTwFKayWVzYlMIgg==",
"dev": true
},
"escalade": {
@ -6379,10 +6379,11 @@
"dev": true
},
"seedrandom": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
"integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
"dev": true
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz",
"integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==",
"dev": true,
"peer": true
},
"semver": {
"version": "7.3.4",

View File

@ -43,25 +43,24 @@
"blazeface",
"blazepose"
],
"peerDependencies": {},
"devDependencies": {
"@tensorflow/tfjs": "^3.2.0",
"@tensorflow/tfjs-backend-cpu": "^3.2.0",
"@tensorflow/tfjs-backend-wasm": "^3.2.0",
"@tensorflow/tfjs-backend-webgl": "^3.2.0",
"@tensorflow/tfjs-converter": "^3.2.0",
"@tensorflow/tfjs-core": "^3.2.0",
"@tensorflow/tfjs-data": "^3.2.0",
"@tensorflow/tfjs-layers": "^3.2.0",
"@tensorflow/tfjs-node": "^3.2.0",
"@tensorflow/tfjs-node-gpu": "^3.2.0",
"@types/node": "^14.14.32",
"@typescript-eslint/eslint-plugin": "^4.16.1",
"@typescript-eslint/parser": "^4.16.1",
"@tensorflow/tfjs": "^3.3.0",
"@tensorflow/tfjs-backend-cpu": "^3.3.0",
"@tensorflow/tfjs-backend-wasm": "^3.3.0",
"@tensorflow/tfjs-backend-webgl": "^3.3.0",
"@tensorflow/tfjs-converter": "^3.3.0",
"@tensorflow/tfjs-core": "^3.3.0",
"@tensorflow/tfjs-data": "^3.3.0",
"@tensorflow/tfjs-layers": "^3.3.0",
"@tensorflow/tfjs-node": "^3.3.0",
"@tensorflow/tfjs-node-gpu": "^3.3.0",
"@types/node": "^14.14.33",
"@typescript-eslint/eslint-plugin": "^4.17.0",
"@typescript-eslint/parser": "^4.17.0",
"@vladmandic/pilogger": "^0.2.14",
"chokidar": "^3.5.1",
"dayjs": "^1.10.4",
"esbuild": "^0.8.57",
"esbuild": "^0.9.0",
"eslint": "^7.21.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.22.1",
@ -69,7 +68,6 @@
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.3.1",
"rimraf": "^3.0.2",
"seedrandom": "^3.0.5",
"simple-git": "^2.36.1",
"tslib": "^2.1.0",
"typescript": "^4.2.3"

View File

@ -1,20 +1,18 @@
#!/usr/bin/env -S node --trace-warnings
const fs = require('fs');
const log = require('@vladmandic/pilogger');
const esbuild = require('esbuild');
const ts = require('typescript');
// keeps esbuild service instance cached
let es;
let busy = false;
const banner = `
const banner = { js: `
/*
Human library
homepage: <https://github.com/vladmandic/human>
author: <https://github.com/vladmandic>'
*/
`;
` };
// tsc configuration for building types only
const tsconfig = {
@ -46,6 +44,7 @@ const config = {
tsconfig: 'server/tfjs-tsconfig.json',
bundle: true,
logLevel: 'error',
metafile: true,
},
debug: {
minifyWhitespace: false,
@ -68,7 +67,6 @@ const targets = {
tfjs: {
platform: 'node',
format: 'cjs',
metafile: 'dist/tfjs.esm.json',
entryPoints: ['src/tfjs/tf-node.ts'],
outfile: 'dist/tfjs.esm.js',
external: ['@tensorflow'],
@ -76,7 +74,6 @@ const targets = {
node: {
platform: 'node',
format: 'cjs',
metafile: 'dist/human.node.json',
entryPoints: ['src/human.ts'],
outfile: 'dist/human.node.js',
external: ['@tensorflow'],
@ -86,7 +83,6 @@ const targets = {
tfjs: {
platform: 'node',
format: 'cjs',
metafile: 'dist/tfjs.esm.json',
entryPoints: ['src/tfjs/tf-node-gpu.ts'],
outfile: 'dist/tfjs.esm.js',
external: ['@tensorflow'],
@ -94,7 +90,6 @@ const targets = {
node: {
platform: 'node',
format: 'cjs',
metafile: 'dist/human.node.json',
entryPoints: ['src/human.ts'],
outfile: 'dist/human.node-gpu.js',
external: ['@tensorflow'],
@ -105,7 +100,6 @@ const targets = {
tfjs: {
platform: 'browser',
format: 'esm',
metafile: 'dist/tfjs.esm.json',
entryPoints: ['src/tfjs/tf-browser.ts'],
outfile: 'dist/tfjs.esm.js',
external: ['fs', 'buffer', 'util', 'os', '@tensorflow'],
@ -113,7 +107,6 @@ const targets = {
esm: {
platform: 'browser',
format: 'esm',
metafile: 'dist/human.esm.json',
entryPoints: ['src/human.ts'],
outfile: 'dist/human.esm-nobundle.js',
external: ['fs', 'buffer', 'util', 'os', '@tensorflow'],
@ -123,7 +116,6 @@ const targets = {
tfjs: {
platform: 'browser',
format: 'esm',
metafile: 'dist/tfjs.esm.json',
entryPoints: ['src/tfjs/tf-browser.ts'],
outfile: 'dist/tfjs.esm.js',
external: ['fs', 'buffer', 'util', 'os'],
@ -132,15 +124,13 @@ const targets = {
platform: 'browser',
format: 'iife',
globalName: 'Human',
metafile: 'dist/human.iife.json',
entryPoints: ['src/human.ts'],
outfile: 'dist/human.ts',
outfile: 'dist/human.js',
external: ['fs', 'buffer', 'util', 'os'],
},
esm: {
platform: 'browser',
format: 'esm',
metafile: 'dist/human.esm.json',
entryPoints: ['src/human.ts'],
outfile: 'dist/human.esm.js',
external: ['fs', 'buffer', 'util', 'os'],
@ -148,7 +138,6 @@ const targets = {
demo: {
platform: 'browser',
format: 'esm',
metafile: 'dist/demo-browser-index.json',
entryPoints: ['demo/browser.js'],
outfile: 'dist/demo-browser-index.js',
external: ['fs', 'buffer', 'util', 'os'],
@ -156,13 +145,10 @@ const targets = {
},
};
async function getStats(metafile) {
async function getStats(json) {
const stats = {};
if (!fs.existsSync(metafile)) return stats;
const data = fs.readFileSync(metafile);
const json = JSON.parse(data.toString());
if (json && json.inputs && json.outputs) {
for (const [key, val] of Object.entries(json.inputs)) {
if (json && json.metafile?.inputs && json.metafile?.outputs) {
for (const [key, val] of Object.entries(json.metafile.inputs)) {
if (key.startsWith('node_modules')) {
stats.modules = (stats.modules || 0) + 1;
stats.moduleBytes = (stats.moduleBytes || 0) + val.bytes;
@ -172,7 +158,7 @@ async function getStats(metafile) {
}
}
const files = [];
for (const [key, val] of Object.entries(json.outputs)) {
for (const [key, val] of Object.entries(json.metafile.outputs)) {
if (!key.endsWith('.map')) {
files.push(key);
stats.outputBytes = (stats.outputBytes || 0) + val.bytes;
@ -214,7 +200,6 @@ async function build(f, msg, dev = false) {
}
busy = true;
log.info('Build: file', msg, f, 'type:', dev ? 'debug' : 'production', 'config:', dev ? config.debug : config.production);
if (!es) es = await esbuild.startService();
// common build options
try {
// rebuild all target groups and types
@ -222,9 +207,12 @@ async function build(f, msg, dev = false) {
for (const [targetName, targetOptions] of Object.entries(targetGroup)) {
// if triggered from watch mode, rebuild only browser bundle
// if ((require.main !== module) && (targetGroupName !== 'browserBundle')) continue;
if (dev) await es.build({ ...config.common, ...config.debug, ...targetOptions });
else await es.build({ ...config.common, ...config.production, ...targetOptions });
const stats = await getStats(targetOptions.metafile);
const meta = dev
// @ts-ignore
? await esbuild.build({ ...config.common, ...config.debug, ...targetOptions })
// @ts-ignore
: await esbuild.build({ ...config.common, ...config.production, ...targetOptions });
const stats = await getStats(meta);
log.state(`Build for: ${targetGroupName} type: ${targetName}:`, stats);
}
}

View File

@ -97,8 +97,8 @@ export class Pipeline {
box.startPoint[0] / this.meshWidth, box.endPoint[1] / this.meshHeight,
box.endPoint[0] / this.meshWidth,
]], [0], [this.irisSize, this.irisSize]);
if (flip) {
crop = tf.image.flipLeftRight(crop);
if (flip && tf.ENV.flags.IS_BROWSER) {
crop = tf.image.flipLeftRight(crop); // flipLeftRight is not defined for tfjs-node
}
return { box, boxSize, crop };
}
@ -185,12 +185,12 @@ export class Pipeline {
let face;
let angle = 0;
let rotationMatrix;
if (config.face.detector.rotation && config.face.mesh.enabled) {
if (config.face.detector.rotation && config.face.mesh.enabled && tf.ENV.flags.IS_BROWSER) {
const [indexOfMouth, indexOfForehead] = (box.landmarks.length >= LANDMARKS_COUNT) ? MESH_KEYPOINTS_LINE_OF_SYMMETRY_INDICES : BLAZEFACE_KEYPOINTS_LINE_OF_SYMMETRY_INDICES;
angle = util.computeRotation(box.landmarks[indexOfMouth], box.landmarks[indexOfForehead]);
const faceCenter = bounding.getBoxCenter({ startPoint: box.startPoint, endPoint: box.endPoint });
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
const rotatedImage = tf.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
const rotatedImage = tf.image.rotateWithOffset(input, angle, 0, faceCenterNormalized); // rotateWithOffset is not defined for tfjs-node
rotationMatrix = util.buildRotationMatrix(-angle, faceCenter);
face = bounding.cutBoxFromImageAndResize({ startPoint: box.startPoint, endPoint: box.endPoint }, rotatedImage, [this.meshHeight, this.meshWidth]).div(255);
} else {

View File

@ -1,69 +0,0 @@
import { log } from '../log';
import * as tf from '../../dist/tfjs.esm.js';
import * as profile from '../profile';
export class FaceBoxes {
enlarge: number;
model: any;
config: any;
constructor(model, config) {
this.enlarge = 1.1;
this.model = model;
this.config = config;
}
async estimateFaces(input, config) {
if (config) this.config = config;
const results: Array<{ confidence: number, box: any, boxRaw: any, image: any }> = [];
const resizeT = tf.image.resizeBilinear(input, [this.config.face.detector.inputSize, this.config.face.detector.inputSize]);
const castT = resizeT.toInt();
let scores;
let boxes;
if (!config.profile) {
const [scoresT, boxesT, numT] = await this.model.executeAsync(castT);
scores = scoresT.dataSync();
const squeezeT = boxesT.squeeze();
boxes = squeezeT.arraySync();
scoresT.dispose();
boxesT.dispose();
squeezeT.dispose();
numT.dispose();
} else {
const profileData = await tf.profile(() => this.model.executeAsync(castT));
scores = profileData.result[0].dataSync();
const squeezeT = profileData.result[1].squeeze();
boxes = squeezeT.arraySync();
profileData.result.forEach((t) => t.dispose());
profile.run('faceboxes', profileData);
}
castT.dispose();
resizeT.dispose();
for (const i in boxes) {
if (scores[i] && scores[i] > this.config.face.detector.minConfidence) {
const crop = [boxes[i][0] / this.enlarge, boxes[i][1] / this.enlarge, boxes[i][2] * this.enlarge, boxes[i][3] * this.enlarge];
const boxRaw = [crop[1], crop[0], (crop[3]) - (crop[1]), (crop[2]) - (crop[0])];
const box = [
parseInt((boxRaw[0] * input.shape[2]).toString()),
parseInt((boxRaw[1] * input.shape[1]).toString()),
parseInt((boxRaw[2] * input.shape[2]).toString()),
parseInt((boxRaw[3] * input.shape[1]).toString())];
const resized = tf.image.cropAndResize(input, [crop], [0], [this.config.face.detector.inputSize, this.config.face.detector.inputSize]);
const image = resized.div([255]);
resized.dispose();
results.push({ confidence: scores[i], box, boxRaw, image });
// add mesh, meshRaw, annotations,
}
}
return results;
}
}
export async function load(config) {
const model = await tf.loadGraphModel(config.face.detector.modelPath);
if (config.debug) log(`load model: ${config.face.detector.modelPath.match(/\/(.*)\./)[1]}`);
const faceboxes = new FaceBoxes(model, config);
if (config.face.mesh.enabled && config.debug) log(`load model: ${config.face.mesh.modelPath.match(/\/(.*)\./)[1]}`);
if (config.face.iris.enabled && config.debug) log(`load model: ${config.face.iris.modelPath.match(/\/(.*)\./)[1]}`);
return faceboxes;
}

View File

@ -3,7 +3,6 @@ import * as sysinfo from './sysinfo';
import * as tf from '../dist/tfjs.esm.js';
import * as backend from './tfjs/backend';
import * as facemesh from './blazeface/facemesh';
import * as faceboxes from './faceboxes/faceboxes';
import * as age from './age/age';
import * as gender from './gender/gender';
import * as emotion from './emotion/emotion';
@ -154,7 +153,6 @@ class Human {
if (this.config.debug) log('tf flags:', this.tf.ENV.flags);
}
}
const face = this.config.face.detector.modelPath.includes('faceboxes') ? faceboxes : facemesh;
if (this.config.async) {
[
this.models.face,
@ -166,7 +164,7 @@ class Human {
this.models.posenet,
this.models.blazepose,
] = await Promise.all([
this.models.face || (this.config.face.enabled ? face.load(this.config) : null),
this.models.face || (this.config.face.enabled ? facemesh.load(this.config) : null),
this.models.age || ((this.config.face.enabled && this.config.face.age.enabled) ? age.load(this.config) : null),
this.models.gender || ((this.config.face.enabled && this.config.face.gender.enabled) ? gender.load(this.config) : null),
this.models.emotion || ((this.config.face.enabled && this.config.face.emotion.enabled) ? emotion.load(this.config) : null),
@ -176,7 +174,7 @@ class Human {
this.models.posenet || (this.config.body.enabled && this.config.body.modelType.startsWith('blazepose') ? blazepose.load(this.config) : null),
]);
} else {
if (this.config.face.enabled && !this.models.face) this.models.face = await face.load(this.config);
if (this.config.face.enabled && !this.models.face) this.models.face = await facemesh.load(this.config);
if (this.config.face.enabled && this.config.face.age.enabled && !this.models.age) this.models.age = await age.load(this.config);
if (this.config.face.enabled && this.config.face.gender.enabled && !this.models.gender) this.models.gender = await gender.load(this.config);
if (this.config.face.enabled && this.config.face.emotion.enabled && !this.models.emotion) this.models.emotion = await emotion.load(this.config);

View File

@ -1,13 +0,0 @@
export declare class FaceBoxes {
enlarge: number;
model: any;
config: any;
constructor(model: any, config: any);
estimateFaces(input: any, config: any): Promise<{
confidence: number;
box: any;
boxRaw: any;
image: any;
}[]>;
}
export declare function load(config: any): Promise<FaceBoxes>;