diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a926e08..a4be4e0b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-# packageJson
+#
Version: **undefined**
Description: **undefined**
@@ -11,11 +11,10 @@
### **HEAD -> main** 2021/10/15 mandic00@live.com
+- compress samples
- remove handdetect from default package
- remove posenet from default package
-
-### **origin/main** 2021/10/14 mandic00@live.com
-
+- enhanced movenet postprocessing
- use transferrable buffer for worker messages
- add optional anti-spoofing module
- add node-match advanced example using worker thread pool
diff --git a/TODO.md b/TODO.md
index 78433d4b..94a81474 100644
--- a/TODO.md
+++ b/TODO.md
@@ -2,10 +2,14 @@
## Work in Progress
+- Switch to custom `tfjs` for main `human` ESM bundle
+
### Models
+- Body segmentation: `robust-video-matting`
+
### Backends
@@ -66,3 +70,12 @@ Object detection using CenterNet or NanoDet models is not working when using WAS
- Backend WASM missing kernel op `SparseToDense`
+
+
+
+## Pending Release
+
+- Enhanced **MoveNet** post-processing
+- Add optional **Anti-Spoof** module
+- Remove old **HandDetect** and **PoseNet** models from default installation
+- Refactor **ImageFX** module
diff --git a/demo/multithread/index.js b/demo/multithread/index.js
index 2ffd6c64..e63b77ba 100644
--- a/demo/multithread/index.js
+++ b/demo/multithread/index.js
@@ -155,8 +155,6 @@ async function runDetection() {
bench.begin();
}
const ctx = canvas.getContext('2d');
- // const image = await human.image(video);
- // ctx.drawImage(image.canvas, 0, 0, canvas.width, canvas.height);
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
if (!busy.face) {
@@ -197,7 +195,6 @@ async function setupCamera() {
facingMode: 'user',
resizeMode: 'crop-and-scale',
width: { ideal: document.body.clientWidth },
- // height: { ideal: document.body.clientHeight }, // not set as we're using aspectRation to get height instead
aspectRatio: document.body.clientWidth / document.body.clientHeight,
},
};
diff --git a/package.json b/package.json
index c20a9a2a..6f088960 100644
--- a/package.json
+++ b/package.json
@@ -66,14 +66,14 @@
"@tensorflow/tfjs-layers": "^3.9.0",
"@tensorflow/tfjs-node": "^3.9.0",
"@tensorflow/tfjs-node-gpu": "^3.9.0",
- "@types/node": "^16.10.9",
- "@typescript-eslint/eslint-plugin": "^5.0.0",
- "@typescript-eslint/parser": "^5.0.0",
- "@vladmandic/build": "^0.6.0",
+ "@types/node": "^16.11.1",
+ "@typescript-eslint/eslint-plugin": "^5.1.0",
+ "@typescript-eslint/parser": "^5.1.0",
+ "@vladmandic/build": "^0.6.1",
"@vladmandic/pilogger": "^0.3.3",
"canvas": "^2.8.0",
"dayjs": "^1.10.7",
- "esbuild": "^0.13.6",
+ "esbuild": "^0.13.8",
"eslint": "8.0.1",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.25.2",
@@ -84,7 +84,7 @@
"rimraf": "^3.0.2",
"seedrandom": "^3.0.5",
"tslib": "^2.3.1",
- "typedoc": "0.22.5",
+ "typedoc": "0.22.6",
"typescript": "4.4.4"
}
}
diff --git a/test/build.log b/test/build.log
index feec33fa..fa2c2e79 100644
--- a/test/build.log
+++ b/test/build.log
@@ -1,24 +1,24 @@
-2021-10-15 09:30:57 [36mINFO: [39m @vladmandic/human version 2.3.3
-2021-10-15 09:30:57 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
-2021-10-15 09:30:57 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.3.3"}
-2021-10-15 09:30:57 [36mINFO: [39m Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
-2021-10-15 09:30:57 [36mINFO: [39m Toolchain: {"build":"0.6.0","esbuild":"0.13.6","typescript":"4.4.4","typedoc":"0.22.5","eslint":"8.0.1"}
-2021-10-15 09:30:57 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
-2021-10-15 09:30:57 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
-2021-10-15 09:30:57 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1275}
-2021-10-15 09:30:57 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":55,"inputBytes":523789,"outputBytes":434713}
-2021-10-15 09:30:57 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283}
-2021-10-15 09:30:57 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":55,"inputBytes":523797,"outputBytes":434717}
-2021-10-15 09:30:57 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350}
-2021-10-15 09:30:57 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":55,"inputBytes":523864,"outputBytes":434789}
-2021-10-15 09:30:57 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
-2021-10-15 09:30:57 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3085,"outputBytes":856}
-2021-10-15 09:30:58 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":55,"inputBytes":523370,"outputBytes":436272}
-2021-10-15 09:30:58 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3085,"outputBytes":2691961}
-2021-10-15 09:30:58 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":3214475,"outputBytes":1611302}
-2021-10-15 09:30:59 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":3214475,"outputBytes":2928137}
-2021-10-15 09:31:16 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":6}
-2021-10-15 09:31:22 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":36,"generated":true}
-2021-10-15 09:31:54 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":91,"errors":0,"warnings":0}
-2021-10-15 09:31:54 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
-2021-10-15 09:31:54 [36mINFO: [39m Done...
+2021-10-19 07:51:32 [36mINFO: [39m @vladmandic/human version 2.3.3
+2021-10-19 07:51:32 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
+2021-10-19 07:51:32 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.3.3"}
+2021-10-19 07:51:32 [36mINFO: [39m Environment: {"profile":"production","config":"build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
+2021-10-19 07:51:32 [36mINFO: [39m Toolchain: {"build":"0.6.1","esbuild":"0.13.8","typescript":"4.4.4","typedoc":"0.22.6","eslint":"8.0.1"}
+2021-10-19 07:51:32 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
+2021-10-19 07:51:32 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1275}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":55,"inputBytes":523789,"outputBytes":434713}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":55,"inputBytes":523797,"outputBytes":434717}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":55,"inputBytes":523864,"outputBytes":434789}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3085,"outputBytes":856}
+2021-10-19 07:51:32 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":55,"inputBytes":523370,"outputBytes":436272}
+2021-10-19 07:51:33 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3085,"outputBytes":2691961}
+2021-10-19 07:51:34 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":55,"inputBytes":3214475,"outputBytes":1611302}
+2021-10-19 07:51:34 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":55,"inputBytes":3214475,"outputBytes":2928137}
+2021-10-19 07:51:53 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":6}
+2021-10-19 07:51:59 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":36,"generated":true}
+2021-10-19 07:52:30 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":91,"errors":0,"warnings":0}
+2021-10-19 07:52:31 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
+2021-10-19 07:52:31 [36mINFO: [39m Done...
diff --git a/test/test-main.js b/test/test-main.js
index 51db904f..7cacb83e 100644
--- a/test/test-main.js
+++ b/test/test-main.js
@@ -303,28 +303,6 @@ async function test(Human, inputConfig) {
if (!res || res?.hand?.length !== 1 || res?.hand[0]?.landmarks?.length > 0) log('error', 'failed: detectors result hand mismatch', res?.hand?.length);
else log('state', 'passed: detector result hand match');
- // test posenet and movenet
- log('info', 'test body variants');
- config.body = { modelPath: 'posenet.json' };
- res = await testDetect(human, 'samples/in/ai-body.jpg', 'posenet');
- if (!res || res?.body?.length !== 1) log('error', 'failed: body posenet');
- else log('state', 'passed: body posenet');
- config.body = { modelPath: 'movenet-lightning.json' };
- res = await testDetect(human, 'samples/in/ai-body.jpg', 'movenet');
- if (!res || res?.body?.length !== 1) log('error', 'failed: body movenet');
- else log('state', 'passed: body movenet');
-
- // test handdetect and handtrack
- log('info', 'test hand variants');
- config.hand = { enabled: true, maxDetected: 2, minConfidence: 0.1, detector: { modelPath: 'handdetect.json' } };
- res = await testDetect(human, 'samples/in/ai-body.jpg', 'handdetect');
- if (!res || res?.hand?.length !== 2) log('error', 'failed: hand handdetect');
- else log('state', 'passed: hand handdetect');
- config.hand = { enabled: true, maxDetected: 2, minConfidence: 0.1, detector: { modelPath: 'handtrack.json' } };
- res = await testDetect(human, 'samples/in/ai-body.jpg', 'handtrack');
- if (!res || res?.hand?.length !== 2) log('error', 'failed: hand handdetect');
- else log('state', 'passed: hand handdetect');
-
// test multiple instances
const first = new Human(config);
const second = new Human(config);
diff --git a/test/test.log b/test/test.log
index 5f7816b9..9a675b26 100644
--- a/test/test.log
+++ b/test/test.log
@@ -1,424 +1,509 @@
-2021-10-15 09:32:46 [36mINFO: [39m @vladmandic/human version 2.3.3
-2021-10-15 09:32:46 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
-2021-10-15 09:32:46 [36mINFO: [39m tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"]
-2021-10-15 09:32:46 [36mINFO: [39m demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"]
-2021-10-15 09:32:46 [36mINFO: [39m
-2021-10-15 09:32:46 [36mINFO: [39m test-node.js start
-2021-10-15 09:32:47 [35mSTATE:[39m test-node.js passed: configuration default validation []
-2021-10-15 09:32:47 [35mSTATE:[39m test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}]
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js passed: create human
-2021-10-15 09:32:48 [36mINFO: [39m test-node.js human version: 2.3.3
-2021-10-15 09:32:48 [36mINFO: [39m test-node.js platform: linux x64 agent: NodeJS v16.10.0
-2021-10-15 09:32:48 [36mINFO: [39m test-node.js tfjs version: 3.9.0
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js passed: set backend: tensorflow
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js tensors 1920
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js passed: load models
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js result: defined models: 21 loaded models: 10
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js passed: warmup: none default
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js passed: warmup none result match
-2021-10-15 09:32:48 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:32:49 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:32:49 [35mSTATE:[39m test-node.js event: warmup
-2021-10-15 09:32:49 [35mSTATE:[39m test-node.js passed: warmup: face default
-2021-10-15 09:32:49 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
-2021-10-15 09:32:49 [32mDATA: [39m test-node.js result: performance: load: 416 total: 1489
-2021-10-15 09:32:49 [35mSTATE:[39m test-node.js passed: warmup face result match
-2021-10-15 09:32:49 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:32:50 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:32:50 [35mSTATE:[39m test-node.js event: warmup
-2021-10-15 09:32:50 [35mSTATE:[39m test-node.js passed: warmup: body default
-2021-10-15 09:32:50 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:32:50 [32mDATA: [39m test-node.js result: performance: load: 416 total: 1112
-2021-10-15 09:32:50 [35mSTATE:[39m test-node.js passed: warmup body result match
-2021-10-15 09:32:50 [36mINFO: [39m test-node.js test default
-2021-10-15 09:32:51 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:32:51 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:32:52 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:32:52 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:32:52 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:32:52 [32mDATA: [39m test-node.js result: performance: load: 416 total: 1081
-2021-10-15 09:32:52 [35mSTATE:[39m test-node.js passed: default result face match
-2021-10-15 09:32:52 [36mINFO: [39m test-node.js test sync
-2021-10-15 09:32:53 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:32:53 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:32:54 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:32:54 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:32:54 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:32:54 [32mDATA: [39m test-node.js result: performance: load: 416 total: 1021
-2021-10-15 09:32:54 [35mSTATE:[39m test-node.js passed: default sync
-2021-10-15 09:32:54 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
-2021-10-15 09:32:54 [35mSTATE:[39m test-node.js passed: image input null [1,256,256,3]
-2021-10-15 09:32:54 [35mSTATE:[39m test-node.js passed: invalid input {"error":"could not convert input to tensor"}
-2021-10-15 09:32:54 [36mINFO: [39m test-node.js test face similarity
-2021-10-15 09:32:54 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
-2021-10-15 09:32:54 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:32:55 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:32:55 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-face.jpg default
-2021-10-15 09:32:55 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3}
-2021-10-15 09:32:55 [32mDATA: [39m test-node.js result: performance: load: 416 total: 956
-2021-10-15 09:32:56 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:32:56 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:32:57 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:32:57 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:32:57 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:32:57 [32mDATA: [39m test-node.js result: performance: load: 416 total: 1035
-2021-10-15 09:32:57 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
-2021-10-15 09:32:57 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:32:58 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:32:58 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-upper.jpg default
-2021-10-15 09:32:58 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7}
-2021-10-15 09:32:58 [32mDATA: [39m test-node.js result: performance: load: 416 total: 883
-2021-10-15 09:32:58 [35mSTATE:[39m test-node.js passed: face descriptor
-2021-10-15 09:32:58 [35mSTATE:[39m test-node.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]}
-2021-10-15 09:32:58 [36mINFO: [39m test-node.js test face matching
-2021-10-15 09:32:58 [35mSTATE:[39m test-node.js passed: face database 57
-2021-10-15 09:32:58 [35mSTATE:[39m test-node.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}}
-2021-10-15 09:32:58 [36mINFO: [39m test-node.js test object
-2021-10-15 09:32:59 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:32:59 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:33:00 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:33:00 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:00 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:00 [32mDATA: [39m test-node.js result: performance: load: 416 total: 1026
-2021-10-15 09:33:00 [35mSTATE:[39m test-node.js passed: object result match
-2021-10-15 09:33:00 [36mINFO: [39m test-node.js test sensitive
-2021-10-15 09:33:01 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:33:01 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:33:02 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:33:02 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:02 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:02 [32mDATA: [39m test-node.js result: performance: load: 416 total: 1058
-2021-10-15 09:33:02 [35mSTATE:[39m test-node.js passed: sensitive result match
-2021-10-15 09:33:02 [35mSTATE:[39m test-node.js passed: sensitive face result match
-2021-10-15 09:33:02 [35mSTATE:[39m test-node.js passed: sensitive face emotion result mismatch 4
-2021-10-15 09:33:02 [35mSTATE:[39m test-node.js passed: sensitive body result match
-2021-10-15 09:33:02 [35mSTATE:[39m test-node.js passed: sensitive hand result match
-2021-10-15 09:33:02 [36mINFO: [39m test-node.js test detectors
-2021-10-15 09:33:03 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:33:03 [35mSTATE:[39m test-node.js event: image
-2021-10-15 09:33:04 [35mSTATE:[39m test-node.js event: detect
-2021-10-15 09:33:04 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:04 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:04 [32mDATA: [39m test-node.js result: performance: load: 416 total: 648
-2021-10-15 09:33:04 [35mSTATE:[39m test-node.js passed: detector result face match
-2021-10-15 09:33:04 [35mSTATE:[39m test-node.js passed: detector result hand match
-2021-10-15 09:33:04 [36mINFO: [39m test-node.js test body variants
-2021-10-15 09:33:04 [33mWARN: [39m test-node.js stderr: /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-node@3.9.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-node/dist/io/file_system.js:67
-2021-10-15 09:33:04 [33mWARN: [39m test-node.js stderr: throw new Error(name + " " + e.path + " does not exist: loading failed");
-2021-10-15 09:33:04 [33mWARN: [39m test-node.js stderr: ^
-2021-10-15 09:33:04 [33mWARN: [39m test-node.js stderr: Error: Path /home/vlado/dev/human/models/posenet.json does not exist: loading failed
-2021-10-15 09:33:04 [33mWARN: [39m test-node.js stderr: at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-node@3.9.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-node/dist/io/file_system.js:67:23
-2021-10-15 09:33:04 [33mWARN: [39m test-node.js stderr: Thrown at:
-2021-10-15 09:33:04 [33mWARN: [39m test-node.js stderr: at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-node@3.9.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-node/dist/io/file_system.js:67:23
-2021-10-15 09:33:04 [36mINFO: [39m
-2021-10-15 09:33:04 [36mINFO: [39m test-node-gpu.js start
-2021-10-15 09:33:05 [35mSTATE:[39m test-node-gpu.js passed: configuration default validation []
-2021-10-15 09:33:05 [35mSTATE:[39m test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}]
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js passed: create human
-2021-10-15 09:33:06 [36mINFO: [39m test-node-gpu.js human version: 2.3.3
-2021-10-15 09:33:06 [36mINFO: [39m test-node-gpu.js platform: linux x64 agent: NodeJS v16.10.0
-2021-10-15 09:33:06 [36mINFO: [39m test-node-gpu.js tfjs version: 3.9.0
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js passed: set backend: tensorflow
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js tensors 1920
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js passed: load models
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js result: defined models: 21 loaded models: 10
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js passed: warmup: none default
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js passed: warmup none result match
-2021-10-15 09:33:06 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:07 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:07 [35mSTATE:[39m test-node-gpu.js event: warmup
-2021-10-15 09:33:07 [35mSTATE:[39m test-node-gpu.js passed: warmup: face default
-2021-10-15 09:33:07 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
-2021-10-15 09:33:07 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 1482
-2021-10-15 09:33:07 [35mSTATE:[39m test-node-gpu.js passed: warmup face result match
-2021-10-15 09:33:07 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:08 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:08 [35mSTATE:[39m test-node-gpu.js event: warmup
-2021-10-15 09:33:08 [35mSTATE:[39m test-node-gpu.js passed: warmup: body default
-2021-10-15 09:33:08 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:08 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 1049
-2021-10-15 09:33:08 [35mSTATE:[39m test-node-gpu.js passed: warmup body result match
-2021-10-15 09:33:08 [36mINFO: [39m test-node-gpu.js test default
-2021-10-15 09:33:09 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:33:09 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:10 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:10 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:10 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:10 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 1036
-2021-10-15 09:33:10 [35mSTATE:[39m test-node-gpu.js passed: default result face match
-2021-10-15 09:33:10 [36mINFO: [39m test-node-gpu.js test sync
-2021-10-15 09:33:11 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:33:11 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:12 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:12 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:12 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:12 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 1014
-2021-10-15 09:33:12 [35mSTATE:[39m test-node-gpu.js passed: default sync
-2021-10-15 09:33:12 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
-2021-10-15 09:33:12 [35mSTATE:[39m test-node-gpu.js passed: image input null [1,256,256,3]
-2021-10-15 09:33:12 [35mSTATE:[39m test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"}
-2021-10-15 09:33:12 [36mINFO: [39m test-node-gpu.js test face similarity
-2021-10-15 09:33:12 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
-2021-10-15 09:33:12 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:13 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:13 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-face.jpg default
-2021-10-15 09:33:13 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3}
-2021-10-15 09:33:13 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 979
-2021-10-15 09:33:14 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:33:14 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:15 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:15 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:15 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:15 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 1084
-2021-10-15 09:33:15 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
-2021-10-15 09:33:15 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:16 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:16 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default
-2021-10-15 09:33:16 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7}
-2021-10-15 09:33:16 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 940
-2021-10-15 09:33:16 [35mSTATE:[39m test-node-gpu.js passed: face descriptor
-2021-10-15 09:33:16 [35mSTATE:[39m test-node-gpu.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]}
-2021-10-15 09:33:16 [36mINFO: [39m test-node-gpu.js test face matching
-2021-10-15 09:33:16 [35mSTATE:[39m test-node-gpu.js passed: face database 57
-2021-10-15 09:33:16 [35mSTATE:[39m test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}}
-2021-10-15 09:33:16 [36mINFO: [39m test-node-gpu.js test object
-2021-10-15 09:33:17 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:33:17 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:18 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:18 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:18 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:18 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 948
-2021-10-15 09:33:18 [35mSTATE:[39m test-node-gpu.js passed: object result match
-2021-10-15 09:33:18 [36mINFO: [39m test-node-gpu.js test sensitive
-2021-10-15 09:33:19 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:33:19 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:20 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:20 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:20 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:20 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 1065
-2021-10-15 09:33:20 [35mSTATE:[39m test-node-gpu.js passed: sensitive result match
-2021-10-15 09:33:20 [35mSTATE:[39m test-node-gpu.js passed: sensitive face result match
-2021-10-15 09:33:20 [35mSTATE:[39m test-node-gpu.js passed: sensitive face emotion result mismatch 4
-2021-10-15 09:33:20 [35mSTATE:[39m test-node-gpu.js passed: sensitive body result match
-2021-10-15 09:33:20 [35mSTATE:[39m test-node-gpu.js passed: sensitive hand result match
-2021-10-15 09:33:20 [36mINFO: [39m test-node-gpu.js test detectors
-2021-10-15 09:33:21 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
-2021-10-15 09:33:21 [35mSTATE:[39m test-node-gpu.js event: image
-2021-10-15 09:33:22 [35mSTATE:[39m test-node-gpu.js event: detect
-2021-10-15 09:33:22 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:22 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:22 [32mDATA: [39m test-node-gpu.js result: performance: load: 374 total: 664
-2021-10-15 09:33:22 [35mSTATE:[39m test-node-gpu.js passed: detector result face match
-2021-10-15 09:33:22 [35mSTATE:[39m test-node-gpu.js passed: detector result hand match
-2021-10-15 09:33:22 [36mINFO: [39m test-node-gpu.js test body variants
-2021-10-15 09:33:22 [33mWARN: [39m test-node-gpu.js stderr: /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-node-gpu@3.9.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-node-gpu/dist/io/file_system.js:67
-2021-10-15 09:33:22 [33mWARN: [39m test-node-gpu.js stderr: throw new Error(name + " " + e.path + " does not exist: loading failed");
-2021-10-15 09:33:22 [33mWARN: [39m test-node-gpu.js stderr: ^
-2021-10-15 09:33:22 [33mWARN: [39m test-node-gpu.js stderr: Error: Path /home/vlado/dev/human/models/posenet.json does not exist: loading failed
-2021-10-15 09:33:22 [33mWARN: [39m test-node-gpu.js stderr: at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-node-gpu@3.9.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-node-gpu/dist/io/file_system.js:67:23
-2021-10-15 09:33:22 [33mWARN: [39m test-node-gpu.js stderr: Thrown at:
-2021-10-15 09:33:22 [33mWARN: [39m test-node-gpu.js stderr: at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-node-gpu@3.9.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-node-gpu/dist/io/file_system.js:67:23
-2021-10-15 09:33:22 [36mINFO: [39m
-2021-10-15 09:33:22 [36mINFO: [39m test-node-wasm.js start
-2021-10-15 09:33:22 [35mSTATE:[39m test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/
-2021-10-15 09:33:22 [35mSTATE:[39m test-node-wasm.js passed: configuration default validation []
-2021-10-15 09:33:22 [35mSTATE:[39m test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}]
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js passed: create human
-2021-10-15 09:33:24 [36mINFO: [39m test-node-wasm.js human version: 2.3.3
-2021-10-15 09:33:24 [36mINFO: [39m test-node-wasm.js platform: linux x64 agent: NodeJS v16.10.0
-2021-10-15 09:33:24 [36mINFO: [39m test-node-wasm.js tfjs version: 3.9.0
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js passed: set backend: wasm
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js tensors 1920
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js passed: load models
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js result: defined models: 21 loaded models: 10
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js passed: warmup: none default
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js passed: warmup none result match
-2021-10-15 09:33:24 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:25 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:25 [35mSTATE:[39m test-node-wasm.js event: warmup
-2021-10-15 09:33:25 [35mSTATE:[39m test-node-wasm.js passed: warmup: face default
-2021-10-15 09:33:25 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":3}
-2021-10-15 09:33:25 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 1281
-2021-10-15 09:33:25 [31mERROR:[39m test-node-wasm.js failed: warmup face result mismatch 1 1 1 5
-2021-10-15 09:33:25 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:26 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:26 [35mSTATE:[39m test-node-wasm.js event: warmup
-2021-10-15 09:33:26 [35mSTATE:[39m test-node-wasm.js passed: warmup: body default
-2021-10-15 09:33:26 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:26 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 857
-2021-10-15 09:33:26 [35mSTATE:[39m test-node-wasm.js passed: warmup body result match
-2021-10-15 09:33:26 [36mINFO: [39m test-node-wasm.js test default
-2021-10-15 09:33:28 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:28 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:29 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:29 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:29 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:29 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 877
-2021-10-15 09:33:29 [35mSTATE:[39m test-node-wasm.js passed: default result face match
-2021-10-15 09:33:29 [36mINFO: [39m test-node-wasm.js test sync
-2021-10-15 09:33:31 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:31 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:32 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:32 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 871
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js passed: default sync
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js passed: image input null [1,256,256,3]
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"}
-2021-10-15 09:33:32 [36mINFO: [39m test-node-wasm.js test face similarity
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:32 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-face.jpg default
-2021-10-15 09:33:32 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.4,"gender":"female"} {} {"score":0.47,"keypoints":3}
-2021-10-15 09:33:32 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 743
-2021-10-15 09:33:34 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:34 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:35 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:35 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:35 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:35 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 826
-2021-10-15 09:33:36 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
-2021-10-15 09:33:36 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:36 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:36 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
-2021-10-15 09:33:36 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 5 object: 0 person: 1 {"score":1,"age":29.5,"gender":"female"} {} {"score":0.75,"keypoints":7}
-2021-10-15 09:33:36 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 675
-2021-10-15 09:33:36 [35mSTATE:[39m test-node-wasm.js passed: face descriptor
-2021-10-15 09:33:36 [35mSTATE:[39m test-node-wasm.js passed: face similarity {"similarity":[1,0.9040641336882139,0.895983704095898],"descriptors":[1024,1024,1024]}
-2021-10-15 09:33:36 [36mINFO: [39m test-node-wasm.js test face matching
-2021-10-15 09:33:36 [35mSTATE:[39m test-node-wasm.js passed: face database 57
-2021-10-15 09:33:36 [35mSTATE:[39m test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.9902354470817274}} {"second":{"index":4,"similarity":0.9045213429149392}} {"third":{"index":4,"similarity":0.8965257196777969}}
-2021-10-15 09:33:36 [36mINFO: [39m test-node-wasm.js test object
-2021-10-15 09:33:38 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:38 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:39 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:39 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:39 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:39 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 854
-2021-10-15 09:33:39 [31mERROR:[39m test-node-wasm.js failed: object result mismatch 0
-2021-10-15 09:33:39 [36mINFO: [39m test-node-wasm.js test sensitive
-2021-10-15 09:33:41 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:41 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:42 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:42 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:42 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:42 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 998
-2021-10-15 09:33:42 [35mSTATE:[39m test-node-wasm.js passed: sensitive result match
-2021-10-15 09:33:42 [35mSTATE:[39m test-node-wasm.js passed: sensitive face result match
-2021-10-15 09:33:42 [31mERROR:[39m test-node-wasm.js failed: sensitive face emotion result mismatch 3
-2021-10-15 09:33:42 [35mSTATE:[39m test-node-wasm.js passed: sensitive body result match
-2021-10-15 09:33:42 [35mSTATE:[39m test-node-wasm.js passed: sensitive hand result match
-2021-10-15 09:33:42 [36mINFO: [39m test-node-wasm.js test detectors
-2021-10-15 09:33:43 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:43 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:44 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:44 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:33:44 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:44 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 369
-2021-10-15 09:33:44 [35mSTATE:[39m test-node-wasm.js passed: detector result face match
-2021-10-15 09:33:44 [35mSTATE:[39m test-node-wasm.js passed: detector result hand match
-2021-10-15 09:33:44 [36mINFO: [39m test-node-wasm.js test body variants
-2021-10-15 09:33:46 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:46 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:46 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:46 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet
-2021-10-15 09:33:46 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.91,"keypoints":17}
-2021-10-15 09:33:46 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 490
-2021-10-15 09:33:46 [35mSTATE:[39m test-node-wasm.js passed: body posenet
-2021-10-15 09:33:48 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:48 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:49 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:49 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet
-2021-10-15 09:33:49 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:49 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 355
-2021-10-15 09:33:49 [35mSTATE:[39m test-node-wasm.js passed: body movenet
-2021-10-15 09:33:49 [36mINFO: [39m test-node-wasm.js test hand variants
-2021-10-15 09:33:49 [32mDATA: [39m test-node-wasm.js stdout: 09:33:49.497 Human: load model failed: handskeleton.json
-2021-10-15 09:33:51 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:51 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:51 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:51 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg handdetect
-2021-10-15 09:33:51 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:51 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 391
-2021-10-15 09:33:51 [35mSTATE:[39m test-node-wasm.js passed: hand handdetect
-2021-10-15 09:33:53 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:33:53 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:53 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:53 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg handtrack
-2021-10-15 09:33:53 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:33:53 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 350
-2021-10-15 09:33:53 [35mSTATE:[39m test-node-wasm.js passed: hand handdetect
-2021-10-15 09:33:53 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:33:54 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:33:54 [35mSTATE:[39m test-node-wasm.js passed: detect: random default
-2021-10-15 09:33:54 [32mDATA: [39m test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15}
-2021-10-15 09:33:54 [32mDATA: [39m test-node-wasm.js result: performance: load: 1578 total: 329
-2021-10-15 09:33:54 [36mINFO: [39m test-node-wasm.js test: first instance
-2021-10-15 09:33:54 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
-2021-10-15 09:33:55 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
-2021-10-15 09:33:55 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":7}
-2021-10-15 09:33:55 [32mDATA: [39m test-node-wasm.js result: performance: load: 2 total: 639
-2021-10-15 09:33:55 [36mINFO: [39m test-node-wasm.js test: second instance
-2021-10-15 09:33:56 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
-2021-10-15 09:33:56 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
-2021-10-15 09:33:56 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":7}
-2021-10-15 09:33:56 [32mDATA: [39m test-node-wasm.js result: performance: load: 2 total: 631
-2021-10-15 09:33:56 [36mINFO: [39m test-node-wasm.js test: concurrent
-2021-10-15 09:33:56 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
-2021-10-15 09:33:56 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
-2021-10-15 09:33:58 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:34:00 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:34:00 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
-2021-10-15 09:34:01 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
-2021-10-15 09:34:01 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
-2021-10-15 09:34:03 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
-2021-10-15 09:34:03 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
-2021-10-15 09:34:04 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:34:04 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:34:04 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-face.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 4 object: 0 person: 1 {"score":0.91} {} {"score":0.47,"keypoints":3}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 2382 total: 7314
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-face.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 4 object: 0 person: 2 {"score":0.91} {} {"score":0.47,"keypoints":3}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 2382 total: 7314
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 2382 total: 7314
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 2382 total: 7314
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":7}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 2382 total: 7314
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 0 person: 2 {"score":0.96} {} {"score":0.75,"keypoints":7}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 2382 total: 7314
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-face.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 3 body: 1 hand: 2 gesture: 2 object: 0 person: 3 {"score":0.96} {} {"score":0.47,"keypoints":17}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 4791 total: 4933
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 4 body: 1 hand: 2 gesture: 1 object: 0 person: 4 {"score":0.96} {} {"score":0.92,"keypoints":17}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 4791 total: 4933
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: face: 5 body: 1 hand: 2 gesture: 1 object: 0 person: 5 {"score":0.96} {} {"score":0.75,"keypoints":16}
-2021-10-15 09:34:08 [32mDATA: [39m test-node-wasm.js result: performance: load: 4791 total: 4933
-2021-10-15 09:34:08 [35mSTATE:[39m test-node-wasm.js event: image
-2021-10-15 09:34:09 [35mSTATE:[39m test-node-wasm.js event: detect
-2021-10-15 09:34:09 [35mSTATE:[39m test-node-wasm.js passed: monkey patch
-2021-10-15 09:34:09 [35mSTATE:[39m test-node-wasm.js passed: segmentation [65536]
-2021-10-15 09:34:09 [35mSTATE:[39m test-node-wasm.js passeed: equal usage
-2021-10-15 09:34:09 [36mINFO: [39m test-node-wasm.js events: {"image":19,"detect":19,"warmup":2}
-2021-10-15 09:34:09 [36mINFO: [39m test-node-wasm.js tensors 2143
-2021-10-15 09:34:09 [36mINFO: [39m test-node-wasm.js test complete: 46452 ms
-2021-10-15 09:34:09 [36mINFO: [39m
-2021-10-15 09:34:09 [36mINFO: [39m failed [{"test":"test-node-wasm.js","data":["error",["failed: warmup face result mismatch",1,1,1,5]]},{"test":"test-node-wasm.js","data":["error",["failed: object result mismatch",0]]},{"test":"test-node-wasm.js","data":["error",["failed: sensitive face emotion result mismatch",3]]}]
-2021-10-15 09:34:09 [36mINFO: [39m status: {"test-node.js":{"passed":45,"failed":0},"test-node-gpu.js":{"passed":45,"failed":0},"test-node-wasm.js":{"passed":80,"failed":3}}
+2021-10-19 07:55:50 [36mINFO: [39m @vladmandic/human version 2.3.3
+2021-10-19 07:55:50 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.10.0
+2021-10-19 07:55:50 [36mINFO: [39m tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"]
+2021-10-19 07:55:50 [36mINFO: [39m demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"]
+2021-10-19 07:55:50 [36mINFO: [39m
+2021-10-19 07:55:50 [36mINFO: [39m test-node.js start
+2021-10-19 07:55:51 [35mSTATE:[39m test-node.js passed: configuration default validation []
+2021-10-19 07:55:51 [35mSTATE:[39m test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}]
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js passed: create human
+2021-10-19 07:55:52 [36mINFO: [39m test-node.js human version: 2.3.3
+2021-10-19 07:55:52 [36mINFO: [39m test-node.js platform: linux x64 agent: NodeJS v16.10.0
+2021-10-19 07:55:52 [36mINFO: [39m test-node.js tfjs version: 3.9.0
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js passed: set backend: tensorflow
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js tensors 1920
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js passed: load models
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js result: defined models: 21 loaded models: 10
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js passed: warmup: none default
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js passed: warmup none result match
+2021-10-19 07:55:52 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:55:53 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:55:53 [35mSTATE:[39m test-node.js event: warmup
+2021-10-19 07:55:53 [35mSTATE:[39m test-node.js passed: warmup: face default
+2021-10-19 07:55:53 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
+2021-10-19 07:55:53 [32mDATA: [39m test-node.js result: performance: load: 379 total: 1419
+2021-10-19 07:55:53 [35mSTATE:[39m test-node.js passed: warmup face result match
+2021-10-19 07:55:53 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:55:54 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:55:54 [35mSTATE:[39m test-node.js event: warmup
+2021-10-19 07:55:54 [35mSTATE:[39m test-node.js passed: warmup: body default
+2021-10-19 07:55:54 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:55:54 [32mDATA: [39m test-node.js result: performance: load: 379 total: 1050
+2021-10-19 07:55:54 [35mSTATE:[39m test-node.js passed: warmup body result match
+2021-10-19 07:55:54 [36mINFO: [39m test-node.js test default
+2021-10-19 07:55:55 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:55:55 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:55:56 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:55:56 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:55:56 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:55:56 [32mDATA: [39m test-node.js result: performance: load: 379 total: 1017
+2021-10-19 07:55:56 [35mSTATE:[39m test-node.js passed: default result face match
+2021-10-19 07:55:56 [36mINFO: [39m test-node.js test sync
+2021-10-19 07:55:57 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:55:57 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:55:58 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:55:58 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:55:58 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:55:58 [32mDATA: [39m test-node.js result: performance: load: 379 total: 976
+2021-10-19 07:55:58 [35mSTATE:[39m test-node.js passed: default sync
+2021-10-19 07:55:58 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:55:58 [35mSTATE:[39m test-node.js passed: image input null [1,256,256,3]
+2021-10-19 07:55:58 [35mSTATE:[39m test-node.js passed: invalid input {"error":"could not convert input to tensor"}
+2021-10-19 07:55:58 [36mINFO: [39m test-node.js test face similarity
+2021-10-19 07:55:58 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:55:58 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:55:59 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:55:59 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:55:59 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3}
+2021-10-19 07:55:59 [32mDATA: [39m test-node.js result: performance: load: 379 total: 983
+2021-10-19 07:56:00 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:00 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:01 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:01 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:01 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:01 [32mDATA: [39m test-node.js result: performance: load: 379 total: 1087
+2021-10-19 07:56:01 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:01 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:02 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:02 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:02 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7}
+2021-10-19 07:56:02 [32mDATA: [39m test-node.js result: performance: load: 379 total: 909
+2021-10-19 07:56:02 [35mSTATE:[39m test-node.js passed: face descriptor
+2021-10-19 07:56:02 [35mSTATE:[39m test-node.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]}
+2021-10-19 07:56:02 [36mINFO: [39m test-node.js test face matching
+2021-10-19 07:56:02 [35mSTATE:[39m test-node.js passed: face database 57
+2021-10-19 07:56:02 [35mSTATE:[39m test-node.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}}
+2021-10-19 07:56:02 [36mINFO: [39m test-node.js test object
+2021-10-19 07:56:03 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:03 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:04 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:04 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:04 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:04 [32mDATA: [39m test-node.js result: performance: load: 379 total: 952
+2021-10-19 07:56:04 [35mSTATE:[39m test-node.js passed: object result match
+2021-10-19 07:56:04 [36mINFO: [39m test-node.js test sensitive
+2021-10-19 07:56:05 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:05 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:06 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:06 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:06 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:06 [32mDATA: [39m test-node.js result: performance: load: 379 total: 1055
+2021-10-19 07:56:06 [35mSTATE:[39m test-node.js passed: sensitive result match
+2021-10-19 07:56:06 [35mSTATE:[39m test-node.js passed: sensitive face result match
+2021-10-19 07:56:06 [35mSTATE:[39m test-node.js passed: sensitive face emotion result mismatch 4
+2021-10-19 07:56:06 [35mSTATE:[39m test-node.js passed: sensitive body result match
+2021-10-19 07:56:06 [35mSTATE:[39m test-node.js passed: sensitive hand result match
+2021-10-19 07:56:06 [36mINFO: [39m test-node.js test detectors
+2021-10-19 07:56:07 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:07 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:07 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:07 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:07 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:07 [32mDATA: [39m test-node.js result: performance: load: 379 total: 667
+2021-10-19 07:56:07 [35mSTATE:[39m test-node.js passed: detector result face match
+2021-10-19 07:56:07 [35mSTATE:[39m test-node.js passed: detector result hand match
+2021-10-19 07:56:08 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:08 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:08 [35mSTATE:[39m test-node.js passed: detect: random default
+2021-10-19 07:56:08 [32mDATA: [39m test-node.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15}
+2021-10-19 07:56:08 [32mDATA: [39m test-node.js result: performance: load: 379 total: 656
+2021-10-19 07:56:08 [36mINFO: [39m test-node.js test: first instance
+2021-10-19 07:56:09 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:09 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:09 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:09 [32mDATA: [39m test-node.js result: performance: load: 2 total: 677
+2021-10-19 07:56:09 [36mINFO: [39m test-node.js test: second instance
+2021-10-19 07:56:10 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:10 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:10 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:10 [32mDATA: [39m test-node.js result: performance: load: 2 total: 644
+2021-10-19 07:56:10 [36mINFO: [39m test-node.js test: concurrent
+2021-10-19 07:56:10 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:56:10 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:56:11 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:12 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:12 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:13 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:13 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:56:14 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:14 [35mSTATE:[39m test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:14 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:14 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:14 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 1196 total: 6977
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 1196 total: 6977
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 1196 total: 6979
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 1196 total: 6979
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 1196 total: 6979
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 1196 total: 6979
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 2485 total: 5783
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 2485 total: 5783
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:20 [32mDATA: [39m test-node.js result: performance: load: 2485 total: 5783
+2021-10-19 07:56:20 [35mSTATE:[39m test-node.js event: image
+2021-10-19 07:56:21 [35mSTATE:[39m test-node.js event: detect
+2021-10-19 07:56:21 [35mSTATE:[39m test-node.js passed: monkey patch
+2021-10-19 07:56:21 [35mSTATE:[39m test-node.js passed: segmentation [65536]
+2021-10-19 07:56:21 [35mSTATE:[39m test-node.js passeed: equal usage
+2021-10-19 07:56:21 [36mINFO: [39m test-node.js events: {"image":15,"detect":15,"warmup":2}
+2021-10-19 07:56:21 [36mINFO: [39m test-node.js tensors 1924
+2021-10-19 07:56:21 [36mINFO: [39m test-node.js test complete: 29278 ms
+2021-10-19 07:56:21 [36mINFO: [39m
+2021-10-19 07:56:21 [36mINFO: [39m test-node-gpu.js start
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js passed: configuration default validation []
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}]
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js passed: create human
+2021-10-19 07:56:22 [36mINFO: [39m test-node-gpu.js human version: 2.3.3
+2021-10-19 07:56:22 [36mINFO: [39m test-node-gpu.js platform: linux x64 agent: NodeJS v16.10.0
+2021-10-19 07:56:22 [36mINFO: [39m test-node-gpu.js tfjs version: 3.9.0
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js passed: set backend: tensorflow
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js tensors 1920
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js passed: load models
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js result: defined models: 21 loaded models: 10
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js passed: warmup: none default
+2021-10-19 07:56:22 [35mSTATE:[39m test-node-gpu.js passed: warmup none result match
+2021-10-19 07:56:23 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:24 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:24 [35mSTATE:[39m test-node-gpu.js event: warmup
+2021-10-19 07:56:24 [35mSTATE:[39m test-node-gpu.js passed: warmup: face default
+2021-10-19 07:56:24 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
+2021-10-19 07:56:24 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1635
+2021-10-19 07:56:24 [35mSTATE:[39m test-node-gpu.js passed: warmup face result match
+2021-10-19 07:56:24 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:26 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:26 [35mSTATE:[39m test-node-gpu.js event: warmup
+2021-10-19 07:56:26 [35mSTATE:[39m test-node-gpu.js passed: warmup: body default
+2021-10-19 07:56:26 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1358
+2021-10-19 07:56:26 [35mSTATE:[39m test-node-gpu.js passed: warmup body result match
+2021-10-19 07:56:26 [36mINFO: [39m test-node-gpu.js test default
+2021-10-19 07:56:27 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:27 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:28 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:28 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:28 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:28 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1316
+2021-10-19 07:56:28 [35mSTATE:[39m test-node-gpu.js passed: default result face match
+2021-10-19 07:56:28 [36mINFO: [39m test-node-gpu.js test sync
+2021-10-19 07:56:29 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:29 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:30 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:30 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:30 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:30 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1499
+2021-10-19 07:56:30 [35mSTATE:[39m test-node-gpu.js passed: default sync
+2021-10-19 07:56:30 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:56:30 [35mSTATE:[39m test-node-gpu.js passed: image input null [1,256,256,3]
+2021-10-19 07:56:30 [35mSTATE:[39m test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"}
+2021-10-19 07:56:30 [36mINFO: [39m test-node-gpu.js test face similarity
+2021-10-19 07:56:31 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:56:31 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:32 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:32 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:56:32 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3}
+2021-10-19 07:56:32 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1664
+2021-10-19 07:56:33 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:33 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:35 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:35 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:35 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:35 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1484
+2021-10-19 07:56:35 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:35 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:37 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:37 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:37 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7}
+2021-10-19 07:56:37 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1404
+2021-10-19 07:56:37 [35mSTATE:[39m test-node-gpu.js passed: face descriptor
+2021-10-19 07:56:37 [35mSTATE:[39m test-node-gpu.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]}
+2021-10-19 07:56:37 [36mINFO: [39m test-node-gpu.js test face matching
+2021-10-19 07:56:37 [35mSTATE:[39m test-node-gpu.js passed: face database 57
+2021-10-19 07:56:37 [35mSTATE:[39m test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}}
+2021-10-19 07:56:37 [36mINFO: [39m test-node-gpu.js test object
+2021-10-19 07:56:38 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:38 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:39 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:39 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:39 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:39 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1352
+2021-10-19 07:56:39 [35mSTATE:[39m test-node-gpu.js passed: object result match
+2021-10-19 07:56:39 [36mINFO: [39m test-node-gpu.js test sensitive
+2021-10-19 07:56:40 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:40 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:42 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:42 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:42 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:42 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1551
+2021-10-19 07:56:42 [35mSTATE:[39m test-node-gpu.js passed: sensitive result match
+2021-10-19 07:56:42 [35mSTATE:[39m test-node-gpu.js passed: sensitive face result match
+2021-10-19 07:56:42 [35mSTATE:[39m test-node-gpu.js passed: sensitive face emotion result mismatch 4
+2021-10-19 07:56:42 [35mSTATE:[39m test-node-gpu.js passed: sensitive body result match
+2021-10-19 07:56:42 [35mSTATE:[39m test-node-gpu.js passed: sensitive hand result match
+2021-10-19 07:56:42 [36mINFO: [39m test-node-gpu.js test detectors
+2021-10-19 07:56:43 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:43 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:44 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:44 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:44 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:44 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 988
+2021-10-19 07:56:44 [35mSTATE:[39m test-node-gpu.js passed: detector result face match
+2021-10-19 07:56:44 [35mSTATE:[39m test-node-gpu.js passed: detector result hand match
+2021-10-19 07:56:44 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:45 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:45 [35mSTATE:[39m test-node-gpu.js passed: detect: random default
+2021-10-19 07:56:45 [32mDATA: [39m test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.06,"keypoints":15}
+2021-10-19 07:56:45 [32mDATA: [39m test-node-gpu.js result: performance: load: 451 total: 1039
+2021-10-19 07:56:45 [36mINFO: [39m test-node-gpu.js test: first instance
+2021-10-19 07:56:45 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:46 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:46 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:46 [32mDATA: [39m test-node-gpu.js result: performance: load: 2 total: 955
+2021-10-19 07:56:46 [36mINFO: [39m test-node-gpu.js test: second instance
+2021-10-19 07:56:47 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:48 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:48 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:48 [32mDATA: [39m test-node-gpu.js result: performance: load: 2 total: 859
+2021-10-19 07:56:48 [36mINFO: [39m test-node-gpu.js test: concurrent
+2021-10-19 07:56:48 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:56:48 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:56:49 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:50 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:50 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:50 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:50 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120}
+2021-10-19 07:56:51 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
+2021-10-19 07:56:52 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
+2021-10-19 07:56:52 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:52 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:52 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:58 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:58 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:58 [32mDATA: [39m test-node-gpu.js result: performance: load: 1333 total: 8261
+2021-10-19 07:56:58 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:58 [32mDATA: [39m test-node-gpu.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:58 [32mDATA: [39m test-node-gpu.js result: performance: load: 1333 total: 8261
+2021-10-19 07:56:58 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:56:58 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17}
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: performance: load: 1333 total: 8266
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17}
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: performance: load: 1333 total: 8266
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: performance: load: 1333 total: 8266
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: performance: load: 1333 total: 8266
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16}
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: performance: load: 2556 total: 6933
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17}
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: performance: load: 2556 total: 6934
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
+2021-10-19 07:56:59 [32mDATA: [39m test-node-gpu.js result: performance: load: 2556 total: 6934
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js event: image
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js event: detect
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passed: monkey patch
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passed: segmentation [65536]
+2021-10-19 07:56:59 [35mSTATE:[39m test-node-gpu.js passeed: equal usage
+2021-10-19 07:56:59 [36mINFO: [39m test-node-gpu.js events: {"image":15,"detect":15,"warmup":2}
+2021-10-19 07:56:59 [36mINFO: [39m test-node-gpu.js tensors 1924
+2021-10-19 07:56:59 [36mINFO: [39m test-node-gpu.js test complete: 37235 ms
+2021-10-19 07:56:59 [36mINFO: [39m
+2021-10-19 07:56:59 [36mINFO: [39m test-node-wasm.js start
+2021-10-19 07:57:00 [35mSTATE:[39m test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/
+2021-10-19 07:57:00 [35mSTATE:[39m test-node-wasm.js passed: configuration default validation []
+2021-10-19 07:57:00 [35mSTATE:[39m test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js passed: models loaded 21 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":false}]
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js passed: create human
+2021-10-19 07:57:01 [36mINFO: [39m test-node-wasm.js human version: 2.3.3
+2021-10-19 07:57:01 [36mINFO: [39m test-node-wasm.js platform: linux x64 agent: NodeJS v16.10.0
+2021-10-19 07:57:01 [36mINFO: [39m test-node-wasm.js tfjs version: 3.9.0
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js passed: set backend: wasm
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js tensors 1920
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js passed: load models
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js result: defined models: 21 loaded models: 10
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js passed: warmup: none default
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js passed: warmup none result match
+2021-10-19 07:57:01 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:03 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:03 [35mSTATE:[39m test-node-wasm.js event: warmup
+2021-10-19 07:57:03 [35mSTATE:[39m test-node-wasm.js passed: warmup: face default
+2021-10-19 07:57:03 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":3}
+2021-10-19 07:57:03 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 1217
+2021-10-19 07:57:03 [31mERROR:[39m test-node-wasm.js failed: warmup face result mismatch 1 1 1 5
+2021-10-19 07:57:03 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:04 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:04 [35mSTATE:[39m test-node-wasm.js event: warmup
+2021-10-19 07:57:04 [35mSTATE:[39m test-node-wasm.js passed: warmup: body default
+2021-10-19 07:57:04 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:04 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 847
+2021-10-19 07:57:04 [35mSTATE:[39m test-node-wasm.js passed: warmup body result match
+2021-10-19 07:57:04 [36mINFO: [39m test-node-wasm.js test default
+2021-10-19 07:57:05 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:05 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:06 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:06 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:06 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:06 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 874
+2021-10-19 07:57:06 [35mSTATE:[39m test-node-wasm.js passed: default result face match
+2021-10-19 07:57:06 [36mINFO: [39m test-node-wasm.js test sync
+2021-10-19 07:57:08 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:08 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:09 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:09 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:09 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:09 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 867
+2021-10-19 07:57:09 [35mSTATE:[39m test-node-wasm.js passed: default sync
+2021-10-19 07:57:09 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
+2021-10-19 07:57:09 [35mSTATE:[39m test-node-wasm.js passed: image input null [1,256,256,3]
+2021-10-19 07:57:09 [35mSTATE:[39m test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"}
+2021-10-19 07:57:09 [36mINFO: [39m test-node-wasm.js test face similarity
+2021-10-19 07:57:09 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
+2021-10-19 07:57:09 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:10 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:10 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:57:10 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.4,"gender":"female"} {} {"score":0.47,"keypoints":3}
+2021-10-19 07:57:10 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 760
+2021-10-19 07:57:12 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:12 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:13 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:13 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:13 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:13 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 871
+2021-10-19 07:57:13 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
+2021-10-19 07:57:13 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:14 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:14 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:57:14 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 5 object: 0 person: 1 {"score":1,"age":29.5,"gender":"female"} {} {"score":0.75,"keypoints":7}
+2021-10-19 07:57:14 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 666
+2021-10-19 07:57:14 [35mSTATE:[39m test-node-wasm.js passed: face descriptor
+2021-10-19 07:57:14 [35mSTATE:[39m test-node-wasm.js passed: face similarity {"similarity":[1,0.9040641336882139,0.895983704095898],"descriptors":[1024,1024,1024]}
+2021-10-19 07:57:14 [36mINFO: [39m test-node-wasm.js test face matching
+2021-10-19 07:57:14 [35mSTATE:[39m test-node-wasm.js passed: face database 57
+2021-10-19 07:57:14 [35mSTATE:[39m test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.9902354470817274}} {"second":{"index":4,"similarity":0.9045213429149392}} {"third":{"index":4,"similarity":0.8965257196777969}}
+2021-10-19 07:57:14 [36mINFO: [39m test-node-wasm.js test object
+2021-10-19 07:57:16 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:16 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:16 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:16 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:16 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:16 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 827
+2021-10-19 07:57:16 [31mERROR:[39m test-node-wasm.js failed: object result mismatch 0
+2021-10-19 07:57:16 [36mINFO: [39m test-node-wasm.js test sensitive
+2021-10-19 07:57:18 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:18 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:19 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:19 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:19 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:19 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 992
+2021-10-19 07:57:19 [35mSTATE:[39m test-node-wasm.js passed: sensitive result match
+2021-10-19 07:57:19 [35mSTATE:[39m test-node-wasm.js passed: sensitive face result match
+2021-10-19 07:57:19 [31mERROR:[39m test-node-wasm.js failed: sensitive face emotion result mismatch 3
+2021-10-19 07:57:19 [35mSTATE:[39m test-node-wasm.js passed: sensitive body result match
+2021-10-19 07:57:19 [35mSTATE:[39m test-node-wasm.js passed: sensitive hand result match
+2021-10-19 07:57:19 [36mINFO: [39m test-node-wasm.js test detectors
+2021-10-19 07:57:21 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:21 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:21 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:21 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:21 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:21 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 357
+2021-10-19 07:57:21 [35mSTATE:[39m test-node-wasm.js passed: detector result face match
+2021-10-19 07:57:21 [35mSTATE:[39m test-node-wasm.js passed: detector result hand match
+2021-10-19 07:57:22 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:22 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:22 [35mSTATE:[39m test-node-wasm.js passed: detect: random default
+2021-10-19 07:57:22 [32mDATA: [39m test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15}
+2021-10-19 07:57:22 [32mDATA: [39m test-node-wasm.js result: performance: load: 1286 total: 328
+2021-10-19 07:57:22 [36mINFO: [39m test-node-wasm.js test: first instance
+2021-10-19 07:57:22 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
+2021-10-19 07:57:23 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:57:23 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16}
+2021-10-19 07:57:23 [32mDATA: [39m test-node-wasm.js result: performance: load: 2 total: 347
+2021-10-19 07:57:23 [36mINFO: [39m test-node-wasm.js test: second instance
+2021-10-19 07:57:23 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
+2021-10-19 07:57:24 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:57:24 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16}
+2021-10-19 07:57:24 [32mDATA: [39m test-node-wasm.js result: performance: load: 2 total: 330
+2021-10-19 07:57:24 [36mINFO: [39m test-node-wasm.js test: concurrent
+2021-10-19 07:57:24 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
+2021-10-19 07:57:24 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
+2021-10-19 07:57:26 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:27 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:28 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
+2021-10-19 07:57:28 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
+2021-10-19 07:57:28 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856}
+2021-10-19 07:57:30 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
+2021-10-19 07:57:31 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
+2021-10-19 07:57:31 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:31 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:31 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96} {} {"score":0.75,"keypoints":16}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 2338 total: 5543
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 0 person: 2 {"score":0.96} {} {"score":0.75,"keypoints":16}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 2338 total: 5543
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 0 person: 1 {"score":0.91} {} {"score":0.47,"keypoints":17}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 2338 total: 5545
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 2 object: 0 person: 2 {"score":0.91} {} {"score":0.47,"keypoints":17}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 2338 total: 5545
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 2338 total: 5545
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 2338 total: 5545
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 0 person: 5 {"score":0.96} {} {"score":0.75,"keypoints":16}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 4707 total: 3207
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-face.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 3 body: 1 hand: 1 gesture: 2 object: 0 person: 3 {"score":0.96} {} {"score":0.47,"keypoints":17}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 4707 total: 3207
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/in/ai-body.jpg default
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 0 person: 4 {"score":0.96} {} {"score":0.92,"keypoints":17}
+2021-10-19 07:57:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 4707 total: 3207
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js event: image
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js event: detect
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: monkey patch
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passed: segmentation [65536]
+2021-10-19 07:57:34 [35mSTATE:[39m test-node-wasm.js passeed: equal usage
+2021-10-19 07:57:34 [36mINFO: [39m test-node-wasm.js events: {"image":15,"detect":15,"warmup":2}
+2021-10-19 07:57:34 [36mINFO: [39m test-node-wasm.js tensors 1926
+2021-10-19 07:57:34 [36mINFO: [39m test-node-wasm.js test complete: 34327 ms
+2021-10-19 07:57:34 [36mINFO: [39m
+2021-10-19 07:57:34 [36mINFO: [39m failed [{"test":"test-node-wasm.js","data":["error",["failed: warmup face result mismatch",1,1,1,5]]},{"test":"test-node-wasm.js","data":["error",["failed: object result mismatch",0]]},{"test":"test-node-wasm.js","data":["error",["failed: sensitive face emotion result mismatch",3]]}]
+2021-10-19 07:57:34 [36mINFO: [39m status: {"test-node.js":{"passed":70,"failed":0},"test-node-gpu.js":{"passed":70,"failed":0},"test-node-wasm.js":{"passed":68,"failed":3}}
diff --git a/typedoc/classes/Human.html b/typedoc/classes/Human.html
index 7a01ab6d..dc0c8da8 100644
--- a/typedoc/classes/Human.html
+++ b/typedoc/classes/Human.html
@@ -1,4 +1,4 @@
-Human | @vladmandic/human - v2.3.3
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Class Human
Human* library main class
All methods and properties are available only as members of Human class
@@ -8,16 +8,16 @@
Config
instance
-Hierarchy
Index
Constructors
Properties
Methods
Constructors
constructor
Hierarchy
Index
Constructors
Properties
Methods
Constructors
constructor
Constructor for Human library that is futher used for all operations
Parameters
Optional userConfig: Partial<Config>
Returns Human
instance: Human
-Properties
config
Properties
config
Current configuration
distance
Type declaration
distance
Type declaration
Calculates distance between two descriptors
order
is different than 2order
Note: No checks are performed for performance reasons so make sure to pass valid number arrays of equal length
-Parameters
descriptor1: Descriptor
descriptor2: Descriptor
options: { order: number } = ...
order: number
Returns number
draw
Parameters
descriptor1: Descriptor
descriptor2: Descriptor
options: { order: number } = ...
order: number
Returns number
draw
Draw helper classes that can draw detected objects on canvas using specified draw
Type declaration
all: any
body: any
canvas: any
face: any
gesture: any
hand: any
object: any
options: DrawOptions
person: any
env
Type declaration
all: any
body: any
canvas: any
face: any
gesture: any
hand: any
object: any
options: DrawOptions
person: any
env
Object containing environment information used for diagnostics
-events
events
Container for events dispatched by Human
Possible events:
@@ -51,13 +51,13 @@
-warmup
: triggered when warmup is completeerror
: triggered on some errorsface Triangulation
face Triangulation
Reference face triangualtion array of 468 points, used for triangle references between points
-faceUVMap
faceUVMap
Refernce UV map of 468 values, used for 3D mapping of the face mesh
-gl
gl
WebGL debug info
-match
Type declaration
match
Type declaration
Matches given descriptor to a closest entry in array of descriptors
Parameters
descriptor: Descriptor
face descriptor
@@ -74,27 +74,27 @@distance
of given descriptor to the best matchsimilarity
of given descriptor to the best matchdistance: number
index: number
similarity: number
performance
distance: number
index: number
similarity: number
performance
Performance object that contains values for all recently performed operations
-process
process
currenty processed image tensor and canvas
-Type declaration
canvas: null | OffscreenCanvas | HTMLCanvasElement
tensor: null | Tensor<Rank>
result
Type declaration
canvas: null | OffscreenCanvas | HTMLCanvasElement
tensor: null | Tensor<Rank>
result
Last known result of detect run
similarity
Type declaration
similarity
Type declaration
Calculates normalized similarity between two descriptors based on their
-distance
Parameters
descriptor1: Descriptor
descriptor2: Descriptor
options: { order: number } = ...
order: number
Returns number
state
Parameters
descriptor1: Descriptor
descriptor2: Descriptor
options: { order: number } = ...
order: number
Returns number
state
Current state of Human library
version
version
Current version of Human library in semver format
-Methods
detect
Methods
detect
Main detection method
Parameters
input: Input
Optional userConfig: Partial<Config>
Returns Promise<Error | Result>
result: Result
-enhance
enhance
Enhance method performs additional enhacements to face image previously detected for futher processing
Parameters
input: Tensor<Rank>
Returns null | Tensor<Rank>
Tensor
-image
image
Process input as return canvas and tensor
-Parameters
input: Input
getTensor: boolean = true
Returns { canvas: null | OffscreenCanvas | HTMLCanvasElement; tensor: null | Tensor<Rank> }
canvas: null | OffscreenCanvas | HTMLCanvasElement
tensor: null | Tensor<Rank>
init
Parameters
input: Input
getTensor: boolean = true
Returns { canvas: null | OffscreenCanvas | HTMLCanvasElement; tensor: null | Tensor<Rank> }
canvas: null | OffscreenCanvas | HTMLCanvasElement
tensor: null | Tensor<Rank>
init
Explicit backend initialization
Returns Promise<void>
Promise
-load
load
Load method preloads all configured models on-demand
Parameters
Optional userConfig: Partial<Config>
Returns Promise<void>
Promise
-next
next
Runs interpolation using last known result and returns smoothened result Interpolation is based on time since last known result so can be called independently
Parameters
result: Result = ...
Returns Result
result: Result
-reset
reset
Reset configuration to default values
-Returns void
segmentation
Returns void
segmentation
Segmentation method takes any input and returns processed canvas with body segmentation
canvas
as canvas which is input image filtered with segementation data and optionally merged with background image. canvas alpha values are set to segmentation values for easy mergingalpha
as grayscale canvas that represents segmentation alpha valuesParameters
input: Input
Optional background: Input
Returns Promise<{ alpha: null | OffscreenCanvas | HTMLCanvasElement; canvas: null | OffscreenCanvas | HTMLCanvasElement; data: number[] }>
validate
Parameters
input: Input
Optional background: Input
Returns Promise<{ alpha: null | OffscreenCanvas | HTMLCanvasElement; canvas: null | OffscreenCanvas | HTMLCanvasElement; data: number[] }>
validate
Validate current configuration schema
-Parameters
Optional userConfig: Partial<Config>
Returns { expected?: string; reason: string; where: string }[]
warmup
Parameters
Optional userConfig: Partial<Config>
Returns { expected?: string; reason: string; where: string }[]
warmup
Warmup method pre-initializes all configured models for faster inference
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Class Models
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Class Models
Defines all possible models used by Human library
-Hierarchy
Index
Constructors
Properties
Constructors
constructor
Returns Models
Properties
age
agegenderrace
antispoof
blazepose
blazeposedetect
centernet
efficientpose
embedding
emotion
facedetect
faceiris
facemesh
faceres
gender
handpose
handskeleton
handtrack
movenet
nanodet
posenet
segmentation
Hierarchy
Index
Constructors
Properties
Constructors
constructor
Returns Models
Properties
age
agegenderrace
antispoof
blazepose
blazeposedetect
centernet
efficientpose
embedding
emotion
facedetect
faceiris
facemesh
faceres
gender
handpose
handskeleton
handtrack
movenet
nanodet
posenet
segmentation
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3@vladmandic/human - v2.3.3
Index
References
Classes
Interfaces
Type aliases
Variables
References
default
Renames and re-exports HumanType aliases
Body Keypoint
Type declaration
part: string
position: Point
position Raw: Point
score: number
Box
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3@vladmandic/human - v2.3.3
Index
References
Classes
Interfaces
Type aliases
Variables
References
default
Renames and re-exports HumanType aliases
Body Keypoint
Type declaration
part: string
position: Point
position Raw: Point
score: number
Box
Box and Point primitives
-Descriptor
Descriptor
Face descriptor type as number array
-Env
Type declaration
Canvas: undefined
Env
Type declaration
Canvas: undefined
MonkeyPatch for Canvas
Image: undefined
MonkeyPatch for Image
@@ -36,9 +36,9 @@WebGPU detected capabilities
adapter: undefined | string
backend: undefined | boolean
supported: undefined | boolean
worker: undefined | boolean
Running in WebWorker thread
-Error
Error
Error message
-Type declaration
error: string
Events
Type declaration
error: string
Events
Events dispatched by
human.events
create
: triggered when Human object is instantiatedresult
: triggered when detection is completewarmup
: triggered when warmup is completeGesture Result
Gesture Result
Gesture results
-Input
Input
Defines all possible input types for Human detection
-Point
Point
Box and Point primitives
-Tensor Flow
Tensor Flow
Instance of TensorFlow/JS
-Variables
defaults
Variables
defaults
See all default Config values...
-env
env
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface BodyConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface BodyConfig
Controlls and configures all body detection specific options
Parameters:
@@ -12,4 +12,4 @@
maxDetected
can be set to -1 to auto-detect based on number of detected facesChanging
-modelPath
will change module responsible for hand detection and tracking Allowed values areposenet.json
,blazepose.json
,efficientpose.json
,movenet-lightning.json
,movenet-thunder.json
,movenet-multipose.json
Hierarchy
Index
Properties
Properties
Optional detector
Type declaration
model Path: string
enabled
max Detected
min Confidence
model Path
skip Frames
Hierarchy
Index
Properties
Properties
Optional detector
Type declaration
model Path: string
enabled
max Detected
min Confidence
model Path
skip Frames
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface BodyResult
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface BodyResult
Body results
Each results has:
@@ -12,4 +12,4 @@- score: body part score value
- presence: body part presence value
-Hierarchy
Index
Properties
Properties
annotations
box
box Raw
id
keypoints
score
Hierarchy
Index
Properties
Properties
annotations
box
box Raw
id
keypoints
score
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface Config
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface Config
Configuration interface definition for Human library
Contains all configurable parameters
-Hierarchy
Index
Properties
Properties
async
Hierarchy
Index
Properties
Properties
async
Perform model loading and inference concurrently or sequentially
-backend
backend
Backend used for TFJS operations Valid build-in backends are:
@@ -15,45 +15,45 @@ Valid build-in backends are:- Browser:
webgpu
- requires custom build oftfjs-backend-webgpu
Defaults:
-humangl
for browser andtensorflow
for nodejsbody
body
BodyConfig
-cache Sensitivity
cache Sensitivity
Cache sensitivity
debug
debug
Print debug statements to console
-face
face
FaceConfig
-filter
filter
Run input through image filters before inference
FilterConfig
-gesture
gesture
GestureConfig
-hand
hand
HandConfig
-model Base Path
model Base Path
Base model path (typically starting with file://, http:// or https://) for all models
object
object
ObjectConfig
-segmentation
segmentation
SegmentationConfig
-skip Frame
skip Frame
Internal Variable
-warmup
warmup
What to use for
human.warmup()
wasm Path
wasm Path
Path to *.wasm files if backend is set to
wasm
jsdelivr
when running in browser- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface DrawOptions
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface DrawOptions
Defines DrawOptions used by
-human.draw.*
methodsHierarchy
Index
Properties
Properties
buffered Output
color
draw Boxes
draw Gaze
draw Labels
draw Points
draw Polygons
fill Polygons
font
label Color
line Height
line Width
point Size
round Rect
shadow Color
use Curves
use Depth
Hierarchy
Index
Properties
Properties
buffered Output
color
draw Boxes
draw Gaze
draw Labels
draw Points
draw Polygons
fill Polygons
font
label Color
line Height
line Width
point Size
round Rect
shadow Color
use Curves
use Depth
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceAntiSpoofConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceAntiSpoofConfig
Emotion part of face configuration
-Hierarchy
Index
Properties
Properties
enabled
model Path
skip Frames
Hierarchy
Index
Properties
Properties
enabled
model Path
skip Frames
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceConfig
Controlls and configures all face-specific options:
Hierarchy
Index
Properties
Properties
antispoof
description
detector
emotion
enabled
iris
mesh
Hierarchy
Index
Properties
Properties
antispoof
description
detector
emotion
enabled
iris
mesh
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceDescriptionConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceDescriptionConfig
Description or face embedding part of face configuration
Hierarchy
Index
Properties
Properties
enabled
min Confidence
model Path
skip Frames
Hierarchy
Index
Properties
Properties
enabled
min Confidence
model Path
skip Frames
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceDetectorConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceDetectorConfig
Dectector part of face configuration
-Hierarchy
Index
Properties
Properties
iou Threshold
max Detected
min Confidence
model Path
return
rotation
skip Frames
Hierarchy
Index
Properties
Properties
iou Threshold
max Detected
min Confidence
model Path
return
rotation
skip Frames
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceEmotionConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceEmotionConfig
Emotion part of face configuration
-Hierarchy
Index
Properties
Properties
enabled
min Confidence
model Path
skip Frames
Hierarchy
Index
Properties
Properties
enabled
min Confidence
model Path
skip Frames
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceIrisConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceIrisConfig
Iris part of face configuration
-Hierarchy
Index
Properties
Properties
enabled
model Path
Hierarchy
Index
Properties
Properties
enabled
model Path
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceMeshConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceMeshConfig
Mesh part of face configuration
-Hierarchy
Index
Properties
Properties
enabled
model Path
Hierarchy
Index
Properties
Properties
enabled
model Path
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceResult
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FaceResult
Face results Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models Some values may be null if specific model is not enabled
@@ -27,4 +27,4 @@ field of view of 88 degrees. value should be adjusted manually as neededHierarchy
Index
Properties
Properties
Optional age
annotations
box
box Raw
box Score
Optional embedding
Optional emotion
face Score
Optional gender
Optional gender Score
id
Optional iris
mesh
mesh Raw
Optional real
Optional rotation
Type declaration
angle: { pitch: number; roll: number; yaw: number }
pitch: number
roll: number
yaw: number
gaze: { bearing: number; strength: number }
bearing: number
strength: number
matrix: [number, number, number, number, number, number, number, number, number]
score
Optional tensor
Hierarchy
Index
Properties
Properties
Optional age
annotations
box
box Raw
box Score
Optional embedding
Optional emotion
face Score
Optional gender
Optional gender Score
id
Optional iris
mesh
mesh Raw
Optional real
Optional rotation
Type declaration
angle: { pitch: number; roll: number; yaw: number }
pitch: number
roll: number
yaw: number
gaze: { bearing: number; strength: number }
bearing: number
strength: number
matrix: [number, number, number, number, number, number, number, number, number]
score
Optional tensor
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FilterConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface FilterConfig
Run input through image filters before inference
Hierarchy
Index
Properties
Properties
blur
Hierarchy
Index
Properties
Properties
blur
Range: 0 (no blur) to N (blur radius in pixels)
-brightness
brightness
Range: -1 (darken) to 1 (lighten)
-contrast
contrast
Range: -1 (reduce contrast) to 1 (increase contrast)
-enabled
flip
enabled
flip
Flip input as mirror image
-height
height
Resize input height
hue
hue
Range: 0 (no change) to 360 (hue rotation in degrees)
-kodachrome
kodachrome
Image kodachrome colors
-negative
negative
Image negative
-pixelate
pixelate
Range: 0 (no pixelate) to N (number of pixels to pixelate)
-polaroid
polaroid
Image polaroid camera effect
-return
return
Return processed canvas imagedata in result
-saturation
saturation
Range: -1 (reduce saturation) to 1 (increase saturation)
-sepia
sepia
Image sepia colors
-sharpness
sharpness
Range: 0 (no sharpening) to 1 (maximum sharpening)
-technicolor
technicolor
Image technicolor colors
-vintage
vintage
Image vintage colors
-width
width
Resize input width
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface GestureConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface GestureConfig
Controlls gesture detection
-Hierarchy
Index
Properties
Properties
enabled
Hierarchy
Index
Properties
Properties
enabled
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface HandConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface HandConfig
Controlls and configures all hand detection specific options
Parameters:
@@ -13,4 +13,4 @@
maxDetected
can be set to -1 to auto-detect based on number of detected facesChanging
-detector.modelPath
will change module responsible for hand detection and tracking Allowed values arehanddetect.json
andhandtrack.json
Hierarchy
Index
Properties
Properties
detector
Type declaration
Optional model Path?: string
enabled
iou Threshold
landmarks
max Detected
min Confidence
rotation
skeleton
Type declaration
Optional model Path?: string
skip Frames
Hierarchy
Index
Properties
Properties
detector
Type declaration
Optional model Path?: string
enabled
iou Threshold
landmarks
max Detected
min Confidence
rotation
skeleton
Type declaration
Optional model Path?: string
skip Frames
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface HandResult
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface HandResult
Hand results
Each result has:
@@ -10,4 +10,4 @@- annotations: annotated landmarks for each hand part with keypoints
- landmarks: annotated landmarks for eachb hand part with logical curl and direction strings
-Hierarchy
Index
Properties
Properties
annotations
box
box Raw
box Score
finger Score
id
keypoints
label
landmarks
score
Hierarchy
Index
Properties
Properties
annotations
box
box Raw
box Score
finger Score
id
keypoints
label
landmarks
score
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface ObjectConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface ObjectConfig
Controlls and configures all object detection specific options
Changing
-modelPath
will change module responsible for hand detection and tracking Allowed values aremb3-centernet.json
andnanodet.json
Hierarchy
Index
Properties
Properties
enabled
iou Threshold
max Detected
min Confidence
model Path
skip Frames
Hierarchy
Index
Properties
Properties
enabled
iou Threshold
max Detected
min Confidence
model Path
skip Frames
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface ObjectResult
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface ObjectResult
Object results
Array of individual results with one object per detected gesture Each result has:
@@ -11,4 +11,4 @@ Each result has:Hierarchy
Index
Properties
Properties
box
box Raw
class
id
label
score
Hierarchy
Index
Properties
Properties
box
box Raw
class
id
label
score
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface PersonResult
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface PersonResult
Person getter
Person Interface
Each result has:
@@ -11,4 +11,4 @@Hierarchy
Index
Properties
Properties
body
box
Optional box Raw
face
gestures
hands
Type declaration
left: null | HandResult
right: null | HandResult
id
Hierarchy
Index
Properties
Properties
body
box
Optional box Raw
face
gestures
hands
Type declaration
left: null | HandResult
right: null | HandResult
id
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface Result
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface Result
Result interface definition for Human library
Contains all possible detection results
-Hierarchy
Index
Properties
Properties
body
Hierarchy
Index
Properties
Properties
body
BodyResult: detection & analysis results
-Optional canvas
Optional canvas
optional processed canvas that can be used to draw input on screen
-face
face
FaceResult: detection & analysis results
-gesture
gesture
GestureResult: detection & analysis results
-hand
hand
HandResult: detection & analysis results
-object
object
ObjectResult: detection & analysis results
-performance
performance
global performance object with timing values for each operation
-persons
persons
getter property that returns unified persons object
-Readonly timestamp
Readonly timestamp
timestamp of detection representing the milliseconds elapsed since the UNIX epoch
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface SegmentationConfig
- Preparing search index...
- The search index is not available
@vladmandic/human - v2.3.3Interface SegmentationConfig
Controlls and configures all body segmentation module removes background from input containing person if segmentation is enabled it will run as preprocessing task before any other model @@ -11,4 +11,4 @@ remove background or replace it with user-provided background
Changing
-modelPath
will change module responsible for hand detection and tracking Allowed values areselfie.json
andmeet.json
Hierarchy
Index
Properties
Properties
blur
enabled
model Path
Hierarchy
Index
Properties
Properties
blur
enabled
model Path