implement event emitters

pull/193/head
Vladimir Mandic 2021-09-11 16:00:16 -04:00
parent 1702b6a833
commit 9ae3f10ded
16 changed files with 1156 additions and 477 deletions

View File

@ -195,11 +195,11 @@ draw output on screen using internal draw helper functions
// create instance of human with simple configuration using default values // create instance of human with simple configuration using default values
const config = { backend: 'webgl' }; const config = { backend: 'webgl' };
const human = new Human(config); const human = new Human(config);
// select input HTMLVideoElement and output HTMLCanvasElement from page
const inputVideo = document.getElementById('video-id');
const outputCanvas = document.getElementById('canvas-id');
function detectVideo() { function detectVideo() {
// select input HTMLVideoElement and output HTMLCanvasElement from page
const inputVideo = document.getElementById('video-id');
const outputCanvas = document.getElementById('canvas-id');
// perform processing using default configuration // perform processing using default configuration
human.detect(inputVideo).then((result) => { human.detect(inputVideo).then((result) => {
// result object will contain detected details // result object will contain detected details
@ -225,10 +225,10 @@ or using `async/await`:
// create instance of human with simple configuration using default values // create instance of human with simple configuration using default values
const config = { backend: 'webgl' }; const config = { backend: 'webgl' };
const human = new Human(config); // create instance of Human const human = new Human(config); // create instance of Human
const inputVideo = document.getElementById('video-id');
const outputCanvas = document.getElementById('canvas-id');
async function detectVideo() { async function detectVideo() {
const inputVideo = document.getElementById('video-id');
const outputCanvas = document.getElementById('canvas-id');
const result = await human.detect(inputVideo); // run detection const result = await human.detect(inputVideo); // run detection
human.draw.all(outputCanvas, result); // draw all results human.draw.all(outputCanvas, result); // draw all results
requestAnimationFrame(detectVideo); // run loop requestAnimationFrame(detectVideo); // run loop
@ -237,6 +237,27 @@ async function detectVideo() {
detectVideo(); // start loop detectVideo(); // start loop
``` ```
or using `Events`:
```js
// create instance of human with simple configuration using default values
const config = { backend: 'webgl' };
const human = new Human(config); // create instance of Human
const inputVideo = document.getElementById('video-id');
const outputCanvas = document.getElementById('canvas-id');
human.events.addEventListener('detect', () => { // event gets triggered when detect is complete
human.draw.all(outputCanvas, human.result); // draw all results
});
function detectVideo() {
human.detect(inputVideo) // run detection
.then(() => requestAnimationFrame(detectVideo)); // upon detect complete start processing of the next frame
}
detectVideo(); // start loop
```
or using interpolated results for smooth video processing by separating detection and drawing loops: or using interpolated results for smooth video processing by separating detection and drawing loops:
```js ```js

View File

@ -7,8 +7,6 @@ const fs = require('fs');
const process = require('process'); const process = require('process');
const canvas = require('canvas'); const canvas = require('canvas');
let fetch; // fetch is dynamically imported later
// for NodeJS, `tfjs-node` or `tfjs-node-gpu` should be loaded before using Human // for NodeJS, `tfjs-node` or `tfjs-node-gpu` should be loaded before using Human
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
const tf = require('@tensorflow/tfjs-node'); // or const tf = require('@tensorflow/tfjs-node-gpu'); const tf = require('@tensorflow/tfjs-node'); // or const tf = require('@tensorflow/tfjs-node-gpu');
@ -51,25 +49,26 @@ async function init() {
} }
async function detect(input, output) { async function detect(input, output) {
// read input image file and create tensor to be used for processing // read input image from file or url into buffer
let buffer; let buffer;
log.info('Loading image:', input); log.info('Loading image:', input);
if (input.startsWith('http:') || input.startsWith('https:')) { if (input.startsWith('http:') || input.startsWith('https:')) {
const fetch = (await import('node-fetch')).default;
const res = await fetch(input); const res = await fetch(input);
if (res && res.ok) buffer = await res.buffer(); if (res && res.ok) buffer = await res.buffer();
else log.error('Invalid image URL:', input, res.status, res.statusText, res.headers.get('content-type')); else log.error('Invalid image URL:', input, res.status, res.statusText, res.headers.get('content-type'));
} else { } else {
buffer = fs.readFileSync(input); buffer = fs.readFileSync(input);
} }
if (!buffer) return {};
// decode image using tfjs-node so we don't need external depenencies // decode image using tfjs-node so we don't need external depenencies
// can also be done using canvas.js or some other 3rd party image library /*
if (!buffer) return {};
const tensor = human.tf.tidy(() => { const tensor = human.tf.tidy(() => {
const decode = human.tf.node.decodeImage(buffer, 3); const decode = human.tf.node.decodeImage(buffer, 3);
let expand; let expand;
if (decode.shape[2] === 4) { // input is in rgba format, need to convert to rgb if (decode.shape[2] === 4) { // input is in rgba format, need to convert to rgb
const channels = human.tf.split(decode, 4, 2); // tf.split(tensor, 4, 2); // split rgba to channels const channels = human.tf.split(decode, 4, 2); // split rgba to channels
const rgb = human.tf.stack([channels[0], channels[1], channels[2]], 2); // stack channels back to rgb and ignore alpha const rgb = human.tf.stack([channels[0], channels[1], channels[2]], 2); // stack channels back to rgb and ignore alpha
expand = human.tf.reshape(rgb, [1, decode.shape[0], decode.shape[1], 3]); // move extra dim from the end of tensor and use it as batch number instead expand = human.tf.reshape(rgb, [1, decode.shape[0], decode.shape[1], 3]); // move extra dim from the end of tensor and use it as batch number instead
} else { } else {
@ -78,6 +77,22 @@ async function detect(input, output) {
const cast = human.tf.cast(expand, 'float32'); const cast = human.tf.cast(expand, 'float32');
return cast; return cast;
}); });
*/
// decode image using canvas library
const inputImage = await canvas.loadImage(input);
const inputCanvas = new canvas.Canvas(inputImage.width, inputImage.height, 'image');
const inputCtx = inputCanvas.getContext('2d');
inputCtx.drawImage(inputImage, 0, 0);
const inputData = inputCtx.getImageData(0, 0, inputImage.width, inputImage.height);
const tensor = human.tf.tidy(() => {
const data = tf.tensor(Array.from(inputData.data), [inputImage.width, inputImage.height, 4]);
const channels = human.tf.split(data, 4, 2); // split rgba to channels
const rgb = human.tf.stack([channels[0], channels[1], channels[2]], 2); // stack channels back to rgb and ignore alpha
const expand = human.tf.reshape(rgb, [1, data.shape[0], data.shape[1], 3]); // move extra dim from the end of tensor and use it as batch number instead
const cast = human.tf.cast(expand, 'float32');
return cast;
});
// image shape contains image dimensions and depth // image shape contains image dimensions and depth
log.state('Processing:', tensor['shape']); log.state('Processing:', tensor['shape']);
@ -130,7 +145,6 @@ async function detect(input, output) {
async function main() { async function main() {
log.header(); log.header();
log.info('Current folder:', process.env.PWD); log.info('Current folder:', process.env.PWD);
fetch = (await import('node-fetch')).default;
await init(); await init();
const input = process.argv[2]; const input = process.argv[2];
const output = process.argv[3]; const output = process.argv[3];

110
demo/nodejs/node-event.js Normal file
View File

@ -0,0 +1,110 @@
/**
* Human demo for NodeJS
*/
const log = require('@vladmandic/pilogger');
const fs = require('fs');
const process = require('process');
let fetch; // fetch is dynamically imported later
// for NodeJS, `tfjs-node` or `tfjs-node-gpu` should be loaded before using Human
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
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;
let human = null;
const myConfig = {
backend: 'tensorflow',
modelBasePath: 'file://models/',
debug: false,
async: true,
filter: { enabled: false },
face: {
enabled: true,
detector: { enabled: true },
mesh: { enabled: true },
iris: { enabled: true },
description: { enabled: true },
emotion: { enabled: true },
},
hand: { enabled: true },
body: { enabled: true },
object: { enabled: true },
};
async function detect(input) {
// read input image from file or url into buffer
let buffer;
log.info('Loading image:', input);
if (input.startsWith('http:') || input.startsWith('https:')) {
fetch = (await import('node-fetch')).default;
const res = await fetch(input);
if (res && res.ok) buffer = await res.buffer();
else log.error('Invalid image URL:', input, res.status, res.statusText, res.headers.get('content-type'));
} else {
buffer = fs.readFileSync(input);
}
// decode image using tfjs-node so we don't need external depenencies
if (!buffer) return;
const tensor = human.tf.tidy(() => {
const decode = human.tf.node.decodeImage(buffer, 3);
let expand;
if (decode.shape[2] === 4) { // input is in rgba format, need to convert to rgb
const channels = human.tf.split(decode, 4, 2); // split rgba to channels
const rgb = human.tf.stack([channels[0], channels[1], channels[2]], 2); // stack channels back to rgb and ignore alpha
expand = human.tf.reshape(rgb, [1, decode.shape[0], decode.shape[1], 3]); // move extra dim from the end of tensor and use it as batch number instead
} else {
expand = human.tf.expandDims(decode, 0);
}
const cast = human.tf.cast(expand, 'float32');
return cast;
});
// run detection
await human.detect(tensor, myConfig);
human.tf.dispose(tensor); // dispose image tensor as we no longer need it
}
async function main() {
log.header();
human = new Human(myConfig);
human.events.addEventListener('warmup', () => {
log.info('Event Warmup');
});
human.events.addEventListener('load', () => {
const loaded = Object.keys(human.models).filter((a) => human.models[a]);
log.info('Event Loaded:', loaded, human.tf.engine().memory());
});
human.events.addEventListener('image', () => {
log.info('Event Image:', human.process.tensor.shape);
});
human.events.addEventListener('detect', () => {
log.data('Event Detected:');
const persons = human.result.persons;
for (let i = 0; i < persons.length; i++) {
const face = persons[i].face;
const faceTxt = face ? `score:${face.score} age:${face.age} gender:${face.gender} iris:${face.iris}` : null;
const body = persons[i].body;
const bodyTxt = body ? `score:${body.score} keypoints:${body.keypoints?.length}` : null;
log.data(` #${i}: Face:${faceTxt} Body:${bodyTxt} LeftHand:${persons[i].hands.left ? 'yes' : 'no'} RightHand:${persons[i].hands.right ? 'yes' : 'no'} Gestures:${persons[i].gestures.length}`);
}
});
await human.tf.ready(); // wait until tf is ready
const input = process.argv[2]; // process input
if (input) await detect(input);
else log.error('Missing <input>');
}
main();

View File

@ -11726,7 +11726,7 @@ lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/
var version2 = "2.1.5"; var version2 = "2.1.5";
// src/human.ts // src/human.ts
var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode; var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _emit, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode;
var Human = class { var Human = class {
constructor(userConfig) { constructor(userConfig) {
__privateAdd(this, _numTensors, void 0); __privateAdd(this, _numTensors, void 0);
@ -11759,6 +11759,10 @@ var Human = class {
} }
return null; return null;
}); });
__privateAdd(this, _emit, (event) => {
var _a;
return (_a = this.events) == null ? void 0 : _a.dispatchEvent(new Event(event));
});
__privateAdd(this, _checkBackend, async (force = false) => { __privateAdd(this, _checkBackend, async (force = false) => {
var _a; var _a;
if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) { if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) {
@ -11942,6 +11946,7 @@ var Human = class {
__privateSet(this, _firstRun, true); __privateSet(this, _firstRun, true);
__privateSet(this, _lastCacheDiff, 0); __privateSet(this, _lastCacheDiff, 0);
this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 }; this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 };
this.events = new EventTarget();
this.models = { this.models = {
face: null, face: null,
posenet: null, posenet: null,
@ -11960,10 +11965,12 @@ var Human = class {
}; };
this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] }; this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] };
this.image = (input) => process4(input, this.config); this.image = (input) => process4(input, this.config);
this.process = { tensor: null, canvas: null };
this.faceTriangulation = triangulation; this.faceTriangulation = triangulation;
this.faceUVMap = uvmap; this.faceUVMap = uvmap;
this.sysinfo = info(); this.sysinfo = info();
__privateSet(this, _lastInputSum, 1); __privateSet(this, _lastInputSum, 1);
__privateGet(this, _emit).call(this, "create");
} }
similarity(embedding1, embedding2) { similarity(embedding1, embedding2) {
return similarity(embedding1, embedding2); return similarity(embedding1, embedding2);
@ -11980,6 +11987,7 @@ var Human = class {
async load(userConfig) { async load(userConfig) {
this.state = "load"; this.state = "load";
const timeStamp = now(); const timeStamp = now();
const count2 = Object.values(this.models).filter((model10) => model10).length;
if (userConfig) if (userConfig)
this.config = mergeDeep(this.config, userConfig); this.config = mergeDeep(this.config, userConfig);
if (__privateGet(this, _firstRun)) { if (__privateGet(this, _firstRun)) {
@ -12005,12 +12013,16 @@ var Human = class {
log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors");
__privateSet(this, _firstRun, false); __privateSet(this, _firstRun, false);
} }
const loaded = Object.values(this.models).filter((model10) => model10).length;
if (loaded !== count2)
__privateGet(this, _emit).call(this, "load");
const current = Math.trunc(now() - timeStamp); const current = Math.trunc(now() - timeStamp);
if (current > (this.performance.load || 0)) if (current > (this.performance.load || 0))
this.performance.load = current; this.performance.load = current;
} }
async detect(input, userConfig) { async detect(input, userConfig) {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
var _a, _b;
this.state = "config"; this.state = "config";
let timeStamp; let timeStamp;
let elapsedTime; let elapsedTime;
@ -12025,30 +12037,31 @@ var Human = class {
await __privateGet(this, _checkBackend).call(this); await __privateGet(this, _checkBackend).call(this);
await this.load(); await this.load();
timeStamp = now(); timeStamp = now();
let process6 = process4(input, this.config); this.process = process4(input, this.config);
this.performance.image = Math.trunc(now() - timeStamp); this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:"); this.analyze("Get Image:");
if (this.config.segmentation.enabled && process6 && process6.tensor) { if (this.config.segmentation.enabled && this.process && this.process.tensor) {
this.analyze("Start Segmentation:"); this.analyze("Start Segmentation:");
this.state = "run:segmentation"; this.state = "run:segmentation";
timeStamp = now(); timeStamp = now();
await predict11(process6); await predict11(this.process);
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.segmentation = elapsedTime; this.performance.segmentation = elapsedTime;
if (process6.canvas) { if (this.process.canvas) {
tfjs_esm_exports.dispose(process6.tensor); tfjs_esm_exports.dispose(this.process.tensor);
process6 = process4(process6.canvas, this.config); this.process = process4(this.process.canvas, this.config);
} }
this.analyze("End Segmentation:"); this.analyze("End Segmentation:");
} }
if (!process6 || !process6.tensor) { if (!this.process || !this.process.tensor) {
log("could not convert input to tensor"); log("could not convert input to tensor");
resolve({ error: "could not convert input to tensor" }); resolve({ error: "could not convert input to tensor" });
return; return;
} }
__privateGet(this, _emit).call(this, "image");
timeStamp = now(); timeStamp = now();
this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, process6.tensor); this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, this.process.tensor);
if (!this.performance.frames) if (!this.performance.frames)
this.performance.frames = 0; this.performance.frames = 0;
if (!this.performance.cached) if (!this.performance.cached)
@ -12063,13 +12076,13 @@ var Human = class {
let handRes = []; let handRes = [];
let objectRes = []; let objectRes = [];
if (this.config.async) { if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? detectFace(this, this.process.tensor) : [];
if (this.performance.face) if (this.performance.face)
delete this.performance.face; delete this.performance.face;
} else { } else {
this.state = "run:face"; this.state = "run:face";
timeStamp = now(); timeStamp = now();
faceRes = this.config.face.enabled ? await detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? await detectFace(this, this.process.tensor) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.face = elapsedTime; this.performance.face = elapsedTime;
@ -12077,26 +12090,26 @@ var Human = class {
this.analyze("Start Body:"); this.analyze("Start Body:");
if (this.config.async) { if (this.config.async) {
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict8(this.process.tensor, this.config) : [];
if (this.performance.body) if (this.performance.body)
delete this.performance.body; delete this.performance.body;
} else { } else {
this.state = "run:body"; this.state = "run:body";
timeStamp = now(); timeStamp = now();
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? await predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? await predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? await predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? await predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict8(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.body = elapsedTime; this.performance.body = elapsedTime;
@ -12104,13 +12117,13 @@ var Human = class {
this.analyze("End Body:"); this.analyze("End Body:");
this.analyze("Start Hand:"); this.analyze("Start Hand:");
if (this.config.async) { if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? predict5(this.process.tensor, this.config) : [];
if (this.performance.hand) if (this.performance.hand)
delete this.performance.hand; delete this.performance.hand;
} else { } else {
this.state = "run:hand"; this.state = "run:hand";
timeStamp = now(); timeStamp = now();
handRes = this.config.hand.enabled ? await predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? await predict5(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.hand = elapsedTime; this.performance.hand = elapsedTime;
@ -12119,18 +12132,18 @@ var Human = class {
this.analyze("Start Object:"); this.analyze("Start Object:");
if (this.config.async) { if (this.config.async) {
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict10(this.process.tensor, this.config) : [];
if (this.performance.object) if (this.performance.object)
delete this.performance.object; delete this.performance.object;
} else { } else {
this.state = "run:object"; this.state = "run:object";
timeStamp = now(); timeStamp = now();
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? await predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? await predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict10(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.object = elapsedTime; this.performance.object = elapsedTime;
@ -12149,6 +12162,7 @@ var Human = class {
} }
this.performance.total = Math.trunc(now() - timeStart); this.performance.total = Math.trunc(now() - timeStart);
this.state = "idle"; this.state = "idle";
const shape = ((_b = (_a = this.process) == null ? void 0 : _a.tensor) == null ? void 0 : _b.shape) || [];
this.result = { this.result = {
face: faceRes, face: faceRes,
body: bodyRes, body: bodyRes,
@ -12156,14 +12170,14 @@ var Human = class {
gesture: gestureRes, gesture: gestureRes,
object: objectRes, object: objectRes,
performance: this.performance, performance: this.performance,
canvas: process6.canvas, canvas: this.process.canvas,
timestamp: Date.now(), timestamp: Date.now(),
get persons() { get persons() {
var _a; return join2(faceRes, bodyRes, handRes, gestureRes, shape);
return join2(faceRes, bodyRes, handRes, gestureRes, (_a = process6 == null ? void 0 : process6.tensor) == null ? void 0 : _a.shape);
} }
}; };
tfjs_esm_exports.dispose(process6.tensor); tfjs_esm_exports.dispose(this.process.tensor);
__privateGet(this, _emit).call(this, "detect");
resolve(this.result); resolve(this.result);
}); });
} }
@ -12183,6 +12197,7 @@ var Human = class {
const t1 = now(); const t1 = now();
if (this.config.debug) if (this.config.debug)
log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res); log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res);
__privateGet(this, _emit).call(this, "warmup");
return res; return res;
} }
}; };
@ -12193,6 +12208,7 @@ _firstRun = new WeakMap();
_lastInputSum = new WeakMap(); _lastInputSum = new WeakMap();
_lastCacheDiff = new WeakMap(); _lastCacheDiff = new WeakMap();
_sanity = new WeakMap(); _sanity = new WeakMap();
_emit = new WeakMap();
_checkBackend = new WeakMap(); _checkBackend = new WeakMap();
_skipFrame = new WeakMap(); _skipFrame = new WeakMap();
_warmupBitmap = new WeakMap(); _warmupBitmap = new WeakMap();

File diff suppressed because one or more lines are too long

74
dist/human.esm.js vendored
View File

@ -71234,7 +71234,7 @@ lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/
var version17 = "2.1.5"; var version17 = "2.1.5";
// src/human.ts // src/human.ts
var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode; var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _emit, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode;
var Human = class { var Human = class {
constructor(userConfig) { constructor(userConfig) {
__privateAdd(this, _numTensors, void 0); __privateAdd(this, _numTensors, void 0);
@ -71267,6 +71267,10 @@ var Human = class {
} }
return null; return null;
}); });
__privateAdd(this, _emit, (event) => {
var _a;
return (_a = this.events) == null ? void 0 : _a.dispatchEvent(new Event(event));
});
__privateAdd(this, _checkBackend, async (force = false) => { __privateAdd(this, _checkBackend, async (force = false) => {
var _a; var _a;
if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) { if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) {
@ -71450,6 +71454,7 @@ var Human = class {
__privateSet(this, _firstRun, true); __privateSet(this, _firstRun, true);
__privateSet(this, _lastCacheDiff, 0); __privateSet(this, _lastCacheDiff, 0);
this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 }; this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 };
this.events = new EventTarget();
this.models = { this.models = {
face: null, face: null,
posenet: null, posenet: null,
@ -71468,10 +71473,12 @@ var Human = class {
}; };
this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] }; this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] };
this.image = (input2) => process4(input2, this.config); this.image = (input2) => process4(input2, this.config);
this.process = { tensor: null, canvas: null };
this.faceTriangulation = triangulation; this.faceTriangulation = triangulation;
this.faceUVMap = uvmap; this.faceUVMap = uvmap;
this.sysinfo = info(); this.sysinfo = info();
__privateSet(this, _lastInputSum, 1); __privateSet(this, _lastInputSum, 1);
__privateGet(this, _emit).call(this, "create");
} }
similarity(embedding1, embedding2) { similarity(embedding1, embedding2) {
return similarity(embedding1, embedding2); return similarity(embedding1, embedding2);
@ -71488,6 +71495,7 @@ var Human = class {
async load(userConfig) { async load(userConfig) {
this.state = "load"; this.state = "load";
const timeStamp = now(); const timeStamp = now();
const count3 = Object.values(this.models).filter((model11) => model11).length;
if (userConfig) if (userConfig)
this.config = mergeDeep(this.config, userConfig); this.config = mergeDeep(this.config, userConfig);
if (__privateGet(this, _firstRun)) { if (__privateGet(this, _firstRun)) {
@ -71513,12 +71521,16 @@ var Human = class {
log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors");
__privateSet(this, _firstRun, false); __privateSet(this, _firstRun, false);
} }
const loaded = Object.values(this.models).filter((model11) => model11).length;
if (loaded !== count3)
__privateGet(this, _emit).call(this, "load");
const current = Math.trunc(now() - timeStamp); const current = Math.trunc(now() - timeStamp);
if (current > (this.performance.load || 0)) if (current > (this.performance.load || 0))
this.performance.load = current; this.performance.load = current;
} }
async detect(input2, userConfig) { async detect(input2, userConfig) {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
var _a, _b;
this.state = "config"; this.state = "config";
let timeStamp; let timeStamp;
let elapsedTime; let elapsedTime;
@ -71533,30 +71545,31 @@ var Human = class {
await __privateGet(this, _checkBackend).call(this); await __privateGet(this, _checkBackend).call(this);
await this.load(); await this.load();
timeStamp = now(); timeStamp = now();
let process6 = process4(input2, this.config); this.process = process4(input2, this.config);
this.performance.image = Math.trunc(now() - timeStamp); this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:"); this.analyze("Get Image:");
if (this.config.segmentation.enabled && process6 && process6.tensor) { if (this.config.segmentation.enabled && this.process && this.process.tensor) {
this.analyze("Start Segmentation:"); this.analyze("Start Segmentation:");
this.state = "run:segmentation"; this.state = "run:segmentation";
timeStamp = now(); timeStamp = now();
await predict11(process6); await predict11(this.process);
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.segmentation = elapsedTime; this.performance.segmentation = elapsedTime;
if (process6.canvas) { if (this.process.canvas) {
dispose(process6.tensor); dispose(this.process.tensor);
process6 = process4(process6.canvas, this.config); this.process = process4(this.process.canvas, this.config);
} }
this.analyze("End Segmentation:"); this.analyze("End Segmentation:");
} }
if (!process6 || !process6.tensor) { if (!this.process || !this.process.tensor) {
log("could not convert input to tensor"); log("could not convert input to tensor");
resolve({ error: "could not convert input to tensor" }); resolve({ error: "could not convert input to tensor" });
return; return;
} }
__privateGet(this, _emit).call(this, "image");
timeStamp = now(); timeStamp = now();
this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, process6.tensor); this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, this.process.tensor);
if (!this.performance.frames) if (!this.performance.frames)
this.performance.frames = 0; this.performance.frames = 0;
if (!this.performance.cached) if (!this.performance.cached)
@ -71571,13 +71584,13 @@ var Human = class {
let handRes = []; let handRes = [];
let objectRes = []; let objectRes = [];
if (this.config.async) { if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? detectFace(this, this.process.tensor) : [];
if (this.performance.face) if (this.performance.face)
delete this.performance.face; delete this.performance.face;
} else { } else {
this.state = "run:face"; this.state = "run:face";
timeStamp = now(); timeStamp = now();
faceRes = this.config.face.enabled ? await detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? await detectFace(this, this.process.tensor) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.face = elapsedTime; this.performance.face = elapsedTime;
@ -71585,26 +71598,26 @@ var Human = class {
this.analyze("Start Body:"); this.analyze("Start Body:");
if (this.config.async) { if (this.config.async) {
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict8(this.process.tensor, this.config) : [];
if (this.performance.body) if (this.performance.body)
delete this.performance.body; delete this.performance.body;
} else { } else {
this.state = "run:body"; this.state = "run:body";
timeStamp = now(); timeStamp = now();
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? await predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? await predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? await predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? await predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict8(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.body = elapsedTime; this.performance.body = elapsedTime;
@ -71612,13 +71625,13 @@ var Human = class {
this.analyze("End Body:"); this.analyze("End Body:");
this.analyze("Start Hand:"); this.analyze("Start Hand:");
if (this.config.async) { if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? predict5(this.process.tensor, this.config) : [];
if (this.performance.hand) if (this.performance.hand)
delete this.performance.hand; delete this.performance.hand;
} else { } else {
this.state = "run:hand"; this.state = "run:hand";
timeStamp = now(); timeStamp = now();
handRes = this.config.hand.enabled ? await predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? await predict5(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.hand = elapsedTime; this.performance.hand = elapsedTime;
@ -71627,18 +71640,18 @@ var Human = class {
this.analyze("Start Object:"); this.analyze("Start Object:");
if (this.config.async) { if (this.config.async) {
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict10(this.process.tensor, this.config) : [];
if (this.performance.object) if (this.performance.object)
delete this.performance.object; delete this.performance.object;
} else { } else {
this.state = "run:object"; this.state = "run:object";
timeStamp = now(); timeStamp = now();
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? await predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? await predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict10(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.object = elapsedTime; this.performance.object = elapsedTime;
@ -71657,6 +71670,7 @@ var Human = class {
} }
this.performance.total = Math.trunc(now() - timeStart); this.performance.total = Math.trunc(now() - timeStart);
this.state = "idle"; this.state = "idle";
const shape = ((_b = (_a = this.process) == null ? void 0 : _a.tensor) == null ? void 0 : _b.shape) || [];
this.result = { this.result = {
face: faceRes, face: faceRes,
body: bodyRes, body: bodyRes,
@ -71664,14 +71678,14 @@ var Human = class {
gesture: gestureRes, gesture: gestureRes,
object: objectRes, object: objectRes,
performance: this.performance, performance: this.performance,
canvas: process6.canvas, canvas: this.process.canvas,
timestamp: Date.now(), timestamp: Date.now(),
get persons() { get persons() {
var _a; return join2(faceRes, bodyRes, handRes, gestureRes, shape);
return join2(faceRes, bodyRes, handRes, gestureRes, (_a = process6 == null ? void 0 : process6.tensor) == null ? void 0 : _a.shape);
} }
}; };
dispose(process6.tensor); dispose(this.process.tensor);
__privateGet(this, _emit).call(this, "detect");
resolve(this.result); resolve(this.result);
}); });
} }
@ -71691,6 +71705,7 @@ var Human = class {
const t1 = now(); const t1 = now();
if (this.config.debug) if (this.config.debug)
log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res); log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res);
__privateGet(this, _emit).call(this, "warmup");
return res; return res;
} }
}; };
@ -71701,6 +71716,7 @@ _firstRun = new WeakMap();
_lastInputSum = new WeakMap(); _lastInputSum = new WeakMap();
_lastCacheDiff = new WeakMap(); _lastCacheDiff = new WeakMap();
_sanity = new WeakMap(); _sanity = new WeakMap();
_emit = new WeakMap();
_checkBackend = new WeakMap(); _checkBackend = new WeakMap();
_skipFrame = new WeakMap(); _skipFrame = new WeakMap();
_warmupBitmap = new WeakMap(); _warmupBitmap = new WeakMap();

File diff suppressed because one or more lines are too long

554
dist/human.js vendored

File diff suppressed because one or more lines are too long

View File

@ -11776,7 +11776,7 @@ lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/
var version = "2.1.5"; var version = "2.1.5";
// src/human.ts // src/human.ts
var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode; var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _emit, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode;
var Human = class { var Human = class {
constructor(userConfig) { constructor(userConfig) {
__privateAdd(this, _numTensors, void 0); __privateAdd(this, _numTensors, void 0);
@ -11809,6 +11809,10 @@ var Human = class {
} }
return null; return null;
}); });
__privateAdd(this, _emit, (event) => {
var _a;
return (_a = this.events) == null ? void 0 : _a.dispatchEvent(new Event(event));
});
__privateAdd(this, _checkBackend, async (force = false) => { __privateAdd(this, _checkBackend, async (force = false) => {
var _a; var _a;
if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) { if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) {
@ -11992,6 +11996,7 @@ var Human = class {
__privateSet(this, _firstRun, true); __privateSet(this, _firstRun, true);
__privateSet(this, _lastCacheDiff, 0); __privateSet(this, _lastCacheDiff, 0);
this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 }; this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 };
this.events = new EventTarget();
this.models = { this.models = {
face: null, face: null,
posenet: null, posenet: null,
@ -12010,10 +12015,12 @@ var Human = class {
}; };
this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] }; this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] };
this.image = (input) => process4(input, this.config); this.image = (input) => process4(input, this.config);
this.process = { tensor: null, canvas: null };
this.faceTriangulation = triangulation; this.faceTriangulation = triangulation;
this.faceUVMap = uvmap; this.faceUVMap = uvmap;
this.sysinfo = info(); this.sysinfo = info();
__privateSet(this, _lastInputSum, 1); __privateSet(this, _lastInputSum, 1);
__privateGet(this, _emit).call(this, "create");
} }
similarity(embedding1, embedding2) { similarity(embedding1, embedding2) {
return similarity(embedding1, embedding2); return similarity(embedding1, embedding2);
@ -12030,6 +12037,7 @@ var Human = class {
async load(userConfig) { async load(userConfig) {
this.state = "load"; this.state = "load";
const timeStamp = now(); const timeStamp = now();
const count2 = Object.values(this.models).filter((model10) => model10).length;
if (userConfig) if (userConfig)
this.config = mergeDeep(this.config, userConfig); this.config = mergeDeep(this.config, userConfig);
if (__privateGet(this, _firstRun)) { if (__privateGet(this, _firstRun)) {
@ -12055,12 +12063,16 @@ var Human = class {
log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors");
__privateSet(this, _firstRun, false); __privateSet(this, _firstRun, false);
} }
const loaded = Object.values(this.models).filter((model10) => model10).length;
if (loaded !== count2)
__privateGet(this, _emit).call(this, "load");
const current = Math.trunc(now() - timeStamp); const current = Math.trunc(now() - timeStamp);
if (current > (this.performance.load || 0)) if (current > (this.performance.load || 0))
this.performance.load = current; this.performance.load = current;
} }
async detect(input, userConfig) { async detect(input, userConfig) {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
var _a, _b;
this.state = "config"; this.state = "config";
let timeStamp; let timeStamp;
let elapsedTime; let elapsedTime;
@ -12075,30 +12087,31 @@ var Human = class {
await __privateGet(this, _checkBackend).call(this); await __privateGet(this, _checkBackend).call(this);
await this.load(); await this.load();
timeStamp = now(); timeStamp = now();
let process6 = process4(input, this.config); this.process = process4(input, this.config);
this.performance.image = Math.trunc(now() - timeStamp); this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:"); this.analyze("Get Image:");
if (this.config.segmentation.enabled && process6 && process6.tensor) { if (this.config.segmentation.enabled && this.process && this.process.tensor) {
this.analyze("Start Segmentation:"); this.analyze("Start Segmentation:");
this.state = "run:segmentation"; this.state = "run:segmentation";
timeStamp = now(); timeStamp = now();
await predict11(process6); await predict11(this.process);
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.segmentation = elapsedTime; this.performance.segmentation = elapsedTime;
if (process6.canvas) { if (this.process.canvas) {
tf21.dispose(process6.tensor); tf21.dispose(this.process.tensor);
process6 = process4(process6.canvas, this.config); this.process = process4(this.process.canvas, this.config);
} }
this.analyze("End Segmentation:"); this.analyze("End Segmentation:");
} }
if (!process6 || !process6.tensor) { if (!this.process || !this.process.tensor) {
log("could not convert input to tensor"); log("could not convert input to tensor");
resolve({ error: "could not convert input to tensor" }); resolve({ error: "could not convert input to tensor" });
return; return;
} }
__privateGet(this, _emit).call(this, "image");
timeStamp = now(); timeStamp = now();
this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, process6.tensor); this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, this.process.tensor);
if (!this.performance.frames) if (!this.performance.frames)
this.performance.frames = 0; this.performance.frames = 0;
if (!this.performance.cached) if (!this.performance.cached)
@ -12113,13 +12126,13 @@ var Human = class {
let handRes = []; let handRes = [];
let objectRes = []; let objectRes = [];
if (this.config.async) { if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? detectFace(this, this.process.tensor) : [];
if (this.performance.face) if (this.performance.face)
delete this.performance.face; delete this.performance.face;
} else { } else {
this.state = "run:face"; this.state = "run:face";
timeStamp = now(); timeStamp = now();
faceRes = this.config.face.enabled ? await detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? await detectFace(this, this.process.tensor) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.face = elapsedTime; this.performance.face = elapsedTime;
@ -12127,26 +12140,26 @@ var Human = class {
this.analyze("Start Body:"); this.analyze("Start Body:");
if (this.config.async) { if (this.config.async) {
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict8(this.process.tensor, this.config) : [];
if (this.performance.body) if (this.performance.body)
delete this.performance.body; delete this.performance.body;
} else { } else {
this.state = "run:body"; this.state = "run:body";
timeStamp = now(); timeStamp = now();
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? await predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? await predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? await predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? await predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict8(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.body = elapsedTime; this.performance.body = elapsedTime;
@ -12154,13 +12167,13 @@ var Human = class {
this.analyze("End Body:"); this.analyze("End Body:");
this.analyze("Start Hand:"); this.analyze("Start Hand:");
if (this.config.async) { if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? predict5(this.process.tensor, this.config) : [];
if (this.performance.hand) if (this.performance.hand)
delete this.performance.hand; delete this.performance.hand;
} else { } else {
this.state = "run:hand"; this.state = "run:hand";
timeStamp = now(); timeStamp = now();
handRes = this.config.hand.enabled ? await predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? await predict5(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.hand = elapsedTime; this.performance.hand = elapsedTime;
@ -12169,18 +12182,18 @@ var Human = class {
this.analyze("Start Object:"); this.analyze("Start Object:");
if (this.config.async) { if (this.config.async) {
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict10(this.process.tensor, this.config) : [];
if (this.performance.object) if (this.performance.object)
delete this.performance.object; delete this.performance.object;
} else { } else {
this.state = "run:object"; this.state = "run:object";
timeStamp = now(); timeStamp = now();
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? await predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? await predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict10(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.object = elapsedTime; this.performance.object = elapsedTime;
@ -12199,6 +12212,7 @@ var Human = class {
} }
this.performance.total = Math.trunc(now() - timeStart); this.performance.total = Math.trunc(now() - timeStart);
this.state = "idle"; this.state = "idle";
const shape = ((_b = (_a = this.process) == null ? void 0 : _a.tensor) == null ? void 0 : _b.shape) || [];
this.result = { this.result = {
face: faceRes, face: faceRes,
body: bodyRes, body: bodyRes,
@ -12206,14 +12220,14 @@ var Human = class {
gesture: gestureRes, gesture: gestureRes,
object: objectRes, object: objectRes,
performance: this.performance, performance: this.performance,
canvas: process6.canvas, canvas: this.process.canvas,
timestamp: Date.now(), timestamp: Date.now(),
get persons() { get persons() {
var _a; return join2(faceRes, bodyRes, handRes, gestureRes, shape);
return join2(faceRes, bodyRes, handRes, gestureRes, (_a = process6 == null ? void 0 : process6.tensor) == null ? void 0 : _a.shape);
} }
}; };
tf21.dispose(process6.tensor); tf21.dispose(this.process.tensor);
__privateGet(this, _emit).call(this, "detect");
resolve(this.result); resolve(this.result);
}); });
} }
@ -12233,6 +12247,7 @@ var Human = class {
const t1 = now(); const t1 = now();
if (this.config.debug) if (this.config.debug)
log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res); log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res);
__privateGet(this, _emit).call(this, "warmup");
return res; return res;
} }
}; };
@ -12243,6 +12258,7 @@ _firstRun = new WeakMap();
_lastInputSum = new WeakMap(); _lastInputSum = new WeakMap();
_lastCacheDiff = new WeakMap(); _lastCacheDiff = new WeakMap();
_sanity = new WeakMap(); _sanity = new WeakMap();
_emit = new WeakMap();
_checkBackend = new WeakMap(); _checkBackend = new WeakMap();
_skipFrame = new WeakMap(); _skipFrame = new WeakMap();
_warmupBitmap = new WeakMap(); _warmupBitmap = new WeakMap();

View File

@ -11777,7 +11777,7 @@ lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/
var version = "2.1.5"; var version = "2.1.5";
// src/human.ts // src/human.ts
var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode; var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _emit, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode;
var Human = class { var Human = class {
constructor(userConfig) { constructor(userConfig) {
__privateAdd(this, _numTensors, void 0); __privateAdd(this, _numTensors, void 0);
@ -11810,6 +11810,10 @@ var Human = class {
} }
return null; return null;
}); });
__privateAdd(this, _emit, (event) => {
var _a;
return (_a = this.events) == null ? void 0 : _a.dispatchEvent(new Event(event));
});
__privateAdd(this, _checkBackend, async (force = false) => { __privateAdd(this, _checkBackend, async (force = false) => {
var _a; var _a;
if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) { if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) {
@ -11993,6 +11997,7 @@ var Human = class {
__privateSet(this, _firstRun, true); __privateSet(this, _firstRun, true);
__privateSet(this, _lastCacheDiff, 0); __privateSet(this, _lastCacheDiff, 0);
this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 }; this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 };
this.events = new EventTarget();
this.models = { this.models = {
face: null, face: null,
posenet: null, posenet: null,
@ -12011,10 +12016,12 @@ var Human = class {
}; };
this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] }; this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] };
this.image = (input) => process4(input, this.config); this.image = (input) => process4(input, this.config);
this.process = { tensor: null, canvas: null };
this.faceTriangulation = triangulation; this.faceTriangulation = triangulation;
this.faceUVMap = uvmap; this.faceUVMap = uvmap;
this.sysinfo = info(); this.sysinfo = info();
__privateSet(this, _lastInputSum, 1); __privateSet(this, _lastInputSum, 1);
__privateGet(this, _emit).call(this, "create");
} }
similarity(embedding1, embedding2) { similarity(embedding1, embedding2) {
return similarity(embedding1, embedding2); return similarity(embedding1, embedding2);
@ -12031,6 +12038,7 @@ var Human = class {
async load(userConfig) { async load(userConfig) {
this.state = "load"; this.state = "load";
const timeStamp = now(); const timeStamp = now();
const count2 = Object.values(this.models).filter((model10) => model10).length;
if (userConfig) if (userConfig)
this.config = mergeDeep(this.config, userConfig); this.config = mergeDeep(this.config, userConfig);
if (__privateGet(this, _firstRun)) { if (__privateGet(this, _firstRun)) {
@ -12056,12 +12064,16 @@ var Human = class {
log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors");
__privateSet(this, _firstRun, false); __privateSet(this, _firstRun, false);
} }
const loaded = Object.values(this.models).filter((model10) => model10).length;
if (loaded !== count2)
__privateGet(this, _emit).call(this, "load");
const current = Math.trunc(now() - timeStamp); const current = Math.trunc(now() - timeStamp);
if (current > (this.performance.load || 0)) if (current > (this.performance.load || 0))
this.performance.load = current; this.performance.load = current;
} }
async detect(input, userConfig) { async detect(input, userConfig) {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
var _a, _b;
this.state = "config"; this.state = "config";
let timeStamp; let timeStamp;
let elapsedTime; let elapsedTime;
@ -12076,30 +12088,31 @@ var Human = class {
await __privateGet(this, _checkBackend).call(this); await __privateGet(this, _checkBackend).call(this);
await this.load(); await this.load();
timeStamp = now(); timeStamp = now();
let process6 = process4(input, this.config); this.process = process4(input, this.config);
this.performance.image = Math.trunc(now() - timeStamp); this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:"); this.analyze("Get Image:");
if (this.config.segmentation.enabled && process6 && process6.tensor) { if (this.config.segmentation.enabled && this.process && this.process.tensor) {
this.analyze("Start Segmentation:"); this.analyze("Start Segmentation:");
this.state = "run:segmentation"; this.state = "run:segmentation";
timeStamp = now(); timeStamp = now();
await predict11(process6); await predict11(this.process);
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.segmentation = elapsedTime; this.performance.segmentation = elapsedTime;
if (process6.canvas) { if (this.process.canvas) {
tf21.dispose(process6.tensor); tf21.dispose(this.process.tensor);
process6 = process4(process6.canvas, this.config); this.process = process4(this.process.canvas, this.config);
} }
this.analyze("End Segmentation:"); this.analyze("End Segmentation:");
} }
if (!process6 || !process6.tensor) { if (!this.process || !this.process.tensor) {
log("could not convert input to tensor"); log("could not convert input to tensor");
resolve({ error: "could not convert input to tensor" }); resolve({ error: "could not convert input to tensor" });
return; return;
} }
__privateGet(this, _emit).call(this, "image");
timeStamp = now(); timeStamp = now();
this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, process6.tensor); this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, this.process.tensor);
if (!this.performance.frames) if (!this.performance.frames)
this.performance.frames = 0; this.performance.frames = 0;
if (!this.performance.cached) if (!this.performance.cached)
@ -12114,13 +12127,13 @@ var Human = class {
let handRes = []; let handRes = [];
let objectRes = []; let objectRes = [];
if (this.config.async) { if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? detectFace(this, this.process.tensor) : [];
if (this.performance.face) if (this.performance.face)
delete this.performance.face; delete this.performance.face;
} else { } else {
this.state = "run:face"; this.state = "run:face";
timeStamp = now(); timeStamp = now();
faceRes = this.config.face.enabled ? await detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? await detectFace(this, this.process.tensor) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.face = elapsedTime; this.performance.face = elapsedTime;
@ -12128,26 +12141,26 @@ var Human = class {
this.analyze("Start Body:"); this.analyze("Start Body:");
if (this.config.async) { if (this.config.async) {
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict8(this.process.tensor, this.config) : [];
if (this.performance.body) if (this.performance.body)
delete this.performance.body; delete this.performance.body;
} else { } else {
this.state = "run:body"; this.state = "run:body";
timeStamp = now(); timeStamp = now();
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? await predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? await predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? await predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? await predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict8(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.body = elapsedTime; this.performance.body = elapsedTime;
@ -12155,13 +12168,13 @@ var Human = class {
this.analyze("End Body:"); this.analyze("End Body:");
this.analyze("Start Hand:"); this.analyze("Start Hand:");
if (this.config.async) { if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? predict5(this.process.tensor, this.config) : [];
if (this.performance.hand) if (this.performance.hand)
delete this.performance.hand; delete this.performance.hand;
} else { } else {
this.state = "run:hand"; this.state = "run:hand";
timeStamp = now(); timeStamp = now();
handRes = this.config.hand.enabled ? await predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? await predict5(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.hand = elapsedTime; this.performance.hand = elapsedTime;
@ -12170,18 +12183,18 @@ var Human = class {
this.analyze("Start Object:"); this.analyze("Start Object:");
if (this.config.async) { if (this.config.async) {
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict10(this.process.tensor, this.config) : [];
if (this.performance.object) if (this.performance.object)
delete this.performance.object; delete this.performance.object;
} else { } else {
this.state = "run:object"; this.state = "run:object";
timeStamp = now(); timeStamp = now();
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? await predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? await predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict10(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.object = elapsedTime; this.performance.object = elapsedTime;
@ -12200,6 +12213,7 @@ var Human = class {
} }
this.performance.total = Math.trunc(now() - timeStart); this.performance.total = Math.trunc(now() - timeStart);
this.state = "idle"; this.state = "idle";
const shape = ((_b = (_a = this.process) == null ? void 0 : _a.tensor) == null ? void 0 : _b.shape) || [];
this.result = { this.result = {
face: faceRes, face: faceRes,
body: bodyRes, body: bodyRes,
@ -12207,14 +12221,14 @@ var Human = class {
gesture: gestureRes, gesture: gestureRes,
object: objectRes, object: objectRes,
performance: this.performance, performance: this.performance,
canvas: process6.canvas, canvas: this.process.canvas,
timestamp: Date.now(), timestamp: Date.now(),
get persons() { get persons() {
var _a; return join2(faceRes, bodyRes, handRes, gestureRes, shape);
return join2(faceRes, bodyRes, handRes, gestureRes, (_a = process6 == null ? void 0 : process6.tensor) == null ? void 0 : _a.shape);
} }
}; };
tf21.dispose(process6.tensor); tf21.dispose(this.process.tensor);
__privateGet(this, _emit).call(this, "detect");
resolve(this.result); resolve(this.result);
}); });
} }
@ -12234,6 +12248,7 @@ var Human = class {
const t1 = now(); const t1 = now();
if (this.config.debug) if (this.config.debug)
log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res); log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res);
__privateGet(this, _emit).call(this, "warmup");
return res; return res;
} }
}; };
@ -12244,6 +12259,7 @@ _firstRun = new WeakMap();
_lastInputSum = new WeakMap(); _lastInputSum = new WeakMap();
_lastCacheDiff = new WeakMap(); _lastCacheDiff = new WeakMap();
_sanity = new WeakMap(); _sanity = new WeakMap();
_emit = new WeakMap();
_checkBackend = new WeakMap(); _checkBackend = new WeakMap();
_skipFrame = new WeakMap(); _skipFrame = new WeakMap();
_warmupBitmap = new WeakMap(); _warmupBitmap = new WeakMap();

74
dist/human.node.js vendored
View File

@ -11776,7 +11776,7 @@ lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/
var version = "2.1.5"; var version = "2.1.5";
// src/human.ts // src/human.ts
var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode; var _numTensors, _analyzeMemoryLeaks, _checkSanity, _firstRun, _lastInputSum, _lastCacheDiff, _sanity, _emit, _checkBackend, _skipFrame, _warmupBitmap, _warmupCanvas, _warmupNode;
var Human = class { var Human = class {
constructor(userConfig) { constructor(userConfig) {
__privateAdd(this, _numTensors, void 0); __privateAdd(this, _numTensors, void 0);
@ -11809,6 +11809,10 @@ var Human = class {
} }
return null; return null;
}); });
__privateAdd(this, _emit, (event) => {
var _a;
return (_a = this.events) == null ? void 0 : _a.dispatchEvent(new Event(event));
});
__privateAdd(this, _checkBackend, async (force = false) => { __privateAdd(this, _checkBackend, async (force = false) => {
var _a; var _a;
if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) { if (this.config.backend && this.config.backend.length > 0 && force || this.tf.getBackend() !== this.config.backend) {
@ -11992,6 +11996,7 @@ var Human = class {
__privateSet(this, _firstRun, true); __privateSet(this, _firstRun, true);
__privateSet(this, _lastCacheDiff, 0); __privateSet(this, _lastCacheDiff, 0);
this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 }; this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 };
this.events = new EventTarget();
this.models = { this.models = {
face: null, face: null,
posenet: null, posenet: null,
@ -12010,10 +12015,12 @@ var Human = class {
}; };
this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] }; this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] };
this.image = (input) => process4(input, this.config); this.image = (input) => process4(input, this.config);
this.process = { tensor: null, canvas: null };
this.faceTriangulation = triangulation; this.faceTriangulation = triangulation;
this.faceUVMap = uvmap; this.faceUVMap = uvmap;
this.sysinfo = info(); this.sysinfo = info();
__privateSet(this, _lastInputSum, 1); __privateSet(this, _lastInputSum, 1);
__privateGet(this, _emit).call(this, "create");
} }
similarity(embedding1, embedding2) { similarity(embedding1, embedding2) {
return similarity(embedding1, embedding2); return similarity(embedding1, embedding2);
@ -12030,6 +12037,7 @@ var Human = class {
async load(userConfig) { async load(userConfig) {
this.state = "load"; this.state = "load";
const timeStamp = now(); const timeStamp = now();
const count2 = Object.values(this.models).filter((model10) => model10).length;
if (userConfig) if (userConfig)
this.config = mergeDeep(this.config, userConfig); this.config = mergeDeep(this.config, userConfig);
if (__privateGet(this, _firstRun)) { if (__privateGet(this, _firstRun)) {
@ -12055,12 +12063,16 @@ var Human = class {
log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors");
__privateSet(this, _firstRun, false); __privateSet(this, _firstRun, false);
} }
const loaded = Object.values(this.models).filter((model10) => model10).length;
if (loaded !== count2)
__privateGet(this, _emit).call(this, "load");
const current = Math.trunc(now() - timeStamp); const current = Math.trunc(now() - timeStamp);
if (current > (this.performance.load || 0)) if (current > (this.performance.load || 0))
this.performance.load = current; this.performance.load = current;
} }
async detect(input, userConfig) { async detect(input, userConfig) {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
var _a, _b;
this.state = "config"; this.state = "config";
let timeStamp; let timeStamp;
let elapsedTime; let elapsedTime;
@ -12075,30 +12087,31 @@ var Human = class {
await __privateGet(this, _checkBackend).call(this); await __privateGet(this, _checkBackend).call(this);
await this.load(); await this.load();
timeStamp = now(); timeStamp = now();
let process6 = process4(input, this.config); this.process = process4(input, this.config);
this.performance.image = Math.trunc(now() - timeStamp); this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:"); this.analyze("Get Image:");
if (this.config.segmentation.enabled && process6 && process6.tensor) { if (this.config.segmentation.enabled && this.process && this.process.tensor) {
this.analyze("Start Segmentation:"); this.analyze("Start Segmentation:");
this.state = "run:segmentation"; this.state = "run:segmentation";
timeStamp = now(); timeStamp = now();
await predict11(process6); await predict11(this.process);
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.segmentation = elapsedTime; this.performance.segmentation = elapsedTime;
if (process6.canvas) { if (this.process.canvas) {
tf21.dispose(process6.tensor); tf21.dispose(this.process.tensor);
process6 = process4(process6.canvas, this.config); this.process = process4(this.process.canvas, this.config);
} }
this.analyze("End Segmentation:"); this.analyze("End Segmentation:");
} }
if (!process6 || !process6.tensor) { if (!this.process || !this.process.tensor) {
log("could not convert input to tensor"); log("could not convert input to tensor");
resolve({ error: "could not convert input to tensor" }); resolve({ error: "could not convert input to tensor" });
return; return;
} }
__privateGet(this, _emit).call(this, "image");
timeStamp = now(); timeStamp = now();
this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, process6.tensor); this.config.skipFrame = await __privateGet(this, _skipFrame).call(this, this.process.tensor);
if (!this.performance.frames) if (!this.performance.frames)
this.performance.frames = 0; this.performance.frames = 0;
if (!this.performance.cached) if (!this.performance.cached)
@ -12113,13 +12126,13 @@ var Human = class {
let handRes = []; let handRes = [];
let objectRes = []; let objectRes = [];
if (this.config.async) { if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? detectFace(this, this.process.tensor) : [];
if (this.performance.face) if (this.performance.face)
delete this.performance.face; delete this.performance.face;
} else { } else {
this.state = "run:face"; this.state = "run:face";
timeStamp = now(); timeStamp = now();
faceRes = this.config.face.enabled ? await detectFace(this, process6.tensor) : []; faceRes = this.config.face.enabled ? await detectFace(this, this.process.tensor) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.face = elapsedTime; this.performance.face = elapsedTime;
@ -12127,26 +12140,26 @@ var Human = class {
this.analyze("Start Body:"); this.analyze("Start Body:");
if (this.config.async) { if (this.config.async) {
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? predict8(this.process.tensor, this.config) : [];
if (this.performance.body) if (this.performance.body)
delete this.performance.body; delete this.performance.body;
} else { } else {
this.state = "run:body"; this.state = "run:body";
timeStamp = now(); timeStamp = now();
if (this.config.body.modelPath.includes("posenet")) if (this.config.body.modelPath.includes("posenet"))
bodyRes = this.config.body.enabled ? await predict4(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict4(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("blazepose")) else if (this.config.body.modelPath.includes("blazepose"))
bodyRes = this.config.body.enabled ? await predict6(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict6(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("efficientpose")) else if (this.config.body.modelPath.includes("efficientpose"))
bodyRes = this.config.body.enabled ? await predict7(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict7(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes("movenet")) else if (this.config.body.modelPath.includes("movenet"))
bodyRes = this.config.body.enabled ? await predict8(process6.tensor, this.config) : []; bodyRes = this.config.body.enabled ? await predict8(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.body = elapsedTime; this.performance.body = elapsedTime;
@ -12154,13 +12167,13 @@ var Human = class {
this.analyze("End Body:"); this.analyze("End Body:");
this.analyze("Start Hand:"); this.analyze("Start Hand:");
if (this.config.async) { if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? predict5(this.process.tensor, this.config) : [];
if (this.performance.hand) if (this.performance.hand)
delete this.performance.hand; delete this.performance.hand;
} else { } else {
this.state = "run:hand"; this.state = "run:hand";
timeStamp = now(); timeStamp = now();
handRes = this.config.hand.enabled ? await predict5(process6.tensor, this.config) : []; handRes = this.config.hand.enabled ? await predict5(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.hand = elapsedTime; this.performance.hand = elapsedTime;
@ -12169,18 +12182,18 @@ var Human = class {
this.analyze("Start Object:"); this.analyze("Start Object:");
if (this.config.async) { if (this.config.async) {
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? predict10(this.process.tensor, this.config) : [];
if (this.performance.object) if (this.performance.object)
delete this.performance.object; delete this.performance.object;
} else { } else {
this.state = "run:object"; this.state = "run:object";
timeStamp = now(); timeStamp = now();
if (this.config.object.modelPath.includes("nanodet")) if (this.config.object.modelPath.includes("nanodet"))
objectRes = this.config.object.enabled ? await predict9(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict9(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes("centernet")) else if (this.config.object.modelPath.includes("centernet"))
objectRes = this.config.object.enabled ? await predict10(process6.tensor, this.config) : []; objectRes = this.config.object.enabled ? await predict10(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) if (elapsedTime > 0)
this.performance.object = elapsedTime; this.performance.object = elapsedTime;
@ -12199,6 +12212,7 @@ var Human = class {
} }
this.performance.total = Math.trunc(now() - timeStart); this.performance.total = Math.trunc(now() - timeStart);
this.state = "idle"; this.state = "idle";
const shape = ((_b = (_a = this.process) == null ? void 0 : _a.tensor) == null ? void 0 : _b.shape) || [];
this.result = { this.result = {
face: faceRes, face: faceRes,
body: bodyRes, body: bodyRes,
@ -12206,14 +12220,14 @@ var Human = class {
gesture: gestureRes, gesture: gestureRes,
object: objectRes, object: objectRes,
performance: this.performance, performance: this.performance,
canvas: process6.canvas, canvas: this.process.canvas,
timestamp: Date.now(), timestamp: Date.now(),
get persons() { get persons() {
var _a; return join2(faceRes, bodyRes, handRes, gestureRes, shape);
return join2(faceRes, bodyRes, handRes, gestureRes, (_a = process6 == null ? void 0 : process6.tensor) == null ? void 0 : _a.shape);
} }
}; };
tf21.dispose(process6.tensor); tf21.dispose(this.process.tensor);
__privateGet(this, _emit).call(this, "detect");
resolve(this.result); resolve(this.result);
}); });
} }
@ -12233,6 +12247,7 @@ var Human = class {
const t1 = now(); const t1 = now();
if (this.config.debug) if (this.config.debug)
log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res); log("Warmup", this.config.warmup, Math.round(t1 - t0), "ms", res);
__privateGet(this, _emit).call(this, "warmup");
return res; return res;
} }
}; };
@ -12243,6 +12258,7 @@ _firstRun = new WeakMap();
_lastInputSum = new WeakMap(); _lastInputSum = new WeakMap();
_lastCacheDiff = new WeakMap(); _lastCacheDiff = new WeakMap();
_sanity = new WeakMap(); _sanity = new WeakMap();
_emit = new WeakMap();
_checkBackend = new WeakMap(); _checkBackend = new WeakMap();
_skipFrame = new WeakMap(); _skipFrame = new WeakMap();
_warmupBitmap = new WeakMap(); _warmupBitmap = new WeakMap();

View File

@ -76,8 +76,10 @@ export class Human {
* - Progresses through: 'config', 'check', 'backend', 'load', 'run:<model>', 'idle' * - Progresses through: 'config', 'check', 'backend', 'load', 'run:<model>', 'idle'
*/ */
state: string; state: string;
/** @internal: Instance of current image being processed */ /** process input and return tensor and canvas */
image: { tensor: Tensor | null, canvas: OffscreenCanvas | HTMLCanvasElement | null }; image: typeof image.process;
/** currenty processed image tensor and canvas */
process: { tensor: Tensor | null, canvas: OffscreenCanvas | HTMLCanvasElement | null };
/** @internal: Instance of TensorFlow/JS used by Human /** @internal: Instance of TensorFlow/JS used by Human
* - Can be embedded or externally provided * - Can be embedded or externally provided
*/ */
@ -87,7 +89,7 @@ export class Human {
* - face: draw detected faces * - face: draw detected faces
* - body: draw detected people and body parts * - body: draw detected people and body parts
* - hand: draw detected hands and hand parts * - hand: draw detected hands and hand parts
* - canvas: draw processed canvas which is a processed copy of the input * - canvas: draw this.processed canvas which is a this.processed copy of the input
* - all: meta-function that performs: canvas, face, body, hand * - all: meta-function that performs: canvas, face, body, hand
*/ */
draw: { draw: {
@ -126,6 +128,17 @@ export class Human {
faceres: GraphModel | null, faceres: GraphModel | null,
segmentation: GraphModel | null, segmentation: GraphModel | null,
}; };
/** Container for events dispatched by Human
*
* Possible events:
* - `create`: triggered when Human object is instantiated
* - `load`: triggered when models are loaded (explicitly or on-demand)
* - `image`: triggered when input image is this.processed
* - `result`: triggered when detection is complete
* - `warmup`: triggered when warmup is complete
*/
events: EventTarget;
/** Reference face triangualtion array of 468 points, used for triangle references between points */ /** Reference face triangualtion array of 468 points, used for triangle references between points */
faceTriangulation: typeof facemesh.triangulation; faceTriangulation: typeof facemesh.triangulation;
/** Refernce UV map of 468 values, used for 3D mapping of the face mesh */ /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */
@ -161,6 +174,7 @@ export class Human {
this.#firstRun = true; this.#firstRun = true;
this.#lastCacheDiff = 0; this.#lastCacheDiff = 0;
this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 }; this.performance = { backend: 0, load: 0, image: 0, frames: 0, cached: 0, changed: 0, total: 0, draw: 0 };
this.events = new EventTarget();
// object that contains all initialized models // object that contains all initialized models
this.models = { this.models = {
face: null, face: null,
@ -179,15 +193,17 @@ export class Human {
segmentation: null, segmentation: null,
}; };
this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] }; this.result = { face: [], body: [], hand: [], gesture: [], object: [], performance: {}, timestamp: 0, persons: [] };
// export access to image processing // export access to image this.processing
// @ts-ignore eslint-typescript cannot correctly infer type in anonymous function // @ts-ignore eslint-typescript cannot correctly infer type in anonymous function
this.image = (input: Input) => image.process(input, this.config); this.image = (input: Input) => image.process(input, this.config);
this.process = { tensor: null, canvas: null };
// export raw access to underlying models // export raw access to underlying models
this.faceTriangulation = facemesh.triangulation; this.faceTriangulation = facemesh.triangulation;
this.faceUVMap = facemesh.uvmap; this.faceUVMap = facemesh.uvmap;
// include platform info // include platform info
this.sysinfo = sysinfo.info(); this.sysinfo = sysinfo.info();
this.#lastInputSum = 1; this.#lastInputSum = 1;
this.#emit('create');
} }
// helper function: measure tensor leak // helper function: measure tensor leak
@ -228,9 +244,9 @@ export class Human {
} }
/** /**
* Segmentation method takes any input and returns processed canvas with body segmentation * Segmentation method takes any input and returns this.processed canvas with body segmentation
* Optional parameter background is used to fill the background with specific input * Optional parameter background is used to fill the background with specific input
* Segmentation is not triggered as part of detect process * Segmentation is not triggered as part of detect this.process
* *
* @param input: {@link Input} * @param input: {@link Input}
* @param background?: {@link Input} * @param background?: {@link Input}
@ -240,7 +256,7 @@ export class Human {
return segmentation.process(input, background, this.config); return segmentation.process(input, background, this.config);
} }
/** Enhance method performs additional enhacements to face image previously detected for futher processing /** Enhance method performs additional enhacements to face image previously detected for futher this.processing
* @param input: Tensor as provided in human.result.face[n].tensor * @param input: Tensor as provided in human.result.face[n].tensor
* @returns Tensor * @returns Tensor
*/ */
@ -267,6 +283,7 @@ export class Human {
async load(userConfig?: Config | Record<string, unknown>) { async load(userConfig?: Config | Record<string, unknown>) {
this.state = 'load'; this.state = 'load';
const timeStamp = now(); const timeStamp = now();
const count = Object.values(this.models).filter((model) => model).length;
if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config; if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;
if (this.#firstRun) { // print version info on first run and check for correct backend setup if (this.#firstRun) { // print version info on first run and check for correct backend setup
@ -289,10 +306,16 @@ export class Human {
this.#firstRun = false; this.#firstRun = false;
} }
const loaded = Object.values(this.models).filter((model) => model).length;
if (loaded !== count) this.#emit('load');
const current = Math.trunc(now() - timeStamp); const current = Math.trunc(now() - timeStamp);
if (current > (this.performance.load as number || 0)) this.performance.load = current; if (current > (this.performance.load as number || 0)) this.performance.load = current;
} }
// emit event
/** @hidden */
#emit = (event: string) => this.events?.dispatchEvent(new Event(event));
// check if backend needs initialization if it changed // check if backend needs initialization if it changed
/** @hidden */ /** @hidden */
#checkBackend = async (force = false) => { #checkBackend = async (force = false) => {
@ -433,9 +456,9 @@ export class Human {
/** Main detection method /** Main detection method
* - Analyze configuration: {@link Config} * - Analyze configuration: {@link Config}
* - Pre-process input: {@link Input} * - Pre-this.process input: {@link Input}
* - Run inference for all configured models * - Run inference for all configured models
* - Process and return result: {@link Result} * - this.process and return result: {@link Result}
* *
* @param input: Input * @param input: Input
* @param userConfig?: {@link Config} * @param userConfig?: {@link Config}
@ -468,34 +491,35 @@ export class Human {
await this.load(); await this.load();
timeStamp = now(); timeStamp = now();
let process = image.process(input, this.config); this.process = image.process(input, this.config);
this.performance.image = Math.trunc(now() - timeStamp); this.performance.image = Math.trunc(now() - timeStamp);
this.analyze('Get Image:'); this.analyze('Get Image:');
// run segmentation preprocessing // run segmentation prethis.processing
if (this.config.segmentation.enabled && process && process.tensor) { if (this.config.segmentation.enabled && this.process && this.process.tensor) {
this.analyze('Start Segmentation:'); this.analyze('Start Segmentation:');
this.state = 'run:segmentation'; this.state = 'run:segmentation';
timeStamp = now(); timeStamp = now();
await segmentation.predict(process); await segmentation.predict(this.process);
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) this.performance.segmentation = elapsedTime; if (elapsedTime > 0) this.performance.segmentation = elapsedTime;
if (process.canvas) { if (this.process.canvas) {
// replace input // replace input
tf.dispose(process.tensor); tf.dispose(this.process.tensor);
process = image.process(process.canvas, this.config); this.process = image.process(this.process.canvas, this.config);
} }
this.analyze('End Segmentation:'); this.analyze('End Segmentation:');
} }
if (!process || !process.tensor) { if (!this.process || !this.process.tensor) {
log('could not convert input to tensor'); log('could not convert input to tensor');
resolve({ error: 'could not convert input to tensor' }); resolve({ error: 'could not convert input to tensor' });
return; return;
} }
this.#emit('image');
timeStamp = now(); timeStamp = now();
this.config.skipFrame = await this.#skipFrame(process.tensor); this.config.skipFrame = await this.#skipFrame(this.process.tensor);
if (!this.performance.frames) this.performance.frames = 0; if (!this.performance.frames) this.performance.frames = 0;
if (!this.performance.cached) this.performance.cached = 0; if (!this.performance.cached) this.performance.cached = 0;
(this.performance.frames as number)++; (this.performance.frames as number)++;
@ -512,12 +536,12 @@ export class Human {
// run face detection followed by all models that rely on face bounding box: face mesh, age, gender, emotion // run face detection followed by all models that rely on face bounding box: face mesh, age, gender, emotion
if (this.config.async) { if (this.config.async) {
faceRes = this.config.face.enabled ? face.detectFace(this, process.tensor) : []; faceRes = this.config.face.enabled ? face.detectFace(this, this.process.tensor) : [];
if (this.performance.face) delete this.performance.face; if (this.performance.face) delete this.performance.face;
} else { } else {
this.state = 'run:face'; this.state = 'run:face';
timeStamp = now(); timeStamp = now();
faceRes = this.config.face.enabled ? await face.detectFace(this, process.tensor) : []; faceRes = this.config.face.enabled ? await face.detectFace(this, this.process.tensor) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) this.performance.face = elapsedTime; if (elapsedTime > 0) this.performance.face = elapsedTime;
} }
@ -525,18 +549,18 @@ export class Human {
// run body: can be posenet, blazepose, efficientpose, movenet // run body: can be posenet, blazepose, efficientpose, movenet
this.analyze('Start Body:'); this.analyze('Start Body:');
if (this.config.async) { if (this.config.async) {
if (this.config.body.modelPath.includes('posenet')) bodyRes = this.config.body.enabled ? posenet.predict(process.tensor, this.config) : []; if (this.config.body.modelPath.includes('posenet')) bodyRes = this.config.body.enabled ? posenet.predict(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes('blazepose')) bodyRes = this.config.body.enabled ? blazepose.predict(process.tensor, this.config) : []; else if (this.config.body.modelPath.includes('blazepose')) bodyRes = this.config.body.enabled ? blazepose.predict(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes('efficientpose')) bodyRes = this.config.body.enabled ? efficientpose.predict(process.tensor, this.config) : []; else if (this.config.body.modelPath.includes('efficientpose')) bodyRes = this.config.body.enabled ? efficientpose.predict(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes('movenet')) bodyRes = this.config.body.enabled ? movenet.predict(process.tensor, this.config) : []; else if (this.config.body.modelPath.includes('movenet')) bodyRes = this.config.body.enabled ? movenet.predict(this.process.tensor, this.config) : [];
if (this.performance.body) delete this.performance.body; if (this.performance.body) delete this.performance.body;
} else { } else {
this.state = 'run:body'; this.state = 'run:body';
timeStamp = now(); timeStamp = now();
if (this.config.body.modelPath.includes('posenet')) bodyRes = this.config.body.enabled ? await posenet.predict(process.tensor, this.config) : []; if (this.config.body.modelPath.includes('posenet')) bodyRes = this.config.body.enabled ? await posenet.predict(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes('blazepose')) bodyRes = this.config.body.enabled ? await blazepose.predict(process.tensor, this.config) : []; else if (this.config.body.modelPath.includes('blazepose')) bodyRes = this.config.body.enabled ? await blazepose.predict(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes('efficientpose')) bodyRes = this.config.body.enabled ? await efficientpose.predict(process.tensor, this.config) : []; else if (this.config.body.modelPath.includes('efficientpose')) bodyRes = this.config.body.enabled ? await efficientpose.predict(this.process.tensor, this.config) : [];
else if (this.config.body.modelPath.includes('movenet')) bodyRes = this.config.body.enabled ? await movenet.predict(process.tensor, this.config) : []; else if (this.config.body.modelPath.includes('movenet')) bodyRes = this.config.body.enabled ? await movenet.predict(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) this.performance.body = elapsedTime; if (elapsedTime > 0) this.performance.body = elapsedTime;
} }
@ -545,12 +569,12 @@ export class Human {
// run handpose // run handpose
this.analyze('Start Hand:'); this.analyze('Start Hand:');
if (this.config.async) { if (this.config.async) {
handRes = this.config.hand.enabled ? handpose.predict(process.tensor, this.config) : []; handRes = this.config.hand.enabled ? handpose.predict(this.process.tensor, this.config) : [];
if (this.performance.hand) delete this.performance.hand; if (this.performance.hand) delete this.performance.hand;
} else { } else {
this.state = 'run:hand'; this.state = 'run:hand';
timeStamp = now(); timeStamp = now();
handRes = this.config.hand.enabled ? await handpose.predict(process.tensor, this.config) : []; handRes = this.config.hand.enabled ? await handpose.predict(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) this.performance.hand = elapsedTime; if (elapsedTime > 0) this.performance.hand = elapsedTime;
} }
@ -559,14 +583,14 @@ export class Human {
// run nanodet // run nanodet
this.analyze('Start Object:'); this.analyze('Start Object:');
if (this.config.async) { if (this.config.async) {
if (this.config.object.modelPath.includes('nanodet')) objectRes = this.config.object.enabled ? nanodet.predict(process.tensor, this.config) : []; if (this.config.object.modelPath.includes('nanodet')) objectRes = this.config.object.enabled ? nanodet.predict(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes('centernet')) objectRes = this.config.object.enabled ? centernet.predict(process.tensor, this.config) : []; else if (this.config.object.modelPath.includes('centernet')) objectRes = this.config.object.enabled ? centernet.predict(this.process.tensor, this.config) : [];
if (this.performance.object) delete this.performance.object; if (this.performance.object) delete this.performance.object;
} else { } else {
this.state = 'run:object'; this.state = 'run:object';
timeStamp = now(); timeStamp = now();
if (this.config.object.modelPath.includes('nanodet')) objectRes = this.config.object.enabled ? await nanodet.predict(process.tensor, this.config) : []; if (this.config.object.modelPath.includes('nanodet')) objectRes = this.config.object.enabled ? await nanodet.predict(this.process.tensor, this.config) : [];
else if (this.config.object.modelPath.includes('centernet')) objectRes = this.config.object.enabled ? await centernet.predict(process.tensor, this.config) : []; else if (this.config.object.modelPath.includes('centernet')) objectRes = this.config.object.enabled ? await centernet.predict(this.process.tensor, this.config) : [];
elapsedTime = Math.trunc(now() - timeStamp); elapsedTime = Math.trunc(now() - timeStamp);
if (elapsedTime > 0) this.performance.object = elapsedTime; if (elapsedTime > 0) this.performance.object = elapsedTime;
} }
@ -586,6 +610,7 @@ export class Human {
this.performance.total = Math.trunc(now() - timeStart); this.performance.total = Math.trunc(now() - timeStart);
this.state = 'idle'; this.state = 'idle';
const shape = this.process?.tensor?.shape || [];
this.result = { this.result = {
face: faceRes as Face[], face: faceRes as Face[],
body: bodyRes as Body[], body: bodyRes as Body[],
@ -593,15 +618,16 @@ export class Human {
gesture: gestureRes, gesture: gestureRes,
object: objectRes as Item[], object: objectRes as Item[],
performance: this.performance, performance: this.performance,
canvas: process.canvas, canvas: this.process.canvas,
timestamp: Date.now(), timestamp: Date.now(),
get persons() { return persons.join(faceRes as Face[], bodyRes as Body[], handRes as Hand[], gestureRes, process?.tensor?.shape); }, get persons() { return persons.join(faceRes as Face[], bodyRes as Body[], handRes as Hand[], gestureRes, shape); },
}; };
// finally dispose input tensor // finally dispose input tensor
tf.dispose(process.tensor); tf.dispose(this.process.tensor);
// log('Result:', result); // log('Result:', result);
this.#emit('detect');
resolve(this.result); resolve(this.result);
}); });
} }
@ -700,6 +726,7 @@ export class Human {
else res = await this.#warmupNode(); else res = await this.#warmupNode();
const t1 = now(); const t1 = now();
if (this.config.debug) log('Warmup', this.config.warmup, Math.round(t1 - t0), 'ms', res); if (this.config.debug) log('Warmup', this.config.warmup, Math.round(t1 - t0), 'ms', res);
this.#emit('warmup');
return res; return res;
} }
} }

View File

@ -186,7 +186,7 @@ export interface Result {
/** global performance object with timing values for each operation */ /** global performance object with timing values for each operation */
performance: Record<string, unknown>, performance: Record<string, unknown>,
/** optional processed canvas that can be used to draw input on screen */ /** optional processed canvas that can be used to draw input on screen */
canvas?: OffscreenCanvas | HTMLCanvasElement, canvas?: OffscreenCanvas | HTMLCanvasElement | null,
/** timestamp of detection representing the milliseconds elapsed since the UNIX epoch */ /** timestamp of detection representing the milliseconds elapsed since the UNIX epoch */
readonly timestamp: number, readonly timestamp: number,
/** getter property that returns unified persons object */ /** getter property that returns unified persons object */

View File

@ -22,7 +22,7 @@ export async function load(config: Config): Promise<GraphModel> {
return model; return model;
} }
export async function predict(input: { tensor: Tensor | null, canvas: OffscreenCanvas | HTMLCanvasElement }): Promise<Uint8ClampedArray | null> { export async function predict(input: { tensor: Tensor | null, canvas: OffscreenCanvas | HTMLCanvasElement | null }): Promise<Uint8ClampedArray | null> {
const width = input.tensor?.shape[1] || 0; const width = input.tensor?.shape[1] || 0;
const height = input.tensor?.shape[2] || 0; const height = input.tensor?.shape[2] || 0;
if (!input.tensor) return null; if (!input.tensor) return null;

View File

View File

@ -496,3 +496,430 @@
2021-09-11 11:42:16 STATE: Lint: {"locations":["src/**/*.ts","test/*.js","demo/**/*.js"],"files":75,"errors":0,"warnings":0} 2021-09-11 11:42:16 STATE: Lint: {"locations":["src/**/*.ts","test/*.js","demo/**/*.js"],"files":75,"errors":0,"warnings":0}
2021-09-11 11:42:16 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} 2021-09-11 11:42:16 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2021-09-11 11:42:16 INFO:  Done... 2021-09-11 11:42:16 INFO:  Done...
2021-09-11 13:36:32 INFO:  @vladmandic/human version 2.1.5
2021-09-11 13:36:32 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.5.0
2021-09-11 13:36:32 INFO:  Application: {"name":"@vladmandic/human","version":"2.1.5"}
2021-09-11 13:36:32 INFO:  Environment: {"profile":"development","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
2021-09-11 13:36:32 INFO:  Toolchain: {"build":"0.4.1","esbuild":"0.12.26","typescript":"4.4.3","typedoc":"0.21.9","eslint":"7.32.0"}
2021-09-11 13:36:32 INFO:  Build: {"profile":"development","steps":["serve","watch","compile"]}
2021-09-11 13:36:32 STATE: WebServer: {"ssl":false,"port":10030,"root":"."}
2021-09-11 13:36:32 STATE: WebServer: {"ssl":true,"port":10031,"root":".","sslKey":"node_modules/@vladmandic/build/cert/https.key","sslCrt":"node_modules/@vladmandic/build/cert/https.crt"}
2021-09-11 13:36:32 STATE: Watch: {"locations":["src/**","src/**","tfjs/*"]}
2021-09-11 13:36:32 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 13:36:32 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456782,"outputBytes":396579}
2021-09-11 13:36:32 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 13:36:32 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456790,"outputBytes":396583}
2021-09-11 13:36:32 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 13:36:33 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":456857,"outputBytes":396655}
2021-09-11 13:36:33 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 13:36:33 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":456956,"outputBytes":398559}
2021-09-11 13:36:33 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 13:36:33 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799349,"outputBytes":1391563}
2021-09-11 13:36:34 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799349,"outputBytes":2583497}
2021-09-11 13:36:34 INFO:  Listening...
2021-09-11 13:38:06 INFO:  Watch: {"event":"modify","input":"src/interpolate.ts"}
2021-09-11 13:38:06 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 13:38:06 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456804,"outputBytes":396600}
2021-09-11 13:38:06 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 13:38:07 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456812,"outputBytes":396604}
2021-09-11 13:38:07 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 13:38:07 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":456879,"outputBytes":396676}
2021-09-11 13:38:07 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 13:38:07 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":456978,"outputBytes":398580}
2021-09-11 13:38:07 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 13:38:07 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799371,"outputBytes":1391581}
2021-09-11 13:38:08 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799371,"outputBytes":2583518}
2021-09-11 13:39:18 INFO:  Watch: {"event":"modify","input":"src/interpolate.ts"}
2021-09-11 13:39:18 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 13:39:18 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456782,"outputBytes":396579}
2021-09-11 13:39:18 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 13:39:18 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456790,"outputBytes":396583}
2021-09-11 13:39:18 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 13:39:18 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":456857,"outputBytes":396655}
2021-09-11 13:39:18 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 13:39:18 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":456956,"outputBytes":398559}
2021-09-11 13:39:18 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 13:39:18 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799349,"outputBytes":1391563}
2021-09-11 13:39:19 INFO:  Watch: {"event":"modify","input":"src/human.ts","skip":true}
2021-09-11 13:39:19 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799349,"outputBytes":2583497}
2021-09-11 13:39:56 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 13:39:56 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 13:39:56 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456867,"outputBytes":396769}
2021-09-11 13:39:56 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 13:39:56 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456875,"outputBytes":396773}
2021-09-11 13:39:57 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 13:39:57 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":456942,"outputBytes":396845}
2021-09-11 13:39:57 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 13:39:57 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457041,"outputBytes":398749}
2021-09-11 13:39:57 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 13:39:57 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799434,"outputBytes":1391618}
2021-09-11 13:39:58 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799434,"outputBytes":2584200}
2021-09-11 13:49:01 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 13:49:01 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 13:49:01 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456890,"outputBytes":396769}
2021-09-11 13:49:01 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 13:49:01 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456898,"outputBytes":396773}
2021-09-11 13:49:01 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 13:49:01 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":456965,"outputBytes":396845}
2021-09-11 13:49:01 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 13:49:01 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457064,"outputBytes":398749}
2021-09-11 13:49:02 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 13:49:02 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799457,"outputBytes":1391618}
2021-09-11 13:49:03 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799457,"outputBytes":2584200}
2021-09-11 13:58:55 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 13:58:55 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 13:58:55 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457013,"outputBytes":396896}
2021-09-11 13:58:55 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 13:58:55 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457021,"outputBytes":396900}
2021-09-11 13:58:55 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 13:58:55 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457088,"outputBytes":396972}
2021-09-11 13:58:55 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 13:58:55 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457187,"outputBytes":398876}
2021-09-11 13:58:56 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 13:58:56 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799580,"outputBytes":1391701}
2021-09-11 13:58:56 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799580,"outputBytes":2584327}
2021-09-11 13:59:33 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 13:59:33 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 13:59:33 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457088,"outputBytes":396873}
2021-09-11 13:59:33 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 13:59:33 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457096,"outputBytes":396877}
2021-09-11 13:59:33 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 13:59:33 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457163,"outputBytes":396949}
2021-09-11 13:59:33 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 13:59:33 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457262,"outputBytes":398853}
2021-09-11 13:59:34 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 13:59:34 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799655,"outputBytes":1391754}
2021-09-11 13:59:35 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799655,"outputBytes":2583791}
2021-09-11 13:59:51 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 13:59:51 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 13:59:51 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457088,"outputBytes":396873}
2021-09-11 13:59:51 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 13:59:51 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457096,"outputBytes":396877}
2021-09-11 13:59:51 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 13:59:52 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457163,"outputBytes":396949}
2021-09-11 13:59:52 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 13:59:52 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457262,"outputBytes":398853}
2021-09-11 13:59:52 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 13:59:52 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799655,"outputBytes":1391754}
2021-09-11 13:59:53 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799655,"outputBytes":2583791}
2021-09-11 14:32:35 INFO:  Watch: {"event":"remove","input":"src/warmup.ts"}
2021-09-11 14:32:35 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 14:32:35 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457088,"outputBytes":396873}
2021-09-11 14:32:35 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 14:32:35 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457096,"outputBytes":396877}
2021-09-11 14:32:35 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 14:32:35 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457163,"outputBytes":396949}
2021-09-11 14:32:35 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 14:32:35 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457262,"outputBytes":398853}
2021-09-11 14:32:36 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 14:32:36 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799655,"outputBytes":1391754}
2021-09-11 14:32:37 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799655,"outputBytes":2583791}
2021-09-11 14:33:59 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 14:33:59 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 14:33:59 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457082,"outputBytes":396867}
2021-09-11 14:33:59 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 14:33:59 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457090,"outputBytes":396871}
2021-09-11 14:33:59 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 14:33:59 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457157,"outputBytes":396943}
2021-09-11 14:33:59 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 14:33:59 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457256,"outputBytes":398847}
2021-09-11 14:33:59 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 14:34:00 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799649,"outputBytes":1391748}
2021-09-11 14:34:00 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799649,"outputBytes":2583785}
2021-09-11 14:34:53 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 14:34:53 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 14:34:53 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457065,"outputBytes":396850}
2021-09-11 14:34:53 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 14:34:54 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457073,"outputBytes":396854}
2021-09-11 14:34:54 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 14:34:54 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457140,"outputBytes":396926}
2021-09-11 14:34:54 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 14:34:54 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457239,"outputBytes":398830}
2021-09-11 14:34:55 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 14:34:55 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799632,"outputBytes":1391737}
2021-09-11 14:34:55 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799632,"outputBytes":2583768}
2021-09-11 14:35:14 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 14:35:14 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 14:35:14 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456955,"outputBytes":396740}
2021-09-11 14:35:14 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 14:35:14 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456963,"outputBytes":396744}
2021-09-11 14:35:14 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 14:35:14 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457030,"outputBytes":396816}
2021-09-11 14:35:14 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 14:35:14 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457129,"outputBytes":398720}
2021-09-11 14:35:15 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 14:35:15 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799522,"outputBytes":1391657}
2021-09-11 14:35:15 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799522,"outputBytes":2583658}
2021-09-11 14:35:17 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 14:35:17 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 14:35:17 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456955,"outputBytes":396740}
2021-09-11 14:35:17 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 14:35:17 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456963,"outputBytes":396744}
2021-09-11 14:35:17 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 14:35:17 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457030,"outputBytes":396816}
2021-09-11 14:35:17 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 14:35:17 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457129,"outputBytes":398720}
2021-09-11 14:35:18 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 14:35:18 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799522,"outputBytes":1391657}
2021-09-11 14:35:19 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799522,"outputBytes":2583658}
2021-09-11 14:36:11 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 14:36:11 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 14:36:11 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456923,"outputBytes":396697}
2021-09-11 14:36:11 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 14:36:11 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456931,"outputBytes":396701}
2021-09-11 14:36:11 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 14:36:11 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":456998,"outputBytes":396773}
2021-09-11 14:36:11 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 14:36:11 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457097,"outputBytes":398677}
2021-09-11 14:36:12 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 14:36:12 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799490,"outputBytes":1391646}
2021-09-11 14:36:12 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799490,"outputBytes":2583615}
2021-09-11 14:37:21 INFO:  Watch: {"event":"modify","input":"src/image/image.ts"}
2021-09-11 14:37:21 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 14:37:21 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456990,"outputBytes":396760}
2021-09-11 14:37:21 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 14:37:21 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456998,"outputBytes":396764}
2021-09-11 14:37:21 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 14:37:21 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457065,"outputBytes":396836}
2021-09-11 14:37:21 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 14:37:21 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457164,"outputBytes":398740}
2021-09-11 14:37:21 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 14:37:22 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799557,"outputBytes":1391698}
2021-09-11 14:37:22 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799557,"outputBytes":2583679}
2021-09-11 14:37:42 INFO:  Watch: {"event":"modify","input":"src/image/image.ts"}
2021-09-11 14:37:42 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 14:37:42 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":456923,"outputBytes":396697}
2021-09-11 14:37:42 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 14:37:42 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":456931,"outputBytes":396701}
2021-09-11 14:37:42 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 14:37:42 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":456998,"outputBytes":396773}
2021-09-11 14:37:42 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 14:37:42 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457097,"outputBytes":398677}
2021-09-11 14:37:43 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 14:37:43 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799490,"outputBytes":1391646}
2021-09-11 14:37:44 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799490,"outputBytes":2583615}
2021-09-11 15:28:39 INFO:  @vladmandic/human version 2.1.5
2021-09-11 15:28:39 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.5.0
2021-09-11 15:28:39 INFO:  Application: {"name":"@vladmandic/human","version":"2.1.5"}
2021-09-11 15:28:39 INFO:  Environment: {"profile":"development","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
2021-09-11 15:28:39 INFO:  Toolchain: {"build":"0.4.1","esbuild":"0.12.26","typescript":"4.4.3","typedoc":"0.21.9","eslint":"7.32.0"}
2021-09-11 15:28:39 INFO:  Build: {"profile":"development","steps":["serve","watch","compile"]}
2021-09-11 15:28:39 STATE: WebServer: {"ssl":false,"port":10030,"root":"."}
2021-09-11 15:28:39 STATE: WebServer: {"ssl":true,"port":10031,"root":".","sslKey":"node_modules/@vladmandic/build/cert/https.key","sslCrt":"node_modules/@vladmandic/build/cert/https.crt"}
2021-09-11 15:28:39 STATE: Watch: {"locations":["src/**","src/**","tfjs/*"]}
2021-09-11 15:28:39 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:28:39 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457192,"outputBytes":397073}
2021-09-11 15:28:39 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:28:39 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457200,"outputBytes":397077}
2021-09-11 15:28:39 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:28:39 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457267,"outputBytes":397149}
2021-09-11 15:28:39 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:28:39 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457366,"outputBytes":399053}
2021-09-11 15:28:39 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:28:39 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799759,"outputBytes":1391867}
2021-09-11 15:28:40 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799759,"outputBytes":2583991}
2021-09-11 15:28:40 INFO:  Listening...
2021-09-11 15:29:40 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:29:40 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:29:40 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457286,"outputBytes":397203}
2021-09-11 15:29:40 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:29:40 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457294,"outputBytes":397207}
2021-09-11 15:29:40 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:29:40 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457361,"outputBytes":397279}
2021-09-11 15:29:40 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:29:40 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457460,"outputBytes":399183}
2021-09-11 15:29:40 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:29:41 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799853,"outputBytes":1391928}
2021-09-11 15:29:41 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799853,"outputBytes":2584121}
2021-09-11 15:31:17 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:31:17 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:31:17 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457372,"outputBytes":397201}
2021-09-11 15:31:17 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:31:17 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457380,"outputBytes":397205}
2021-09-11 15:31:17 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:31:17 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457447,"outputBytes":397277}
2021-09-11 15:31:17 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:31:17 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457546,"outputBytes":399181}
2021-09-11 15:31:18 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:31:18 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799939,"outputBytes":1391926}
2021-09-11 15:31:18 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799939,"outputBytes":2584119}
2021-09-11 15:31:31 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:31:31 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:31:31 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457372,"outputBytes":397201}
2021-09-11 15:31:31 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:31:31 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457380,"outputBytes":397205}
2021-09-11 15:31:31 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:31:31 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457447,"outputBytes":397277}
2021-09-11 15:31:31 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:31:31 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457546,"outputBytes":399181}
2021-09-11 15:31:32 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:31:32 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2799939,"outputBytes":1391926}
2021-09-11 15:31:33 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2799939,"outputBytes":2584119}
2021-09-11 15:32:59 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:32:59 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:32:59 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457550,"outputBytes":397201}
2021-09-11 15:32:59 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:32:59 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457558,"outputBytes":397205}
2021-09-11 15:32:59 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:32:59 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457625,"outputBytes":397277}
2021-09-11 15:32:59 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:32:59 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457724,"outputBytes":399181}
2021-09-11 15:32:59 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:33:00 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800117,"outputBytes":1391926}
2021-09-11 15:33:00 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800117,"outputBytes":2584119}
2021-09-11 15:33:07 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:33:07 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:33:07 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457556,"outputBytes":397201}
2021-09-11 15:33:07 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:33:07 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457564,"outputBytes":397205}
2021-09-11 15:33:07 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:33:07 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457631,"outputBytes":397277}
2021-09-11 15:33:07 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:33:07 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457730,"outputBytes":399181}
2021-09-11 15:33:08 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:33:08 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800123,"outputBytes":1391926}
2021-09-11 15:33:09 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800123,"outputBytes":2584119}
2021-09-11 15:33:20 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:33:20 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:33:20 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457555,"outputBytes":397201}
2021-09-11 15:33:20 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:33:20 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457563,"outputBytes":397205}
2021-09-11 15:33:20 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:33:20 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457630,"outputBytes":397277}
2021-09-11 15:33:20 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:33:20 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457729,"outputBytes":399181}
2021-09-11 15:33:20 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:33:21 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800122,"outputBytes":1391926}
2021-09-11 15:33:21 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800122,"outputBytes":2584119}
2021-09-11 15:41:18 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:41:18 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:41:19 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457545,"outputBytes":397201}
2021-09-11 15:41:19 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:41:19 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457553,"outputBytes":397205}
2021-09-11 15:41:19 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:41:19 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457620,"outputBytes":397277}
2021-09-11 15:41:19 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:41:19 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457719,"outputBytes":399181}
2021-09-11 15:41:19 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:41:19 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800112,"outputBytes":1391926}
2021-09-11 15:41:20 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800112,"outputBytes":2584119}
2021-09-11 15:44:19 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:44:19 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:44:19 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457572,"outputBytes":397254}
2021-09-11 15:44:19 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:44:19 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457580,"outputBytes":397258}
2021-09-11 15:44:19 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:44:20 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457647,"outputBytes":397330}
2021-09-11 15:44:20 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:44:20 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457746,"outputBytes":399234}
2021-09-11 15:44:20 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:44:20 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800139,"outputBytes":1391957}
2021-09-11 15:44:21 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800139,"outputBytes":2584172}
2021-09-11 15:45:11 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:45:11 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:45:11 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457628,"outputBytes":397254}
2021-09-11 15:45:11 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:45:11 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457636,"outputBytes":397258}
2021-09-11 15:45:11 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:45:11 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457703,"outputBytes":397330}
2021-09-11 15:45:11 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:45:11 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457802,"outputBytes":399234}
2021-09-11 15:45:12 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:45:12 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800195,"outputBytes":1391957}
2021-09-11 15:45:12 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800195,"outputBytes":2584172}
2021-09-11 15:45:41 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:45:41 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:45:41 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457645,"outputBytes":397271}
2021-09-11 15:45:41 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:45:41 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457653,"outputBytes":397275}
2021-09-11 15:45:41 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:45:41 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457720,"outputBytes":397347}
2021-09-11 15:45:41 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:45:41 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457819,"outputBytes":399251}
2021-09-11 15:45:42 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:45:42 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800212,"outputBytes":1391962}
2021-09-11 15:45:42 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800212,"outputBytes":2584189}
2021-09-11 15:45:56 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:45:56 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:45:56 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457628,"outputBytes":397254}
2021-09-11 15:45:56 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:45:56 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457636,"outputBytes":397258}
2021-09-11 15:45:56 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:45:56 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457703,"outputBytes":397330}
2021-09-11 15:45:56 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:45:56 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":457802,"outputBytes":399234}
2021-09-11 15:45:57 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:45:57 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800195,"outputBytes":1391957}
2021-09-11 15:45:58 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800195,"outputBytes":2584172}
2021-09-11 15:53:23 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:53:23 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:53:23 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457913,"outputBytes":397426}
2021-09-11 15:53:23 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:53:23 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457921,"outputBytes":397430}
2021-09-11 15:53:23 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:53:23 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":457988,"outputBytes":397502}
2021-09-11 15:53:23 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:53:23 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":458087,"outputBytes":399406}
2021-09-11 15:53:24 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:53:24 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800480,"outputBytes":1392328}
2021-09-11 15:53:24 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800480,"outputBytes":2584344}
2021-09-11 15:55:39 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:55:39 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:55:39 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457946,"outputBytes":397457}
2021-09-11 15:55:39 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:55:39 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457954,"outputBytes":397461}
2021-09-11 15:55:39 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:55:39 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":458021,"outputBytes":397533}
2021-09-11 15:55:39 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:55:39 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":458120,"outputBytes":399437}
2021-09-11 15:55:39 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:55:40 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800513,"outputBytes":1392342}
2021-09-11 15:55:40 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800513,"outputBytes":2584375}
2021-09-11 15:56:05 INFO:  Watch: {"event":"modify","input":"src/segmentation/segmentation.ts"}
2021-09-11 15:56:05 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:56:05 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457953,"outputBytes":397457}
2021-09-11 15:56:05 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:56:05 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457961,"outputBytes":397461}
2021-09-11 15:56:05 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:56:05 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":458028,"outputBytes":397533}
2021-09-11 15:56:05 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:56:05 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":458127,"outputBytes":399437}
2021-09-11 15:56:05 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:56:06 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800520,"outputBytes":1392342}
2021-09-11 15:56:06 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800520,"outputBytes":2584375}
2021-09-11 15:56:25 INFO:  Watch: {"event":"modify","input":"src/result.ts"}
2021-09-11 15:56:25 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:56:25 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":457953,"outputBytes":397457}
2021-09-11 15:56:25 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:56:25 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":457961,"outputBytes":397461}
2021-09-11 15:56:25 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:56:25 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":458028,"outputBytes":397533}
2021-09-11 15:56:25 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:56:25 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":458127,"outputBytes":399437}
2021-09-11 15:56:25 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:56:26 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800520,"outputBytes":1392342}
2021-09-11 15:56:26 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800520,"outputBytes":2584375}
2021-09-11 15:59:05 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 15:59:05 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 15:59:05 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":458000,"outputBytes":397457}
2021-09-11 15:59:05 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 15:59:05 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":458008,"outputBytes":397461}
2021-09-11 15:59:05 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 15:59:06 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":458075,"outputBytes":397533}
2021-09-11 15:59:06 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 15:59:06 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":458174,"outputBytes":399437}
2021-09-11 15:59:06 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 15:59:06 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800567,"outputBytes":1392342}
2021-09-11 15:59:07 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800567,"outputBytes":2584375}
2021-09-11 16:00:05 INFO:  Watch: {"event":"modify","input":"src/human.ts"}
2021-09-11 16:00:05 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
2021-09-11 16:00:05 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":47,"inputBytes":458000,"outputBytes":397457}
2021-09-11 16:00:05 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1424}
2021-09-11 16:00:05 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":47,"inputBytes":458008,"outputBytes":397461}
2021-09-11 16:00:05 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1491}
2021-09-11 16:00:05 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":47,"inputBytes":458075,"outputBytes":397533}
2021-09-11 16:00:05 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":2168,"outputBytes":1590}
2021-09-11 16:00:05 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":47,"inputBytes":458174,"outputBytes":399437}
2021-09-11 16:00:06 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":7,"inputBytes":2168,"outputBytes":2343983}
2021-09-11 16:00:06 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":47,"inputBytes":2800567,"outputBytes":1392342}
2021-09-11 16:00:06 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":47,"inputBytes":2800567,"outputBytes":2584375}