From 64bd279fb8335bba6c34834dba9132be76d269e6 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 19 Oct 2021 07:58:51 -0400 Subject: [PATCH] update dependencies and refresh release --- CHANGELOG.md | 7 +- TODO.md | 13 + demo/multithread/index.js | 3 - package.json | 12 +- test/build.log | 48 +- test/test-main.js | 22 - test/test.log | 933 ++++++++++-------- typedoc/classes/Human.html | 54 +- typedoc/classes/Models.html | 4 +- typedoc/index.html | 22 +- typedoc/interfaces/BodyConfig.html | 4 +- typedoc/interfaces/BodyResult.html | 4 +- typedoc/interfaces/Config.html | 32 +- typedoc/interfaces/DrawOptions.html | 4 +- typedoc/interfaces/FaceAntiSpoofConfig.html | 4 +- typedoc/interfaces/FaceConfig.html | 4 +- typedoc/interfaces/FaceDescriptionConfig.html | 4 +- typedoc/interfaces/FaceDetectorConfig.html | 4 +- typedoc/interfaces/FaceEmotionConfig.html | 4 +- typedoc/interfaces/FaceIrisConfig.html | 4 +- typedoc/interfaces/FaceMeshConfig.html | 4 +- typedoc/interfaces/FaceResult.html | 4 +- typedoc/interfaces/FilterConfig.html | 36 +- typedoc/interfaces/GestureConfig.html | 4 +- typedoc/interfaces/HandConfig.html | 4 +- typedoc/interfaces/HandResult.html | 4 +- typedoc/interfaces/ObjectConfig.html | 4 +- typedoc/interfaces/ObjectResult.html | 4 +- typedoc/interfaces/PersonResult.html | 4 +- typedoc/interfaces/Result.html | 20 +- typedoc/interfaces/SegmentationConfig.html | 4 +- 31 files changed, 675 insertions(+), 603 deletions(-) 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 INFO:  @vladmandic/human version 2.3.3 -2021-10-15 09:30:57 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 -2021-10-15 09:30:57 INFO:  Application: {"name":"@vladmandic/human","version":"2.3.3"} -2021-10-15 09:30:57 INFO:  Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true} -2021-10-15 09:30:57 INFO:  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 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2021-10-15 09:30:57 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2021-10-15 09:30:57 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1275} -2021-10-15 09:30:57 STATE: 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 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283} -2021-10-15 09:30:57 STATE: 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 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350} -2021-10-15 09:30:57 STATE: 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 STATE: 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 STATE: 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 STATE: 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 STATE: 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 STATE: 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 STATE: 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 STATE: Typings: {"input":"src/human.ts","output":"types","files":6} -2021-10-15 09:31:22 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":36,"generated":true} -2021-10-15 09:31:54 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":91,"errors":0,"warnings":0} -2021-10-15 09:31:54 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2021-10-15 09:31:54 INFO:  Done... +2021-10-19 07:51:32 INFO:  @vladmandic/human version 2.3.3 +2021-10-19 07:51:32 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 +2021-10-19 07:51:32 INFO:  Application: {"name":"@vladmandic/human","version":"2.3.3"} +2021-10-19 07:51:32 INFO:  Environment: {"profile":"production","config":"build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2021-10-19 07:51:32 INFO:  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 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2021-10-19 07:51:32 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2021-10-19 07:51:32 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1275} +2021-10-19 07:51:32 STATE: 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 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283} +2021-10-19 07:51:32 STATE: 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 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350} +2021-10-19 07:51:32 STATE: 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 STATE: 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 STATE: 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 STATE: 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 STATE: 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 STATE: 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 STATE: 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 STATE: Typings: {"input":"src/human.ts","output":"types","files":6} +2021-10-19 07:51:59 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":36,"generated":true} +2021-10-19 07:52:30 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":91,"errors":0,"warnings":0} +2021-10-19 07:52:31 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2021-10-19 07:52:31 INFO:  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 INFO:  @vladmandic/human version 2.3.3 -2021-10-15 09:32:46 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 -2021-10-15 09:32:46 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2021-10-15 09:32:46 INFO:  demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"] -2021-10-15 09:32:46 INFO:  -2021-10-15 09:32:46 INFO:  test-node.js start -2021-10-15 09:32:47 STATE: test-node.js passed: configuration default validation [] -2021-10-15 09:32:47 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-15 09:32:48 STATE: 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 STATE: test-node.js passed: create human -2021-10-15 09:32:48 INFO:  test-node.js human version: 2.3.3 -2021-10-15 09:32:48 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-15 09:32:48 INFO:  test-node.js tfjs version: 3.9.0 -2021-10-15 09:32:48 STATE: test-node.js passed: set backend: tensorflow -2021-10-15 09:32:48 STATE: test-node.js tensors 1920 -2021-10-15 09:32:48 STATE: test-node.js passed: load models -2021-10-15 09:32:48 STATE: test-node.js result: defined models: 21 loaded models: 10 -2021-10-15 09:32:48 STATE: test-node.js passed: warmup: none default -2021-10-15 09:32:48 STATE: test-node.js passed: warmup none result match -2021-10-15 09:32:48 STATE: test-node.js event: image -2021-10-15 09:32:49 STATE: test-node.js event: detect -2021-10-15 09:32:49 STATE: test-node.js event: warmup -2021-10-15 09:32:49 STATE: test-node.js passed: warmup: face default -2021-10-15 09:32:49 DATA:  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 DATA:  test-node.js result: performance: load: 416 total: 1489 -2021-10-15 09:32:49 STATE: test-node.js passed: warmup face result match -2021-10-15 09:32:49 STATE: test-node.js event: image -2021-10-15 09:32:50 STATE: test-node.js event: detect -2021-10-15 09:32:50 STATE: test-node.js event: warmup -2021-10-15 09:32:50 STATE: test-node.js passed: warmup: body default -2021-10-15 09:32:50 DATA:  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 DATA:  test-node.js result: performance: load: 416 total: 1112 -2021-10-15 09:32:50 STATE: test-node.js passed: warmup body result match -2021-10-15 09:32:50 INFO:  test-node.js test default -2021-10-15 09:32:51 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:32:51 STATE: test-node.js event: image -2021-10-15 09:32:52 STATE: test-node.js event: detect -2021-10-15 09:32:52 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:32:52 DATA:  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 DATA:  test-node.js result: performance: load: 416 total: 1081 -2021-10-15 09:32:52 STATE: test-node.js passed: default result face match -2021-10-15 09:32:52 INFO:  test-node.js test sync -2021-10-15 09:32:53 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:32:53 STATE: test-node.js event: image -2021-10-15 09:32:54 STATE: test-node.js event: detect -2021-10-15 09:32:54 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:32:54 DATA:  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 DATA:  test-node.js result: performance: load: 416 total: 1021 -2021-10-15 09:32:54 STATE: test-node.js passed: default sync -2021-10-15 09:32:54 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-15 09:32:54 STATE: test-node.js passed: image input null [1,256,256,3] -2021-10-15 09:32:54 STATE: test-node.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-15 09:32:54 INFO:  test-node.js test face similarity -2021-10-15 09:32:54 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-15 09:32:54 STATE: test-node.js event: image -2021-10-15 09:32:55 STATE: test-node.js event: detect -2021-10-15 09:32:55 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-15 09:32:55 DATA:  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 DATA:  test-node.js result: performance: load: 416 total: 956 -2021-10-15 09:32:56 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:32:56 STATE: test-node.js event: image -2021-10-15 09:32:57 STATE: test-node.js event: detect -2021-10-15 09:32:57 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:32:57 DATA:  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 DATA:  test-node.js result: performance: load: 416 total: 1035 -2021-10-15 09:32:57 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-15 09:32:57 STATE: test-node.js event: image -2021-10-15 09:32:58 STATE: test-node.js event: detect -2021-10-15 09:32:58 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-15 09:32:58 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2021-10-15 09:32:58 DATA:  test-node.js result: performance: load: 416 total: 883 -2021-10-15 09:32:58 STATE: test-node.js passed: face descriptor -2021-10-15 09:32:58 STATE: test-node.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} -2021-10-15 09:32:58 INFO:  test-node.js test face matching -2021-10-15 09:32:58 STATE: test-node.js passed: face database 57 -2021-10-15 09:32:58 STATE: 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 INFO:  test-node.js test object -2021-10-15 09:32:59 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:32:59 STATE: test-node.js event: image -2021-10-15 09:33:00 STATE: test-node.js event: detect -2021-10-15 09:33:00 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:00 DATA:  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 DATA:  test-node.js result: performance: load: 416 total: 1026 -2021-10-15 09:33:00 STATE: test-node.js passed: object result match -2021-10-15 09:33:00 INFO:  test-node.js test sensitive -2021-10-15 09:33:01 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:33:01 STATE: test-node.js event: image -2021-10-15 09:33:02 STATE: test-node.js event: detect -2021-10-15 09:33:02 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:02 DATA:  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 DATA:  test-node.js result: performance: load: 416 total: 1058 -2021-10-15 09:33:02 STATE: test-node.js passed: sensitive result match -2021-10-15 09:33:02 STATE: test-node.js passed: sensitive face result match -2021-10-15 09:33:02 STATE: test-node.js passed: sensitive face emotion result mismatch 4 -2021-10-15 09:33:02 STATE: test-node.js passed: sensitive body result match -2021-10-15 09:33:02 STATE: test-node.js passed: sensitive hand result match -2021-10-15 09:33:02 INFO:  test-node.js test detectors -2021-10-15 09:33:03 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:33:03 STATE: test-node.js event: image -2021-10-15 09:33:04 STATE: test-node.js event: detect -2021-10-15 09:33:04 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:04 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-15 09:33:04 DATA:  test-node.js result: performance: load: 416 total: 648 -2021-10-15 09:33:04 STATE: test-node.js passed: detector result face match -2021-10-15 09:33:04 STATE: test-node.js passed: detector result hand match -2021-10-15 09:33:04 INFO:  test-node.js test body variants -2021-10-15 09:33:04 WARN:  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 WARN:  test-node.js stderr: throw new Error(name + " " + e.path + " does not exist: loading failed"); -2021-10-15 09:33:04 WARN:  test-node.js stderr: ^ -2021-10-15 09:33:04 WARN:  test-node.js stderr: Error: Path /home/vlado/dev/human/models/posenet.json does not exist: loading failed -2021-10-15 09:33:04 WARN:  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 WARN:  test-node.js stderr: Thrown at: -2021-10-15 09:33:04 WARN:  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 INFO:  -2021-10-15 09:33:04 INFO:  test-node-gpu.js start -2021-10-15 09:33:05 STATE: test-node-gpu.js passed: configuration default validation [] -2021-10-15 09:33:05 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-15 09:33:06 STATE: 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 STATE: test-node-gpu.js passed: create human -2021-10-15 09:33:06 INFO:  test-node-gpu.js human version: 2.3.3 -2021-10-15 09:33:06 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-15 09:33:06 INFO:  test-node-gpu.js tfjs version: 3.9.0 -2021-10-15 09:33:06 STATE: test-node-gpu.js passed: set backend: tensorflow -2021-10-15 09:33:06 STATE: test-node-gpu.js tensors 1920 -2021-10-15 09:33:06 STATE: test-node-gpu.js passed: load models -2021-10-15 09:33:06 STATE: test-node-gpu.js result: defined models: 21 loaded models: 10 -2021-10-15 09:33:06 STATE: test-node-gpu.js passed: warmup: none default -2021-10-15 09:33:06 STATE: test-node-gpu.js passed: warmup none result match -2021-10-15 09:33:06 STATE: test-node-gpu.js event: image -2021-10-15 09:33:07 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:07 STATE: test-node-gpu.js event: warmup -2021-10-15 09:33:07 STATE: test-node-gpu.js passed: warmup: face default -2021-10-15 09:33:07 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 374 total: 1482 -2021-10-15 09:33:07 STATE: test-node-gpu.js passed: warmup face result match -2021-10-15 09:33:07 STATE: test-node-gpu.js event: image -2021-10-15 09:33:08 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:08 STATE: test-node-gpu.js event: warmup -2021-10-15 09:33:08 STATE: test-node-gpu.js passed: warmup: body default -2021-10-15 09:33:08 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 374 total: 1049 -2021-10-15 09:33:08 STATE: test-node-gpu.js passed: warmup body result match -2021-10-15 09:33:08 INFO:  test-node-gpu.js test default -2021-10-15 09:33:09 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:33:09 STATE: test-node-gpu.js event: image -2021-10-15 09:33:10 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:10 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:10 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 374 total: 1036 -2021-10-15 09:33:10 STATE: test-node-gpu.js passed: default result face match -2021-10-15 09:33:10 INFO:  test-node-gpu.js test sync -2021-10-15 09:33:11 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:33:11 STATE: test-node-gpu.js event: image -2021-10-15 09:33:12 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:12 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:12 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 374 total: 1014 -2021-10-15 09:33:12 STATE: test-node-gpu.js passed: default sync -2021-10-15 09:33:12 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-15 09:33:12 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2021-10-15 09:33:12 STATE: test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-15 09:33:12 INFO:  test-node-gpu.js test face similarity -2021-10-15 09:33:12 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-15 09:33:12 STATE: test-node-gpu.js event: image -2021-10-15 09:33:13 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:13 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-15 09:33:13 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 374 total: 979 -2021-10-15 09:33:14 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:33:14 STATE: test-node-gpu.js event: image -2021-10-15 09:33:15 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:15 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:15 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 374 total: 1084 -2021-10-15 09:33:15 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-15 09:33:15 STATE: test-node-gpu.js event: image -2021-10-15 09:33:16 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:16 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-15 09:33:16 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2021-10-15 09:33:16 DATA:  test-node-gpu.js result: performance: load: 374 total: 940 -2021-10-15 09:33:16 STATE: test-node-gpu.js passed: face descriptor -2021-10-15 09:33:16 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} -2021-10-15 09:33:16 INFO:  test-node-gpu.js test face matching -2021-10-15 09:33:16 STATE: test-node-gpu.js passed: face database 57 -2021-10-15 09:33:16 STATE: 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 INFO:  test-node-gpu.js test object -2021-10-15 09:33:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:33:17 STATE: test-node-gpu.js event: image -2021-10-15 09:33:18 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:18 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 374 total: 948 -2021-10-15 09:33:18 STATE: test-node-gpu.js passed: object result match -2021-10-15 09:33:18 INFO:  test-node-gpu.js test sensitive -2021-10-15 09:33:19 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:33:19 STATE: test-node-gpu.js event: image -2021-10-15 09:33:20 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:20 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:20 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 374 total: 1065 -2021-10-15 09:33:20 STATE: test-node-gpu.js passed: sensitive result match -2021-10-15 09:33:20 STATE: test-node-gpu.js passed: sensitive face result match -2021-10-15 09:33:20 STATE: test-node-gpu.js passed: sensitive face emotion result mismatch 4 -2021-10-15 09:33:20 STATE: test-node-gpu.js passed: sensitive body result match -2021-10-15 09:33:20 STATE: test-node-gpu.js passed: sensitive hand result match -2021-10-15 09:33:20 INFO:  test-node-gpu.js test detectors -2021-10-15 09:33:21 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-15 09:33:21 STATE: test-node-gpu.js event: image -2021-10-15 09:33:22 STATE: test-node-gpu.js event: detect -2021-10-15 09:33:22 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:22 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-15 09:33:22 DATA:  test-node-gpu.js result: performance: load: 374 total: 664 -2021-10-15 09:33:22 STATE: test-node-gpu.js passed: detector result face match -2021-10-15 09:33:22 STATE: test-node-gpu.js passed: detector result hand match -2021-10-15 09:33:22 INFO:  test-node-gpu.js test body variants -2021-10-15 09:33:22 WARN:  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 WARN:  test-node-gpu.js stderr: throw new Error(name + " " + e.path + " does not exist: loading failed"); -2021-10-15 09:33:22 WARN:  test-node-gpu.js stderr: ^ -2021-10-15 09:33:22 WARN:  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 WARN:  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 WARN:  test-node-gpu.js stderr: Thrown at: -2021-10-15 09:33:22 WARN:  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 INFO:  -2021-10-15 09:33:22 INFO:  test-node-wasm.js start -2021-10-15 09:33:22 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2021-10-15 09:33:22 STATE: test-node-wasm.js passed: configuration default validation [] -2021-10-15 09:33:22 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-15 09:33:24 STATE: 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 STATE: test-node-wasm.js passed: create human -2021-10-15 09:33:24 INFO:  test-node-wasm.js human version: 2.3.3 -2021-10-15 09:33:24 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-15 09:33:24 INFO:  test-node-wasm.js tfjs version: 3.9.0 -2021-10-15 09:33:24 STATE: test-node-wasm.js passed: set backend: wasm -2021-10-15 09:33:24 STATE: test-node-wasm.js tensors 1920 -2021-10-15 09:33:24 STATE: test-node-wasm.js passed: load models -2021-10-15 09:33:24 STATE: test-node-wasm.js result: defined models: 21 loaded models: 10 -2021-10-15 09:33:24 STATE: test-node-wasm.js passed: warmup: none default -2021-10-15 09:33:24 STATE: test-node-wasm.js passed: warmup none result match -2021-10-15 09:33:24 STATE: test-node-wasm.js event: image -2021-10-15 09:33:25 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:25 STATE: test-node-wasm.js event: warmup -2021-10-15 09:33:25 STATE: test-node-wasm.js passed: warmup: face default -2021-10-15 09:33:25 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 1281 -2021-10-15 09:33:25 ERROR: test-node-wasm.js failed: warmup face result mismatch 1 1 1 5 -2021-10-15 09:33:25 STATE: test-node-wasm.js event: image -2021-10-15 09:33:26 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:26 STATE: test-node-wasm.js event: warmup -2021-10-15 09:33:26 STATE: test-node-wasm.js passed: warmup: body default -2021-10-15 09:33:26 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 857 -2021-10-15 09:33:26 STATE: test-node-wasm.js passed: warmup body result match -2021-10-15 09:33:26 INFO:  test-node-wasm.js test default -2021-10-15 09:33:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:28 STATE: test-node-wasm.js event: image -2021-10-15 09:33:29 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:29 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 877 -2021-10-15 09:33:29 STATE: test-node-wasm.js passed: default result face match -2021-10-15 09:33:29 INFO:  test-node-wasm.js test sync -2021-10-15 09:33:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:31 STATE: test-node-wasm.js event: image -2021-10-15 09:33:32 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:32 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:32 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 871 -2021-10-15 09:33:32 STATE: test-node-wasm.js passed: default sync -2021-10-15 09:33:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-15 09:33:32 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2021-10-15 09:33:32 STATE: test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-15 09:33:32 INFO:  test-node-wasm.js test face similarity -2021-10-15 09:33:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-15 09:33:32 STATE: test-node-wasm.js event: image -2021-10-15 09:33:32 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:32 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-15 09:33:32 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 743 -2021-10-15 09:33:34 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:34 STATE: test-node-wasm.js event: image -2021-10-15 09:33:35 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:35 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 826 -2021-10-15 09:33:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-15 09:33:36 STATE: test-node-wasm.js event: image -2021-10-15 09:33:36 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-15 09:33:36 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 675 -2021-10-15 09:33:36 STATE: test-node-wasm.js passed: face descriptor -2021-10-15 09:33:36 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.9040641336882139,0.895983704095898],"descriptors":[1024,1024,1024]} -2021-10-15 09:33:36 INFO:  test-node-wasm.js test face matching -2021-10-15 09:33:36 STATE: test-node-wasm.js passed: face database 57 -2021-10-15 09:33:36 STATE: 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 INFO:  test-node-wasm.js test object -2021-10-15 09:33:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:38 STATE: test-node-wasm.js event: image -2021-10-15 09:33:39 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:39 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:39 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 854 -2021-10-15 09:33:39 ERROR: test-node-wasm.js failed: object result mismatch 0 -2021-10-15 09:33:39 INFO:  test-node-wasm.js test sensitive -2021-10-15 09:33:41 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:41 STATE: test-node-wasm.js event: image -2021-10-15 09:33:42 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:42 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:42 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 998 -2021-10-15 09:33:42 STATE: test-node-wasm.js passed: sensitive result match -2021-10-15 09:33:42 STATE: test-node-wasm.js passed: sensitive face result match -2021-10-15 09:33:42 ERROR: test-node-wasm.js failed: sensitive face emotion result mismatch 3 -2021-10-15 09:33:42 STATE: test-node-wasm.js passed: sensitive body result match -2021-10-15 09:33:42 STATE: test-node-wasm.js passed: sensitive hand result match -2021-10-15 09:33:42 INFO:  test-node-wasm.js test detectors -2021-10-15 09:33:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:43 STATE: test-node-wasm.js event: image -2021-10-15 09:33:44 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:44 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:33:44 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-15 09:33:44 DATA:  test-node-wasm.js result: performance: load: 1578 total: 369 -2021-10-15 09:33:44 STATE: test-node-wasm.js passed: detector result face match -2021-10-15 09:33:44 STATE: test-node-wasm.js passed: detector result hand match -2021-10-15 09:33:44 INFO:  test-node-wasm.js test body variants -2021-10-15 09:33:46 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:46 STATE: test-node-wasm.js event: image -2021-10-15 09:33:46 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet -2021-10-15 09:33:46 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.91,"keypoints":17} -2021-10-15 09:33:46 DATA:  test-node-wasm.js result: performance: load: 1578 total: 490 -2021-10-15 09:33:46 STATE: test-node-wasm.js passed: body posenet -2021-10-15 09:33:48 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:48 STATE: test-node-wasm.js event: image -2021-10-15 09:33:49 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:49 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet -2021-10-15 09:33:49 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-15 09:33:49 DATA:  test-node-wasm.js result: performance: load: 1578 total: 355 -2021-10-15 09:33:49 STATE: test-node-wasm.js passed: body movenet -2021-10-15 09:33:49 INFO:  test-node-wasm.js test hand variants -2021-10-15 09:33:49 DATA:  test-node-wasm.js stdout: 09:33:49.497 Human: load model failed: handskeleton.json -2021-10-15 09:33:51 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:51 STATE: test-node-wasm.js event: image -2021-10-15 09:33:51 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:51 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg handdetect -2021-10-15 09:33:51 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 391 -2021-10-15 09:33:51 STATE: test-node-wasm.js passed: hand handdetect -2021-10-15 09:33:53 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:33:53 STATE: test-node-wasm.js event: image -2021-10-15 09:33:53 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:53 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg handtrack -2021-10-15 09:33:53 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 350 -2021-10-15 09:33:53 STATE: test-node-wasm.js passed: hand handdetect -2021-10-15 09:33:53 STATE: test-node-wasm.js event: image -2021-10-15 09:33:54 STATE: test-node-wasm.js event: detect -2021-10-15 09:33:54 STATE: test-node-wasm.js passed: detect: random default -2021-10-15 09:33:54 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1578 total: 329 -2021-10-15 09:33:54 INFO:  test-node-wasm.js test: first instance -2021-10-15 09:33:54 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-15 09:33:55 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-15 09:33:55 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2 total: 639 -2021-10-15 09:33:55 INFO:  test-node-wasm.js test: second instance -2021-10-15 09:33:56 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-15 09:33:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-15 09:33:56 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2 total: 631 -2021-10-15 09:33:56 INFO:  test-node-wasm.js test: concurrent -2021-10-15 09:33:56 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-15 09:33:56 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-15 09:33:58 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:34:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:34:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-15 09:34:01 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-15 09:34:01 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-15 09:34:03 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-15 09:34:03 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-15 09:34:04 STATE: test-node-wasm.js event: image -2021-10-15 09:34:04 STATE: test-node-wasm.js event: image -2021-10-15 09:34:04 STATE: test-node-wasm.js event: image -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2382 total: 7314 -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2382 total: 7314 -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2382 total: 7314 -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2382 total: 7314 -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2382 total: 7314 -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2382 total: 7314 -2021-10-15 09:34:08 STATE: test-node-wasm.js event: detect -2021-10-15 09:34:08 STATE: test-node-wasm.js event: detect -2021-10-15 09:34:08 STATE: test-node-wasm.js event: detect -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 4791 total: 4933 -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 4791 total: 4933 -2021-10-15 09:34:08 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-15 09:34:08 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 4791 total: 4933 -2021-10-15 09:34:08 STATE: test-node-wasm.js event: image -2021-10-15 09:34:09 STATE: test-node-wasm.js event: detect -2021-10-15 09:34:09 STATE: test-node-wasm.js passed: monkey patch -2021-10-15 09:34:09 STATE: test-node-wasm.js passed: segmentation [65536] -2021-10-15 09:34:09 STATE: test-node-wasm.js passeed: equal usage -2021-10-15 09:34:09 INFO:  test-node-wasm.js events: {"image":19,"detect":19,"warmup":2} -2021-10-15 09:34:09 INFO:  test-node-wasm.js tensors 2143 -2021-10-15 09:34:09 INFO:  test-node-wasm.js test complete: 46452 ms -2021-10-15 09:34:09 INFO:  -2021-10-15 09:34:09 INFO:  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 INFO:  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 INFO:  @vladmandic/human version 2.3.3 +2021-10-19 07:55:50 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 +2021-10-19 07:55:50 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2021-10-19 07:55:50 INFO:  demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"] +2021-10-19 07:55:50 INFO:  +2021-10-19 07:55:50 INFO:  test-node.js start +2021-10-19 07:55:51 STATE: test-node.js passed: configuration default validation [] +2021-10-19 07:55:51 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-19 07:55:52 STATE: 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 STATE: test-node.js passed: create human +2021-10-19 07:55:52 INFO:  test-node.js human version: 2.3.3 +2021-10-19 07:55:52 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-19 07:55:52 INFO:  test-node.js tfjs version: 3.9.0 +2021-10-19 07:55:52 STATE: test-node.js passed: set backend: tensorflow +2021-10-19 07:55:52 STATE: test-node.js tensors 1920 +2021-10-19 07:55:52 STATE: test-node.js passed: load models +2021-10-19 07:55:52 STATE: test-node.js result: defined models: 21 loaded models: 10 +2021-10-19 07:55:52 STATE: test-node.js passed: warmup: none default +2021-10-19 07:55:52 STATE: test-node.js passed: warmup none result match +2021-10-19 07:55:52 STATE: test-node.js event: image +2021-10-19 07:55:53 STATE: test-node.js event: detect +2021-10-19 07:55:53 STATE: test-node.js event: warmup +2021-10-19 07:55:53 STATE: test-node.js passed: warmup: face default +2021-10-19 07:55:53 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 1419 +2021-10-19 07:55:53 STATE: test-node.js passed: warmup face result match +2021-10-19 07:55:53 STATE: test-node.js event: image +2021-10-19 07:55:54 STATE: test-node.js event: detect +2021-10-19 07:55:54 STATE: test-node.js event: warmup +2021-10-19 07:55:54 STATE: test-node.js passed: warmup: body default +2021-10-19 07:55:54 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 1050 +2021-10-19 07:55:54 STATE: test-node.js passed: warmup body result match +2021-10-19 07:55:54 INFO:  test-node.js test default +2021-10-19 07:55:55 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:55:55 STATE: test-node.js event: image +2021-10-19 07:55:56 STATE: test-node.js event: detect +2021-10-19 07:55:56 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:55:56 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 1017 +2021-10-19 07:55:56 STATE: test-node.js passed: default result face match +2021-10-19 07:55:56 INFO:  test-node.js test sync +2021-10-19 07:55:57 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:55:57 STATE: test-node.js event: image +2021-10-19 07:55:58 STATE: test-node.js event: detect +2021-10-19 07:55:58 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:55:58 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 976 +2021-10-19 07:55:58 STATE: test-node.js passed: default sync +2021-10-19 07:55:58 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:55:58 STATE: test-node.js passed: image input null [1,256,256,3] +2021-10-19 07:55:58 STATE: test-node.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-19 07:55:58 INFO:  test-node.js test face similarity +2021-10-19 07:55:58 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:55:58 STATE: test-node.js event: image +2021-10-19 07:55:59 STATE: test-node.js event: detect +2021-10-19 07:55:59 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:55:59 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 983 +2021-10-19 07:56:00 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:00 STATE: test-node.js event: image +2021-10-19 07:56:01 STATE: test-node.js event: detect +2021-10-19 07:56:01 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:01 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 1087 +2021-10-19 07:56:01 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:01 STATE: test-node.js event: image +2021-10-19 07:56:02 STATE: test-node.js event: detect +2021-10-19 07:56:02 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:02 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2021-10-19 07:56:02 DATA:  test-node.js result: performance: load: 379 total: 909 +2021-10-19 07:56:02 STATE: test-node.js passed: face descriptor +2021-10-19 07:56:02 STATE: test-node.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} +2021-10-19 07:56:02 INFO:  test-node.js test face matching +2021-10-19 07:56:02 STATE: test-node.js passed: face database 57 +2021-10-19 07:56:02 STATE: 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 INFO:  test-node.js test object +2021-10-19 07:56:03 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:03 STATE: test-node.js event: image +2021-10-19 07:56:04 STATE: test-node.js event: detect +2021-10-19 07:56:04 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:04 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 952 +2021-10-19 07:56:04 STATE: test-node.js passed: object result match +2021-10-19 07:56:04 INFO:  test-node.js test sensitive +2021-10-19 07:56:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:05 STATE: test-node.js event: image +2021-10-19 07:56:06 STATE: test-node.js event: detect +2021-10-19 07:56:06 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:06 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 1055 +2021-10-19 07:56:06 STATE: test-node.js passed: sensitive result match +2021-10-19 07:56:06 STATE: test-node.js passed: sensitive face result match +2021-10-19 07:56:06 STATE: test-node.js passed: sensitive face emotion result mismatch 4 +2021-10-19 07:56:06 STATE: test-node.js passed: sensitive body result match +2021-10-19 07:56:06 STATE: test-node.js passed: sensitive hand result match +2021-10-19 07:56:06 INFO:  test-node.js test detectors +2021-10-19 07:56:07 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:07 STATE: test-node.js event: image +2021-10-19 07:56:07 STATE: test-node.js event: detect +2021-10-19 07:56:07 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:07 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-19 07:56:07 DATA:  test-node.js result: performance: load: 379 total: 667 +2021-10-19 07:56:07 STATE: test-node.js passed: detector result face match +2021-10-19 07:56:07 STATE: test-node.js passed: detector result hand match +2021-10-19 07:56:08 STATE: test-node.js event: image +2021-10-19 07:56:08 STATE: test-node.js event: detect +2021-10-19 07:56:08 STATE: test-node.js passed: detect: random default +2021-10-19 07:56:08 DATA:  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 DATA:  test-node.js result: performance: load: 379 total: 656 +2021-10-19 07:56:08 INFO:  test-node.js test: first instance +2021-10-19 07:56:09 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:09 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:09 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-19 07:56:09 DATA:  test-node.js result: performance: load: 2 total: 677 +2021-10-19 07:56:09 INFO:  test-node.js test: second instance +2021-10-19 07:56:10 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:10 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:10 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-19 07:56:10 DATA:  test-node.js result: performance: load: 2 total: 644 +2021-10-19 07:56:10 INFO:  test-node.js test: concurrent +2021-10-19 07:56:10 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:56:10 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:56:11 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:12 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:12 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:13 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:13 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:56:14 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:14 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:14 STATE: test-node.js event: image +2021-10-19 07:56:14 STATE: test-node.js event: image +2021-10-19 07:56:14 STATE: test-node.js event: image +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:20 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-19 07:56:20 DATA:  test-node.js result: performance: load: 1196 total: 6977 +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:20 DATA:  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 DATA:  test-node.js result: performance: load: 1196 total: 6977 +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:56:20 DATA:  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 DATA:  test-node.js result: performance: load: 1196 total: 6979 +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:56:20 DATA:  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 DATA:  test-node.js result: performance: load: 1196 total: 6979 +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:20 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-19 07:56:20 DATA:  test-node.js result: performance: load: 1196 total: 6979 +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:20 DATA:  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 DATA:  test-node.js result: performance: load: 1196 total: 6979 +2021-10-19 07:56:20 STATE: test-node.js event: detect +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:20 DATA:  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 DATA:  test-node.js result: performance: load: 2485 total: 5783 +2021-10-19 07:56:20 STATE: test-node.js event: detect +2021-10-19 07:56:20 STATE: test-node.js event: detect +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:56:20 DATA:  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 DATA:  test-node.js result: performance: load: 2485 total: 5783 +2021-10-19 07:56:20 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:20 DATA:  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 DATA:  test-node.js result: performance: load: 2485 total: 5783 +2021-10-19 07:56:20 STATE: test-node.js event: image +2021-10-19 07:56:21 STATE: test-node.js event: detect +2021-10-19 07:56:21 STATE: test-node.js passed: monkey patch +2021-10-19 07:56:21 STATE: test-node.js passed: segmentation [65536] +2021-10-19 07:56:21 STATE: test-node.js passeed: equal usage +2021-10-19 07:56:21 INFO:  test-node.js events: {"image":15,"detect":15,"warmup":2} +2021-10-19 07:56:21 INFO:  test-node.js tensors 1924 +2021-10-19 07:56:21 INFO:  test-node.js test complete: 29278 ms +2021-10-19 07:56:21 INFO:  +2021-10-19 07:56:21 INFO:  test-node-gpu.js start +2021-10-19 07:56:22 STATE: test-node-gpu.js passed: configuration default validation [] +2021-10-19 07:56:22 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-19 07:56:22 STATE: 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 STATE: test-node-gpu.js passed: create human +2021-10-19 07:56:22 INFO:  test-node-gpu.js human version: 2.3.3 +2021-10-19 07:56:22 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-19 07:56:22 INFO:  test-node-gpu.js tfjs version: 3.9.0 +2021-10-19 07:56:22 STATE: test-node-gpu.js passed: set backend: tensorflow +2021-10-19 07:56:22 STATE: test-node-gpu.js tensors 1920 +2021-10-19 07:56:22 STATE: test-node-gpu.js passed: load models +2021-10-19 07:56:22 STATE: test-node-gpu.js result: defined models: 21 loaded models: 10 +2021-10-19 07:56:22 STATE: test-node-gpu.js passed: warmup: none default +2021-10-19 07:56:22 STATE: test-node-gpu.js passed: warmup none result match +2021-10-19 07:56:23 STATE: test-node-gpu.js event: image +2021-10-19 07:56:24 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:24 STATE: test-node-gpu.js event: warmup +2021-10-19 07:56:24 STATE: test-node-gpu.js passed: warmup: face default +2021-10-19 07:56:24 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1635 +2021-10-19 07:56:24 STATE: test-node-gpu.js passed: warmup face result match +2021-10-19 07:56:24 STATE: test-node-gpu.js event: image +2021-10-19 07:56:26 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:26 STATE: test-node-gpu.js event: warmup +2021-10-19 07:56:26 STATE: test-node-gpu.js passed: warmup: body default +2021-10-19 07:56:26 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1358 +2021-10-19 07:56:26 STATE: test-node-gpu.js passed: warmup body result match +2021-10-19 07:56:26 INFO:  test-node-gpu.js test default +2021-10-19 07:56:27 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:27 STATE: test-node-gpu.js event: image +2021-10-19 07:56:28 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:28 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:28 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1316 +2021-10-19 07:56:28 STATE: test-node-gpu.js passed: default result face match +2021-10-19 07:56:28 INFO:  test-node-gpu.js test sync +2021-10-19 07:56:29 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:29 STATE: test-node-gpu.js event: image +2021-10-19 07:56:30 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:30 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:30 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1499 +2021-10-19 07:56:30 STATE: test-node-gpu.js passed: default sync +2021-10-19 07:56:30 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:56:30 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2021-10-19 07:56:30 STATE: test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-19 07:56:30 INFO:  test-node-gpu.js test face similarity +2021-10-19 07:56:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:56:31 STATE: test-node-gpu.js event: image +2021-10-19 07:56:32 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:32 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:56:32 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1664 +2021-10-19 07:56:33 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:33 STATE: test-node-gpu.js event: image +2021-10-19 07:56:35 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:35 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:35 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1484 +2021-10-19 07:56:35 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:35 STATE: test-node-gpu.js event: image +2021-10-19 07:56:37 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:37 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:37 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2021-10-19 07:56:37 DATA:  test-node-gpu.js result: performance: load: 451 total: 1404 +2021-10-19 07:56:37 STATE: test-node-gpu.js passed: face descriptor +2021-10-19 07:56:37 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} +2021-10-19 07:56:37 INFO:  test-node-gpu.js test face matching +2021-10-19 07:56:37 STATE: test-node-gpu.js passed: face database 57 +2021-10-19 07:56:37 STATE: 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 INFO:  test-node-gpu.js test object +2021-10-19 07:56:38 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:38 STATE: test-node-gpu.js event: image +2021-10-19 07:56:39 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:39 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:39 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1352 +2021-10-19 07:56:39 STATE: test-node-gpu.js passed: object result match +2021-10-19 07:56:39 INFO:  test-node-gpu.js test sensitive +2021-10-19 07:56:40 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:40 STATE: test-node-gpu.js event: image +2021-10-19 07:56:42 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:42 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:42 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1551 +2021-10-19 07:56:42 STATE: test-node-gpu.js passed: sensitive result match +2021-10-19 07:56:42 STATE: test-node-gpu.js passed: sensitive face result match +2021-10-19 07:56:42 STATE: test-node-gpu.js passed: sensitive face emotion result mismatch 4 +2021-10-19 07:56:42 STATE: test-node-gpu.js passed: sensitive body result match +2021-10-19 07:56:42 STATE: test-node-gpu.js passed: sensitive hand result match +2021-10-19 07:56:42 INFO:  test-node-gpu.js test detectors +2021-10-19 07:56:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:43 STATE: test-node-gpu.js event: image +2021-10-19 07:56:44 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:44 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:44 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-19 07:56:44 DATA:  test-node-gpu.js result: performance: load: 451 total: 988 +2021-10-19 07:56:44 STATE: test-node-gpu.js passed: detector result face match +2021-10-19 07:56:44 STATE: test-node-gpu.js passed: detector result hand match +2021-10-19 07:56:44 STATE: test-node-gpu.js event: image +2021-10-19 07:56:45 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:45 STATE: test-node-gpu.js passed: detect: random default +2021-10-19 07:56:45 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 451 total: 1039 +2021-10-19 07:56:45 INFO:  test-node-gpu.js test: first instance +2021-10-19 07:56:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:46 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:46 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-19 07:56:46 DATA:  test-node-gpu.js result: performance: load: 2 total: 955 +2021-10-19 07:56:46 INFO:  test-node-gpu.js test: second instance +2021-10-19 07:56:47 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:48 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:48 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-19 07:56:48 DATA:  test-node-gpu.js result: performance: load: 2 total: 859 +2021-10-19 07:56:48 INFO:  test-node-gpu.js test: concurrent +2021-10-19 07:56:48 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:56:48 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:56:49 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-19 07:56:51 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-19 07:56:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-19 07:56:52 STATE: test-node-gpu.js event: image +2021-10-19 07:56:52 STATE: test-node-gpu.js event: image +2021-10-19 07:56:52 STATE: test-node-gpu.js event: image +2021-10-19 07:56:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2021-10-19 07:56:58 DATA:  test-node-gpu.js result: performance: load: 1333 total: 8261 +2021-10-19 07:56:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:58 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 1333 total: 8261 +2021-10-19 07:56:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:56:58 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 1333 total: 8266 +2021-10-19 07:56:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:56:59 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 1333 total: 8266 +2021-10-19 07:56:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:59 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-19 07:56:59 DATA:  test-node-gpu.js result: performance: load: 1333 total: 8266 +2021-10-19 07:56:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:59 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 1333 total: 8266 +2021-10-19 07:56:59 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:56:59 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 2556 total: 6933 +2021-10-19 07:56:59 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:59 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:56:59 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 2556 total: 6934 +2021-10-19 07:56:59 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:56:59 DATA:  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 DATA:  test-node-gpu.js result: performance: load: 2556 total: 6934 +2021-10-19 07:56:59 STATE: test-node-gpu.js event: image +2021-10-19 07:56:59 STATE: test-node-gpu.js event: detect +2021-10-19 07:56:59 STATE: test-node-gpu.js passed: monkey patch +2021-10-19 07:56:59 STATE: test-node-gpu.js passed: segmentation [65536] +2021-10-19 07:56:59 STATE: test-node-gpu.js passeed: equal usage +2021-10-19 07:56:59 INFO:  test-node-gpu.js events: {"image":15,"detect":15,"warmup":2} +2021-10-19 07:56:59 INFO:  test-node-gpu.js tensors 1924 +2021-10-19 07:56:59 INFO:  test-node-gpu.js test complete: 37235 ms +2021-10-19 07:56:59 INFO:  +2021-10-19 07:56:59 INFO:  test-node-wasm.js start +2021-10-19 07:57:00 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2021-10-19 07:57:00 STATE: test-node-wasm.js passed: configuration default validation [] +2021-10-19 07:57:00 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-19 07:57:01 STATE: 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 STATE: test-node-wasm.js passed: create human +2021-10-19 07:57:01 INFO:  test-node-wasm.js human version: 2.3.3 +2021-10-19 07:57:01 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-19 07:57:01 INFO:  test-node-wasm.js tfjs version: 3.9.0 +2021-10-19 07:57:01 STATE: test-node-wasm.js passed: set backend: wasm +2021-10-19 07:57:01 STATE: test-node-wasm.js tensors 1920 +2021-10-19 07:57:01 STATE: test-node-wasm.js passed: load models +2021-10-19 07:57:01 STATE: test-node-wasm.js result: defined models: 21 loaded models: 10 +2021-10-19 07:57:01 STATE: test-node-wasm.js passed: warmup: none default +2021-10-19 07:57:01 STATE: test-node-wasm.js passed: warmup none result match +2021-10-19 07:57:01 STATE: test-node-wasm.js event: image +2021-10-19 07:57:03 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:03 STATE: test-node-wasm.js event: warmup +2021-10-19 07:57:03 STATE: test-node-wasm.js passed: warmup: face default +2021-10-19 07:57:03 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 1217 +2021-10-19 07:57:03 ERROR: test-node-wasm.js failed: warmup face result mismatch 1 1 1 5 +2021-10-19 07:57:03 STATE: test-node-wasm.js event: image +2021-10-19 07:57:04 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:04 STATE: test-node-wasm.js event: warmup +2021-10-19 07:57:04 STATE: test-node-wasm.js passed: warmup: body default +2021-10-19 07:57:04 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 847 +2021-10-19 07:57:04 STATE: test-node-wasm.js passed: warmup body result match +2021-10-19 07:57:04 INFO:  test-node-wasm.js test default +2021-10-19 07:57:05 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:05 STATE: test-node-wasm.js event: image +2021-10-19 07:57:06 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:06 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:06 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 874 +2021-10-19 07:57:06 STATE: test-node-wasm.js passed: default result face match +2021-10-19 07:57:06 INFO:  test-node-wasm.js test sync +2021-10-19 07:57:08 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:08 STATE: test-node-wasm.js event: image +2021-10-19 07:57:09 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:09 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:09 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 867 +2021-10-19 07:57:09 STATE: test-node-wasm.js passed: default sync +2021-10-19 07:57:09 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-19 07:57:09 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2021-10-19 07:57:09 STATE: test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-19 07:57:09 INFO:  test-node-wasm.js test face similarity +2021-10-19 07:57:09 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-19 07:57:09 STATE: test-node-wasm.js event: image +2021-10-19 07:57:10 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:57:10 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 760 +2021-10-19 07:57:12 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:12 STATE: test-node-wasm.js event: image +2021-10-19 07:57:13 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:13 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:13 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 871 +2021-10-19 07:57:13 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-19 07:57:13 STATE: test-node-wasm.js event: image +2021-10-19 07:57:14 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:14 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:57:14 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 666 +2021-10-19 07:57:14 STATE: test-node-wasm.js passed: face descriptor +2021-10-19 07:57:14 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.9040641336882139,0.895983704095898],"descriptors":[1024,1024,1024]} +2021-10-19 07:57:14 INFO:  test-node-wasm.js test face matching +2021-10-19 07:57:14 STATE: test-node-wasm.js passed: face database 57 +2021-10-19 07:57:14 STATE: 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 INFO:  test-node-wasm.js test object +2021-10-19 07:57:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:16 STATE: test-node-wasm.js event: image +2021-10-19 07:57:16 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:16 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:16 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 827 +2021-10-19 07:57:16 ERROR: test-node-wasm.js failed: object result mismatch 0 +2021-10-19 07:57:16 INFO:  test-node-wasm.js test sensitive +2021-10-19 07:57:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:18 STATE: test-node-wasm.js event: image +2021-10-19 07:57:19 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:19 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 992 +2021-10-19 07:57:19 STATE: test-node-wasm.js passed: sensitive result match +2021-10-19 07:57:19 STATE: test-node-wasm.js passed: sensitive face result match +2021-10-19 07:57:19 ERROR: test-node-wasm.js failed: sensitive face emotion result mismatch 3 +2021-10-19 07:57:19 STATE: test-node-wasm.js passed: sensitive body result match +2021-10-19 07:57:19 STATE: test-node-wasm.js passed: sensitive hand result match +2021-10-19 07:57:19 INFO:  test-node-wasm.js test detectors +2021-10-19 07:57:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:21 STATE: test-node-wasm.js event: image +2021-10-19 07:57:21 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-19 07:57:21 DATA:  test-node-wasm.js result: performance: load: 1286 total: 357 +2021-10-19 07:57:21 STATE: test-node-wasm.js passed: detector result face match +2021-10-19 07:57:21 STATE: test-node-wasm.js passed: detector result hand match +2021-10-19 07:57:22 STATE: test-node-wasm.js event: image +2021-10-19 07:57:22 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:22 STATE: test-node-wasm.js passed: detect: random default +2021-10-19 07:57:22 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 1286 total: 328 +2021-10-19 07:57:22 INFO:  test-node-wasm.js test: first instance +2021-10-19 07:57:22 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-19 07:57:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:57:23 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2 total: 347 +2021-10-19 07:57:23 INFO:  test-node-wasm.js test: second instance +2021-10-19 07:57:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-19 07:57:24 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:57:24 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2 total: 330 +2021-10-19 07:57:24 INFO:  test-node-wasm.js test: concurrent +2021-10-19 07:57:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-19 07:57:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-19 07:57:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-19 07:57:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-19 07:57:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-19 07:57:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-19 07:57:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-19 07:57:31 STATE: test-node-wasm.js event: image +2021-10-19 07:57:31 STATE: test-node-wasm.js event: image +2021-10-19 07:57:31 STATE: test-node-wasm.js event: image +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:57:34 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2338 total: 5543 +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:57:34 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2338 total: 5543 +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:57:34 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2338 total: 5545 +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:57:34 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 2338 total: 5545 +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:34 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-19 07:57:34 DATA:  test-node-wasm.js result: performance: load: 2338 total: 5545 +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:34 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-19 07:57:34 DATA:  test-node-wasm.js result: performance: load: 2338 total: 5545 +2021-10-19 07:57:34 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-19 07:57:34 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 4707 total: 3207 +2021-10-19 07:57:34 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:34 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-19 07:57:34 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 4707 total: 3207 +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-19 07:57:34 DATA:  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 DATA:  test-node-wasm.js result: performance: load: 4707 total: 3207 +2021-10-19 07:57:34 STATE: test-node-wasm.js event: image +2021-10-19 07:57:34 STATE: test-node-wasm.js event: detect +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: monkey patch +2021-10-19 07:57:34 STATE: test-node-wasm.js passed: segmentation [65536] +2021-10-19 07:57:34 STATE: test-node-wasm.js passeed: equal usage +2021-10-19 07:57:34 INFO:  test-node-wasm.js events: {"image":15,"detect":15,"warmup":2} +2021-10-19 07:57:34 INFO:  test-node-wasm.js tensors 1926 +2021-10-19 07:57:34 INFO:  test-node-wasm.js test complete: 34327 ms +2021-10-19 07:57:34 INFO:  +2021-10-19 07:57:34 INFO:  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 INFO:  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
Options
All
  • Public
  • Public/Protected
  • All
Menu
+Human | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu

Human* library main class

All methods and properties are available only as members of Human class

    @@ -8,16 +8,16 @@
param userConfig:

Config

returns

instance

-

Hierarchy

  • Human

Index

Constructors

constructor

Hierarchy

  • Human

Index

Constructors

constructor

  • Constructor for Human library that is futher used for all operations

    Parameters

    • Optional userConfig: Partial<Config>

    Returns Human

    instance: Human

    -

Properties

config

config: Config
+

Properties

config

config: Config

Current configuration

-

distance

distance: (descriptor1: Descriptor, descriptor2: Descriptor, options?: { order: number }) => number = ...

Type declaration

distance

distance: (descriptor1: Descriptor, descriptor2: Descriptor, options?: { order: number }) => number = match.distance

Type declaration

    • Calculates distance between two descriptors

      • Minkowski distance algorithm of nth order if order is different than 2
      • @@ -28,7 +28,7 @@
      • order

      Note: No checks are performed for performance reasons so make sure to pass valid number arrays of equal length

      -

      Parameters

      Returns number

draw

draw: { all: any; body: any; canvas: any; face: any; gesture: any; hand: any; object: any; options: DrawOptions; person: any }
+

Parameters

Returns number

draw

draw: { all: any; body: any; canvas: any; face: any; gesture: any; hand: any; object: any; options: DrawOptions; person: any }

Draw helper classes that can draw detected objects on canvas using specified draw

  • options: DrawOptions global settings for all draw operations, can be overriden for each draw method
  • @@ -38,9 +38,9 @@
  • canvas: draw processed canvas which is a processed copy of the input
  • all: meta-function that performs: canvas, face, body, hand
-

Type declaration

  • all: any
  • body: any
  • canvas: any
  • face: any
  • gesture: any
  • hand: any
  • object: any
  • options: DrawOptions
  • person: any

env

env: Env
+

Type declaration

  • all: any
  • body: any
  • canvas: any
  • face: any
  • gesture: any
  • hand: any
  • object: any
  • options: DrawOptions
  • person: any

env

env: Env

Object containing environment information used for diagnostics

-

events

events: undefined | EventTarget
+

events

events: undefined | EventTarget

Container for events dispatched by Human

Possible events:

    @@ -51,13 +51,13 @@
  • warmup: triggered when warmup is complete
  • error: triggered on some errors
-

faceTriangulation

faceTriangulation: number[]
+

faceTriangulation

faceTriangulation: number[]

Reference face triangualtion array of 468 points, used for triangle references between points

-

faceUVMap

faceUVMap: [number, number][]
+

faceUVMap

faceUVMap: [number, number][]

Refernce UV map of 468 values, used for 3D mapping of the face mesh

-

gl

gl: Record<string, unknown>
+

gl

gl: Record<string, unknown>

WebGL debug info

-

match

match: (descriptor: Descriptor, descriptors: Descriptor[], options?: { order: number; threshold: number }) => { distance: number; index: number; similarity: number } = ...

Type declaration

    • (descriptor: Descriptor, descriptors: Descriptor[], options?: { order: number; threshold: number }): { distance: number; index: number; similarity: number }
    • +

match

match: (descriptor: Descriptor, descriptors: Descriptor[], options?: { order: number; threshold: number }) => { distance: number; index: number; similarity: number } = match.match

Type declaration

    • (descriptor: Descriptor, descriptors: Descriptor[], options?: { order: number; threshold: number }): { distance: number; index: number; similarity: number }
    • Matches given descriptor to a closest entry in array of descriptors

      Parameters

      • descriptor: Descriptor

        face descriptor

        @@ -74,27 +74,27 @@
      • distance calculated distance of given descriptor to the best match
      • similarity calculated normalized similarity of given descriptor to the best match
      -
  • distance: number
  • index: number
  • similarity: number

performance

performance: Record<string, number>
+
  • distance: number
  • index: number
  • similarity: number

performance

performance: Record<string, number>

Performance object that contains values for all recently performed operations

-

process

process: { canvas: null | OffscreenCanvas | HTMLCanvasElement; tensor: null | Tensor<Rank> }
+

process

process: { canvas: null | OffscreenCanvas | HTMLCanvasElement; tensor: null | Tensor<Rank> }

currenty processed image tensor and canvas

-

Type declaration

  • canvas: null | OffscreenCanvas | HTMLCanvasElement
  • tensor: null | Tensor<Rank>

result

result: Result
+

Type declaration

  • canvas: null | OffscreenCanvas | HTMLCanvasElement
  • tensor: null | Tensor<Rank>

result

result: Result

Last known result of detect run

  • Can be accessed anytime after initial detection
  • Definition: Result
-

similarity

similarity: (descriptor1: Descriptor, descriptor2: Descriptor, options?: { order: number }) => number = ...

Type declaration

similarity

similarity: (descriptor1: Descriptor, descriptor2: Descriptor, options?: { order: number }) => number = match.similarity

Type declaration

    • Calculates normalized similarity between two descriptors based on their distance

      -

      Parameters

      Returns number

state

state: string
+

Parameters

Returns number

state

state: string

Current state of Human library

  • Can be polled to determine operations that are currently executed
  • Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle'
-

version

version: string
+

version

version: string

Current version of Human library in semver format

-

Methods

detect

Methods

detect

enhance

  • enhance(input: Tensor<Rank>): null | Tensor<Rank>

enhance

  • enhance(input: Tensor<Rank>): null | Tensor<Rank>
  • Enhance method performs additional enhacements to face image previously detected for futher processing

    Parameters

    • input: Tensor<Rank>

    Returns null | Tensor<Rank>

    Tensor

    -

image

  • image(input: Input, getTensor?: boolean): { canvas: null | OffscreenCanvas | HTMLCanvasElement; tensor: null | Tensor<Rank> }

image

  • image(input: Input, getTensor?: boolean): { canvas: null | OffscreenCanvas | HTMLCanvasElement; tensor: null | Tensor<Rank> }
  • 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

  • init(): Promise<void>
  • +

    Parameters

    • input: Input
    • getTensor: boolean = true

    Returns { canvas: null | OffscreenCanvas | HTMLCanvasElement; tensor: null | Tensor<Rank> }

    • canvas: null | OffscreenCanvas | HTMLCanvasElement
    • tensor: null | Tensor<Rank>

init

  • init(): Promise<void>
  • Explicit backend initialization

    • Normally done implicitly during initial load phase
    • @@ -116,19 +116,19 @@
    • Use when changing backend during runtime

    Returns Promise<void>

    Promise

    -

load

  • load(userConfig?: Partial<Config>): Promise<void>

load

  • load(userConfig?: Partial<Config>): Promise<void>
  • Load method preloads all configured models on-demand

    • Not explicitly required as any required model is load implicitly on it's first run

    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

    Returns Result

    result: Result

    -

reset

  • reset(): void

reset

  • reset(): void
  • Reset configuration to default values

    -

    Returns void

segmentation

  • segmentation(input: Input, background?: Input): Promise<{ alpha: null | OffscreenCanvas | HTMLCanvasElement; canvas: null | OffscreenCanvas | HTMLCanvasElement; data: number[] }>

segmentation

  • segmentation(input: Input, background?: Input): Promise<{ alpha: null | OffscreenCanvas | HTMLCanvasElement; canvas: null | OffscreenCanvas | HTMLCanvasElement; data: number[] }>
  • Segmentation method takes any input and returns processed canvas with body segmentation

    • Optional parameter background is used to fill the background with specific input
    • @@ -140,9 +140,9 @@ Interpolation is based on time since last known result so can be called independ
    • 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 merging
    • alpha as grayscale canvas that represents segmentation alpha values
    -

    Parameters

    Returns Promise<{ alpha: null | OffscreenCanvas | HTMLCanvasElement; canvas: null | OffscreenCanvas | HTMLCanvasElement; data: number[] }>

validate

  • validate(userConfig?: Partial<Config>): { expected?: string; reason: string; where: string }[]
  • +

    Parameters

    Returns Promise<{ alpha: null | OffscreenCanvas | HTMLCanvasElement; canvas: null | OffscreenCanvas | HTMLCanvasElement; data: number[] }>

validate

  • validate(userConfig?: Partial<Config>): { expected?: string; reason: string; where: string }[]
  • Validate current configuration schema

    -

    Parameters

    • Optional userConfig: Partial<Config>

    Returns { expected?: string; reason: string; where: string }[]

warmup

  • warmup(userConfig?: Partial<Config>): Promise<Result | { error: any }>
  • +

    Parameters

    • Optional userConfig: Partial<Config>

    Returns { expected?: string; reason: string; where: string }[]

warmup

  • warmup(userConfig?: Partial<Config>): Promise<Result | { error: any }>

Error

Error: { error: string }

Error message

-

Type declaration

  • error: string

Events

Events: "create" | "load" | "image" | "result" | "warmup" | "error"
+

Type declaration

  • error: string

Events

Events: "create" | "load" | "image" | "result" | "warmup" | "error"

Events dispatched by human.events

  • create: triggered when Human object is instantiated
  • @@ -47,14 +47,14 @@
  • result: triggered when detection is complete
  • warmup: triggered when warmup is complete
-

GestureResult

GestureResult: { face: number; gesture: FaceGesture } | { gesture: IrisGesture; iris: number } | { body: number; gesture: BodyGesture } | { gesture: HandGesture; hand: number }
+

GestureResult

GestureResult: { face: number; gesture: FaceGesture } | { gesture: IrisGesture; iris: number } | { body: number; gesture: BodyGesture } | { gesture: HandGesture; hand: number }

Gesture results

-

Input

Input: Tensor | ImageData | ImageBitmap | HTMLImageElement | HTMLMediaElement | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas | typeof Image | typeof Canvas
+

Input

Input: Tensor | ImageData | ImageBitmap | HTMLImageElement | HTMLMediaElement | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas | typeof Image | typeof Canvas

Defines all possible input types for Human detection

-

Point

Point: [number, number, number?]
+

Point

Point: [number, number, number?]

Box and Point primitives

-

TensorFlow

TensorFlow: typeof tf
+

TensorFlow

TensorFlow: typeof tf

Instance of TensorFlow/JS

-
external

Variables

defaults

defaults: Config = ...
+
external

Variables

defaults

defaults: Config = ...

env

env: Env = ...

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file +

env

env: Env = ...

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file diff --git a/typedoc/interfaces/BodyConfig.html b/typedoc/interfaces/BodyConfig.html index 6e8d09bd..e619e7ca 100644 --- a/typedoc/interfaces/BodyConfig.html +++ b/typedoc/interfaces/BodyConfig.html @@ -1,4 +1,4 @@ -BodyConfig | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu
+BodyConfig | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu

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 faces

    Changing modelPath will change module responsible for hand detection and tracking Allowed values are posenet.json, blazepose.json, efficientpose.json, movenet-lightning.json, movenet-thunder.json, movenet-multipose.json

    -

Hierarchy

  • BodyConfig

Index

Properties

Optional detector

detector?: { modelPath: string }

Type declaration

  • modelPath: string

enabled

enabled: boolean

maxDetected

maxDetected: number

minConfidence

minConfidence: number

modelPath

modelPath: string

skipFrames

skipFrames: number

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file +

Hierarchy

  • BodyConfig

Index

Properties

Optional detector

detector?: { modelPath: string }

Type declaration

  • modelPath: string

enabled

enabled: boolean

maxDetected

maxDetected: number

minConfidence

minConfidence: number

modelPath

modelPath: string

skipFrames

skipFrames: number

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file diff --git a/typedoc/interfaces/BodyResult.html b/typedoc/interfaces/BodyResult.html index cdeaca15..fa6e443f 100644 --- a/typedoc/interfaces/BodyResult.html +++ b/typedoc/interfaces/BodyResult.html @@ -1,4 +1,4 @@ -BodyResult | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu
+BodyResult | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu

Body results

Each results has:

    @@ -12,4 +12,4 @@
  • score: body part score value
  • presence: body part presence value
-

Hierarchy

  • BodyResult

Index

Properties

annotations

annotations: Record<string, Point[][]>

box

box: Box

boxRaw

boxRaw: Box

id

id: number

keypoints

keypoints: BodyKeypoint[]

score

score: number

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file +

Hierarchy

  • BodyResult

Index

Properties

annotations

annotations: Record<string, Point[][]>

box

box: Box

boxRaw

boxRaw: Box

id

id: number

keypoints

keypoints: BodyKeypoint[]

score

score: number

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file diff --git a/typedoc/interfaces/Config.html b/typedoc/interfaces/Config.html index 631913cf..473215e0 100644 --- a/typedoc/interfaces/Config.html +++ b/typedoc/interfaces/Config.html @@ -1,9 +1,9 @@ -Config | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu
+Config | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu

Configuration interface definition for Human library

Contains all configurable parameters

-

Hierarchy

  • Config

Index

Properties

async

async: boolean
+

Hierarchy

  • Config

Index

Properties

async

async: boolean

Perform model loading and inference concurrently or sequentially

-

backend

backend: "" | "cpu" | "wasm" | "webgl" | "humangl" | "tensorflow" | "webgpu"
+

backend

backend: "" | "cpu" | "wasm" | "webgl" | "humangl" | "tensorflow" | "webgpu"

Backend used for TFJS operations Valid build-in backends are:

    @@ -15,45 +15,45 @@ Valid build-in backends are:

  • Browser: webgpu - requires custom build of tfjs-backend-webgpu

Defaults: humangl for browser and tensorflow for nodejs

-

body

body: Partial<BodyConfig>
+

body

body: Partial<BodyConfig>

cacheSensitivity

cacheSensitivity: number
+

cacheSensitivity

cacheSensitivity: number

Cache sensitivity

  • values 0..1 where 0.01 means reset cache if input changed more than 1%
  • set to 0 to disable caching
-

debug

debug: boolean
+

debug

debug: boolean

Print debug statements to console

-

face

face: Partial<FaceConfig>
+

face

face: Partial<FaceConfig>

filter

filter: Partial<FilterConfig>
+

filter

filter: Partial<FilterConfig>

Run input through image filters before inference

  • image filters run with near-zero latency as they are executed on the GPU

gesture

gesture: Partial<GestureConfig>
+

gesture

gesture: Partial<GestureConfig>

hand

hand: Partial<HandConfig>
+

hand

hand: Partial<HandConfig>

modelBasePath

modelBasePath: string
+

modelBasePath

modelBasePath: string

Base model path (typically starting with file://, http:// or https://) for all models

  • individual modelPath values are relative to this path
-

object

object: Partial<ObjectConfig>
+

object

object: Partial<ObjectConfig>

segmentation

segmentation: Partial<SegmentationConfig>
+

segmentation

segmentation: Partial<SegmentationConfig>

skipFrame

skipFrame: boolean
+

skipFrame

skipFrame: boolean

Internal Variable

-

warmup

warmup: "face" | "body" | "none" | "full"
+

warmup

warmup: "face" | "body" | "none" | "full"

What to use for human.warmup()

  • warmup pre-initializes all models for faster inference but can take significant time on startup
-

wasmPath

wasmPath: string
+

wasmPath

wasmPath: string

Path to *.wasm files if backend is set to wasm

-

Hierarchy

  • FaceResult

Index

Properties

Optional age

age?: number

annotations

annotations: Record<string, Point[]>

box

box: Box

boxRaw

boxRaw: Box

boxScore

boxScore: number

Optional embedding

embedding?: number[]

Optional emotion

emotion?: { emotion: string; score: number }[]

faceScore

faceScore: number

Optional gender

gender?: string

Optional genderScore

genderScore?: number

id

id: number

Optional iris

iris?: number

mesh

mesh: Point[]

meshRaw

meshRaw: Point[]

Optional real

real?: number

Optional rotation

rotation?: { angle: { pitch: number; roll: number; yaw: number }; gaze: { bearing: number; strength: number }; matrix: [number, number, number, number, number, number, number, number, number] }

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

score: number

Optional tensor

tensor?: Tensor<Rank>

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file +

Hierarchy

  • FaceResult

Index

Properties

Optional age

age?: number

annotations

annotations: Record<string, Point[]>

box

box: Box

boxRaw

boxRaw: Box

boxScore

boxScore: number

Optional embedding

embedding?: number[]

Optional emotion

emotion?: { emotion: string; score: number }[]

faceScore

faceScore: number

Optional gender

gender?: string

Optional genderScore

genderScore?: number

id

id: number

Optional iris

iris?: number

mesh

mesh: Point[]

meshRaw

meshRaw: Point[]

Optional real

real?: number

Optional rotation

rotation?: { angle: { pitch: number; roll: number; yaw: number }; gaze: { bearing: number; strength: number }; matrix: [number, number, number, number, number, number, number, number, number] }

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

score: number

Optional tensor

tensor?: Tensor<Rank>

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file diff --git a/typedoc/interfaces/FilterConfig.html b/typedoc/interfaces/FilterConfig.html index 7db7b0cb..0ec4414b 100644 --- a/typedoc/interfaces/FilterConfig.html +++ b/typedoc/interfaces/FilterConfig.html @@ -1,47 +1,47 @@ -FilterConfig | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu
+FilterConfig | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu

Run input through image filters before inference

  • available only in Browser environments
  • image filters run with near-zero latency as they are executed on the GPU using WebGL
-

Hierarchy

  • FilterConfig

Index

Properties

blur

blur: number
+

Hierarchy

  • FilterConfig

Index

Properties

blur

blur: number

Range: 0 (no blur) to N (blur radius in pixels)

-

brightness

brightness: number
+

brightness

brightness: number

Range: -1 (darken) to 1 (lighten)

-

contrast

contrast: number
+

contrast

contrast: number

Range: -1 (reduce contrast) to 1 (increase contrast)

-

enabled

enabled: boolean

flip

flip: boolean
+

enabled

enabled: boolean

flip

flip: boolean

Flip input as mirror image

-

height

height: number
+

height

height: number

Resize input height

  • if both width and height are set to 0, there is no resizing
  • if just one is set, second one is scaled automatically
  • if both are set, values are used as-is
-

hue

hue: number
+

hue

hue: number

Range: 0 (no change) to 360 (hue rotation in degrees)

-

kodachrome

kodachrome: boolean
+

kodachrome

kodachrome: boolean

Image kodachrome colors

-

negative

negative: boolean
+

negative

negative: boolean

Image negative

-

pixelate

pixelate: number
+

pixelate

pixelate: number

Range: 0 (no pixelate) to N (number of pixels to pixelate)

-

polaroid

polaroid: boolean
+

polaroid

polaroid: boolean

Image polaroid camera effect

-

return

return: boolean
+

return

return: boolean

Return processed canvas imagedata in result

-

saturation

saturation: number
+

saturation

saturation: number

Range: -1 (reduce saturation) to 1 (increase saturation)

-

sepia

sepia: boolean
+

sepia

sepia: boolean

Image sepia colors

-

sharpness

sharpness: number
+

sharpness

sharpness: number

Range: 0 (no sharpening) to 1 (maximum sharpening)

-

technicolor

technicolor: boolean
+

technicolor

technicolor: boolean

Image technicolor colors

-

vintage

vintage: boolean
+

vintage

vintage: boolean

Image vintage colors

-

width

width: number
+

width

width: number

Resize input width

-

Hierarchy

  • ObjectResult

Index

Properties

box

box: Box

boxRaw

boxRaw: Box

class

class: number

id

id: number

label

label: string

score

score: number

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file +

Hierarchy

  • ObjectResult

Index

Properties

box

box: Box

boxRaw

boxRaw: Box

class

class: number

id

id: number

label

label: string

score

score: number

Legend

  • Constructor
  • Property
  • Method
  • Property

Settings

Theme

\ No newline at end of file diff --git a/typedoc/interfaces/PersonResult.html b/typedoc/interfaces/PersonResult.html index dca38dc6..73f02028 100644 --- a/typedoc/interfaces/PersonResult.html +++ b/typedoc/interfaces/PersonResult.html @@ -1,4 +1,4 @@ -PersonResult | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu
+PersonResult | @vladmandic/human - v2.3.3
Options
All
  • Public
  • Public/Protected
  • All
Menu

Person getter

interface

Person Interface

Each result has:

@@ -11,4 +11,4 @@
  • box: bounding box: x, y, width, height normalized to input image resolution
  • boxRaw: bounding box: x, y, width, height normalized to 0..1
  • -

    Hierarchy

    • PersonResult

    Index

    Properties

    body

    body: null | BodyResult

    box

    box: Box

    Optional boxRaw

    boxRaw?: Box

    face

    gestures

    gestures: GestureResult[]

    hands

    hands: { left: null | HandResult; right: null | HandResult }

    Type declaration

    id

    id: number

    Legend

    • Constructor
    • Property
    • Method
    • Property

    Settings

    Theme

    \ No newline at end of file +

    Hierarchy

    • PersonResult

    Index

    Properties

    body

    body: null | BodyResult

    box

    box: Box

    Optional boxRaw

    boxRaw?: Box

    face

    gestures

    gestures: GestureResult[]

    hands

    hands: { left: null | HandResult; right: null | HandResult }

    Type declaration

    id

    id: number

    Legend

    • Constructor
    • Property
    • Method
    • Property

    Settings

    Theme

    \ No newline at end of file diff --git a/typedoc/interfaces/Result.html b/typedoc/interfaces/Result.html index d1ce98b9..633ea9a5 100644 --- a/typedoc/interfaces/Result.html +++ b/typedoc/interfaces/Result.html @@ -1,22 +1,22 @@ -Result | @vladmandic/human - v2.3.3
    Options
    All
    • Public
    • Public/Protected
    • All
    Menu
    +Result | @vladmandic/human - v2.3.3
    Options
    All
    • Public
    • Public/Protected
    • All
    Menu

    Result interface definition for Human library

    Contains all possible detection results

    -

    Hierarchy

    • Result

    Index

    Properties

    body

    body: BodyResult[]
    +

    Hierarchy

    • Result

    Index

    Properties

    body

    body: BodyResult[]

    BodyResult: detection & analysis results

    -

    Optional canvas

    canvas?: null | OffscreenCanvas | HTMLCanvasElement
    +

    Optional canvas

    canvas?: null | OffscreenCanvas | HTMLCanvasElement

    optional processed canvas that can be used to draw input on screen

    -

    face

    face: FaceResult[]
    +

    face

    face: FaceResult[]

    FaceResult: detection & analysis results

    -

    gesture

    gesture: GestureResult[]
    +

    gesture

    gesture: GestureResult[]

    GestureResult: detection & analysis results

    -

    hand

    hand: HandResult[]
    +

    hand

    hand: HandResult[]

    HandResult: detection & analysis results

    -

    object

    object: ObjectResult[]
    +

    object

    object: ObjectResult[]

    ObjectResult: detection & analysis results

    -

    performance

    performance: Record<string, unknown>
    +

    performance

    performance: Record<string, unknown>

    global performance object with timing values for each operation

    -

    persons

    persons: PersonResult[]
    +

    persons

    persons: PersonResult[]

    getter property that returns unified persons object

    -

    Readonly timestamp

    timestamp: number
    +

    Readonly timestamp

    timestamp: number

    timestamp of detection representing the milliseconds elapsed since the UNIX epoch

    Legend

    • Constructor
    • Property
    • Method
    • Property

    Settings

    Theme

    \ No newline at end of file diff --git a/typedoc/interfaces/SegmentationConfig.html b/typedoc/interfaces/SegmentationConfig.html index cde6d174..12aef7af 100644 --- a/typedoc/interfaces/SegmentationConfig.html +++ b/typedoc/interfaces/SegmentationConfig.html @@ -1,4 +1,4 @@ -SegmentationConfig | @vladmandic/human - v2.3.3
    Options
    All
    • Public
    • Public/Protected
    • All
    Menu
    +SegmentationConfig | @vladmandic/human - v2.3.3
    Options
    All
    • Public
    • Public/Protected
    • All
    Menu

    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 are selfie.json and meet.json

    -

    Hierarchy

    • SegmentationConfig

    Index

    Properties

    blur

    blur: number

    enabled

    enabled: boolean

    modelPath

    modelPath: string

    Legend

    • Constructor
    • Property
    • Method
    • Property

    Settings

    Theme

    \ No newline at end of file +

    Hierarchy

    • SegmentationConfig

    Index

    Properties

    blur

    blur: number

    enabled

    enabled: boolean

    modelPath

    modelPath: string

    Legend

    • Constructor
    • Property
    • Method
    • Property

    Settings

    Theme

    \ No newline at end of file