update demos and tests

pull/356/head
Vladimir Mandic 2022-11-11 12:33:40 -05:00
parent 12ab4f0e35
commit b0695ccedf
20 changed files with 2471 additions and 45 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -13,7 +13,8 @@ import * as indexDb from './indexdb'; // methods to deal with indexdb
const humanConfig = { // user configuration for human, used to fine-tune behavior
cacheSensitivity: 0,
modelBasePath: '../../models',
filter: { equalization: true }, // lets run with histogram equilizer
filter: { enabled: true, equalization: true }, // lets run with histogram equilizer
debug: true,
face: {
enabled: true,
detector: { rotation: true, return: true, cropFactor: 1.6, mask: false }, // return tensor is used to get detected face image
@ -275,8 +276,8 @@ async function main() { // main entry point
await detectionLoop(); // start detection loop
startTime = human.now();
current.face = await validationLoop(); // start validation loop
dom.canvas.width = current.face.tensor?.shape[1] || options.minSize;
dom.canvas.height = current.face.tensor?.shape[0] || options.minSize;
dom.canvas.width = current.face?.tensor?.shape[1] || options.minSize;
dom.canvas.height = current.face?.tensor?.shape[0] || options.minSize;
dom.source.width = dom.canvas.width;
dom.source.height = dom.canvas.height;
dom.canvas.style.width = '';

View File

@ -38,7 +38,8 @@ function match(descBuffer, options = { order: 2, multiplier: 20 }) {
if (best < threshold || best === 0) break; // short circuit
}
best = (options.order === 2) ? Math.sqrt(best) : best ** (1 / options.order);
return { index, distance: best, similarity: Math.max(0, 100 - best) / 100.0 };
const similarity = Math.round(100 * Math.max(0, 100 - best) / 100.0) / 100;
return { index, distance: best, similarity };
}
threads.parentPort?.on('message', (msg) => {

View File

@ -15,7 +15,7 @@ const options = {
dbMax: 10000, // maximum number of records to hold in memory
threadPoolSize: 12, // number of worker threads to create in thread pool
workerSrc: './node-match-worker.js', // code that executes in the worker thread
debug: false, // verbose messages
debug: true, // verbose messages
minThreshold: 0.5, // match returns first record that meets the similarity threshold, set to 0 to always scan all records
descLength: 1024, // descriptor length
};

View File

@ -9,10 +9,10 @@
<meta name="description" content="Human: 3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction, Emotion Prediction & Gesture Recognition; Author: Vladimir Mandic <https://github.com/vladmandic>">
<meta name="msapplication-tooltip" content="Human: 3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction, Emotion Prediction & Gesture Recognition; Author: Vladimir Mandic <https://github.com/vladmandic>">
<meta name="theme-color" content="#000000">
<link rel="manifest" href="../manifest.webmanifest">
<link rel="manifest" href="../../manifest.webmanifest">
<link rel="shortcut icon" href="../../favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="../../assets/icon.png">
<script src="./index.js" type="module"></script>
<script src="../multithread/index.js" type="module"></script>
<style>
@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: 16px; font-variant: small-caps; }

View File

@ -8,7 +8,7 @@
import { Human } from '../../dist/human.esm.js'; // equivalent of @vladmandic/human
import GLBench from '../helpers/gl-bench.js';
const workerJS = './worker.js';
const workerJS = '../multithread/worker.js';
const config = {
main: { // processes input and runs gesture analysis

View File

@ -20,7 +20,7 @@
body { font-size: 1rem; font-family: "CenturyGothic", "Segoe UI", sans-serif; font-variant: small-caps; width: -webkit-fill-available; height: 100%; background: black; color: white; overflow: hidden; margin: 0; }
select { font-size: 1rem; font-family: "CenturyGothic", "Segoe UI", sans-serif; font-variant: small-caps; background: gray; color: white; border: none; }
</style>
<script src="index.js" type="module"></script>
<script src="../segmentation/index.js" type="module"></script>
</head>
<body>
<noscript><h1>javascript is required</h1></noscript>

View File

@ -44,7 +44,7 @@ async function main() {
// set defaults
dom.fps.innerText = 'initializing';
dom.ratio.valueAsNumber = human.config.segmentation.ratio;
dom.video.src = '../assets/rijeka.mp4';
dom.video.src = 'https://vladmandic.github.io/segmentation/assets/rijeka.mp4';
dom.composite.innerHTML = ['source-atop', 'color', 'color-burn', 'color-dodge', 'copy', 'darken', 'destination-atop', 'destination-in', 'destination-out', 'destination-over', 'difference', 'exclusion', 'hard-light', 'hue', 'lighten', 'lighter', 'luminosity', 'multiply', 'overlay', 'saturation', 'screen', 'soft-light', 'source-in', 'source-out', 'source-over', 'xor'].map((gco) => `<option value="${gco}">${gco}</option>`).join(''); // eslint-disable-line max-len
const ctxMerge = dom.merge.getContext('2d');

View File

@ -4,6 +4,98 @@
author: <https://github.com/vladmandic>'
*/
import*as m from"../../dist/human.esm.js";var f=1920,g={modelBasePath:"../../models",filter:{enabled:!0,equalization:!1,flip:!1,width:f},face:{enabled:!0,detector:{rotation:!0},mesh:{enabled:!0},attention:{enabled:!1},iris:{enabled:!0},description:{enabled:!0},emotion:{enabled:!0},antispoof:{enabled:!0},liveness:{enabled:!0}},body:{enabled:!0},hand:{enabled:!0},object:{enabled:!1},segmentation:{enabled:!1},gesture:{enabled:!0}},e=new m.Human(g);e.env.perfadd=!1;e.draw.options.font='small-caps 18px "Lato"';e.draw.options.lineHeight=20;var a={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("status"),perf:document.getElementById("performance")},n={detect:0,draw:0,tensors:0,start:0},o={detectFPS:0,drawFPS:0,frames:0,averageMs:0},s=(...t)=>{a.log.innerText+=t.join(" ")+`
`,console.log(...t)},r=t=>a.fps.innerText=t,b=t=>a.perf.innerText="tensors:"+e.tf.memory().numTensors.toString()+" | performance: "+JSON.stringify(t).replace(/"|{|}/g,"").replace(/,/g," | ");async function u(){if(!a.video.paused){n.start===0&&(n.start=e.now()),await e.detect(a.video);let t=e.tf.memory().numTensors;t-n.tensors!==0&&s("allocated tensors:",t-n.tensors),n.tensors=t,o.detectFPS=Math.round(1e3*1e3/(e.now()-n.detect))/1e3,o.frames++,o.averageMs=Math.round(1e3*(e.now()-n.start)/o.frames)/1e3,o.frames%100===0&&!a.video.paused&&s("performance",{...o,tensors:n.tensors})}n.detect=e.now(),requestAnimationFrame(u)}async function p(){var d,i,l;if(!a.video.paused){let c=e.next(e.result),w=await e.image(a.video);e.draw.canvas(w.canvas,a.canvas);let v={bodyLabels:`person confidence [score] and ${(l=(i=(d=e.result)==null?void 0:d.body)==null?void 0:i[0])==null?void 0:l.keypoints.length} keypoints`};await e.draw.all(a.canvas,c,v),b(c.performance)}let t=e.now();o.drawFPS=Math.round(1e3*1e3/(t-n.draw))/1e3,n.draw=t,r(a.video.paused?"paused":`fps: ${o.detectFPS.toFixed(1).padStart(5," ")} detect | ${o.drawFPS.toFixed(1).padStart(5," ")} draw`),setTimeout(p,30)}async function h(){await e.webcam.start({element:a.video,crop:!0,width:f}),a.canvas.width=e.webcam.width,a.canvas.height=e.webcam.height,a.canvas.onclick=async()=>{e.webcam.paused?await e.webcam.play():e.webcam.pause()}}async function y(){s("human version:",e.version,"| tfjs version:",e.tf.version["tfjs-core"]),s("platform:",e.env.platform,"| agent:",e.env.agent),r("loading..."),await e.load(),s("backend:",e.tf.getBackend(),"| available:",e.env.backends),s("models stats:",e.getModelStats()),s("models loaded:",Object.values(e.models).filter(t=>t!==null).length),s("environment",e.env),r("initializing..."),await e.warmup(),await h(),await u(),await p()}window.onload=y;
// demo/typescript/index.ts
import * as H from "../../dist/human.esm.js";
var width = 1920;
var humanConfig = {
modelBasePath: "../../models",
filter: { enabled: true, equalization: false, flip: false, width },
face: { enabled: true, detector: { rotation: true }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true }, antispoof: { enabled: true }, liveness: { enabled: true } },
body: { enabled: true },
hand: { enabled: true },
object: { enabled: false },
segmentation: { enabled: false },
gesture: { enabled: true }
};
var human = new H.Human(humanConfig);
human.env.perfadd = false;
human.draw.options.font = 'small-caps 18px "Lato"';
human.draw.options.lineHeight = 20;
var dom = {
video: document.getElementById("video"),
canvas: document.getElementById("canvas"),
log: document.getElementById("log"),
fps: document.getElementById("status"),
perf: document.getElementById("performance")
};
var timestamp = { detect: 0, draw: 0, tensors: 0, start: 0 };
var fps = { detectFPS: 0, drawFPS: 0, frames: 0, averageMs: 0 };
var log = (...msg) => {
dom.log.innerText += msg.join(" ") + "\n";
console.log(...msg);
};
var status = (msg) => dom.fps.innerText = msg;
var perf = (msg) => dom.perf.innerText = "tensors:" + human.tf.memory().numTensors.toString() + " | performance: " + JSON.stringify(msg).replace(/"|{|}/g, "").replace(/,/g, " | ");
async function detectionLoop() {
if (!dom.video.paused) {
if (timestamp.start === 0)
timestamp.start = human.now();
await human.detect(dom.video);
const tensors = human.tf.memory().numTensors;
if (tensors - timestamp.tensors !== 0)
log("allocated tensors:", tensors - timestamp.tensors);
timestamp.tensors = tensors;
fps.detectFPS = Math.round(1e3 * 1e3 / (human.now() - timestamp.detect)) / 1e3;
fps.frames++;
fps.averageMs = Math.round(1e3 * (human.now() - timestamp.start) / fps.frames) / 1e3;
if (fps.frames % 100 === 0 && !dom.video.paused)
log("performance", { ...fps, tensors: timestamp.tensors });
}
timestamp.detect = human.now();
requestAnimationFrame(detectionLoop);
}
async function drawLoop() {
var _a, _b, _c;
if (!dom.video.paused) {
const interpolated = human.next(human.result);
const processed = await human.image(dom.video);
human.draw.canvas(processed.canvas, dom.canvas);
const opt = { bodyLabels: `person confidence [score] and ${(_c = (_b = (_a = human.result) == null ? void 0 : _a.body) == null ? void 0 : _b[0]) == null ? void 0 : _c.keypoints.length} keypoints` };
await human.draw.all(dom.canvas, interpolated, opt);
perf(interpolated.performance);
}
const now = human.now();
fps.drawFPS = Math.round(1e3 * 1e3 / (now - timestamp.draw)) / 1e3;
timestamp.draw = now;
status(dom.video.paused ? "paused" : `fps: ${fps.detectFPS.toFixed(1).padStart(5, " ")} detect | ${fps.drawFPS.toFixed(1).padStart(5, " ")} draw`);
setTimeout(drawLoop, 30);
}
async function webCam() {
await human.webcam.start({ element: dom.video, crop: true, width });
dom.canvas.width = human.webcam.width;
dom.canvas.height = human.webcam.height;
dom.canvas.onclick = async () => {
if (human.webcam.paused)
await human.webcam.play();
else
human.webcam.pause();
};
}
async function main() {
log("human version:", human.version, "| tfjs version:", human.tf.version["tfjs-core"]);
log("platform:", human.env.platform, "| agent:", human.env.agent);
status("loading...");
await human.load();
log("backend:", human.tf.getBackend(), "| available:", human.env.backends);
log("models stats:", human.getModelStats());
log("models loaded:", Object.values(human.models).filter((model) => model !== null).length);
log("environment", human.env);
status("initializing...");
await human.warmup();
await webCam();
await detectionLoop();
await drawLoop();
}
window.onload = main;
//# sourceMappingURL=index.js.map

File diff suppressed because one or more lines are too long

View File

@ -16,13 +16,18 @@ export async function histogramEqualization(inputImage: Tensor): Promise<Tensor>
const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]);
const maxRange = maxValue > 1 ? 255 : 1;
const factor = maxRange / maxValue;
const sub = [tf.sub(rgb[0], min[0]), tf.sub(rgb[1], min[1]), tf.sub(rgb[2], min[2])]; // channels offset by min values
const range = [tf.sub(max[0], min[0]), tf.sub(max[1], min[1]), tf.sub(max[2], min[2])]; // channel ranges
// const fact = [tf.div(maxRange, absMax[0]), tf.div(maxRange, absMax[1]), tf.div(maxRange, absMax[1])]; // factors between
const enh = [tf.mul(sub[0], factor), tf.mul(sub[1], factor), tf.mul(sub[2], factor)];
const stack = tf.stack([enh[0], enh[1], enh[2]], 2);
const reshape = tf.reshape(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]);
const final = tf.squeeze(reshape);
tf.dispose([...rgb, ...min, ...max, ...sub, ...range, ...enh, rgb, squeeze, reshape]);
return final; // output shape is [height, width, 3]
let final: Tensor;
if (factor > 1) {
const sub = [tf.sub(rgb[0], min[0]), tf.sub(rgb[1], min[1]), tf.sub(rgb[2], min[2])]; // channels offset by min values
const range = [tf.sub(max[0], min[0]), tf.sub(max[1], min[1]), tf.sub(max[2], min[2])]; // channel ranges
// const fact = [tf.div(maxRange, absMax[0]), tf.div(maxRange, absMax[1]), tf.div(maxRange, absMax[1])]; // factors between
const enh = [tf.mul(sub[0], factor), tf.mul(sub[1], factor), tf.mul(sub[2], factor)];
const stack = tf.stack([enh[0], enh[1], enh[2]], 2);
final = tf.reshape(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]);
tf.dispose([...sub, ...range, ...enh]);
} else {
final = tf.expandDims(squeeze, 0);
}
tf.dispose([...rgb, ...min, ...max, rgb, squeeze, inputImage]);
return final;
}

View File

@ -238,6 +238,7 @@ export async function process(input: Input, config: Config, getTensor: boolean =
if (!pixels) throw new Error('input error: cannot create tensor');
const casted: Tensor = tf.cast(pixels, 'float32');
const tensor: Tensor = config.filter.equalization ? await enhance.histogramEqualization(casted) : tf.expandDims(casted, 0);
tf.dispose([pixels, casted]);
if (config.filter.autoBrightness) {
const max = tf.max(tensor);
@ -246,7 +247,6 @@ export async function process(input: Input, config: Config, getTensor: boolean =
tf.dispose(max);
}
tf.dispose([pixels, casted]);
return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };
}

View File

@ -63,7 +63,7 @@ async function warmupCanvas(instance: Human): Promise<Result | undefined> {
const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
if (ctx) ctx.drawImage(img, 0, 0);
// const data = ctx?.getImageData(0, 0, canvas.height, canvas.width);
const tensor = await instance.image(canvas);
const tensor = await instance.image(canvas, true);
const res = tensor.tensor ? await instance.detect(tensor.tensor, instance.config) : undefined;
resolve(res);
}

View File

@ -1,7 +1,7 @@
#!/bin/sh
BROWSER="/mnt/c/Users/mandi/AppData/Local/Google/Chrome SxS/Application/chrome.exe"
PARAMS="--enable-unsafe-gpu --allow-insecure-localhost --auto-open-devtools-for-tabs"
PARAMS="--enable-unsafe-gpu --allow-insecure-localhost --auto-open-devtools-for-tabs --unsafely-treat-insecure-origin-as-secure=https:/localhost:8001"
"$BROWSER" $PARAMS https://localhost:10031/test/test-browser-iife.html
"$BROWSER" $PARAMS https://localhost:10031/test/test-browser-esm.html
"$BROWSER" $PARAMS https://localhost:8001/test/test-browser-iife.html
"$BROWSER" $PARAMS https://localhost:8001/test/test-browser-esm.html

File diff suppressed because it is too large Load Diff

View File

@ -97,11 +97,12 @@ async function testMatch() {
human.reset();
await human.warmup({ warmup: 'face' });
const img1 = await image('../../samples/in/ai-body.jpg');
const input1 = await human.image(img1);
const input1 = await human.image(img1, true);
const img2 = await image('../../samples/in/ai-face.jpg');
const input2 = await human.image(img2);
const input2 = await human.image(img2, true);
const res1 = await human.detect(input1.tensor);
const res2 = await human.detect(input2.tensor);
human.tf.dispose(input1.tensor, input2.tensor);
const desc1 = res1?.face?.[0]?.embedding;
const desc2 = res2?.face?.[0]?.embedding;
const similarity = await human.similarity(desc1, desc2);

View File

@ -73,7 +73,7 @@ async function testDefault(title, testConfig = {}) {
const ops = await human.check();
if (ops && ops.length > 0) log(' missing ops', ops);
const img = await image('../../samples/in/ai-body.jpg');
const input = await human.image(img); // process image
const input = await human.image(img, true); // process image
draw(input.canvas);
res = await human.warmup({ warmup: 'face' }); // warmup
draw(res.canvas);

View File

@ -356,8 +356,8 @@ async function test(Human, inputConfig) {
// test image processing
log('info', 'test: image process');
const img1 = await human.image(null);
const img2 = await human.image(await getImage(human, 'samples/in/ai-face.jpg'));
const img1 = await human.image(null, true);
const img2 = await human.image(await getImage(human, 'samples/in/ai-face.jpg'), true);
if (!img1 || !img2 || img1.tensor !== null || img2.tensor?.shape?.length !== 4) log('error', 'failed: image input', img1?.tensor?.shape, img2?.tensor?.shape);
else log('state', 'passed: image input', img1?.tensor?.shape, img2?.tensor?.shape);

View File

@ -1,7 +1,659 @@
2022-10-25 17:03:39 INFO:  @vladmandic/human version 3.0.0
2022-10-25 17:03:39 INFO:  User: vlado Platform: linux Arch: x64 Node: v18.10.0
2022-10-25 17:03:39 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/nodejs/process-folder.js","args":["samples"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]}]
2022-10-25 17:03:39 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start
2022-10-25 17:03:40 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start
2022-10-25 17:03:41 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start
2022-10-25 17:03:41 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start
2022-11-11 12:27:21 INFO:  @vladmandic/human version 3.0.0
2022-11-11 12:27:21 INFO:  User: vlado Platform: linux Arch: x64 Node: v18.10.0
2022-11-11 12:27:21 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/nodejs/process-folder.js","args":["samples"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]}]
2022-11-11 12:27:21 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start
2022-11-11 12:27:22 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start
2022-11-11 12:27:23 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start
2022-11-11 12:27:24 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start
2022-11-11 12:27:24 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start
2022-11-11 12:27:25 INFO:  {"cmd":"../demo/nodejs/process-folder.js","args":["samples"]} start
2022-11-11 12:27:27 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start
2022-11-11 12:27:40 INFO:  {"cmd":"../demo/facematch/node-match.js","args":[]} start
2022-11-11 12:27:42 INFO:  tests: ["test-node-load.js","test-node-gear.js","test-backend-node.js","test-backend-node-gpu.js","test-backend-node-wasm.js"]
2022-11-11 12:27:42 INFO: 
2022-11-11 12:27:42 INFO:  test-node-load.js start
2022-11-11 12:27:42 INFO:  test-node-load.js load start {"human":"3.0.0","tf":"4.0.0","progress":0}
2022-11-11 12:27:42 DATA:  test-node-load.js load interval {"elapsed":0,"progress":0}
2022-11-11 12:27:42 DATA:  test-node-load.js load interval {"elapsed":10,"progress":0}
2022-11-11 12:27:42 DATA:  test-node-load.js load interval {"elapsed":22,"progress":0.05339166087267679}
2022-11-11 12:27:42 DATA:  test-node-load.js load interval {"elapsed":33,"progress":0.2135162934143239}
2022-11-11 12:27:42 DATA:  test-node-load.js load interval {"elapsed":56,"progress":0.3299591712723044}
2022-11-11 12:27:42 DATA:  test-node-load.js load interval {"elapsed":73,"progress":0.5125946867158943}
2022-11-11 12:27:42 DATA:  test-node-load.js load interval {"elapsed":83,"progress":0.7259096583739463}
2022-11-11 12:27:42 STATE: test-node-load.js passed {"progress":1}
2022-11-11 12:27:42 INFO:  test-node-load.js load final {"progress":1}
2022-11-11 12:27:42 DATA:  test-node-load.js load interval {"elapsed":500,"progress":1}
2022-11-11 12:27:42 INFO: 
2022-11-11 12:27:42 INFO:  test-node-gear.js start
2022-11-11 12:27:43 DATA:  test-node-gear.js input: ["samples/in/ai-face.jpg"]
2022-11-11 12:27:43 STATE: test-node-gear.js passed: gear faceres samples/in/ai-face.jpg
2022-11-11 12:27:43 DATA:  test-node-gear.js results {"face":0,"model":"faceres","image":"samples/in/ai-face.jpg","age":23.5,"gender":"female","genderScore":0.92}
2022-11-11 12:27:44 STATE: test-node-gear.js passed: gear gear samples/in/ai-face.jpg
2022-11-11 12:27:44 DATA:  test-node-gear.js results {"face":0,"model":"gear","image":"samples/in/ai-face.jpg","age":23.3,"gender":"female","genderScore":0.51,"race":[{"score":0.93,"race":"white"}]}
2022-11-11 12:27:44 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg
2022-11-11 12:27:44 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"female","genderScore":0.99}
2022-11-11 12:27:44 INFO: 
2022-11-11 12:27:44 INFO:  test-backend-node.js start
2022-11-11 12:27:44 INFO:  test-backend-node.js test: configuration validation
2022-11-11 12:27:44 STATE: test-backend-node.js passed: configuration default validation []
2022-11-11 12:27:44 STATE: test-backend-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
2022-11-11 12:27:44 INFO:  test-backend-node.js test: model load
2022-11-11 12:27:44 STATE: test-backend-node.js passed: models loaded 25 11 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"meet","loaded":false,"url":null},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"selfie","loaded":false,"url":null},{"name":"rvm","loaded":false,"url":null},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}]
2022-11-11 12:27:44 INFO:  test-backend-node.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}}
2022-11-11 12:27:44 INFO:  test-backend-node.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}}
2022-11-11 12:27:44 INFO:  test-backend-node.js test: warmup
2022-11-11 12:27:44 STATE: test-backend-node.js passed: create human
2022-11-11 12:27:44 INFO:  test-backend-node.js human version: 3.0.0
2022-11-11 12:27:44 INFO:  test-backend-node.js platform: linux x64 agent: NodeJS v18.10.0
2022-11-11 12:27:44 INFO:  test-backend-node.js tfjs version: 4.0.0
2022-11-11 12:27:44 INFO:  test-backend-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.10.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169}
2022-11-11 12:27:44 STATE: test-backend-node.js passed: set backend: tensorflow
2022-11-11 12:27:44 STATE: test-backend-node.js tensors 1785
2022-11-11 12:27:44 STATE: test-backend-node.js passed: load models
2022-11-11 12:27:44 STATE: test-backend-node.js result: defined models: 25 loaded models: 11
2022-11-11 12:27:44 STATE: test-backend-node.js passed: warmup: none default
2022-11-11 12:27:44 DATA:  test-backend-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {}
2022-11-11 12:27:44 DATA:  test-backend-node.js result: performance: load: null total: null
2022-11-11 12:27:44 STATE: test-backend-node.js passed: warmup none result match
2022-11-11 12:27:44 STATE: test-backend-node.js event: image
2022-11-11 12:27:44 STATE: test-backend-node.js event: detect
2022-11-11 12:27:44 STATE: test-backend-node.js event: warmup
2022-11-11 12:27:44 STATE: test-backend-node.js passed: warmup: face default
2022-11-11 12:27:44 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
2022-11-11 12:27:44 DATA:  test-backend-node.js result: performance: load: null total: 449
2022-11-11 12:27:44 STATE: test-backend-node.js passed: warmup face result match
2022-11-11 12:27:44 STATE: test-backend-node.js event: image
2022-11-11 12:27:45 STATE: test-backend-node.js event: detect
2022-11-11 12:27:45 STATE: test-backend-node.js event: warmup
2022-11-11 12:27:45 STATE: test-backend-node.js passed: warmup: body default
2022-11-11 12:27:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:27:45 DATA:  test-backend-node.js result: performance: load: null total: 353
2022-11-11 12:27:45 STATE: test-backend-node.js passed: warmup body result match
2022-11-11 12:27:45 STATE: test-backend-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]}
2022-11-11 12:27:45 INFO:  test-backend-node.js test: details verification
2022-11-11 12:27:45 STATE: test-backend-node.js start default
2022-11-11 12:27:45 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:45 STATE: test-backend-node.js event: image
2022-11-11 12:27:45 STATE: test-backend-node.js event: detect
2022-11-11 12:27:45 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg default
2022-11-11 12:27:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:27:45 DATA:  test-backend-node.js result: performance: load: null total: 331
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details face length 1
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details face score 1 0.93 1
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details face age/gender 23.7 female 0.97 85.47
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details face arrays 4 478 1024
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"}
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details face anti-spoofing 0.79
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details face liveness 0.83
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details body length 1
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details body 0.92 17 6
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details hand length 1
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details hand 0.51 0.73 point
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details hand arrays 21 5 7
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details gesture length 7
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details gesture first {"face":0,"gesture":"facing right"}
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details object length 1
2022-11-11 12:27:45 STATE: test-backend-node.js passed: details object 0.72 person
2022-11-11 12:27:46 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928}
2022-11-11 12:27:46 STATE: test-backend-node.js event: image
2022-11-11 12:27:46 STATE: test-backend-node.js event: detect
2022-11-11 12:27:46 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32
2022-11-11 12:27:46 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928}
2022-11-11 12:27:46 STATE: test-backend-node.js event: image
2022-11-11 12:27:46 STATE: test-backend-node.js event: detect
2022-11-11 12:27:46 STATE: test-backend-node.js passed: tensor shape: [1200,1200,4] dtype: float32
2022-11-11 12:27:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:47 STATE: test-backend-node.js event: image
2022-11-11 12:27:47 STATE: test-backend-node.js event: detect
2022-11-11 12:27:47 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32
2022-11-11 12:27:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:47 STATE: test-backend-node.js event: image
2022-11-11 12:27:47 STATE: test-backend-node.js event: detect
2022-11-11 12:27:47 STATE: test-backend-node.js passed: tensor shape: [1200,1200,3] dtype: float32
2022-11-11 12:27:48 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871}
2022-11-11 12:27:48 STATE: test-backend-node.js event: image
2022-11-11 12:27:48 STATE: test-backend-node.js event: detect
2022-11-11 12:27:48 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32
2022-11-11 12:27:48 INFO:  test-backend-node.js test default
2022-11-11 12:27:48 STATE: test-backend-node.js start async
2022-11-11 12:27:48 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:48 STATE: test-backend-node.js event: image
2022-11-11 12:27:48 STATE: test-backend-node.js event: detect
2022-11-11 12:27:48 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg async
2022-11-11 12:27:48 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:27:48 DATA:  test-backend-node.js result: performance: load: null total: 313
2022-11-11 12:27:48 STATE: test-backend-node.js passed: default result face match 1 female 0.97
2022-11-11 12:27:48 INFO:  test-backend-node.js test sync
2022-11-11 12:27:48 STATE: test-backend-node.js start sync
2022-11-11 12:27:49 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:49 STATE: test-backend-node.js event: image
2022-11-11 12:27:49 STATE: test-backend-node.js event: detect
2022-11-11 12:27:49 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sync
2022-11-11 12:27:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:27:49 DATA:  test-backend-node.js result: performance: load: null total: 310
2022-11-11 12:27:49 STATE: test-backend-node.js passed: default sync 1 female 0.97
2022-11-11 12:27:49 INFO:  test-backend-node.js test: image process
2022-11-11 12:27:49 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2022-11-11 12:27:49 STATE: test-backend-node.js passed: image input null [1,256,256,3]
2022-11-11 12:27:49 INFO:  test-backend-node.js test: image null
2022-11-11 12:27:49 STATE: test-backend-node.js passed: invalid input could not convert input to tensor
2022-11-11 12:27:49 INFO:  test-backend-node.js test face similarity
2022-11-11 12:27:49 STATE: test-backend-node.js start face similarity
2022-11-11 12:27:49 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2022-11-11 12:27:49 STATE: test-backend-node.js event: image
2022-11-11 12:27:49 STATE: test-backend-node.js event: detect
2022-11-11 12:27:49 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face similarity
2022-11-11 12:27:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3}
2022-11-11 12:27:49 DATA:  test-backend-node.js result: performance: load: null total: 310
2022-11-11 12:27:49 STATE: test-backend-node.js start face similarity
2022-11-11 12:27:49 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:49 STATE: test-backend-node.js event: image
2022-11-11 12:27:50 STATE: test-backend-node.js event: detect
2022-11-11 12:27:50 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg face similarity
2022-11-11 12:27:50 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:27:50 DATA:  test-backend-node.js result: performance: load: null total: 319
2022-11-11 12:27:50 STATE: test-backend-node.js start face similarity
2022-11-11 12:27:50 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024}
2022-11-11 12:27:50 STATE: test-backend-node.js event: image
2022-11-11 12:27:50 STATE: test-backend-node.js event: detect
2022-11-11 12:27:50 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg face similarity
2022-11-11 12:27:50 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7}
2022-11-11 12:27:50 DATA:  test-backend-node.js result: performance: load: null total: 282
2022-11-11 12:27:50 STATE: test-backend-node.js passed: face descriptor
2022-11-11 12:27:50 STATE: test-backend-node.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]}
2022-11-11 12:27:50 INFO:  test-backend-node.js test object
2022-11-11 12:27:50 STATE: test-backend-node.js start object
2022-11-11 12:27:50 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:50 STATE: test-backend-node.js event: image
2022-11-11 12:27:51 STATE: test-backend-node.js event: detect
2022-11-11 12:27:51 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object
2022-11-11 12:27:51 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:27:51 DATA:  test-backend-node.js result: performance: load: null total: 317
2022-11-11 12:27:51 STATE: test-backend-node.js passed: centernet
2022-11-11 12:27:51 STATE: test-backend-node.js start object
2022-11-11 12:27:52 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:52 STATE: test-backend-node.js event: image
2022-11-11 12:27:52 STATE: test-backend-node.js event: detect
2022-11-11 12:27:52 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object
2022-11-11 12:27:52 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:27:52 DATA:  test-backend-node.js result: performance: load: null total: 313
2022-11-11 12:27:52 STATE: test-backend-node.js passed: nanodet
2022-11-11 12:27:52 INFO:  test-backend-node.js test sensitive
2022-11-11 12:27:52 STATE: test-backend-node.js start sensitive
2022-11-11 12:27:52 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:52 STATE: test-backend-node.js event: image
2022-11-11 12:27:53 STATE: test-backend-node.js event: detect
2022-11-11 12:27:53 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sensitive
2022-11-11 12:27:53 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17}
2022-11-11 12:27:53 DATA:  test-backend-node.js result: performance: load: null total: 283
2022-11-11 12:27:53 STATE: test-backend-node.js passed: sensitive result match
2022-11-11 12:27:53 STATE: test-backend-node.js passed: sensitive face result match
2022-11-11 12:27:53 STATE: test-backend-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}]
2022-11-11 12:27:53 STATE: test-backend-node.js passed: sensitive body result match
2022-11-11 12:27:53 STATE: test-backend-node.js passed: sensitive hand result match
2022-11-11 12:27:53 INFO:  test-backend-node.js test body
2022-11-11 12:27:53 STATE: test-backend-node.js start blazepose
2022-11-11 12:27:55 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:55 STATE: test-backend-node.js event: image
2022-11-11 12:27:55 STATE: test-backend-node.js event: detect
2022-11-11 12:27:55 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg blazepose
2022-11-11 12:27:55 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39}
2022-11-11 12:27:55 DATA:  test-backend-node.js result: performance: load: null total: 361
2022-11-11 12:27:55 STATE: test-backend-node.js passed: blazepose
2022-11-11 12:27:55 STATE: test-backend-node.js start efficientpose
2022-11-11 12:27:56 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:56 STATE: test-backend-node.js event: image
2022-11-11 12:27:56 STATE: test-backend-node.js event: detect
2022-11-11 12:27:56 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg efficientpose
2022-11-11 12:27:56 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13}
2022-11-11 12:27:56 DATA:  test-backend-node.js result: performance: load: null total: 343
2022-11-11 12:27:56 STATE: test-backend-node.js passed: efficientpose
2022-11-11 12:27:56 STATE: test-backend-node.js start posenet
2022-11-11 12:27:57 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:57 STATE: test-backend-node.js event: image
2022-11-11 12:27:57 STATE: test-backend-node.js event: detect
2022-11-11 12:27:57 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg posenet
2022-11-11 12:27:57 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16}
2022-11-11 12:27:57 DATA:  test-backend-node.js result: performance: load: null total: 269
2022-11-11 12:27:57 STATE: test-backend-node.js passed: posenet
2022-11-11 12:27:57 STATE: test-backend-node.js start movenet
2022-11-11 12:27:57 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
2022-11-11 12:27:57 STATE: test-backend-node.js event: image
2022-11-11 12:27:57 STATE: test-backend-node.js event: detect
2022-11-11 12:27:57 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg movenet
2022-11-11 12:27:57 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17}
2022-11-11 12:27:57 DATA:  test-backend-node.js result: performance: load: null total: 282
2022-11-11 12:27:57 STATE: test-backend-node.js passed: movenet
2022-11-11 12:27:57 INFO:  test-backend-node.js test face matching
2022-11-11 12:27:57 STATE: test-backend-node.js passed: face database 40
2022-11-11 12:27:57 STATE: test-backend-node.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}}
2022-11-11 12:27:57 INFO:  test-backend-node.js test face similarity alternative
2022-11-11 12:27:57 STATE: test-backend-node.js start face embeddings
2022-11-11 12:27:58 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2022-11-11 12:27:58 STATE: test-backend-node.js event: image
2022-11-11 12:27:58 ERROR: test-backend-node.js failed: testDetect face embeddings
2022-11-11 12:27:58 ERROR: test-backend-node.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce (<anonymous>)"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node.js:11179:25"," at new Promise (<anonymous>)"," at predict14 (/home/vlado/dev/human/dist/human.node.js:11173:10)"," at detectFace (/home/vlado/dev/human/dist/human.node.js:13461:112)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node.js:15084:46"]}
2022-11-11 12:27:58 INFO: 
2022-11-11 12:27:58 INFO:  test-backend-node-gpu.js start
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js test: configuration validation
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js passed: configuration default validation []
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js test: model load
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js passed: models loaded 25 11 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"meet","loaded":false,"url":null},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"selfie","loaded":false,"url":null},{"name":"rvm","loaded":false,"url":null},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}]
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}}
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}}
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js test: warmup
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js passed: create human
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js human version: 3.0.0
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js platform: linux x64 agent: NodeJS v18.10.0
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js tfjs version: 4.0.0
2022-11-11 12:27:59 INFO:  test-backend-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.10.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169}
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js passed: set backend: tensorflow
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js tensors 1785
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js passed: load models
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js result: defined models: 25 loaded models: 11
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js passed: warmup: none default
2022-11-11 12:27:59 DATA:  test-backend-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {}
2022-11-11 12:27:59 DATA:  test-backend-node-gpu.js result: performance: load: null total: null
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js passed: warmup none result match
2022-11-11 12:27:59 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:01 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:01 STATE: test-backend-node-gpu.js event: warmup
2022-11-11 12:28:01 STATE: test-backend-node-gpu.js passed: warmup: face default
2022-11-11 12:28:01 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
2022-11-11 12:28:01 DATA:  test-backend-node-gpu.js result: performance: load: null total: 2170
2022-11-11 12:28:01 STATE: test-backend-node-gpu.js passed: warmup face result match
2022-11-11 12:28:01 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js event: warmup
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: warmup: body default
2022-11-11 12:28:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 173
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: warmup body result match
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]}
2022-11-11 12:28:02 INFO:  test-backend-node-gpu.js test: details verification
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js start default
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg default
2022-11-11 12:28:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 178
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details face length 1
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details face score 1 0.93 1
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details face arrays 4 478 1024
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"}
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details face anti-spoofing 0.79
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details face liveness 0.83
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details body length 1
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details body 0.92 17 6
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details hand length 1
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details hand 0.51 0.73 point
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details hand arrays 21 5 7
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details gesture length 7
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"}
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details object length 1
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: details object 0.72 person
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928}
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:02 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928}
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:03 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871}
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32
2022-11-11 12:28:04 INFO:  test-backend-node-gpu.js test default
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js start async
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg async
2022-11-11 12:28:04 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:04 DATA:  test-backend-node-gpu.js result: performance: load: null total: 153
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: default result face match 1 female 0.97
2022-11-11 12:28:04 INFO:  test-backend-node-gpu.js test sync
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js start sync
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sync
2022-11-11 12:28:04 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:04 DATA:  test-backend-node-gpu.js result: performance: load: null total: 148
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: default sync 1 female 0.97
2022-11-11 12:28:04 INFO:  test-backend-node-gpu.js test: image process
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: image input null [1,256,256,3]
2022-11-11 12:28:04 INFO:  test-backend-node-gpu.js test: image null
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: invalid input could not convert input to tensor
2022-11-11 12:28:04 INFO:  test-backend-node-gpu.js test face similarity
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js start face similarity
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2022-11-11 12:28:04 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity
2022-11-11 12:28:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3}
2022-11-11 12:28:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 140
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js start face similarity
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity
2022-11-11 12:28:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 143
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js start face similarity
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056}
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity
2022-11-11 12:28:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7}
2022-11-11 12:28:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 135
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: face descriptor
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: face similarity {"similarity":[1,0.4475002983522097,0.5570879556505012],"descriptors":[1024,1024,1024]}
2022-11-11 12:28:05 INFO:  test-backend-node-gpu.js test object
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js start object
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object
2022-11-11 12:28:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 145
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js passed: centernet
2022-11-11 12:28:05 STATE: test-backend-node-gpu.js start object
2022-11-11 12:28:06 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:06 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object
2022-11-11 12:28:07 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:07 DATA:  test-backend-node-gpu.js result: performance: load: null total: 545
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: nanodet
2022-11-11 12:28:07 INFO:  test-backend-node-gpu.js test sensitive
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js start sensitive
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive
2022-11-11 12:28:07 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17}
2022-11-11 12:28:07 DATA:  test-backend-node-gpu.js result: performance: load: null total: 112
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: sensitive result match
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: sensitive face result match
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}]
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: sensitive body result match
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js passed: sensitive hand result match
2022-11-11 12:28:07 INFO:  test-backend-node-gpu.js test body
2022-11-11 12:28:07 STATE: test-backend-node-gpu.js start blazepose
2022-11-11 12:28:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:09 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:09 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:09 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose
2022-11-11 12:28:09 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39}
2022-11-11 12:28:09 DATA:  test-backend-node-gpu.js result: performance: load: null total: 258
2022-11-11 12:28:09 STATE: test-backend-node-gpu.js passed: blazepose
2022-11-11 12:28:09 STATE: test-backend-node-gpu.js start efficientpose
2022-11-11 12:28:10 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:10 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose
2022-11-11 12:28:11 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13}
2022-11-11 12:28:11 DATA:  test-backend-node-gpu.js result: performance: load: null total: 913
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js passed: efficientpose
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js start posenet
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet
2022-11-11 12:28:11 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16}
2022-11-11 12:28:11 DATA:  test-backend-node-gpu.js result: performance: load: null total: 215
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js passed: posenet
2022-11-11 12:28:11 STATE: test-backend-node-gpu.js start movenet
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928}
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js event: detect
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet
2022-11-11 12:28:12 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17}
2022-11-11 12:28:12 DATA:  test-backend-node-gpu.js result: performance: load: null total: 131
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js passed: movenet
2022-11-11 12:28:12 INFO:  test-backend-node-gpu.js test face matching
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js passed: face database 40
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7829338043932047}} {"second":{"index":4,"similarity":0.5002928781584631}} {"third":{"index":4,"similarity":0.5402934771672516}}
2022-11-11 12:28:12 INFO:  test-backend-node-gpu.js test face similarity alternative
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js start face embeddings
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
2022-11-11 12:28:12 STATE: test-backend-node-gpu.js event: image
2022-11-11 12:28:12 ERROR: test-backend-node-gpu.js failed: testDetect face embeddings
2022-11-11 12:28:12 ERROR: test-backend-node-gpu.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce (<anonymous>)"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node-gpu.js:11179:25"," at new Promise (<anonymous>)"," at predict14 (/home/vlado/dev/human/dist/human.node-gpu.js:11173:10)"," at detectFace (/home/vlado/dev/human/dist/human.node-gpu.js:13461:112)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node-gpu.js:15084:46"]}
2022-11-11 12:28:13 INFO: 
2022-11-11 12:28:13 INFO:  test-backend-node-wasm.js start
2022-11-11 12:28:13 DATA:  test-backend-node-wasm.js stdout: 2022-11-11 12:28:13 INFO:  { supported: true, backend: true, simd: undefined, multithread: undefined } https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.0.0/dist/
2022-11-11 12:28:13 STATE: test-backend-node-wasm.js passed: model server: https://vladmandic.github.io/human-models/models/
2022-11-11 12:28:13 INFO:  test-backend-node-wasm.js test: configuration validation
2022-11-11 12:28:13 STATE: test-backend-node-wasm.js passed: configuration default validation []
2022-11-11 12:28:13 STATE: test-backend-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
2022-11-11 12:28:13 INFO:  test-backend-node-wasm.js test: model load
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js passed: models loaded 25 11 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"https://vladmandic.github.io/human-models/models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"insightface","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"https://vladmandic.github.io/human-models/models/emotion.json"},{"name":"facedetect","loaded":true,"url":"https://vladmandic.github.io/human-models/models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"https://vladmandic.github.io/human-models/models/iris.json"},{"name":"facemesh","loaded":true,"url":"https://vladmandic.github.io/human-models/models/facemesh.json"},{"name":"faceres","loaded":true,"url":"https://vladmandic.github.io/human-models/models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"https://vladmandic.github.io/human-models/models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"https://vladmandic.github.io/human-models/models/handtrack.json"},{"name":"liveness","loaded":true,"url":"https://vladmandic.github.io/human-models/models/liveness.json"},{"name":"meet","loaded":false,"url":null},{"name":"movenet","loaded":true,"url":"https://vladmandic.github.io/human-models/models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"selfie","loaded":false,"url":null},{"name":"rvm","loaded":false,"url":null},{"name":"antispoof","loaded":true,"url":"https://vladmandic.github.io/human-models/models/antispoof.json"}]
2022-11-11 12:28:15 INFO:  test-backend-node-wasm.js memory: {"memory":{"unreliable":false,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}}
2022-11-11 12:28:15 INFO:  test-backend-node-wasm.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}}
2022-11-11 12:28:15 INFO:  test-backend-node-wasm.js test: warmup
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js passed: create human
2022-11-11 12:28:15 INFO:  test-backend-node-wasm.js human version: 3.0.0
2022-11-11 12:28:15 INFO:  test-backend-node-wasm.js platform: linux x64 agent: NodeJS v18.10.0
2022-11-11 12:28:15 INFO:  test-backend-node-wasm.js tfjs version: 4.0.0
2022-11-11 12:28:15 INFO:  test-backend-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v18.10.0","backends":["wasm"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":126}
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js passed: set backend: wasm
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js tensors 1785
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js passed: load models
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js result: defined models: 25 loaded models: 11
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js passed: warmup: none default
2022-11-11 12:28:15 DATA:  test-backend-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {}
2022-11-11 12:28:15 DATA:  test-backend-node-wasm.js result: performance: load: null total: null
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js passed: warmup none result match
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js event: warmup
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js passed: warmup: face default
2022-11-11 12:28:15 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3}
2022-11-11 12:28:15 DATA:  test-backend-node-wasm.js result: performance: load: null total: 534
2022-11-11 12:28:15 STATE: test-backend-node-wasm.js passed: warmup face result match
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js event: warmup
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js passed: warmup: body default
2022-11-11 12:28:16 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:16 DATA:  test-backend-node-wasm.js result: performance: load: null total: 377
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js passed: warmup body result match
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]}
2022-11-11 12:28:16 INFO:  test-backend-node-wasm.js test: details verification
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js start default
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:16 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg default
2022-11-11 12:28:17 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:17 DATA:  test-backend-node-wasm.js result: performance: load: null total: 343
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details face length 1
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details face score 1 0.93 1
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details face arrays 4 478 1024
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"}
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details face anti-spoofing 0.79
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details face liveness 0.83
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details body length 1
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details body 0.92 17 6
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details hand length 1
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details hand 0.51 0.73 point
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details hand arrays 21 5 7
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details gesture length 7
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"}
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details object length 1
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: details object 0.72 person
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264}
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264}
2022-11-11 12:28:17 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:18 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:18 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32
2022-11-11 12:28:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:18 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:18 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:18 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32
2022-11-11 12:28:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:18 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:19 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:19 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32
2022-11-11 12:28:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871}
2022-11-11 12:28:19 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:19 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:19 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32
2022-11-11 12:28:19 INFO:  test-backend-node-wasm.js test default
2022-11-11 12:28:19 STATE: test-backend-node-wasm.js start async
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg async
2022-11-11 12:28:20 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:20 DATA:  test-backend-node-wasm.js result: performance: load: null total: 340
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: default result face match 1 female 0.97
2022-11-11 12:28:20 INFO:  test-backend-node-wasm.js test sync
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js start sync
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sync
2022-11-11 12:28:20 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:20 DATA:  test-backend-node-wasm.js result: performance: load: null total: 333
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: default sync 1 female 0.97
2022-11-11 12:28:20 INFO:  test-backend-node-wasm.js test: image process
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: image input null [1,256,256,3]
2022-11-11 12:28:20 INFO:  test-backend-node-wasm.js test: image null
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: invalid input could not convert input to tensor
2022-11-11 12:28:20 INFO:  test-backend-node-wasm.js test face similarity
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js start face similarity
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
2022-11-11 12:28:20 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity
2022-11-11 12:28:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3}
2022-11-11 12:28:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 309
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js start face similarity
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity
2022-11-11 12:28:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 327
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js start face similarity
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
2022-11-11 12:28:21 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity
2022-11-11 12:28:22 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7}
2022-11-11 12:28:22 DATA:  test-backend-node-wasm.js result: performance: load: null total: 297
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js passed: face descriptor
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]}
2022-11-11 12:28:22 INFO:  test-backend-node-wasm.js test object
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js start object
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object
2022-11-11 12:28:22 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
2022-11-11 12:28:22 DATA:  test-backend-node-wasm.js result: performance: load: null total: 329
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js passed: centernet
2022-11-11 12:28:22 STATE: test-backend-node-wasm.js start object
2022-11-11 12:28:23 WARN:  test-backend-node-wasm.js missing kernel ops {"title":"object","model":"nanodet","url":"https://vladmandic.github.io/human-models/models/nanodet.json","missing":["sparsetodense"],"backkend":"wasm"}
2022-11-11 12:28:23 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:23 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object
2022-11-11 12:28:24 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17}
2022-11-11 12:28:24 DATA:  test-backend-node-wasm.js result: performance: load: null total: 216
2022-11-11 12:28:24 ERROR: test-backend-node-wasm.js failed: nanodet []
2022-11-11 12:28:24 INFO:  test-backend-node-wasm.js test sensitive
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js start sensitive
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive
2022-11-11 12:28:24 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17}
2022-11-11 12:28:24 DATA:  test-backend-node-wasm.js result: performance: load: null total: 239
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js passed: sensitive result match
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js passed: sensitive face result match
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}]
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js passed: sensitive body result match
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js passed: sensitive hand result match
2022-11-11 12:28:24 INFO:  test-backend-node-wasm.js test body
2022-11-11 12:28:24 STATE: test-backend-node-wasm.js start blazepose
2022-11-11 12:28:26 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:26 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:26 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:26 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose
2022-11-11 12:28:26 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39}
2022-11-11 12:28:26 DATA:  test-backend-node-wasm.js result: performance: load: null total: 396
2022-11-11 12:28:26 STATE: test-backend-node-wasm.js passed: blazepose
2022-11-11 12:28:26 STATE: test-backend-node-wasm.js start efficientpose
2022-11-11 12:28:27 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:27 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:27 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:27 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose
2022-11-11 12:28:27 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13}
2022-11-11 12:28:27 DATA:  test-backend-node-wasm.js result: performance: load: null total: 654
2022-11-11 12:28:27 STATE: test-backend-node-wasm.js passed: efficientpose
2022-11-11 12:28:27 STATE: test-backend-node-wasm.js start posenet
2022-11-11 12:28:28 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:28 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:28 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:28 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet
2022-11-11 12:28:28 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16}
2022-11-11 12:28:28 DATA:  test-backend-node-wasm.js result: performance: load: null total: 287
2022-11-11 12:28:28 STATE: test-backend-node-wasm.js passed: posenet
2022-11-11 12:28:28 STATE: test-backend-node-wasm.js start movenet
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js event: detect
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet
2022-11-11 12:28:29 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17}
2022-11-11 12:28:29 DATA:  test-backend-node-wasm.js result: performance: load: null total: 248
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js passed: movenet
2022-11-11 12:28:29 INFO:  test-backend-node-wasm.js test face matching
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js passed: face database 40
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}}
2022-11-11 12:28:29 INFO:  test-backend-node-wasm.js test face similarity alternative
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js start face embeddings
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
2022-11-11 12:28:29 STATE: test-backend-node-wasm.js event: image
2022-11-11 12:28:29 ERROR: test-backend-node-wasm.js failed: testDetect face embeddings
2022-11-11 12:28:29 ERROR: test-backend-node-wasm.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce (<anonymous>)"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node-wasm.js:11181:25"," at new Promise (<anonymous>)"," at predict14 (/home/vlado/dev/human/dist/human.node-wasm.js:11175:10)"," at detectFace (/home/vlado/dev/human/dist/human.node-wasm.js:13463:112)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node-wasm.js:15086:46"]}
2022-11-11 12:28:29 STATE: all tests complete
2022-11-11 12:28:29 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"../demo/nodejs/process-folder.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"../demo/facematch/node-match.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"test-node-load.js","passed":1,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"test-node-gear.js","passed":3,"failed":0}
2022-11-11 12:28:29 INFO:  status {"test":"test-backend-node.js","passed":85,"failed":1}
2022-11-11 12:28:29 INFO:  status {"test":"test-backend-node-gpu.js","passed":85,"failed":1}
2022-11-11 12:28:29 INFO:  status {"test":"test-backend-node-wasm.js","passed":85,"failed":2}
2022-11-11 12:28:29 INFO:  failures {"count":4}
2022-11-11 12:28:29 WARN:  failed {"test":"test-backend-node.js","message":["error",["failed:","testDetect face embeddings"]]}
2022-11-11 12:28:29 WARN:  failed {"test":"test-backend-node-gpu.js","message":["error",["failed:","testDetect face embeddings"]]}
2022-11-11 12:28:29 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed: nanodet",[]]]}
2022-11-11 12:28:29 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed:","testDetect face embeddings"]]}