mirror of https://github.com/vladmandic/human
changed build for optimized node & browser
parent
c8abb77c6a
commit
8d9ed597f3
|
@ -282,7 +282,7 @@ function runHumanDetect(input, canvas, timestamp) {
|
|||
else log(`camera not ready: track state: ${input.srcObject?.getVideoTracks()[0].readyState} stream state: ${input.readyState}`);
|
||||
clearTimeout(ui.drawThread);
|
||||
ui.drawThread = null;
|
||||
log('frame statistics: drawn:', ui.framesDraw, 'detected:', ui.framesDetect);
|
||||
log('frame statistics: process:', ui.framesDetect, 'refresh:', ui.framesDraw);
|
||||
return;
|
||||
}
|
||||
status('');
|
||||
|
|
70
demo/node.js
70
demo/node.js
|
@ -1,29 +1,12 @@
|
|||
const tf = require('@tensorflow/tfjs-node');
|
||||
const log = require('@vladmandic/pilogger');
|
||||
const fs = require('fs');
|
||||
const process = require('process');
|
||||
const console = require('console');
|
||||
const Human = require('..').default; // this resolves to project root which is '@vladmandic/human'
|
||||
// for Node, `tfjs-node` or `tfjs-node-gpu` should be loaded before using Human
|
||||
const tf = require('@tensorflow/tfjs-node'); // or const tf = require('@tensorflow/tfjs-node-gpu');
|
||||
// load specific version of Human library that matches TensorFlow mode
|
||||
const Human = require('../dist/human.node.js').default; // or const Human = require('../dist/human.node-gpu.js').default;
|
||||
|
||||
const logger = new console.Console({
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
ignoreErrors: true,
|
||||
groupIndentation: 2,
|
||||
inspectOptions: {
|
||||
showHidden: true,
|
||||
depth: 5,
|
||||
colors: true,
|
||||
showProxy: true,
|
||||
maxArrayLength: 1024,
|
||||
maxStringLength: 10240,
|
||||
breakLength: 200,
|
||||
compact: 64,
|
||||
sorted: false,
|
||||
getters: true,
|
||||
},
|
||||
});
|
||||
|
||||
const config = {
|
||||
const myConfig = {
|
||||
backend: 'tensorflow',
|
||||
console: true,
|
||||
videoOptimized: false,
|
||||
|
@ -31,9 +14,9 @@ const config = {
|
|||
detector: { modelPath: 'file://models/blazeface-back.json' },
|
||||
mesh: { modelPath: 'file://models/facemesh.json' },
|
||||
iris: { modelPath: 'file://models/iris.json' },
|
||||
age: { modelPath: 'file://models/ssrnet-age-imdb.json' },
|
||||
gender: { modelPath: 'file://models/ssrnet-gender-imdb.json' },
|
||||
emotion: { modelPath: 'file://models/emotion.json' },
|
||||
age: { modelPath: 'file://models/age-ssrnet-imdb.json' },
|
||||
gender: { modelPath: 'file://models/gender-ssrnet-imdb.json' },
|
||||
emotion: { modelPath: 'file://models/emotion-large.json' },
|
||||
},
|
||||
body: { modelPath: 'file://models/posenet.json' },
|
||||
hand: {
|
||||
|
@ -42,30 +25,37 @@ const config = {
|
|||
},
|
||||
};
|
||||
|
||||
async function detect(input, output) {
|
||||
await tf.setBackend('tensorflow');
|
||||
async function detect(input) {
|
||||
// wait until tf is ready
|
||||
await tf.ready();
|
||||
logger.info('TFJS Flags:', tf.env().features);
|
||||
logger.log('Loading:', input);
|
||||
// create instance of human
|
||||
const human = new Human(myConfig);
|
||||
// pre-load models
|
||||
await human.load();
|
||||
// read input image file and create tensor to be used for processing
|
||||
const buffer = fs.readFileSync(input);
|
||||
const decoded = tf.node.decodeImage(buffer);
|
||||
const decoded = human.tf.node.decodeImage(buffer);
|
||||
const casted = decoded.toFloat();
|
||||
const image = casted.expandDims(0);
|
||||
decoded.dispose();
|
||||
casted.dispose();
|
||||
logger.log('Processing:', image.shape);
|
||||
const human = new Human();
|
||||
const result = await human.detect(image, config);
|
||||
// image shape contains image dimensions and depth
|
||||
log.state('Processing:', image.shape);
|
||||
// must disable face model when runing in tfjs-node as it's missing required ops
|
||||
// see <https://github.com/tensorflow/tfjs/issues/4066>
|
||||
myConfig.face.enabled = false;
|
||||
// run actual detection
|
||||
const result = await human.detect(image, myConfig);
|
||||
// dispose image tensor as we no longer need it
|
||||
image.dispose();
|
||||
logger.log(result);
|
||||
// Draw detected data and save processed image
|
||||
logger.log('TODO Saving:', output);
|
||||
// print data to console
|
||||
log.data(result);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
if (process.argv.length !== 4) logger.error('Parameters: <input image> <output image>');
|
||||
else if (!fs.existsSync(process.argv[2])) logger.error(`File not found: ${process.argv[2]}`);
|
||||
else detect(process.argv[2], process.argv[3]);
|
||||
if (process.argv.length !== 3) log.error('Parameters: <input image>');
|
||||
else if (!fs.existsSync(process.argv[2])) log.error(`File not found: ${process.argv[2]}`);
|
||||
else detect(process.argv[2]);
|
||||
}
|
||||
|
||||
main();
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"inputs": {
|
||||
"demo/browser.js": {
|
||||
"bytes": 25185,
|
||||
"bytes": 25186,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/human.esm.js"
|
||||
|
@ -30,7 +30,7 @@
|
|||
"imports": []
|
||||
},
|
||||
"dist/human.esm.js": {
|
||||
"bytes": 1783819,
|
||||
"bytes": 1783940,
|
||||
"imports": []
|
||||
}
|
||||
},
|
||||
|
@ -38,14 +38,14 @@
|
|||
"dist/demo-browser-index.js.map": {
|
||||
"imports": [],
|
||||
"inputs": {},
|
||||
"bytes": 2677447
|
||||
"bytes": 2678157
|
||||
},
|
||||
"dist/demo-browser-index.js": {
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"inputs": {
|
||||
"dist/human.esm.js": {
|
||||
"bytesInOutput": 1776574
|
||||
"bytesInOutput": 1776695
|
||||
},
|
||||
"demo/draw.js": {
|
||||
"bytesInOutput": 7668
|
||||
|
@ -57,10 +57,10 @@
|
|||
"bytesInOutput": 7436
|
||||
},
|
||||
"demo/browser.js": {
|
||||
"bytesInOutput": 19406
|
||||
"bytesInOutput": 19407
|
||||
}
|
||||
},
|
||||
"bytes": 1830308
|
||||
"bytes": 1830430
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,477 +0,0 @@
|
|||
{
|
||||
"inputs": {
|
||||
"config.js": {
|
||||
"bytes": 8721,
|
||||
"imports": []
|
||||
},
|
||||
"dist/tfjs.esm.js": {
|
||||
"bytes": 1531180,
|
||||
"imports": []
|
||||
},
|
||||
"package.json": {
|
||||
"bytes": 2295,
|
||||
"imports": []
|
||||
},
|
||||
"src/age/age.js": {
|
||||
"bytes": 1968,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/profile.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/buildParts.js": {
|
||||
"bytes": 2035,
|
||||
"imports": [
|
||||
{
|
||||
"path": "src/body/heapSort.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/decodePose.js": {
|
||||
"bytes": 4540,
|
||||
"imports": [
|
||||
{
|
||||
"path": "src/body/keypoints.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/vectors.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/heapSort.js": {
|
||||
"bytes": 1590,
|
||||
"imports": []
|
||||
},
|
||||
"src/body/keypoints.js": {
|
||||
"bytes": 2291,
|
||||
"imports": []
|
||||
},
|
||||
"src/body/modelBase.js": {
|
||||
"bytes": 889,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/modelMobileNet.js": {
|
||||
"bytes": 599,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/modelBase.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/modelPoseNet.js": {
|
||||
"bytes": 1928,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/modelMobileNet.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/decodeMultiple.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/util.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/posenet.js": {
|
||||
"bytes": 830,
|
||||
"imports": [
|
||||
{
|
||||
"path": "src/body/modelMobileNet.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/modelPoseNet.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/decodeMultiple.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/keypoints.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/util.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": 2107,
|
||||
"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": 6993,
|
||||
"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": 2456,
|
||||
"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": 13868,
|
||||
"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.js": {
|
||||
"bytes": 3306,
|
||||
"imports": []
|
||||
},
|
||||
"src/hand/anchors.js": {
|
||||
"bytes": 224151,
|
||||
"imports": []
|
||||
},
|
||||
"src/hand/box.js": {
|
||||
"bytes": 3226,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/hand/handdetector.js": {
|
||||
"bytes": 4276,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/box.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/hand/handpipeline.js": {
|
||||
"bytes": 7608,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/box.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/util.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/hand/handpose.js": {
|
||||
"bytes": 3075,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/handdetector.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/handpipeline.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/anchors.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/hand/util.js": {
|
||||
"bytes": 3030,
|
||||
"imports": []
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytes": 15842,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/face/facemesh.js"
|
||||
},
|
||||
{
|
||||
"path": "src/age/age.js"
|
||||
},
|
||||
{
|
||||
"path": "src/gender/gender.js"
|
||||
},
|
||||
{
|
||||
"path": "src/emotion/emotion.js"
|
||||
},
|
||||
{
|
||||
"path": "src/embedding/embedding.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/posenet.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/handpose.js"
|
||||
},
|
||||
{
|
||||
"path": "src/gesture.js"
|
||||
},
|
||||
{
|
||||
"path": "src/image.js"
|
||||
},
|
||||
{
|
||||
"path": "src/profile.js"
|
||||
},
|
||||
{
|
||||
"path": "config.js"
|
||||
},
|
||||
{
|
||||
"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": {
|
||||
"dist/human.esm-nobundle.js.map": {
|
||||
"imports": [],
|
||||
"inputs": {},
|
||||
"bytes": 2582034
|
||||
},
|
||||
"dist/human.esm-nobundle.js": {
|
||||
"imports": [],
|
||||
"exports": [
|
||||
"default"
|
||||
],
|
||||
"inputs": {
|
||||
"src/face/blazeface.js": {
|
||||
"bytesInOutput": 5152
|
||||
},
|
||||
"src/face/box.js": {
|
||||
"bytesInOutput": 1586
|
||||
},
|
||||
"src/face/util.js": {
|
||||
"bytesInOutput": 2423
|
||||
},
|
||||
"src/face/coords.js": {
|
||||
"bytesInOutput": 30819
|
||||
},
|
||||
"src/face/facepipeline.js": {
|
||||
"bytesInOutput": 9453
|
||||
},
|
||||
"src/face/facemesh.js": {
|
||||
"bytesInOutput": 1885
|
||||
},
|
||||
"src/profile.js": {
|
||||
"bytesInOutput": 860
|
||||
},
|
||||
"src/age/age.js": {
|
||||
"bytesInOutput": 1156
|
||||
},
|
||||
"src/gender/gender.js": {
|
||||
"bytesInOutput": 1920
|
||||
},
|
||||
"src/emotion/emotion.js": {
|
||||
"bytesInOutput": 1790
|
||||
},
|
||||
"src/embedding/embedding.js": {
|
||||
"bytesInOutput": 1360
|
||||
},
|
||||
"src/body/modelBase.js": {
|
||||
"bytesInOutput": 612
|
||||
},
|
||||
"src/body/modelMobileNet.js": {
|
||||
"bytesInOutput": 378
|
||||
},
|
||||
"src/body/heapSort.js": {
|
||||
"bytesInOutput": 1138
|
||||
},
|
||||
"src/body/buildParts.js": {
|
||||
"bytesInOutput": 1313
|
||||
},
|
||||
"src/body/keypoints.js": {
|
||||
"bytesInOutput": 1810
|
||||
},
|
||||
"src/body/vectors.js": {
|
||||
"bytesInOutput": 1058
|
||||
},
|
||||
"src/body/decodePose.js": {
|
||||
"bytesInOutput": 3131
|
||||
},
|
||||
"src/body/decodeMultiple.js": {
|
||||
"bytesInOutput": 1682
|
||||
},
|
||||
"src/body/util.js": {
|
||||
"bytesInOutput": 1923
|
||||
},
|
||||
"src/body/modelPoseNet.js": {
|
||||
"bytesInOutput": 1589
|
||||
},
|
||||
"src/body/posenet.js": {
|
||||
"bytesInOutput": 834
|
||||
},
|
||||
"src/hand/handdetector.js": {
|
||||
"bytesInOutput": 2784
|
||||
},
|
||||
"src/hand/handpipeline.js": {
|
||||
"bytesInOutput": 4726
|
||||
},
|
||||
"src/hand/anchors.js": {
|
||||
"bytesInOutput": 127032
|
||||
},
|
||||
"src/hand/handpose.js": {
|
||||
"bytesInOutput": 1829
|
||||
},
|
||||
"src/gesture.js": {
|
||||
"bytesInOutput": 2255
|
||||
},
|
||||
"src/imagefx.js": {
|
||||
"bytesInOutput": 13638
|
||||
},
|
||||
"src/image.js": {
|
||||
"bytesInOutput": 4079
|
||||
},
|
||||
"dist/tfjs.esm.js": {
|
||||
"bytesInOutput": 1529574
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytesInOutput": 10483
|
||||
},
|
||||
"src/hand/box.js": {
|
||||
"bytesInOutput": 1880
|
||||
},
|
||||
"src/hand/util.js": {
|
||||
"bytesInOutput": 1808
|
||||
},
|
||||
"config.js": {
|
||||
"bytesInOutput": 1368
|
||||
},
|
||||
"package.json": {
|
||||
"bytesInOutput": 21
|
||||
}
|
||||
},
|
||||
"bytes": 1783828
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -9,7 +9,7 @@
|
|||
"imports": []
|
||||
},
|
||||
"package.json": {
|
||||
"bytes": 2295,
|
||||
"bytes": 2322,
|
||||
"imports": []
|
||||
},
|
||||
"src/age/age.js": {
|
||||
|
@ -290,7 +290,7 @@
|
|||
"imports": []
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytes": 15842,
|
||||
"bytes": 16049,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
|
@ -357,7 +357,7 @@
|
|||
"dist/human.esm.js.map": {
|
||||
"imports": [],
|
||||
"inputs": {},
|
||||
"bytes": 2582034
|
||||
"bytes": 2582747
|
||||
},
|
||||
"dist/human.esm.js": {
|
||||
"imports": [],
|
||||
|
@ -456,7 +456,7 @@
|
|||
"bytesInOutput": 1529574
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytesInOutput": 10483
|
||||
"bytesInOutput": 10604
|
||||
},
|
||||
"src/hand/box.js": {
|
||||
"bytesInOutput": 1880
|
||||
|
@ -471,7 +471,7 @@
|
|||
"bytesInOutput": 21
|
||||
}
|
||||
},
|
||||
"bytes": 1783819
|
||||
"bytes": 1783940
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -9,7 +9,7 @@
|
|||
"imports": []
|
||||
},
|
||||
"package.json": {
|
||||
"bytes": 2295,
|
||||
"bytes": 2322,
|
||||
"imports": []
|
||||
},
|
||||
"src/age/age.js": {
|
||||
|
@ -290,7 +290,7 @@
|
|||
"imports": []
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytes": 15842,
|
||||
"bytes": 16049,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
|
@ -357,7 +357,7 @@
|
|||
"dist/human.js.map": {
|
||||
"imports": [],
|
||||
"inputs": {},
|
||||
"bytes": 2549418
|
||||
"bytes": 2549709
|
||||
},
|
||||
"dist/human.js": {
|
||||
"imports": [],
|
||||
|
@ -451,7 +451,7 @@
|
|||
"bytesInOutput": 4044
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytesInOutput": 10547
|
||||
"bytesInOutput": 10668
|
||||
},
|
||||
"dist/tfjs.esm.js": {
|
||||
"bytesInOutput": 1529065
|
||||
|
@ -469,7 +469,7 @@
|
|||
"bytesInOutput": 21
|
||||
}
|
||||
},
|
||||
"bytes": 1783130
|
||||
"bytes": 1783251
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,475 +0,0 @@
|
|||
{
|
||||
"inputs": {
|
||||
"config.js": {
|
||||
"bytes": 8721,
|
||||
"imports": []
|
||||
},
|
||||
"dist/tfjs.esm.js": {
|
||||
"bytes": 1531180,
|
||||
"imports": []
|
||||
},
|
||||
"package.json": {
|
||||
"bytes": 2295,
|
||||
"imports": []
|
||||
},
|
||||
"src/age/age.js": {
|
||||
"bytes": 1968,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/profile.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/buildParts.js": {
|
||||
"bytes": 2035,
|
||||
"imports": [
|
||||
{
|
||||
"path": "src/body/heapSort.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/decodePose.js": {
|
||||
"bytes": 4540,
|
||||
"imports": [
|
||||
{
|
||||
"path": "src/body/keypoints.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/vectors.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/heapSort.js": {
|
||||
"bytes": 1590,
|
||||
"imports": []
|
||||
},
|
||||
"src/body/keypoints.js": {
|
||||
"bytes": 2291,
|
||||
"imports": []
|
||||
},
|
||||
"src/body/modelBase.js": {
|
||||
"bytes": 889,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/modelMobileNet.js": {
|
||||
"bytes": 599,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/modelBase.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/modelPoseNet.js": {
|
||||
"bytes": 1928,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/modelMobileNet.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/decodeMultiple.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/util.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/body/posenet.js": {
|
||||
"bytes": 830,
|
||||
"imports": [
|
||||
{
|
||||
"path": "src/body/modelMobileNet.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/modelPoseNet.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/decodeMultiple.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/keypoints.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/util.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": 2107,
|
||||
"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": 6993,
|
||||
"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": 2456,
|
||||
"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": 13868,
|
||||
"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.js": {
|
||||
"bytes": 3306,
|
||||
"imports": []
|
||||
},
|
||||
"src/hand/anchors.js": {
|
||||
"bytes": 224151,
|
||||
"imports": []
|
||||
},
|
||||
"src/hand/box.js": {
|
||||
"bytes": 3226,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/hand/handdetector.js": {
|
||||
"bytes": 4276,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/box.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/hand/handpipeline.js": {
|
||||
"bytes": 7608,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/box.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/util.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/hand/handpose.js": {
|
||||
"bytes": 3075,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/handdetector.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/handpipeline.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/anchors.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"src/hand/util.js": {
|
||||
"bytes": 3030,
|
||||
"imports": []
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytes": 15842,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
},
|
||||
{
|
||||
"path": "src/face/facemesh.js"
|
||||
},
|
||||
{
|
||||
"path": "src/age/age.js"
|
||||
},
|
||||
{
|
||||
"path": "src/gender/gender.js"
|
||||
},
|
||||
{
|
||||
"path": "src/emotion/emotion.js"
|
||||
},
|
||||
{
|
||||
"path": "src/embedding/embedding.js"
|
||||
},
|
||||
{
|
||||
"path": "src/body/posenet.js"
|
||||
},
|
||||
{
|
||||
"path": "src/hand/handpose.js"
|
||||
},
|
||||
{
|
||||
"path": "src/gesture.js"
|
||||
},
|
||||
{
|
||||
"path": "src/image.js"
|
||||
},
|
||||
{
|
||||
"path": "src/profile.js"
|
||||
},
|
||||
{
|
||||
"path": "config.js"
|
||||
},
|
||||
{
|
||||
"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": {
|
||||
"dist/human.node-nobundle.js.map": {
|
||||
"imports": [],
|
||||
"inputs": {},
|
||||
"bytes": 2598331
|
||||
},
|
||||
"dist/human.node-nobundle.js": {
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"inputs": {
|
||||
"src/face/blazeface.js": {
|
||||
"bytesInOutput": 5156
|
||||
},
|
||||
"src/face/box.js": {
|
||||
"bytesInOutput": 1593
|
||||
},
|
||||
"src/face/util.js": {
|
||||
"bytesInOutput": 2434
|
||||
},
|
||||
"src/face/coords.js": {
|
||||
"bytesInOutput": 30830
|
||||
},
|
||||
"src/face/facepipeline.js": {
|
||||
"bytesInOutput": 9455
|
||||
},
|
||||
"src/face/facemesh.js": {
|
||||
"bytesInOutput": 1889
|
||||
},
|
||||
"src/profile.js": {
|
||||
"bytesInOutput": 862
|
||||
},
|
||||
"src/age/age.js": {
|
||||
"bytesInOutput": 1159
|
||||
},
|
||||
"src/gender/gender.js": {
|
||||
"bytesInOutput": 1923
|
||||
},
|
||||
"src/emotion/emotion.js": {
|
||||
"bytesInOutput": 1793
|
||||
},
|
||||
"src/embedding/embedding.js": {
|
||||
"bytesInOutput": 1364
|
||||
},
|
||||
"src/body/modelBase.js": {
|
||||
"bytesInOutput": 614
|
||||
},
|
||||
"src/body/modelMobileNet.js": {
|
||||
"bytesInOutput": 380
|
||||
},
|
||||
"src/body/heapSort.js": {
|
||||
"bytesInOutput": 1140
|
||||
},
|
||||
"src/body/buildParts.js": {
|
||||
"bytesInOutput": 1315
|
||||
},
|
||||
"src/body/keypoints.js": {
|
||||
"bytesInOutput": 1821
|
||||
},
|
||||
"src/body/vectors.js": {
|
||||
"bytesInOutput": 1066
|
||||
},
|
||||
"src/body/decodePose.js": {
|
||||
"bytesInOutput": 3133
|
||||
},
|
||||
"src/body/decodeMultiple.js": {
|
||||
"bytesInOutput": 1684
|
||||
},
|
||||
"src/body/util.js": {
|
||||
"bytesInOutput": 1931
|
||||
},
|
||||
"src/body/modelPoseNet.js": {
|
||||
"bytesInOutput": 1592
|
||||
},
|
||||
"src/body/posenet.js": {
|
||||
"bytesInOutput": 848
|
||||
},
|
||||
"src/hand/handdetector.js": {
|
||||
"bytesInOutput": 2786
|
||||
},
|
||||
"src/hand/handpipeline.js": {
|
||||
"bytesInOutput": 4728
|
||||
},
|
||||
"src/hand/anchors.js": {
|
||||
"bytesInOutput": 127034
|
||||
},
|
||||
"src/hand/handpose.js": {
|
||||
"bytesInOutput": 1832
|
||||
},
|
||||
"src/gesture.js": {
|
||||
"bytesInOutput": 2259
|
||||
},
|
||||
"src/imagefx.js": {
|
||||
"bytesInOutput": 13640
|
||||
},
|
||||
"src/image.js": {
|
||||
"bytesInOutput": 4081
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytesInOutput": 10521
|
||||
},
|
||||
"dist/tfjs.esm.js": {
|
||||
"bytesInOutput": 1529748
|
||||
},
|
||||
"src/hand/box.js": {
|
||||
"bytesInOutput": 1880
|
||||
},
|
||||
"src/hand/util.js": {
|
||||
"bytesInOutput": 1808
|
||||
},
|
||||
"config.js": {
|
||||
"bytesInOutput": 1368
|
||||
},
|
||||
"package.json": {
|
||||
"bytesInOutput": 21
|
||||
}
|
||||
},
|
||||
"bytes": 1784164
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -5,11 +5,11 @@
|
|||
"imports": []
|
||||
},
|
||||
"dist/tfjs.esm.js": {
|
||||
"bytes": 1531180,
|
||||
"bytes": 1048,
|
||||
"imports": []
|
||||
},
|
||||
"package.json": {
|
||||
"bytes": 2295,
|
||||
"bytes": 2322,
|
||||
"imports": []
|
||||
},
|
||||
"src/age/age.js": {
|
||||
|
@ -290,7 +290,7 @@
|
|||
"imports": []
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytes": 15842,
|
||||
"bytes": 16049,
|
||||
"imports": [
|
||||
{
|
||||
"path": "dist/tfjs.esm.js"
|
||||
|
@ -354,20 +354,23 @@
|
|||
}
|
||||
},
|
||||
"outputs": {
|
||||
"dist/human.node.js.map": {
|
||||
"dist/human.node-gpu.js.map": {
|
||||
"imports": [],
|
||||
"inputs": {},
|
||||
"bytes": 2598331
|
||||
"bytes": 685707
|
||||
},
|
||||
"dist/human.node.js": {
|
||||
"dist/human.node-gpu.js": {
|
||||
"imports": [],
|
||||
"exports": [],
|
||||
"inputs": {
|
||||
"dist/tfjs.esm.js": {
|
||||
"bytesInOutput": 966
|
||||
},
|
||||
"src/face/blazeface.js": {
|
||||
"bytesInOutput": 5156
|
||||
"bytesInOutput": 5307
|
||||
},
|
||||
"src/face/box.js": {
|
||||
"bytesInOutput": 1593
|
||||
"bytesInOutput": 1638
|
||||
},
|
||||
"src/face/util.js": {
|
||||
"bytesInOutput": 2434
|
||||
|
@ -376,34 +379,34 @@
|
|||
"bytesInOutput": 30830
|
||||
},
|
||||
"src/face/facepipeline.js": {
|
||||
"bytesInOutput": 9455
|
||||
"bytesInOutput": 9509
|
||||
},
|
||||
"src/face/facemesh.js": {
|
||||
"bytesInOutput": 1889
|
||||
"bytesInOutput": 1930
|
||||
},
|
||||
"src/profile.js": {
|
||||
"bytesInOutput": 862
|
||||
"bytesInOutput": 860
|
||||
},
|
||||
"src/age/age.js": {
|
||||
"bytesInOutput": 1159
|
||||
"bytesInOutput": 1210
|
||||
},
|
||||
"src/gender/gender.js": {
|
||||
"bytesInOutput": 1923
|
||||
"bytesInOutput": 1998
|
||||
},
|
||||
"src/emotion/emotion.js": {
|
||||
"bytesInOutput": 1793
|
||||
"bytesInOutput": 1861
|
||||
},
|
||||
"src/embedding/embedding.js": {
|
||||
"bytesInOutput": 1364
|
||||
"bytesInOutput": 1411
|
||||
},
|
||||
"src/body/modelBase.js": {
|
||||
"bytesInOutput": 614
|
||||
"bytesInOutput": 655
|
||||
},
|
||||
"src/body/modelMobileNet.js": {
|
||||
"bytesInOutput": 380
|
||||
"bytesInOutput": 421
|
||||
},
|
||||
"src/body/heapSort.js": {
|
||||
"bytesInOutput": 1140
|
||||
"bytesInOutput": 1138
|
||||
},
|
||||
"src/body/buildParts.js": {
|
||||
"bytesInOutput": 1315
|
||||
|
@ -412,7 +415,7 @@
|
|||
"bytesInOutput": 1821
|
||||
},
|
||||
"src/body/vectors.js": {
|
||||
"bytesInOutput": 1066
|
||||
"bytesInOutput": 1050
|
||||
},
|
||||
"src/body/decodePose.js": {
|
||||
"bytesInOutput": 3133
|
||||
|
@ -421,55 +424,52 @@
|
|||
"bytesInOutput": 1684
|
||||
},
|
||||
"src/body/util.js": {
|
||||
"bytesInOutput": 1931
|
||||
"bytesInOutput": 1928
|
||||
},
|
||||
"src/body/modelPoseNet.js": {
|
||||
"bytesInOutput": 1592
|
||||
"bytesInOutput": 1627
|
||||
},
|
||||
"src/body/posenet.js": {
|
||||
"bytesInOutput": 848
|
||||
},
|
||||
"src/hand/handdetector.js": {
|
||||
"bytesInOutput": 2786
|
||||
"bytesInOutput": 2924
|
||||
},
|
||||
"src/hand/handpipeline.js": {
|
||||
"bytesInOutput": 4728
|
||||
"bytesInOutput": 4772
|
||||
},
|
||||
"src/hand/anchors.js": {
|
||||
"bytesInOutput": 127034
|
||||
},
|
||||
"src/hand/handpose.js": {
|
||||
"bytesInOutput": 1832
|
||||
"bytesInOutput": 1873
|
||||
},
|
||||
"src/gesture.js": {
|
||||
"bytesInOutput": 2259
|
||||
},
|
||||
"src/imagefx.js": {
|
||||
"bytesInOutput": 13640
|
||||
"bytesInOutput": 13620
|
||||
},
|
||||
"src/image.js": {
|
||||
"bytesInOutput": 4081
|
||||
"bytesInOutput": 4107
|
||||
},
|
||||
"src/human.js": {
|
||||
"bytesInOutput": 10521
|
||||
},
|
||||
"dist/tfjs.esm.js": {
|
||||
"bytesInOutput": 1529748
|
||||
"bytesInOutput": 10692
|
||||
},
|
||||
"src/hand/box.js": {
|
||||
"bytesInOutput": 1880
|
||||
"bytesInOutput": 1917
|
||||
},
|
||||
"src/hand/util.js": {
|
||||
"bytesInOutput": 1808
|
||||
"bytesInOutput": 1802
|
||||
},
|
||||
"config.js": {
|
||||
"bytesInOutput": 1368
|
||||
},
|
||||
"package.json": {
|
||||
"bytesInOutput": 21
|
||||
"bytesInOutput": 20
|
||||
}
|
||||
},
|
||||
"bytes": 1784155
|
||||
"bytes": 249919
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17818,7 +17818,7 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"src/tf.js": {
|
||||
"src/tfjs/tf-browser.js": {
|
||||
"bytes": 1798,
|
||||
"imports": [
|
||||
{
|
||||
|
@ -21264,7 +21264,7 @@
|
|||
"node_modules/@tensorflow/tfjs/dist/version.js": {
|
||||
"bytesInOutput": 24
|
||||
},
|
||||
"src/tf.js": {
|
||||
"src/tfjs/tf-browser.js": {
|
||||
"bytesInOutput": 0
|
||||
},
|
||||
"node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/types.js": {
|
||||
|
|
|
@ -282,6 +282,34 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"@tensorflow/tfjs-node-gpu": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node-gpu/-/tfjs-node-gpu-2.7.0.tgz",
|
||||
"integrity": "sha512-aL49B/0R7sBJpgeQ3sOeH38UFf78Hr0mi3CLLswGFgt+DALd+1sc4jBpSORycoHjZLiPysW5YsFz9t5BNIw8ig==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@tensorflow/tfjs": "2.7.0",
|
||||
"@tensorflow/tfjs-core": "2.7.0",
|
||||
"adm-zip": "^0.4.11",
|
||||
"google-protobuf": "^3.9.2",
|
||||
"https-proxy-agent": "^2.2.1",
|
||||
"node-pre-gyp": "0.14.0",
|
||||
"progress": "^2.0.0",
|
||||
"rimraf": "^2.6.2",
|
||||
"tar": "^4.4.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"rimraf": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
|
||||
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"glob": "^7.1.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@types/emscripten": {
|
||||
"version": "0.0.34",
|
||||
"resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.34.tgz",
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
"@tensorflow/tfjs-data": "^2.7.0",
|
||||
"@tensorflow/tfjs-layers": "^2.7.0",
|
||||
"@tensorflow/tfjs-node": "^2.7.0",
|
||||
"@tensorflow/tfjs-node-gpu": "^2.7.0",
|
||||
"@vladmandic/pilogger": "^0.2.7",
|
||||
"chokidar": "^3.4.3",
|
||||
"dayjs": "^1.9.6",
|
||||
|
@ -49,7 +50,7 @@
|
|||
"start": "node --trace-warnings --unhandled-rejections=strict --trace-uncaught --no-deprecation src/node.js",
|
||||
"lint": "eslint src/*.js demo/*.js",
|
||||
"dev": "npm install && node server/dev.js",
|
||||
"build": "npm install && npm run lint && rimraf dist/* && node server/build.js && node server/changelog.js",
|
||||
"build": "npm install && rimraf dist/* && node server/build.js && node server/changelog.js",
|
||||
"update": "npm update --depth 20 --force && npm dedupe && npm prune && npm audit"
|
||||
},
|
||||
"keywords": [
|
||||
|
|
166
server/build.js
166
server/build.js
|
@ -6,7 +6,6 @@ const log = require('@vladmandic/pilogger');
|
|||
|
||||
// keeps esbuild service instance cached
|
||||
let es;
|
||||
// const incremental = {};
|
||||
const banner = `
|
||||
/*
|
||||
Human library
|
||||
|
@ -22,70 +21,100 @@ const common = {
|
|||
minifySyntax: true,
|
||||
bundle: true,
|
||||
sourcemap: true,
|
||||
// incremental: true,
|
||||
logLevel: 'error',
|
||||
target: 'es2018',
|
||||
tsconfig: 'server/tfjs-tsconfig.json',
|
||||
};
|
||||
|
||||
const tfjs = {
|
||||
platform: 'browser',
|
||||
format: 'esm',
|
||||
metafile: 'dist/tfjs.esm.json',
|
||||
entryPoints: ['src/tf.js'],
|
||||
outfile: 'dist/tfjs.esm.js',
|
||||
external: ['fs', 'buffer', 'util'],
|
||||
};
|
||||
|
||||
// all build targets
|
||||
const config = {
|
||||
iifeBundle: {
|
||||
platform: 'browser',
|
||||
format: 'iife',
|
||||
globalName: 'Human',
|
||||
metafile: 'dist/human.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.js',
|
||||
external: ['fs', 'buffer', 'util'],
|
||||
const targets = {
|
||||
node: {
|
||||
tfjs: {
|
||||
platform: 'node',
|
||||
format: 'cjs',
|
||||
metafile: 'dist/tfjs.esm.json',
|
||||
entryPoints: ['src/tfjs/tf-node.js'],
|
||||
outfile: 'dist/tfjs.esm.js',
|
||||
external: ['@tensorflow'],
|
||||
},
|
||||
node: {
|
||||
platform: 'node',
|
||||
format: 'cjs',
|
||||
metafile: 'dist/human.node.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.node.js',
|
||||
external: ['@tensorflow'],
|
||||
},
|
||||
},
|
||||
esmBundle: {
|
||||
platform: 'browser',
|
||||
format: 'esm',
|
||||
metafile: 'dist/human.esm.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.esm.js',
|
||||
external: ['fs', 'buffer', 'util'],
|
||||
nodeGPU: {
|
||||
tfjs: {
|
||||
platform: 'node',
|
||||
format: 'cjs',
|
||||
metafile: 'dist/tfjs.esm.json',
|
||||
entryPoints: ['src/tfjs/tf-node-gpu.js'],
|
||||
outfile: 'dist/tfjs.esm.js',
|
||||
external: ['@tensorflow'],
|
||||
},
|
||||
node: {
|
||||
platform: 'node',
|
||||
format: 'cjs',
|
||||
metafile: 'dist/human.node.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.node-gpu.js',
|
||||
external: ['@tensorflow'],
|
||||
},
|
||||
},
|
||||
esmNoBundle: {
|
||||
platform: 'browser',
|
||||
format: 'esm',
|
||||
metafile: 'dist/human.esm-nobundle.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.esm-nobundle.js',
|
||||
external: ['fs', 'buffer', 'util', '@tensorflow'],
|
||||
browserNoBundle: {
|
||||
tfjs: {
|
||||
platform: 'browser',
|
||||
format: 'esm',
|
||||
metafile: 'dist/tfjs.esm.json',
|
||||
entryPoints: ['src/tfjs/tf-browser.js'],
|
||||
outfile: 'dist/tfjs.esm.js',
|
||||
external: ['fs', 'buffer', 'util', '@tensorflow'],
|
||||
},
|
||||
esm: {
|
||||
platform: 'browser',
|
||||
format: 'esm',
|
||||
metafile: 'dist/human.esm.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.esm-nobundle.js',
|
||||
external: ['fs', 'buffer', 'util', '@tensorflow'],
|
||||
},
|
||||
},
|
||||
nodeBundle: {
|
||||
platform: 'node',
|
||||
format: 'cjs',
|
||||
metafile: 'dist/human.node.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.node.js',
|
||||
},
|
||||
nodeNoBundle: {
|
||||
platform: 'node',
|
||||
format: 'cjs',
|
||||
metafile: 'dist/human.node-nobundle.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.node-nobundle.js',
|
||||
external: ['@tensorflow'],
|
||||
},
|
||||
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'],
|
||||
browserBundle: {
|
||||
tfjs: {
|
||||
platform: 'browser',
|
||||
format: 'esm',
|
||||
metafile: 'dist/tfjs.esm.json',
|
||||
entryPoints: ['src/tfjs/tf-browser.js'],
|
||||
outfile: 'dist/tfjs.esm.js',
|
||||
external: ['fs', 'buffer', 'util'],
|
||||
},
|
||||
iife: {
|
||||
platform: 'browser',
|
||||
format: 'iife',
|
||||
globalName: 'Human',
|
||||
metafile: 'dist/human.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.js',
|
||||
external: ['fs', 'buffer', 'util'],
|
||||
},
|
||||
esm: {
|
||||
platform: 'browser',
|
||||
format: 'esm',
|
||||
metafile: 'dist/human.esm.json',
|
||||
entryPoints: ['src/human.js'],
|
||||
outfile: 'dist/human.esm.js',
|
||||
external: ['fs', 'buffer', 'util'],
|
||||
},
|
||||
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'],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -107,7 +136,6 @@ async function getStats(metafile) {
|
|||
const files = [];
|
||||
for (const [key, val] of Object.entries(json.outputs)) {
|
||||
if (!key.endsWith('.map')) {
|
||||
// stats.outputs += 1;
|
||||
files.push(key);
|
||||
stats.outputBytes = (stats.outputBytes || 0) + val.bytes;
|
||||
}
|
||||
|
@ -123,19 +151,15 @@ async function build(f, msg) {
|
|||
if (!es) es = await esbuild.startService();
|
||||
// common build options
|
||||
try {
|
||||
// rebuild tfjs
|
||||
if (f.endsWith('tf.js') || !module.parent) {
|
||||
await es.build({ ...common, ...tfjs });
|
||||
const stats = await getStats(tfjs.metafile);
|
||||
log.state('Build:', stats);
|
||||
}
|
||||
// rebuild all targets
|
||||
for (const [target, options] of Object.entries(config)) {
|
||||
// if (!incremental.target) incremental.target = await es.build({ ...common, ...options });
|
||||
// else incremental.target.rebuild({ ...common, ...options });
|
||||
await es.build({ ...common, ...options });
|
||||
const stats = await getStats(options.metafile, target);
|
||||
log.state('Build:', stats);
|
||||
// rebuild all target groups and types
|
||||
for (const [targetGroupName, targetGroup] of Object.entries(targets)) {
|
||||
for (const [targetName, targetOptions] of Object.entries(targetGroup)) {
|
||||
// if triggered from watch mode, rebuild only browser bundle
|
||||
if (module.parent && targetGroupName !== 'browserBundle') continue;
|
||||
await es.build({ ...common, ...targetOptions });
|
||||
const stats = await getStats(targetOptions.metafile, targetName);
|
||||
log.state(`Build for: ${targetGroupName} type: ${targetName}:`, stats);
|
||||
}
|
||||
}
|
||||
if (!module.parent) process.exit(0);
|
||||
} catch (err) {
|
||||
|
|
16
src/human.js
16
src/human.js
|
@ -117,9 +117,11 @@ class Human {
|
|||
|
||||
if (this.firstRun) {
|
||||
this.log(`version: ${this.version} TensorFlow/JS version: ${tf.version_core}`);
|
||||
this.checkBackend(true);
|
||||
this.log('configuration:', this.config);
|
||||
this.log('flags:', tf.ENV.flags);
|
||||
await this.checkBackend(true);
|
||||
if (tf.ENV.flags.IS_BROWSER) {
|
||||
this.log('configuration:', this.config);
|
||||
this.log('tf flags:', tf.ENV.flags);
|
||||
}
|
||||
this.firstRun = false;
|
||||
}
|
||||
if (this.config.async) {
|
||||
|
@ -155,8 +157,8 @@ class Human {
|
|||
|
||||
// check if backend needs initialization if it changed
|
||||
async checkBackend(force) {
|
||||
const timeStamp = now();
|
||||
if (this.config.backend && (this.config.backend !== '') && force || (tf.getBackend() !== this.config.backend)) {
|
||||
const timeStamp = now();
|
||||
this.state = 'backend';
|
||||
/* force backend reload
|
||||
if (this.config.backend in tf.engine().registry) {
|
||||
|
@ -189,11 +191,12 @@ class Human {
|
|||
}
|
||||
tf.ENV.set('WEBGL_FORCE_F16_TEXTURES', true);
|
||||
tf.ENV.set('WEBGL_PACK_DEPTHWISECONV', true);
|
||||
const gl = await tf.backend().getGPGPUContext().gl;
|
||||
this.log(`gl version:${gl.getParameter(gl.VERSION)} renderer:${gl.getParameter(gl.RENDERER)}`);
|
||||
}
|
||||
await tf.ready();
|
||||
this.perf.backend = Math.trunc(now() - timeStamp);
|
||||
}
|
||||
const current = Math.trunc(now() - timeStamp);
|
||||
if (current > (this.perf.backend || 0)) this.perf.backend = current;
|
||||
}
|
||||
|
||||
async detectFace(input) {
|
||||
|
@ -418,6 +421,7 @@ class Human {
|
|||
|
||||
async warmup(userConfig, sample) {
|
||||
if (!sample) sample = new ImageData(255, 255);
|
||||
// const sample = tf.zeros([1, 255, 255, 3]);
|
||||
const warmup = await this.detect(sample, userConfig);
|
||||
this.log('warmed up');
|
||||
return warmup;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
export * from '@tensorflow/tfjs-node-gpu';
|
|
@ -0,0 +1 @@
|
|||
export * from '@tensorflow/tfjs-node';
|
2
wiki
2
wiki
|
@ -1 +1 @@
|
|||
Subproject commit 0815d53e582c26b6297e1a5ac42f23b9057f56fa
|
||||
Subproject commit 8b7ff45ead1ade2f530a45f06702c9fa65c8dc35
|
Loading…
Reference in New Issue