support for dynamic backend switching

pull/193/head
Vladimir Mandic 2021-09-20 21:59:49 -04:00
parent 8bed89e7d4
commit 081fb7b49f
15 changed files with 2745 additions and 1034 deletions

View File

@ -102,10 +102,6 @@ function mergeDeep(...objects) {
return prev;
}, {});
}
async function wait(time) {
const waiting = new Promise((resolve) => setTimeout(() => resolve(true), time));
await waiting;
}
// src/config.ts
var config = {
@ -11293,10 +11289,10 @@ async function register(instance) {
}
// src/tfjs/backend.ts
async function check(instance) {
if (env.initial || instance.config.backend && instance.config.backend.length > 0 && tfjs_esm_exports.getBackend() !== instance.config.backend) {
async function check(instance, force = false) {
instance.state = "backend";
if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && tfjs_esm_exports.getBackend() !== instance.config.backend) {
const timeStamp = now();
instance.state = "backend";
if (instance.config.backend && instance.config.backend.length > 0) {
if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) {
if (instance.config.debug)
@ -12115,6 +12111,7 @@ async function warmupBitmap(instance) {
case "face":
blob = await b64toBlob(face3);
break;
case "body":
case "full":
blob = await b64toBlob(body3);
break;
@ -12191,22 +12188,25 @@ async function warmupNode(instance) {
}
async function warmup(instance, userConfig) {
const t0 = now();
instance.state = "warmup";
if (userConfig)
instance.config = mergeDeep(instance.config, userConfig);
if (!instance.config.warmup || instance.config.warmup === "none")
return { error: "null" };
let res;
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
return res;
return new Promise(async (resolve) => {
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
resolve(res);
});
}
// src/human.ts
@ -12254,7 +12254,11 @@ var Human = class {
}
return null;
});
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
__publicField(this, "reset", () => {
const currentBackend = this.config.backend;
this.config = JSON.parse(JSON.stringify(config));
this.config.backend = currentBackend;
});
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
__publicField(this, "image", (input) => process2(input, this.config));
__publicField(this, "emit", (event) => {
@ -12326,8 +12330,9 @@ var Human = class {
match(faceEmbedding, db, threshold = 0) {
return match(faceEmbedding, db, threshold);
}
init() {
check(this);
async init() {
await check(this, true);
await this.tf.ready();
set(this.env);
}
async load(userConfig) {
@ -12371,8 +12376,7 @@ var Human = class {
return warmup(this, userConfig);
}
async detect(input, userConfig) {
if (this.config.yield)
await wait(1);
this.state = "detect";
return new Promise(async (resolve) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
this.state = "config";
@ -12388,16 +12392,15 @@ var Human = class {
const timeStart = now();
await check(this);
await this.load();
if (this.config.yield)
await wait(1);
timeStamp = now();
this.state = "image";
let img = process2(input, this.config);
this.process = img;
this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:");
if (this.config.segmentation.enabled && this.process && img.tensor && img.canvas) {
this.analyze("Start Segmentation:");
this.state = "run:segmentation";
this.state = "detect:segmentation";
timeStamp = now();
await predict11(img);
elapsedTime = Math.trunc(now() - timeStamp);
@ -12431,7 +12434,7 @@ var Human = class {
let bodyRes = [];
let handRes = [];
let objectRes = [];
this.state = "run:face";
this.state = "detect:face";
if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : [];
if (this.performance.face)
@ -12444,7 +12447,7 @@ var Human = class {
this.performance.face = elapsedTime;
}
this.analyze("Start Body:");
this.state = "run:body";
this.state = "detect:body";
if (this.config.async) {
if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(img.tensor, this.config) : [];
@ -12472,7 +12475,7 @@ var Human = class {
}
this.analyze("End Body:");
this.analyze("Start Hand:");
this.state = "run:hand";
this.state = "detect:hand";
if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(img.tensor, this.config) : [];
if (this.performance.hand)
@ -12486,7 +12489,7 @@ var Human = class {
}
this.analyze("End Hand:");
this.analyze("Start Object:");
this.state = "run:object";
this.state = "detect:object";
if (this.config.async) {
if ((_i = this.config.object.modelPath) == null ? void 0 : _i.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(img.tensor, this.config) : [];
@ -12505,12 +12508,10 @@ var Human = class {
this.performance.object = elapsedTime;
}
this.analyze("End Object:");
this.state = "run:await";
if (this.config.yield)
await wait(1);
this.state = "detect:await";
if (this.config.async)
[faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);
this.state = "run:gesture";
this.state = "detect:gesture";
let gestureRes = [];
if (this.config.gesture.enabled) {
timeStamp = now();

File diff suppressed because one or more lines are too long

69
dist/human.esm.js vendored
View File

@ -91,10 +91,6 @@ function mergeDeep(...objects) {
return prev;
}, {});
}
async function wait(time2) {
const waiting = new Promise((resolve) => setTimeout(() => resolve(true), time2));
await waiting;
}
// src/config.ts
var config = {
@ -71350,10 +71346,10 @@ async function register(instance) {
}
// src/tfjs/backend.ts
async function check(instance) {
if (env2.initial || instance.config.backend && instance.config.backend.length > 0 && getBackend() !== instance.config.backend) {
async function check(instance, force = false) {
instance.state = "backend";
if (force || env2.initial || instance.config.backend && instance.config.backend.length > 0 && getBackend() !== instance.config.backend) {
const timeStamp = now();
instance.state = "backend";
if (instance.config.backend && instance.config.backend.length > 0) {
if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) {
if (instance.config.debug)
@ -72172,6 +72168,7 @@ async function warmupBitmap(instance) {
case "face":
blob = await b64toBlob(face3);
break;
case "body":
case "full":
blob = await b64toBlob(body3);
break;
@ -72248,22 +72245,25 @@ async function warmupNode(instance) {
}
async function warmup(instance, userConfig) {
const t0 = now();
instance.state = "warmup";
if (userConfig)
instance.config = mergeDeep(instance.config, userConfig);
if (!instance.config.warmup || instance.config.warmup === "none")
return { error: "null" };
let res;
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env2.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
return res;
return new Promise(async (resolve) => {
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env2.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
resolve(res);
});
}
// src/human.ts
@ -72311,7 +72311,11 @@ var Human = class {
}
return null;
});
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
__publicField(this, "reset", () => {
const currentBackend = this.config.backend;
this.config = JSON.parse(JSON.stringify(config));
this.config.backend = currentBackend;
});
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
__publicField(this, "image", (input2) => process2(input2, this.config));
__publicField(this, "emit", (event) => {
@ -72383,8 +72387,9 @@ var Human = class {
match(faceEmbedding, db, threshold3 = 0) {
return match(faceEmbedding, db, threshold3);
}
init() {
check(this);
async init() {
await check(this, true);
await this.tf.ready();
set(this.env);
}
async load(userConfig) {
@ -72428,8 +72433,7 @@ var Human = class {
return warmup(this, userConfig);
}
async detect(input2, userConfig) {
if (this.config.yield)
await wait(1);
this.state = "detect";
return new Promise(async (resolve) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
this.state = "config";
@ -72445,16 +72449,15 @@ var Human = class {
const timeStart = now();
await check(this);
await this.load();
if (this.config.yield)
await wait(1);
timeStamp = now();
this.state = "image";
let img = process2(input2, this.config);
this.process = img;
this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:");
if (this.config.segmentation.enabled && this.process && img.tensor && img.canvas) {
this.analyze("Start Segmentation:");
this.state = "run:segmentation";
this.state = "detect:segmentation";
timeStamp = now();
await predict11(img);
elapsedTime = Math.trunc(now() - timeStamp);
@ -72488,7 +72491,7 @@ var Human = class {
let bodyRes = [];
let handRes = [];
let objectRes = [];
this.state = "run:face";
this.state = "detect:face";
if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : [];
if (this.performance.face)
@ -72501,7 +72504,7 @@ var Human = class {
this.performance.face = elapsedTime;
}
this.analyze("Start Body:");
this.state = "run:body";
this.state = "detect:body";
if (this.config.async) {
if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(img.tensor, this.config) : [];
@ -72529,7 +72532,7 @@ var Human = class {
}
this.analyze("End Body:");
this.analyze("Start Hand:");
this.state = "run:hand";
this.state = "detect:hand";
if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(img.tensor, this.config) : [];
if (this.performance.hand)
@ -72543,7 +72546,7 @@ var Human = class {
}
this.analyze("End Hand:");
this.analyze("Start Object:");
this.state = "run:object";
this.state = "detect:object";
if (this.config.async) {
if ((_i = this.config.object.modelPath) == null ? void 0 : _i.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(img.tensor, this.config) : [];
@ -72562,12 +72565,10 @@ var Human = class {
this.performance.object = elapsedTime;
}
this.analyze("End Object:");
this.state = "run:await";
if (this.config.yield)
await wait(1);
this.state = "detect:await";
if (this.config.async)
[faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);
this.state = "run:gesture";
this.state = "detect:gesture";
let gestureRes = [];
if (this.config.gesture.enabled) {
timeStamp = now();

File diff suppressed because one or more lines are too long

492
dist/human.js vendored

File diff suppressed because one or more lines are too long

View File

@ -147,10 +147,6 @@ function mergeDeep(...objects) {
return prev;
}, {});
}
async function wait(time) {
const waiting = new Promise((resolve) => setTimeout(() => resolve(true), time));
await waiting;
}
// src/config.ts
var config = {
@ -11355,10 +11351,10 @@ async function register(instance) {
// src/tfjs/backend.ts
var tf22 = __toModule(require_tfjs_esm());
async function check(instance) {
if (env.initial || instance.config.backend && instance.config.backend.length > 0 && tf22.getBackend() !== instance.config.backend) {
async function check(instance, force = false) {
instance.state = "backend";
if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && tf22.getBackend() !== instance.config.backend) {
const timeStamp = now();
instance.state = "backend";
if (instance.config.backend && instance.config.backend.length > 0) {
if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) {
if (instance.config.debug)
@ -12178,6 +12174,7 @@ async function warmupBitmap(instance) {
case "face":
blob = await b64toBlob(face3);
break;
case "body":
case "full":
blob = await b64toBlob(body3);
break;
@ -12254,22 +12251,25 @@ async function warmupNode(instance) {
}
async function warmup(instance, userConfig) {
const t0 = now();
instance.state = "warmup";
if (userConfig)
instance.config = mergeDeep(instance.config, userConfig);
if (!instance.config.warmup || instance.config.warmup === "none")
return { error: "null" };
let res;
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
return res;
return new Promise(async (resolve) => {
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
resolve(res);
});
}
// src/human.ts
@ -12317,7 +12317,11 @@ var Human = class {
}
return null;
});
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
__publicField(this, "reset", () => {
const currentBackend = this.config.backend;
this.config = JSON.parse(JSON.stringify(config));
this.config.backend = currentBackend;
});
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
__publicField(this, "image", (input) => process2(input, this.config));
__publicField(this, "emit", (event) => {
@ -12389,8 +12393,9 @@ var Human = class {
match(faceEmbedding, db, threshold = 0) {
return match(faceEmbedding, db, threshold);
}
init() {
check(this);
async init() {
await check(this, true);
await this.tf.ready();
set(this.env);
}
async load(userConfig) {
@ -12434,8 +12439,7 @@ var Human = class {
return warmup(this, userConfig);
}
async detect(input, userConfig) {
if (this.config.yield)
await wait(1);
this.state = "detect";
return new Promise(async (resolve) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
this.state = "config";
@ -12451,16 +12455,15 @@ var Human = class {
const timeStart = now();
await check(this);
await this.load();
if (this.config.yield)
await wait(1);
timeStamp = now();
this.state = "image";
let img = process2(input, this.config);
this.process = img;
this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:");
if (this.config.segmentation.enabled && this.process && img.tensor && img.canvas) {
this.analyze("Start Segmentation:");
this.state = "run:segmentation";
this.state = "detect:segmentation";
timeStamp = now();
await predict11(img);
elapsedTime = Math.trunc(now() - timeStamp);
@ -12494,7 +12497,7 @@ var Human = class {
let bodyRes = [];
let handRes = [];
let objectRes = [];
this.state = "run:face";
this.state = "detect:face";
if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : [];
if (this.performance.face)
@ -12507,7 +12510,7 @@ var Human = class {
this.performance.face = elapsedTime;
}
this.analyze("Start Body:");
this.state = "run:body";
this.state = "detect:body";
if (this.config.async) {
if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(img.tensor, this.config) : [];
@ -12535,7 +12538,7 @@ var Human = class {
}
this.analyze("End Body:");
this.analyze("Start Hand:");
this.state = "run:hand";
this.state = "detect:hand";
if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(img.tensor, this.config) : [];
if (this.performance.hand)
@ -12549,7 +12552,7 @@ var Human = class {
}
this.analyze("End Hand:");
this.analyze("Start Object:");
this.state = "run:object";
this.state = "detect:object";
if (this.config.async) {
if ((_i = this.config.object.modelPath) == null ? void 0 : _i.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(img.tensor, this.config) : [];
@ -12568,12 +12571,10 @@ var Human = class {
this.performance.object = elapsedTime;
}
this.analyze("End Object:");
this.state = "run:await";
if (this.config.yield)
await wait(1);
this.state = "detect:await";
if (this.config.async)
[faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);
this.state = "run:gesture";
this.state = "detect:gesture";
let gestureRes = [];
if (this.config.gesture.enabled) {
timeStamp = now();

View File

@ -148,10 +148,6 @@ function mergeDeep(...objects) {
return prev;
}, {});
}
async function wait(time) {
const waiting = new Promise((resolve) => setTimeout(() => resolve(true), time));
await waiting;
}
// src/config.ts
var config = {
@ -11356,10 +11352,10 @@ async function register(instance) {
// src/tfjs/backend.ts
var tf22 = __toModule(require_tfjs_esm());
async function check(instance) {
if (env.initial || instance.config.backend && instance.config.backend.length > 0 && tf22.getBackend() !== instance.config.backend) {
async function check(instance, force = false) {
instance.state = "backend";
if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && tf22.getBackend() !== instance.config.backend) {
const timeStamp = now();
instance.state = "backend";
if (instance.config.backend && instance.config.backend.length > 0) {
if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) {
if (instance.config.debug)
@ -12179,6 +12175,7 @@ async function warmupBitmap(instance) {
case "face":
blob = await b64toBlob(face3);
break;
case "body":
case "full":
blob = await b64toBlob(body3);
break;
@ -12255,22 +12252,25 @@ async function warmupNode(instance) {
}
async function warmup(instance, userConfig) {
const t0 = now();
instance.state = "warmup";
if (userConfig)
instance.config = mergeDeep(instance.config, userConfig);
if (!instance.config.warmup || instance.config.warmup === "none")
return { error: "null" };
let res;
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
return res;
return new Promise(async (resolve) => {
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
resolve(res);
});
}
// src/human.ts
@ -12318,7 +12318,11 @@ var Human = class {
}
return null;
});
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
__publicField(this, "reset", () => {
const currentBackend = this.config.backend;
this.config = JSON.parse(JSON.stringify(config));
this.config.backend = currentBackend;
});
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
__publicField(this, "image", (input) => process2(input, this.config));
__publicField(this, "emit", (event) => {
@ -12390,8 +12394,9 @@ var Human = class {
match(faceEmbedding, db, threshold = 0) {
return match(faceEmbedding, db, threshold);
}
init() {
check(this);
async init() {
await check(this, true);
await this.tf.ready();
set(this.env);
}
async load(userConfig) {
@ -12435,8 +12440,7 @@ var Human = class {
return warmup(this, userConfig);
}
async detect(input, userConfig) {
if (this.config.yield)
await wait(1);
this.state = "detect";
return new Promise(async (resolve) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
this.state = "config";
@ -12452,16 +12456,15 @@ var Human = class {
const timeStart = now();
await check(this);
await this.load();
if (this.config.yield)
await wait(1);
timeStamp = now();
this.state = "image";
let img = process2(input, this.config);
this.process = img;
this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:");
if (this.config.segmentation.enabled && this.process && img.tensor && img.canvas) {
this.analyze("Start Segmentation:");
this.state = "run:segmentation";
this.state = "detect:segmentation";
timeStamp = now();
await predict11(img);
elapsedTime = Math.trunc(now() - timeStamp);
@ -12495,7 +12498,7 @@ var Human = class {
let bodyRes = [];
let handRes = [];
let objectRes = [];
this.state = "run:face";
this.state = "detect:face";
if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : [];
if (this.performance.face)
@ -12508,7 +12511,7 @@ var Human = class {
this.performance.face = elapsedTime;
}
this.analyze("Start Body:");
this.state = "run:body";
this.state = "detect:body";
if (this.config.async) {
if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(img.tensor, this.config) : [];
@ -12536,7 +12539,7 @@ var Human = class {
}
this.analyze("End Body:");
this.analyze("Start Hand:");
this.state = "run:hand";
this.state = "detect:hand";
if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(img.tensor, this.config) : [];
if (this.performance.hand)
@ -12550,7 +12553,7 @@ var Human = class {
}
this.analyze("End Hand:");
this.analyze("Start Object:");
this.state = "run:object";
this.state = "detect:object";
if (this.config.async) {
if ((_i = this.config.object.modelPath) == null ? void 0 : _i.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(img.tensor, this.config) : [];
@ -12569,12 +12572,10 @@ var Human = class {
this.performance.object = elapsedTime;
}
this.analyze("End Object:");
this.state = "run:await";
if (this.config.yield)
await wait(1);
this.state = "detect:await";
if (this.config.async)
[faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);
this.state = "run:gesture";
this.state = "detect:gesture";
let gestureRes = [];
if (this.config.gesture.enabled) {
timeStamp = now();

69
dist/human.node.js vendored
View File

@ -147,10 +147,6 @@ function mergeDeep(...objects) {
return prev;
}, {});
}
async function wait(time) {
const waiting = new Promise((resolve) => setTimeout(() => resolve(true), time));
await waiting;
}
// src/config.ts
var config = {
@ -11355,10 +11351,10 @@ async function register(instance) {
// src/tfjs/backend.ts
var tf22 = __toModule(require_tfjs_esm());
async function check(instance) {
if (env.initial || instance.config.backend && instance.config.backend.length > 0 && tf22.getBackend() !== instance.config.backend) {
async function check(instance, force = false) {
instance.state = "backend";
if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && tf22.getBackend() !== instance.config.backend) {
const timeStamp = now();
instance.state = "backend";
if (instance.config.backend && instance.config.backend.length > 0) {
if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) {
if (instance.config.debug)
@ -12178,6 +12174,7 @@ async function warmupBitmap(instance) {
case "face":
blob = await b64toBlob(face3);
break;
case "body":
case "full":
blob = await b64toBlob(body3);
break;
@ -12254,22 +12251,25 @@ async function warmupNode(instance) {
}
async function warmup(instance, userConfig) {
const t0 = now();
instance.state = "warmup";
if (userConfig)
instance.config = mergeDeep(instance.config, userConfig);
if (!instance.config.warmup || instance.config.warmup === "none")
return { error: "null" };
let res;
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
return res;
return new Promise(async (resolve) => {
if (typeof createImageBitmap === "function")
res = await warmupBitmap(instance);
else if (typeof Image !== "undefined" || env.Canvas !== void 0)
res = await warmupCanvas(instance);
else
res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug)
log("Warmup", instance.config.warmup, Math.round(t1 - t0), "ms");
instance.emit("warmup");
resolve(res);
});
}
// src/human.ts
@ -12317,7 +12317,11 @@ var Human = class {
}
return null;
});
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
__publicField(this, "reset", () => {
const currentBackend = this.config.backend;
this.config = JSON.parse(JSON.stringify(config));
this.config.backend = currentBackend;
});
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
__publicField(this, "image", (input) => process2(input, this.config));
__publicField(this, "emit", (event) => {
@ -12389,8 +12393,9 @@ var Human = class {
match(faceEmbedding, db, threshold = 0) {
return match(faceEmbedding, db, threshold);
}
init() {
check(this);
async init() {
await check(this, true);
await this.tf.ready();
set(this.env);
}
async load(userConfig) {
@ -12434,8 +12439,7 @@ var Human = class {
return warmup(this, userConfig);
}
async detect(input, userConfig) {
if (this.config.yield)
await wait(1);
this.state = "detect";
return new Promise(async (resolve) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
this.state = "config";
@ -12451,16 +12455,15 @@ var Human = class {
const timeStart = now();
await check(this);
await this.load();
if (this.config.yield)
await wait(1);
timeStamp = now();
this.state = "image";
let img = process2(input, this.config);
this.process = img;
this.performance.image = Math.trunc(now() - timeStamp);
this.analyze("Get Image:");
if (this.config.segmentation.enabled && this.process && img.tensor && img.canvas) {
this.analyze("Start Segmentation:");
this.state = "run:segmentation";
this.state = "detect:segmentation";
timeStamp = now();
await predict11(img);
elapsedTime = Math.trunc(now() - timeStamp);
@ -12494,7 +12497,7 @@ var Human = class {
let bodyRes = [];
let handRes = [];
let objectRes = [];
this.state = "run:face";
this.state = "detect:face";
if (this.config.async) {
faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : [];
if (this.performance.face)
@ -12507,7 +12510,7 @@ var Human = class {
this.performance.face = elapsedTime;
}
this.analyze("Start Body:");
this.state = "run:body";
this.state = "detect:body";
if (this.config.async) {
if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet"))
bodyRes = this.config.body.enabled ? predict4(img.tensor, this.config) : [];
@ -12535,7 +12538,7 @@ var Human = class {
}
this.analyze("End Body:");
this.analyze("Start Hand:");
this.state = "run:hand";
this.state = "detect:hand";
if (this.config.async) {
handRes = this.config.hand.enabled ? predict5(img.tensor, this.config) : [];
if (this.performance.hand)
@ -12549,7 +12552,7 @@ var Human = class {
}
this.analyze("End Hand:");
this.analyze("Start Object:");
this.state = "run:object";
this.state = "detect:object";
if (this.config.async) {
if ((_i = this.config.object.modelPath) == null ? void 0 : _i.includes("nanodet"))
objectRes = this.config.object.enabled ? predict9(img.tensor, this.config) : [];
@ -12568,12 +12571,10 @@ var Human = class {
this.performance.object = elapsedTime;
}
this.analyze("End Object:");
this.state = "run:await";
if (this.config.yield)
await wait(1);
this.state = "detect:await";
if (this.config.async)
[faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);
this.state = "run:gesture";
this.state = "detect:gesture";
let gestureRes = [];
if (this.config.gesture.enabled) {
timeStamp = now();

View File

@ -2,7 +2,7 @@
* Human main module
*/
import { log, now, mergeDeep, validate, wait } from './helpers';
import { log, now, mergeDeep, validate } from './helpers';
import { Config, defaults } from './config';
import type { Result, FaceResult, HandResult, BodyResult, ObjectResult, GestureResult, PersonResult } from './result';
import * as tf from '../dist/tfjs.esm.js';
@ -252,7 +252,11 @@ export class Human {
}
/** Reset configuration to default values */
reset = () => this.config = JSON.parse(JSON.stringify(defaults));
reset = () => {
const currentBackend = this.config.backend; // save backend;
this.config = JSON.parse(JSON.stringify(defaults));
this.config.backend = currentBackend;
}
/** Validate current configuration schema */
validate = (userConfig?: Partial<Config>) => validate(defaults, userConfig || this.config);
@ -314,12 +318,13 @@ export class Human {
/** Explicit backend initialization
* - Normally done implicitly during initial load phase
* - Call to explictly register and initialize TFJS backend without any other operations
* - Used in webworker environments where there can be multiple instances of Human and not all initialized
* - Use when changing backend during runtime
*
* @return Promise<void>
*/
init() {
backend.check(this);
async init() {
await backend.check(this, true);
await this.tf.ready();
env.set(this.env);
}
@ -396,7 +401,7 @@ export class Human {
*/
async detect(input: Input, userConfig?: Partial<Config>): Promise<Result | Error> {
// detection happens inside a promise
if (this.config.yield) await wait(1);
this.state = 'detect';
return new Promise(async (resolve) => {
this.state = 'config';
let timeStamp;
@ -421,8 +426,8 @@ export class Human {
// load models if enabled
await this.load();
if (this.config.yield) await wait(1);
timeStamp = now();
this.state = 'image';
let img = image.process(input, this.config);
this.process = img;
this.performance.image = Math.trunc(now() - timeStamp);
@ -431,7 +436,7 @@ export class Human {
// run segmentation prethis.processing
if (this.config.segmentation.enabled && this.process && img.tensor && img.canvas) {
this.analyze('Start Segmentation:');
this.state = 'run:segmentation';
this.state = 'detect:segmentation';
timeStamp = now();
await segmentation.predict(img);
elapsedTime = Math.trunc(now() - timeStamp);
@ -468,7 +473,7 @@ export class Human {
let objectRes: ObjectResult[] | Promise<ObjectResult[]> | never[] = [];
// run face detection followed by all models that rely on face bounding box: face mesh, age, gender, emotion
this.state = 'run:face';
this.state = 'detect:face';
if (this.config.async) {
faceRes = this.config.face.enabled ? face.detectFace(this, img.tensor) : [];
if (this.performance.face) delete this.performance.face;
@ -481,7 +486,7 @@ export class Human {
// run body: can be posenet, blazepose, efficientpose, movenet
this.analyze('Start Body:');
this.state = 'run:body';
this.state = 'detect:body';
if (this.config.async) {
if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? posenet.predict(img.tensor, this.config) : [];
else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? blazepose.predict(img.tensor, this.config) : [];
@ -501,7 +506,7 @@ export class Human {
// run handpose
this.analyze('Start Hand:');
this.state = 'run:hand';
this.state = 'detect:hand';
if (this.config.async) {
handRes = this.config.hand.enabled ? handpose.predict(img.tensor, this.config) : [];
if (this.performance.hand) delete this.performance.hand;
@ -515,7 +520,7 @@ export class Human {
// run nanodet
this.analyze('Start Object:');
this.state = 'run:object';
this.state = 'detect:object';
if (this.config.async) {
if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? nanodet.predict(img.tensor, this.config) : [];
else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? centernet.predict(img.tensor, this.config) : [];
@ -530,12 +535,11 @@ export class Human {
this.analyze('End Object:');
// if async wait for results
this.state = 'run:await';
if (this.config.yield) await wait(1);
this.state = 'detect:await';
if (this.config.async) [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);
// run gesture analysis last
this.state = 'run:gesture';
this.state = 'detect:gesture';
let gestureRes: GestureResult[] = [];
if (this.config.gesture.enabled) {
timeStamp = now();

View File

@ -3,10 +3,10 @@ import * as humangl from './humangl';
import * as env from '../env';
import * as tf from '../../dist/tfjs.esm.js';
export async function check(instance) {
if (env.env.initial || (instance.config.backend && (instance.config.backend.length > 0) && (tf.getBackend() !== instance.config.backend))) {
export async function check(instance, force = false) {
instance.state = 'backend';
if (force || env.env.initial || (instance.config.backend && (instance.config.backend.length > 0) && (tf.getBackend() !== instance.config.backend))) {
const timeStamp = now();
instance.state = 'backend';
if (instance.config.backend && instance.config.backend.length > 0) {
// detect web worker

View File

@ -12,6 +12,7 @@ async function warmupBitmap(instance) {
let res;
switch (instance.config.warmup) {
case 'face': blob = await b64toBlob(sample.face); break;
case 'body':
case 'full': blob = await b64toBlob(sample.body); break;
default: blob = null;
}
@ -98,14 +99,17 @@ async function warmupNode(instance) {
*/
export async function warmup(instance, userConfig?: Partial<Config>): Promise<Result | { error }> {
const t0 = now();
instance.state = 'warmup';
if (userConfig) instance.config = mergeDeep(instance.config, userConfig) as Config;
if (!instance.config.warmup || instance.config.warmup === 'none') return { error: 'null' };
let res;
if (typeof createImageBitmap === 'function') res = await warmupBitmap(instance);
else if (typeof Image !== 'undefined' || env.Canvas !== undefined) res = await warmupCanvas(instance);
else res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug) log('Warmup', instance.config.warmup, Math.round(t1 - t0), 'ms');
instance.emit('warmup');
return res;
return new Promise(async (resolve) => {
if (typeof createImageBitmap === 'function') res = await warmupBitmap(instance);
else if (typeof Image !== 'undefined' || env.Canvas !== undefined) res = await warmupCanvas(instance);
else res = await warmupNode(instance);
const t1 = now();
if (instance.config.debug) log('Warmup', instance.config.warmup, Math.round(t1 - t0), 'ms');
instance.emit('warmup');
resolve(res);
});
}

View File

@ -14,28 +14,30 @@
@font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 100; src: local('Lato'), url('../../assets/lato-light.woff2') }
html { font-family: 'Lato', 'Segoe UI'; font-size: 14px; font-variant: small-caps; }
body { margin: 0; background: black; color: white; }
canvas { position: absolute; bottom: 10px; right: 10px; width: 256px; height: 256px; }
pre { line-height: 150%; }
.events { position: absolute; top: 10px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; }
.state { position: absolute; top: 60px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; }
.canvas { position: absolute; bottom: 10px; right: 10px; width: 256px; height: 256px; z-index: 99; }
.pre { line-height: 150%; }
.events { position: absolute; top: 10px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
.state { position: absolute; top: 60px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
</style>
</head>
<body>
<pre id="log"></pre>
<pre id="log" class="pre"></pre>
<div id="events" class="events"></div>
<div id="state" class="state"></div>
<canvas id="canvas" class="canvas" width=256 height=256></canvas>
<script type="module">
import Human from '../dist/human.esm.js';
const config = {
async: true,
warmup: 'full',
warmup: 'none',
debug: true,
cacheSensitivity: 0,
object: { enabled: true },
}
const backends = ['wasm', 'webgl', 'humangl'];
// const backends = ['wasm', 'wasm'];
// const backends = ['humangl'];
const start = performance.now();
@ -50,9 +52,14 @@
return line + '\n';
}
let last = new Date();
async function log(...msgs) {
document.getElementById('log').innerHTML += str(...msgs);
console.log(...msgs);
const dt = new Date();
const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;
const elap = (dt - last).toString().padStart(5, '0');
document.getElementById('log').innerHTML += ts + ' +' + elap + 'ms' + '&nbsp' + str(...msgs);
console.log(ts, elap, ...msgs);
last = dt;
}
async function image(url) {
@ -69,6 +76,13 @@
await waiting;
}
function draw(canvas = null) {
const c = document.getElementById('canvas');
const ctx = c.getContext('2d');
if (canvas) ctx.drawImage(canvas, 0, 0, c.width, c.height);
else ctx.clearRect(0, 0, c.width, c.height);
}
async function events(event) {
document.getElementById('events').innerText = `${Math.round(performance.now() - start)}ms Event: ${event}`;
}
@ -77,66 +91,62 @@
log('human tests');
let res;
let human = new Human(config);
setInterval(() => { document.getElementById('state').innerText = `State: ${human.state}`; }, 10);
human.events.addEventListener('warmup', () => events('warmup'));
human.events.addEventListener('image', () => events('image'));
human.events.addEventListener('detect', () => events('detect'));
const timer = setInterval(() => { document.getElementById('state').innerText = `State: ${human.state}`; }, 10);
log({ version: human.version });
log({ env: human.env });
log({ config: human.config });
log({ tfjs: human.tf.version.tfjs, backend: human.config.backend });
await human.load();
const models = Object.keys(human.models).map((model) => ({ name: model, loaded: (human.models[model] !== null) }));
log({ models });
for (const backend of backends) {
log('');
log();
log('test start:', backend);
human.config.backend = backend;
human = new Human(config);
human.events.addEventListener('warmup', () => events('warmup'));
human.events.addEventListener('image', () => events('image'));
human.events.addEventListener('detect', () => events('detect'));
await human.load();
human.env.offscreen = false;
human.env.initial = false;
await human.init();
log({ tfjs: human.tf.version.tfjs, backend: human.tf.getBackend() });
const models = Object.keys(human.models).map((model) => ({ name: model, loaded: (human.models[model] !== null) }));
log({ models: { models }});
log({ memory: human.tf.engine().state });
log({ initialized: human.tf.getBackend() });
log({ memory: human.tf.memory() });
res = await human.validate();
log({ validate: res });
res = await human.warmup();
log({ warmup: res });
res = await human.warmup({ warmup: 'face'});
draw(res.canvas);
log({ warmup: 'face' });
let img = await image('../../samples/ai-body.jpg');
const input = await human.image(img);
let node = document.body.appendChild(res.canvas);
await wait(100);
log({ input });
log({ input: input.tensor.shape });
draw(res.canvas);
res = await human.detect(input.tensor);
log({ detect: res});
log({ detect: true });
const interpolated = human.next();
log({ interpolated });
log({ interpolated: true });
const persons = res.persons;
log({ persons: { persons } });
log({ persons: true });
log({ summary: { persons: persons.length, face: res.face.length, body: res.body.length, hand: res.hand.length, object: res.object.length, gesture: res.gesture.length }});
log({ performance: human.performance });
human.tf.dispose(input.tensor);
document.body.removeChild(node);
await wait(100);
draw();
img = await image('../../samples/ai-face.jpg');
human.reset();
human.config.backend = backend;
for (const val of [0, 0.25, 0.5, 0.75, 10]) {
human.performance = {};
const t0 = performance.now();
for (let i = 0; i < 10; i++) {
res = await human.detect(img, { cacheSensitivity: val, filter: { pixelate: 5 * i } });
node = document.body.appendChild(res.canvas);
res = await human.detect(img, { cacheSensitivity: val, filter: { pixelate: 5 * i }, object: { enabled: false } });
draw(res.canvas);
}
const t1 = performance.now();
log({ benchmark: { time: Math.round((t1 - t0) / 10), cacheSensitivity: val }, performance: human.performance });
await wait(100);
await wait(10);
}
document.body.removeChild(node);
draw();
log({ memory: human.tf.engine().state });
log({ memory: human.tf.memory() });
}
log('');
clearInterval(timer);
log();
log('tests complete');
}

File diff suppressed because it is too large Load Diff

View File

@ -233,8 +233,8 @@ async function test(Human, inputConfig) {
res1 = Math.round(100 * human.similarity(desc1, desc2));
res2 = Math.round(100 * human.similarity(desc1, desc3));
res3 = Math.round(100 * human.similarity(desc2, desc3));
if (res1 !== 51 || res2 !== 49 || res3 !== 53) log('error', 'failed: face match ', res1, res2, res3);
else log('state', 'passed: face match');
if (res1 !== 51 || res2 !== 49 || res3 !== 53) log('error', 'failed: face similarity ', res1, res2, res3);
else log('state', 'passed: face similarity');
// test face matching
log('info', 'test face matching');
@ -247,7 +247,7 @@ async function test(Human, inputConfig) {
res1 = human.match(desc1, db);
res2 = human.match(desc2, db);
res3 = human.match(desc3, db);
if (!res1 || !res1['name'] || !res2 || !res2['name'] || !res3 || !res3['name']) log('error', 'failed: face match ', res1);
if (!res1 || !res1['name'] || !res2 || !res2['name'] || !res3 || !res3['name']) log('error', 'failed: face match ', res1, res2, res3);
else log('state', 'passed: face match', { first: { name: res1.name, similarity: res1.similarity } }, { second: { name: res2.name, similarity: res2.similarity } }, { third: { name: res3.name, similarity: res3.similarity } });
// test object detection

View File

@ -1,547 +1,185 @@
2021-09-20 09:23:38 INFO:  @vladmandic/human version 2.2.2
2021-09-20 09:23:38 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.5.0
2021-09-20 09:23:38 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"]
2021-09-20 09:23:38 INFO:  demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"]
2021-09-20 09:23:38 INFO: 
2021-09-20 09:23:38 INFO:  test-node.js start
2021-09-20 09:23:39 STATE: test-node.js passed: configuration default validation []
2021-09-20 09:23:39 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
2021-09-20 09:23:40 STATE: test-node.js passed: models loaded 14 7
2021-09-20 09:23:40 STATE: test-node.js passed: create human
2021-09-20 09:23:40 INFO:  test-node.js human version: 2.2.2
2021-09-20 09:23:40 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.5.0
2021-09-20 09:23:40 INFO:  test-node.js tfjs version: 3.9.0
2021-09-20 09:23:40 STATE: test-node.js passed: set backend: tensorflow
2021-09-20 09:23:40 STATE: test-node.js tensors 1456
2021-09-20 09:23:40 STATE: test-node.js passed: load models
2021-09-20 09:23:40 STATE: test-node.js result: defined models: 14 loaded models: 7
2021-09-20 09:23:40 STATE: test-node.js passed: warmup: none default
2021-09-20 09:23:40 STATE: test-node.js passed: warmup none result match
2021-09-20 09:23:40 STATE: test-node.js event: image
2021-09-20 09:23:41 STATE: test-node.js event: detect
2021-09-20 09:23:41 STATE: test-node.js event: warmup
2021-09-20 09:23:41 STATE: test-node.js passed: warmup: face default
2021-09-20 09:23:41 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
2021-09-20 09:23:41 DATA:  test-node.js result: performance: load: 300 total: 1111
2021-09-20 09:23:41 STATE: test-node.js passed: warmup face result match
2021-09-20 09:23:41 STATE: test-node.js event: image
2021-09-20 09:23:42 STATE: test-node.js event: detect
2021-09-20 09:23:42 STATE: test-node.js event: warmup
2021-09-20 09:23:42 STATE: test-node.js passed: warmup: body default
2021-09-20 09:23:42 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:23:42 DATA:  test-node.js result: performance: load: 300 total: 1018
2021-09-20 09:23:42 STATE: test-node.js passed: warmup body result match
2021-09-20 09:23:42 INFO:  test-node.js test default
2021-09-20 09:23:43 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:23:43 STATE: test-node.js event: image
2021-09-20 09:23:44 STATE: test-node.js event: detect
2021-09-20 09:23:44 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:23:44 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:23:44 DATA:  test-node.js result: performance: load: 300 total: 1038
2021-09-20 09:23:44 STATE: test-node.js passed: default result face match
2021-09-20 09:23:44 INFO:  test-node.js test sync
2021-09-20 09:23:44 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:23:44 STATE: test-node.js event: image
2021-09-20 09:23:45 STATE: test-node.js event: detect
2021-09-20 09:23:45 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:23:45 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:23:45 DATA:  test-node.js result: performance: load: 300 total: 1009
2021-09-20 09:23:45 STATE: test-node.js passed: default sync
2021-09-20 09:23:45 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:23:45 STATE: test-node.js passed: image input null [1,256,256,3]
2021-09-20 09:23:45 STATE: test-node.js passed: invalid input {"error":"could not convert input to tensor"}
2021-09-20 09:23:45 INFO:  test-node.js test face similarity
2021-09-20 09:23:46 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:23:46 STATE: test-node.js event: image
2021-09-20 09:23:46 STATE: test-node.js event: detect
2021-09-20 09:23:46 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:23:46 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":4}
2021-09-20 09:23:46 DATA:  test-node.js result: performance: load: 300 total: 731
2021-09-20 09:23:47 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:23:47 STATE: test-node.js event: image
2021-09-20 09:23:48 STATE: test-node.js event: detect
2021-09-20 09:23:48 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:23:48 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:23:48 DATA:  test-node.js result: performance: load: 300 total: 916
2021-09-20 09:23:48 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:23:48 STATE: test-node.js event: image
2021-09-20 09:23:49 STATE: test-node.js event: detect
2021-09-20 09:23:49 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:23:49 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:23:49 DATA:  test-node.js result: performance: load: 300 total: 707
2021-09-20 09:23:49 STATE: test-node.js passed: face descriptor
2021-09-20 09:23:49 STATE: test-node.js passed: face match
2021-09-20 09:23:49 INFO:  test-node.js test face matching
2021-09-20 09:23:49 STATE: test-node.js passed: face database 102
2021-09-20 09:23:49 STATE: test-node.js passed: face match {"first":{"name":"ai face","similarity":0.7679640257895076}} {"second":{"name":"ai face","similarity":0.5102876185668009}} {"third":{"name":"ai upper","similarity":0.7726724047990643}}
2021-09-20 09:23:49 INFO:  test-node.js test object
2021-09-20 09:23:50 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:23:50 STATE: test-node.js event: image
2021-09-20 09:23:51 STATE: test-node.js event: detect
2021-09-20 09:23:51 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:23:51 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:23:51 DATA:  test-node.js result: performance: load: 300 total: 914
2021-09-20 09:23:51 STATE: test-node.js passed: object result match
2021-09-20 09:23:51 INFO:  test-node.js test sensitive
2021-09-20 09:23:52 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:23:52 STATE: test-node.js event: image
2021-09-20 09:23:53 STATE: test-node.js event: detect
2021-09-20 09:23:53 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:23:53 DATA:  test-node.js result: face: 1 body: 1 hand: 3 gesture: 9 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:23:53 DATA:  test-node.js result: performance: load: 300 total: 1582
2021-09-20 09:23:53 STATE: test-node.js passed: sensitive result match
2021-09-20 09:23:53 STATE: test-node.js passed: sensitive face result match
2021-09-20 09:23:53 STATE: test-node.js passed: sensitive body result match
2021-09-20 09:23:53 STATE: test-node.js passed: sensitive hand result match
2021-09-20 09:23:53 INFO:  test-node.js test detectors
2021-09-20 09:23:54 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:23:54 STATE: test-node.js event: image
2021-09-20 09:23:55 STATE: test-node.js event: detect
2021-09-20 09:23:55 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:23:55 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:23:55 DATA:  test-node.js result: performance: load: 300 total: 543
2021-09-20 09:23:55 STATE: test-node.js passed: detector result face match
2021-09-20 09:23:55 STATE: test-node.js passed: detector result hand match
2021-09-20 09:23:55 INFO:  test-node.js test body variants
2021-09-20 09:23:56 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:23:56 STATE: test-node.js event: image
2021-09-20 09:23:56 STATE: test-node.js event: detect
2021-09-20 09:23:56 STATE: test-node.js passed: detect: samples/ai-body.jpg posenet
2021-09-20 09:23:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17}
2021-09-20 09:23:56 DATA:  test-node.js result: performance: load: 300 total: 742
2021-09-20 09:23:57 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:23:57 STATE: test-node.js event: image
2021-09-20 09:23:58 STATE: test-node.js event: detect
2021-09-20 09:23:58 STATE: test-node.js passed: detect: samples/ai-body.jpg movenet
2021-09-20 09:23:58 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:23:58 DATA:  test-node.js result: performance: load: 300 total: 643
2021-09-20 09:23:58 STATE: test-node.js event: image
2021-09-20 09:23:58 STATE: test-node.js event: detect
2021-09-20 09:23:58 STATE: test-node.js passed: detect: random default
2021-09-20 09:23:58 DATA:  test-node.js result: face: 0 body: 1 hand: 1 gesture: 1 object: 0 person: 0 {} {} {"score":0.08,"keypoints":17}
2021-09-20 09:23:58 DATA:  test-node.js result: performance: load: 300 total: 542
2021-09-20 09:23:58 INFO:  test-node.js test: first instance
2021-09-20 09:23:59 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:23:59 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:23:59 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:23:59 DATA:  test-node.js result: performance: load: 4 total: 599
2021-09-20 09:23:59 INFO:  test-node.js test: second instance
2021-09-20 09:24:00 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:00 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:00 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:00 DATA:  test-node.js result: performance: load: 2 total: 600
2021-09-20 09:24:00 INFO:  test-node.js test: concurrent
2021-09-20 09:24:00 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:24:00 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:24:00 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:24:01 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:02 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:03 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:03 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:03 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:04 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:04 STATE: test-node.js event: image
2021-09-20 09:24:04 STATE: test-node.js event: image
2021-09-20 09:24:04 STATE: test-node.js event: image
2021-09-20 09:24:09 STATE: test-node.js event: detect
2021-09-20 09:24:09 STATE: test-node.js event: detect
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 300 total: 4915
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 4 total: 4915
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 3 body: 1 hand: 0 gesture: 1 object: 1 person: 3 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 2 total: 4915
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 7 body: 1 hand: 0 gesture: 1 object: 1 person: 7 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 300 total: 4915
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 8 body: 1 hand: 0 gesture: 1 object: 1 person: 8 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 4 total: 4915
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 9 body: 1 hand: 0 gesture: 1 object: 1 person: 9 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 2 total: 4915
2021-09-20 09:24:09 STATE: test-node.js event: detect
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 300 total: 4920
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 5 body: 1 hand: 1 gesture: 1 object: 1 person: 5 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 4 total: 4920
2021-09-20 09:24:09 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:09 DATA:  test-node.js result: face: 6 body: 1 hand: 1 gesture: 1 object: 1 person: 6 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 09:24:09 DATA:  test-node.js result: performance: load: 2 total: 4920
2021-09-20 09:24:09 STATE: test-node.js event: image
2021-09-20 09:24:09 STATE: test-node.js event: detect
2021-09-20 09:24:09 STATE: test-node.js passed: monkey patch
2021-09-20 09:24:09 STATE: test-node.js passed: segmentation [256,256]
2021-09-20 09:24:09 STATE: test-node.js passeed: no memory leak
2021-09-20 09:24:09 STATE: test-node.js passeed: equal usage
2021-09-20 09:24:09 INFO:  test-node.js events: {"image":17,"detect":17,"warmup":2}
2021-09-20 09:24:09 INFO:  test-node.js test complete: 30181 ms
2021-09-20 09:24:09 INFO: 
2021-09-20 09:24:09 INFO:  test-node-gpu.js start
2021-09-20 09:24:10 WARN:  test-node-gpu.js stderr: 2021-09-20 09:24:10.701918: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2021-09-20 09:24:10 WARN:  test-node-gpu.js stderr: 2021-09-20 09:24:10.850258: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2021-09-20 09:24:10 WARN:  test-node-gpu.js stderr: 2021-09-20 09:24:10.850363: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (wyse): /proc/driver/nvidia/version does not exist
2021-09-20 09:24:10 STATE: test-node-gpu.js passed: configuration default validation []
2021-09-20 09:24:10 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
2021-09-20 09:24:11 STATE: test-node-gpu.js passed: models loaded 14 7
2021-09-20 09:24:11 STATE: test-node-gpu.js passed: create human
2021-09-20 09:24:11 INFO:  test-node-gpu.js human version: 2.2.2
2021-09-20 09:24:11 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.5.0
2021-09-20 09:24:11 INFO:  test-node-gpu.js tfjs version: 3.9.0
2021-09-20 09:24:11 STATE: test-node-gpu.js passed: set backend: tensorflow
2021-09-20 09:24:11 STATE: test-node-gpu.js tensors 1456
2021-09-20 09:24:11 STATE: test-node-gpu.js passed: load models
2021-09-20 09:24:11 STATE: test-node-gpu.js result: defined models: 14 loaded models: 7
2021-09-20 09:24:11 STATE: test-node-gpu.js passed: warmup: none default
2021-09-20 09:24:11 STATE: test-node-gpu.js passed: warmup none result match
2021-09-20 09:24:11 STATE: test-node-gpu.js event: image
2021-09-20 09:24:12 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:12 STATE: test-node-gpu.js event: warmup
2021-09-20 09:24:12 STATE: test-node-gpu.js passed: warmup: face default
2021-09-20 09:24:12 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
2021-09-20 09:24:12 DATA:  test-node-gpu.js result: performance: load: 285 total: 1174
2021-09-20 09:24:12 STATE: test-node-gpu.js passed: warmup face result match
2021-09-20 09:24:12 STATE: test-node-gpu.js event: image
2021-09-20 09:24:13 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:13 STATE: test-node-gpu.js event: warmup
2021-09-20 09:24:13 STATE: test-node-gpu.js passed: warmup: body default
2021-09-20 09:24:13 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:24:13 DATA:  test-node-gpu.js result: performance: load: 285 total: 1055
2021-09-20 09:24:13 STATE: test-node-gpu.js passed: warmup body result match
2021-09-20 09:24:13 INFO:  test-node-gpu.js test default
2021-09-20 09:24:14 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:14 STATE: test-node-gpu.js event: image
2021-09-20 09:24:15 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:15 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:15 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:24:15 DATA:  test-node-gpu.js result: performance: load: 285 total: 1028
2021-09-20 09:24:15 STATE: test-node-gpu.js passed: default result face match
2021-09-20 09:24:15 INFO:  test-node-gpu.js test sync
2021-09-20 09:24:16 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:16 STATE: test-node-gpu.js event: image
2021-09-20 09:24:17 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:17 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:17 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:24:17 DATA:  test-node-gpu.js result: performance: load: 285 total: 1006
2021-09-20 09:24:17 STATE: test-node-gpu.js passed: default sync
2021-09-20 09:24:17 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:24:17 STATE: test-node-gpu.js passed: image input null [1,256,256,3]
2021-09-20 09:24:17 STATE: test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"}
2021-09-20 09:24:17 INFO:  test-node-gpu.js test face similarity
2021-09-20 09:24:17 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:24:17 STATE: test-node-gpu.js event: image
2021-09-20 09:24:18 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:18 STATE: test-node-gpu.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:24:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":4}
2021-09-20 09:24:18 DATA:  test-node-gpu.js result: performance: load: 285 total: 733
2021-09-20 09:24:18 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:18 STATE: test-node-gpu.js event: image
2021-09-20 09:24:19 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:19 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:19 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:24:19 DATA:  test-node-gpu.js result: performance: load: 285 total: 934
2021-09-20 09:24:20 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:20 STATE: test-node-gpu.js event: image
2021-09-20 09:24:20 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:20 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:20 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:20 DATA:  test-node-gpu.js result: performance: load: 285 total: 712
2021-09-20 09:24:20 STATE: test-node-gpu.js passed: face descriptor
2021-09-20 09:24:20 STATE: test-node-gpu.js passed: face match
2021-09-20 09:24:20 INFO:  test-node-gpu.js test face matching
2021-09-20 09:24:20 STATE: test-node-gpu.js passed: face database 102
2021-09-20 09:24:20 STATE: test-node-gpu.js passed: face match {"first":{"name":"ai face","similarity":0.7679640257895076}} {"second":{"name":"ai face","similarity":0.5102876185668009}} {"third":{"name":"ai upper","similarity":0.7726724047990643}}
2021-09-20 09:24:20 INFO:  test-node-gpu.js test object
2021-09-20 09:24:21 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:21 STATE: test-node-gpu.js event: image
2021-09-20 09:24:22 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:22 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:22 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:24:22 DATA:  test-node-gpu.js result: performance: load: 285 total: 911
2021-09-20 09:24:22 STATE: test-node-gpu.js passed: object result match
2021-09-20 09:24:22 INFO:  test-node-gpu.js test sensitive
2021-09-20 09:24:23 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:23 STATE: test-node-gpu.js event: image
2021-09-20 09:24:25 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:25 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 3 gesture: 9 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:24:25 DATA:  test-node-gpu.js result: performance: load: 285 total: 1580
2021-09-20 09:24:25 STATE: test-node-gpu.js passed: sensitive result match
2021-09-20 09:24:25 STATE: test-node-gpu.js passed: sensitive face result match
2021-09-20 09:24:25 STATE: test-node-gpu.js passed: sensitive body result match
2021-09-20 09:24:25 STATE: test-node-gpu.js passed: sensitive hand result match
2021-09-20 09:24:25 INFO:  test-node-gpu.js test detectors
2021-09-20 09:24:25 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:25 STATE: test-node-gpu.js event: image
2021-09-20 09:24:26 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:26 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:26 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:24:26 DATA:  test-node-gpu.js result: performance: load: 285 total: 562
2021-09-20 09:24:26 STATE: test-node-gpu.js passed: detector result face match
2021-09-20 09:24:26 STATE: test-node-gpu.js passed: detector result hand match
2021-09-20 09:24:26 INFO:  test-node-gpu.js test body variants
2021-09-20 09:24:27 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:27 STATE: test-node-gpu.js event: image
2021-09-20 09:24:28 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:28 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg posenet
2021-09-20 09:24:28 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17}
2021-09-20 09:24:28 DATA:  test-node-gpu.js result: performance: load: 285 total: 680
2021-09-20 09:24:28 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:28 STATE: test-node-gpu.js event: image
2021-09-20 09:24:29 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:29 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg movenet
2021-09-20 09:24:29 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 09:24:29 DATA:  test-node-gpu.js result: performance: load: 285 total: 641
2021-09-20 09:24:29 STATE: test-node-gpu.js event: image
2021-09-20 09:24:30 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:30 STATE: test-node-gpu.js passed: detect: random default
2021-09-20 09:24:30 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 1 gesture: 1 object: 0 person: 0 {} {} {"score":0.08,"keypoints":17}
2021-09-20 09:24:30 DATA:  test-node-gpu.js result: performance: load: 285 total: 559
2021-09-20 09:24:30 INFO:  test-node-gpu.js test: first instance
2021-09-20 09:24:30 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:31 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:31 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:31 DATA:  test-node-gpu.js result: performance: load: 3 total: 598
2021-09-20 09:24:31 INFO:  test-node-gpu.js test: second instance
2021-09-20 09:24:31 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:32 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:32 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:32 DATA:  test-node-gpu.js result: performance: load: 3 total: 628
2021-09-20 09:24:32 INFO:  test-node-gpu.js test: concurrent
2021-09-20 09:24:32 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:24:32 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:24:32 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 09:24:33 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:33 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:34 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 09:24:35 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:35 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:35 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 09:24:35 STATE: test-node-gpu.js event: image
2021-09-20 09:24:35 STATE: test-node-gpu.js event: image
2021-09-20 09:24:35 STATE: test-node-gpu.js event: image
2021-09-20 09:24:40 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:40 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 285 total: 4970
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 3 total: 4970
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 3 body: 1 hand: 0 gesture: 1 object: 1 person: 3 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 3 total: 4970
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 7 body: 1 hand: 0 gesture: 1 object: 1 person: 7 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 285 total: 4970
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 8 body: 1 hand: 0 gesture: 1 object: 1 person: 8 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 3 total: 4970
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 9 body: 1 hand: 0 gesture: 1 object: 1 person: 9 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 3 total: 4970
2021-09-20 09:24:40 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 285 total: 4974
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 5 body: 1 hand: 1 gesture: 1 object: 1 person: 5 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 3 total: 4974
2021-09-20 09:24:40 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: face: 6 body: 1 hand: 1 gesture: 1 object: 1 person: 6 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 09:24:40 DATA:  test-node-gpu.js result: performance: load: 3 total: 4975
2021-09-20 09:24:40 STATE: test-node-gpu.js event: image
2021-09-20 09:24:41 STATE: test-node-gpu.js event: detect
2021-09-20 09:24:41 STATE: test-node-gpu.js passed: monkey patch
2021-09-20 09:24:41 STATE: test-node-gpu.js passed: segmentation [256,256]
2021-09-20 09:24:41 STATE: test-node-gpu.js passeed: no memory leak
2021-09-20 09:24:41 STATE: test-node-gpu.js passeed: equal usage
2021-09-20 09:24:41 INFO:  test-node-gpu.js events: {"image":17,"detect":17,"warmup":2}
2021-09-20 09:24:41 INFO:  test-node-gpu.js test complete: 30495 ms
2021-09-20 09:24:41 INFO: 
2021-09-20 09:24:41 INFO:  test-node-wasm.js start
2021-09-20 09:24:41 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/
2021-09-20 09:24:41 STATE: test-node-wasm.js passed: configuration default validation []
2021-09-20 09:24:41 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
2021-09-20 09:24:44 STATE: test-node-wasm.js passed: models loaded 14 7
2021-09-20 09:24:44 STATE: test-node-wasm.js passed: create human
2021-09-20 09:24:44 INFO:  test-node-wasm.js human version: 2.2.2
2021-09-20 09:24:44 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.5.0
2021-09-20 09:24:44 INFO:  test-node-wasm.js tfjs version: 3.9.0
2021-09-20 09:24:44 STATE: test-node-wasm.js passed: set backend: wasm
2021-09-20 09:24:44 STATE: test-node-wasm.js tensors 1456
2021-09-20 09:24:44 STATE: test-node-wasm.js passed: load models
2021-09-20 09:24:44 STATE: test-node-wasm.js result: defined models: 14 loaded models: 7
2021-09-20 09:24:44 STATE: test-node-wasm.js passed: warmup: none default
2021-09-20 09:24:44 STATE: test-node-wasm.js passed: warmup none result match
2021-09-20 09:24:44 STATE: test-node-wasm.js event: image
2021-09-20 09:24:45 STATE: test-node-wasm.js event: detect
2021-09-20 09:24:45 STATE: test-node-wasm.js event: warmup
2021-09-20 09:24:45 STATE: test-node-wasm.js passed: warmup: face default
2021-09-20 09:24:45 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":4}
2021-09-20 09:24:45 DATA:  test-node-wasm.js result: performance: load: 2250 total: 1043
2021-09-20 09:24:45 STATE: test-node-wasm.js passed: warmup face result match
2021-09-20 09:24:48 STATE: test-node-wasm.js event: image
2021-09-20 09:24:49 STATE: test-node-wasm.js event: detect
2021-09-20 09:24:49 STATE: test-node-wasm.js event: warmup
2021-09-20 09:24:49 STATE: test-node-wasm.js passed: warmup: body default
2021-09-20 09:24:49 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
2021-09-20 09:24:49 DATA:  test-node-wasm.js result: performance: load: 2250 total: 2666
2021-09-20 09:24:49 STATE: test-node-wasm.js passed: warmup body result match
2021-09-20 09:24:49 INFO:  test-node-wasm.js test default
2021-09-20 09:24:51 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:24:52 STATE: test-node-wasm.js event: image
2021-09-20 09:24:53 STATE: test-node-wasm.js event: detect
2021-09-20 09:24:53 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:53 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
2021-09-20 09:24:53 DATA:  test-node-wasm.js result: performance: load: 2250 total: 2520
2021-09-20 09:24:53 STATE: test-node-wasm.js passed: default result face match
2021-09-20 09:24:53 INFO:  test-node-wasm.js test sync
2021-09-20 09:24:55 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:24:56 STATE: test-node-wasm.js event: image
2021-09-20 09:24:57 STATE: test-node-wasm.js event: detect
2021-09-20 09:24:57 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:24:57 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
2021-09-20 09:24:57 DATA:  test-node-wasm.js result: performance: load: 2250 total: 2574
2021-09-20 09:24:57 STATE: test-node-wasm.js passed: default sync
2021-09-20 09:24:57 STATE: test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34697856}
2021-09-20 09:24:57 STATE: test-node-wasm.js passed: image input null [1,256,256,3]
2021-09-20 09:24:57 STATE: test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"}
2021-09-20 09:24:57 INFO:  test-node-wasm.js test face similarity
2021-09-20 09:24:58 STATE: test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34697856}
2021-09-20 09:24:59 STATE: test-node-wasm.js event: image
2021-09-20 09:25:00 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:00 STATE: test-node-wasm.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:25:00 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:00 DATA:  test-node-wasm.js result: performance: load: 2250 total: 2583
2021-09-20 09:25:02 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:03 STATE: test-node-wasm.js event: image
2021-09-20 09:25:04 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:04 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:25:04 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:04 DATA:  test-node-wasm.js result: performance: load: 2250 total: 2496
2021-09-20 09:25:05 STATE: test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
2021-09-20 09:25:06 STATE: test-node-wasm.js event: image
2021-09-20 09:25:07 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:07 STATE: test-node-wasm.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:25:07 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:07 DATA:  test-node-wasm.js result: performance: load: 2250 total: 2482
2021-09-20 09:25:07 STATE: test-node-wasm.js passed: face descriptor
2021-09-20 09:25:07 ERROR: test-node-wasm.js failed: face match 100 100 100
2021-09-20 09:25:07 INFO:  test-node-wasm.js test face matching
2021-09-20 09:25:07 STATE: test-node-wasm.js passed: face database 102
2021-09-20 09:25:07 STATE: test-node-wasm.js passed: face match {"first":{"name":"ai face","similarity":0.5102875790637588}} {"second":{"name":"ai face","similarity":0.5102875790637588}} {"third":{"name":"ai face","similarity":0.5102875790637588}}
2021-09-20 09:25:07 INFO:  test-node-wasm.js test object
2021-09-20 09:25:09 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:10 STATE: test-node-wasm.js event: image
2021-09-20 09:25:11 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:11 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:25:11 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:11 DATA:  test-node-wasm.js result: performance: load: 2250 total: 2504
2021-09-20 09:25:11 ERROR: test-node-wasm.js failed: object result mismatch 0
2021-09-20 09:25:11 INFO:  test-node-wasm.js test sensitive
2021-09-20 09:25:13 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:14 STATE: test-node-wasm.js event: image
2021-09-20 09:25:17 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:17 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:25:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 3 gesture: 9 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:17 DATA:  test-node-wasm.js result: performance: load: 2250 total: 4049
2021-09-20 09:25:17 STATE: test-node-wasm.js passed: sensitive result match
2021-09-20 09:25:17 ERROR: test-node-wasm.js failed: sensitive face result mismatch 1 4 478 3 1024 9
2021-09-20 09:25:17 STATE: test-node-wasm.js passed: sensitive body result match
2021-09-20 09:25:17 STATE: test-node-wasm.js passed: sensitive hand result match
2021-09-20 09:25:17 INFO:  test-node-wasm.js test detectors
2021-09-20 09:25:18 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:20 STATE: test-node-wasm.js event: image
2021-09-20 09:25:20 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:20 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:25:20 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:20 DATA:  test-node-wasm.js result: performance: load: 2250 total: 1951
2021-09-20 09:25:20 STATE: test-node-wasm.js passed: detector result face match
2021-09-20 09:25:20 STATE: test-node-wasm.js passed: detector result hand match
2021-09-20 09:25:20 INFO:  test-node-wasm.js test body variants
2021-09-20 09:25:23 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:25 STATE: test-node-wasm.js event: image
2021-09-20 09:25:25 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:25 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg posenet
2021-09-20 09:25:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.91,"keypoints":17}
2021-09-20 09:25:25 DATA:  test-node-wasm.js result: performance: load: 2250 total: 2087
2021-09-20 09:25:27 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:29 STATE: test-node-wasm.js event: image
2021-09-20 09:25:29 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:29 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg movenet
2021-09-20 09:25:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:29 DATA:  test-node-wasm.js result: performance: load: 2250 total: 1945
2021-09-20 09:25:31 STATE: test-node-wasm.js event: image
2021-09-20 09:25:31 STATE: test-node-wasm.js event: detect
2021-09-20 09:25:31 STATE: test-node-wasm.js passed: detect: random default
2021-09-20 09:25:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:31 DATA:  test-node-wasm.js result: performance: load: 2250 total: 1957
2021-09-20 09:25:31 INFO:  test-node-wasm.js test: first instance
2021-09-20 09:25:32 STATE: test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
2021-09-20 09:25:34 STATE: test-node-wasm.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:25:34 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:34 DATA:  test-node-wasm.js result: performance: load: 3 total: 1896
2021-09-20 09:25:34 INFO:  test-node-wasm.js test: second instance
2021-09-20 09:25:34 STATE: test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
2021-09-20 09:25:36 STATE: test-node-wasm.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:25:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:25:36 DATA:  test-node-wasm.js result: performance: load: 2 total: 1869
2021-09-20 09:25:36 INFO:  test-node-wasm.js test: concurrent
2021-09-20 09:25:36 STATE: test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34697856}
2021-09-20 09:25:36 STATE: test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34697856}
2021-09-20 09:25:36 STATE: test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34697856}
2021-09-20 09:25:38 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:39 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:41 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2021-09-20 09:25:41 STATE: test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
2021-09-20 09:25:42 STATE: test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
2021-09-20 09:25:42 STATE: test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
2021-09-20 09:25:44 STATE: test-node-wasm.js event: image
2021-09-20 09:25:49 STATE: test-node-wasm.js event: image
2021-09-20 09:25:54 STATE: test-node-wasm.js event: image
2021-09-20 09:26:00 STATE: test-node-wasm.js event: detect
2021-09-20 09:26:00 STATE: test-node-wasm.js event: detect
2021-09-20 09:26:00 STATE: test-node-wasm.js event: detect
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 2250 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 3 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-face.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 3 body: 1 hand: 1 gesture: 1 object: 0 person: 3 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 2 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 0 person: 4 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 2250 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 5 body: 1 hand: 1 gesture: 1 object: 0 person: 5 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 3 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 6 body: 1 hand: 1 gesture: 1 object: 0 person: 6 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 2 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 7 body: 1 hand: 1 gesture: 1 object: 0 person: 7 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 2250 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 8 body: 1 hand: 1 gesture: 1 object: 0 person: 8 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 3 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: detect: samples/ai-upper.jpg default
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: face: 9 body: 1 hand: 1 gesture: 1 object: 0 person: 9 {"score":0.93} {} {"score":0.92,"keypoints":17}
2021-09-20 09:26:00 DATA:  test-node-wasm.js result: performance: load: 2 total: 17484
2021-09-20 09:26:00 STATE: test-node-wasm.js event: image
2021-09-20 09:26:00 STATE: test-node-wasm.js event: detect
2021-09-20 09:26:00 STATE: test-node-wasm.js passed: monkey patch
2021-09-20 09:26:01 STATE: test-node-wasm.js passed: segmentation [256,256]
2021-09-20 09:26:01 STATE: test-node-wasm.js passeed: no memory leak
2021-09-20 09:26:01 STATE: test-node-wasm.js passeed: equal usage
2021-09-20 09:26:01 INFO:  test-node-wasm.js events: {"image":17,"detect":17,"warmup":2}
2021-09-20 09:26:01 INFO:  test-node-wasm.js test complete: 79029 ms
2021-09-20 09:26:01 INFO: 
2021-09-20 09:26:01 INFO:  status: {"test-node.js":{"passed":73,"failed":0},"test-node-gpu.js":{"passed":73,"failed":0},"test-node-wasm.js":{"passed":71,"failed":3}}
2021-09-20 21:59:16 INFO:  @vladmandic/human version 2.2.2
2021-09-20 21:59:16 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.5.0
2021-09-20 21:59:16 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"]
2021-09-20 21:59:16 INFO:  demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"]
2021-09-20 21:59:16 INFO: 
2021-09-20 21:59:16 INFO:  test-node.js start
2021-09-20 21:59:17 STATE: test-node.js passed: configuration default validation []
2021-09-20 21:59:17 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
2021-09-20 21:59:17 STATE: test-node.js passed: models loaded 14 7
2021-09-20 21:59:17 STATE: test-node.js passed: create human
2021-09-20 21:59:17 INFO:  test-node.js human version: 2.2.2
2021-09-20 21:59:17 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.5.0
2021-09-20 21:59:17 INFO:  test-node.js tfjs version: 3.9.0
2021-09-20 21:59:17 STATE: test-node.js passed: set backend: tensorflow
2021-09-20 21:59:17 STATE: test-node.js tensors 1456
2021-09-20 21:59:17 STATE: test-node.js passed: load models
2021-09-20 21:59:17 STATE: test-node.js result: defined models: 14 loaded models: 7
2021-09-20 21:59:17 STATE: test-node.js passed: warmup: none default
2021-09-20 21:59:17 STATE: test-node.js passed: warmup none result match
2021-09-20 21:59:17 STATE: test-node.js event: image
2021-09-20 21:59:19 STATE: test-node.js event: detect
2021-09-20 21:59:19 STATE: test-node.js event: warmup
2021-09-20 21:59:19 STATE: test-node.js passed: warmup: face default
2021-09-20 21:59:19 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
2021-09-20 21:59:19 DATA:  test-node.js result: performance: load: 292 total: 1260
2021-09-20 21:59:19 STATE: test-node.js passed: warmup face result match
2021-09-20 21:59:19 STATE: test-node.js event: image
2021-09-20 21:59:20 STATE: test-node.js event: detect
2021-09-20 21:59:20 STATE: test-node.js event: warmup
2021-09-20 21:59:20 STATE: test-node.js passed: warmup: body default
2021-09-20 21:59:20 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 21:59:20 DATA:  test-node.js result: performance: load: 292 total: 1085
2021-09-20 21:59:20 STATE: test-node.js passed: warmup body result match
2021-09-20 21:59:20 INFO:  test-node.js test default
2021-09-20 21:59:21 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:21 STATE: test-node.js event: image
2021-09-20 21:59:22 STATE: test-node.js event: detect
2021-09-20 21:59:22 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:22 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 21:59:22 DATA:  test-node.js result: performance: load: 292 total: 1161
2021-09-20 21:59:22 STATE: test-node.js passed: default result face match
2021-09-20 21:59:22 INFO:  test-node.js test sync
2021-09-20 21:59:23 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:23 STATE: test-node.js event: image
2021-09-20 21:59:24 STATE: test-node.js event: detect
2021-09-20 21:59:24 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:24 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 21:59:24 DATA:  test-node.js result: performance: load: 292 total: 1059
2021-09-20 21:59:24 STATE: test-node.js passed: default sync
2021-09-20 21:59:24 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 21:59:24 STATE: test-node.js passed: image input null [1,256,256,3]
2021-09-20 21:59:24 STATE: test-node.js passed: invalid input {"error":"could not convert input to tensor"}
2021-09-20 21:59:24 INFO:  test-node.js test face similarity
2021-09-20 21:59:24 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 21:59:24 STATE: test-node.js event: image
2021-09-20 21:59:25 STATE: test-node.js event: detect
2021-09-20 21:59:25 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-09-20 21:59:25 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":4}
2021-09-20 21:59:25 DATA:  test-node.js result: performance: load: 292 total: 734
2021-09-20 21:59:25 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:25 STATE: test-node.js event: image
2021-09-20 21:59:26 STATE: test-node.js event: detect
2021-09-20 21:59:26 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:26 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 21:59:26 DATA:  test-node.js result: performance: load: 292 total: 928
2021-09-20 21:59:27 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 21:59:27 STATE: test-node.js event: image
2021-09-20 21:59:27 STATE: test-node.js event: detect
2021-09-20 21:59:27 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 21:59:27 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 21:59:27 DATA:  test-node.js result: performance: load: 292 total: 733
2021-09-20 21:59:27 STATE: test-node.js passed: face descriptor
2021-09-20 21:59:27 STATE: test-node.js passed: face similarity
2021-09-20 21:59:27 INFO:  test-node.js test face matching
2021-09-20 21:59:27 STATE: test-node.js passed: face database 102
2021-09-20 21:59:27 STATE: test-node.js passed: face match {"first":{"name":"ai face","similarity":0.7679640257895076}} {"second":{"name":"ai face","similarity":0.5102876185668009}} {"third":{"name":"ai upper","similarity":0.7726724047990643}}
2021-09-20 21:59:27 INFO:  test-node.js test object
2021-09-20 21:59:28 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:28 STATE: test-node.js event: image
2021-09-20 21:59:29 STATE: test-node.js event: detect
2021-09-20 21:59:29 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:29 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 21:59:29 DATA:  test-node.js result: performance: load: 292 total: 996
2021-09-20 21:59:29 STATE: test-node.js passed: object result match
2021-09-20 21:59:29 INFO:  test-node.js test sensitive
2021-09-20 21:59:30 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:30 STATE: test-node.js event: image
2021-09-20 21:59:32 STATE: test-node.js event: detect
2021-09-20 21:59:32 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:32 DATA:  test-node.js result: face: 1 body: 1 hand: 3 gesture: 9 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 21:59:32 DATA:  test-node.js result: performance: load: 292 total: 1647
2021-09-20 21:59:32 STATE: test-node.js passed: sensitive result match
2021-09-20 21:59:32 STATE: test-node.js passed: sensitive face result match
2021-09-20 21:59:32 STATE: test-node.js passed: sensitive body result match
2021-09-20 21:59:32 STATE: test-node.js passed: sensitive hand result match
2021-09-20 21:59:32 INFO:  test-node.js test detectors
2021-09-20 21:59:33 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:33 STATE: test-node.js event: image
2021-09-20 21:59:33 STATE: test-node.js event: detect
2021-09-20 21:59:33 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:33 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 21:59:33 DATA:  test-node.js result: performance: load: 292 total: 559
2021-09-20 21:59:33 STATE: test-node.js passed: detector result face match
2021-09-20 21:59:33 STATE: test-node.js passed: detector result hand match
2021-09-20 21:59:33 INFO:  test-node.js test body variants
2021-09-20 21:59:34 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:34 STATE: test-node.js event: image
2021-09-20 21:59:35 STATE: test-node.js event: detect
2021-09-20 21:59:35 STATE: test-node.js passed: detect: samples/ai-body.jpg posenet
2021-09-20 21:59:35 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17}
2021-09-20 21:59:35 DATA:  test-node.js result: performance: load: 292 total: 663
2021-09-20 21:59:36 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:36 STATE: test-node.js event: image
2021-09-20 21:59:36 STATE: test-node.js event: detect
2021-09-20 21:59:36 STATE: test-node.js passed: detect: samples/ai-body.jpg movenet
2021-09-20 21:59:36 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2021-09-20 21:59:36 DATA:  test-node.js result: performance: load: 292 total: 650
2021-09-20 21:59:37 STATE: test-node.js event: image
2021-09-20 21:59:37 STATE: test-node.js event: detect
2021-09-20 21:59:37 STATE: test-node.js passed: detect: random default
2021-09-20 21:59:37 DATA:  test-node.js result: face: 0 body: 1 hand: 1 gesture: 1 object: 0 person: 0 {} {} {"score":0.08,"keypoints":17}
2021-09-20 21:59:37 DATA:  test-node.js result: performance: load: 292 total: 625
2021-09-20 21:59:37 INFO:  test-node.js test: first instance
2021-09-20 21:59:37 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 21:59:38 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 21:59:38 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 21:59:38 DATA:  test-node.js result: performance: load: 3 total: 659
2021-09-20 21:59:38 INFO:  test-node.js test: second instance
2021-09-20 21:59:38 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 21:59:39 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 21:59:39 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 21:59:39 DATA:  test-node.js result: performance: load: 4 total: 641
2021-09-20 21:59:39 INFO:  test-node.js test: concurrent
2021-09-20 21:59:39 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 21:59:39 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 21:59:39 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2021-09-20 21:59:40 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:41 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:42 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2021-09-20 21:59:42 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 21:59:42 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 21:59:43 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
2021-09-20 21:59:43 STATE: test-node.js event: image
2021-09-20 21:59:43 STATE: test-node.js event: image
2021-09-20 21:59:43 STATE: test-node.js event: image
2021-09-20 21:59:48 STATE: test-node.js event: detect
2021-09-20 21:59:48 STATE: test-node.js event: detect
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 292 total: 5041
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 3 total: 5041
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 3 body: 1 hand: 0 gesture: 1 object: 1 person: 3 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 4 total: 5041
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 7 body: 1 hand: 0 gesture: 1 object: 1 person: 7 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 292 total: 5041
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 8 body: 1 hand: 0 gesture: 1 object: 1 person: 8 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 3 total: 5041
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 9 body: 1 hand: 0 gesture: 1 object: 1 person: 9 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 4 total: 5041
2021-09-20 21:59:48 STATE: test-node.js event: detect
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 292 total: 5047
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 5 body: 1 hand: 1 gesture: 1 object: 1 person: 5 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 3 total: 5047
2021-09-20 21:59:48 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-09-20 21:59:48 DATA:  test-node.js result: face: 6 body: 1 hand: 1 gesture: 1 object: 1 person: 6 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
2021-09-20 21:59:48 DATA:  test-node.js result: performance: load: 4 total: 5047
2021-09-20 21:59:48 STATE: test-node.js event: image
2021-09-20 21:59:48 STATE: test-node.js event: detect
2021-09-20 21:59:48 STATE: test-node.js passed: monkey patch
2021-09-20 21:59:49 STATE: test-node.js passed: segmentation [256,256]
2021-09-20 21:59:49 STATE: test-node.js passeed: no memory leak
2021-09-20 21:59:49 STATE: test-node.js passeed: equal usage
2021-09-20 21:59:49 INFO:  test-node.js events: {"image":17,"detect":17,"warmup":2}
2021-09-20 21:59:49 INFO:  test-node.js test complete: 31407 ms
2021-09-20 21:59:49 INFO: 
2021-09-20 21:59:49 INFO:  test-node-gpu.js start