From 06e16eea55f95c193882a21447ea50eb7f0ab259 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 18 Nov 2022 12:20:14 -0500 Subject: [PATCH] update markdowns --- .eslintrc.json | 66 +- CHANGELOG.md | 3 +- README.md | 16 +- TODO.md | 1 + assets/screenshot-menu.png | Bin 41562 -> 22869 bytes assets/screenshot-results.png | Bin 35049 -> 14628 bytes assets/screenshot-segmentation.jpg | Bin 56838 -> 0 bytes assets/screenshot-typedoc.png | Bin 0 -> 39349 bytes demo/README.md | 2 + demo/facematch/README.md | 15 +- demo/multithread/README.md | 1 + demo/nodejs/README.md | 3 +- package.json | 1 + test/build.log | 100 +-- test/test.log | 1313 ++++++++++++++-------------- 15 files changed, 761 insertions(+), 760 deletions(-) delete mode 100644 assets/screenshot-segmentation.jpg create mode 100644 assets/screenshot-typedoc.png diff --git a/.eslintrc.json b/.eslintrc.json index 3b9f9394..11827163 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -3,20 +3,15 @@ "overrides": [ { "files": ["**/*.ts"], + "parser": "@typescript-eslint/parser", + "parserOptions": { "ecmaVersion": "latest", "project": ["./tsconfig.json"] }, + "plugins": ["@typescript-eslint"], "env": { "browser": true, "commonjs": false, "node": false, "es2021": true }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "project": ["./tsconfig.json"] - }, - "plugins": [ - "@typescript-eslint" - ], "extends": [ "airbnb-base", "eslint:recommended", @@ -72,20 +67,15 @@ }, { "files": ["**/*.d.ts"], + "parser": "@typescript-eslint/parser", + "parserOptions": { "ecmaVersion": "latest", "project": ["./tsconfig.json"] }, + "plugins": ["@typescript-eslint"], "env": { "browser": true, "commonjs": false, "node": false, "es2021": true }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "project": ["./tsconfig.json"] - }, - "plugins": [ - "@typescript-eslint" - ], "extends": [ "airbnb-base", "eslint:recommended", @@ -120,18 +110,14 @@ }, { "files": ["**/*.js"], + "parserOptions": { "sourceType": "module", "ecmaVersion": "latest" }, + "plugins": [], "env": { "browser": true, "commonjs": true, "node": true, "es2021": true }, - "parserOptions": { - "sourceType": "module", - "ecmaVersion": "latest" - }, - "plugins": [ - ], "extends": [ "airbnb-base", "eslint:recommended", @@ -161,43 +147,51 @@ }, { "files": ["**/*.json"], + "parserOptions": { "ecmaVersion": "latest" }, + "plugins": ["json"], "env": { "browser": false, "commonjs": false, "node": false, "es2021": false }, - "parserOptions": { - "ecmaVersion": "latest" - }, - "plugins": [ - "json" - ], "extends": [ "plugin:json/recommended" ] }, { "files": ["**/*.html"], + "parserOptions": { "sourceType": "module", "ecmaVersion": "latest" }, + "parser": "@html-eslint/parser", + "plugins": ["html", "@html-eslint"], "env": { "browser": true, "commonjs": false, "node": false, "es2021": false }, - "parserOptions": { - "sourceType": "module", - "ecmaVersion": "latest" - }, - "parser": "@html-eslint/parser", "extends": ["plugin:@html-eslint/recommended"], - "plugins": [ - "html", "@html-eslint" - ], "rules": { "@html-eslint/element-newline":"off", "@html-eslint/indent": ["error", 2] } + }, + { + "files": ["**/*.md"], + "plugins": ["markdown"], + "processor": "markdown/markdown", + "rules": { + "no-undef":"off" + } + }, + { + "files": ["**/*.md/*.js"], + "rules": { + "no-undef":"off", + "promise/catch-or-return":"off", + "no-multi-spaces":"off", + "no-unused-vars":"off" + } } ], "ignorePatterns": [ diff --git a/CHANGELOG.md b/CHANGELOG.md index 89fb1080..9710bcb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,9 @@ ## Changelog -### **HEAD -> main** 2022/11/17 mandic00@live.com +### **HEAD -> main** 2022/11/18 mandic00@live.com +- default empty result - refactor draw and models namespaces - refactor distance - add basic anthropometry diff --git a/README.md b/README.md index 59487302..8d203222 100644 --- a/README.md +++ b/README.md @@ -206,7 +206,7 @@ Performs validation check on a webcam input to detect a real face and matches it **468-Point Face Mesh Defails:** (view in full resolution to see keypoints) -![FaceMesh](assets/facemesh.png) +[](assets/facemesh.png)


@@ -216,6 +216,7 @@ Simply load `Human` (*IIFE version*) directly from a cloud CDN in your HTML file (pick one: `jsdelirv`, `unpkg` or `cdnjs`) ```html + @@ -270,6 +271,7 @@ function detectVideo() { human.draw.gesture(outputCanvas, result.gesture); // and loop immediate to the next frame requestAnimationFrame(detectVideo); + return result; }); } @@ -309,7 +311,7 @@ human.events.addEventListener('detect', () => { // event gets triggered when det function detectVideo() { human.detect(inputVideo) // run detection - .then(() => requestAnimationFrame(detectVideo)); // upon detect complete start processing of the next frame + .then(() => requestAnimationFrame(detectVideo)); // upon detect complete start processing of the next frame } detectVideo(); // start loop @@ -386,6 +388,7 @@ And for even better results, you can run detection in a separate web worker thre - [**TypeDoc API Specification - Main class**](https://vladmandic.github.io/human/typedoc/classes/Human.html) - [**TypeDoc API Specification - Full**](https://vladmandic.github.io/human/typedoc/) + ![typedoc](assets/screenshot-typedoc.png)


@@ -396,16 +399,13 @@ And for even better results, you can run detection in a separate web worker thre *Note*: This does not include embedded `tfjs` If you want to use embedded `tfjs` inside `Human` (`human.tf` namespace) and still full **typedefs**, add this code: -```js -import type * as tfjs from '@vladmandic/human/dist/tfjs.esm'; -... -const tf = human.tf as typeof tfjs; -``` +> import type * as tfjs from '@vladmandic/human/dist/tfjs.esm'; +> const tf = human.tf as typeof tfjs; This is not enabled by default as `Human` does not ship with full **TFJS TypeDefs** due to size considerations Enabling `tfjs` TypeDefs as above creates additional project (dev-only as only types are required) dependencies as defined in `@vladmandic/human/dist/tfjs.esm.d.ts`: - @tensorflow/tfjs-core, @tensorflow/tfjs-converter, @tensorflow/tfjs-backend-wasm, @tensorflow/tfjs-backend-webgl +> @tensorflow/tfjs-core, @tensorflow/tfjs-converter, @tensorflow/tfjs-backend-wasm, @tensorflow/tfjs-backend-webgl


diff --git a/TODO.md b/TODO.md index d3647035..f1208a35 100644 --- a/TODO.md +++ b/TODO.md @@ -87,6 +87,7 @@ Architecture: - Refactor namespace exports Better [TypeDoc specs](https://vladmandic.github.io/human/typedoc/index.html) - Add named export for improved bundler support when using non-default imports +- Cleanup Git history for `dist`/`typedef`/`types` - Support for **NodeJS v19** - Upgrade to **TypeScript 4.9** diff --git a/assets/screenshot-menu.png b/assets/screenshot-menu.png index 39515d9e12f6498f8e60bbcad8d59a3233b43963..b38b3458ca0200facbbf951cac1f323717b529c7 100644 GIT binary patch literal 22869 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 literal 41562 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 node node-match + ```js -2021-10-13 07:53:36 INFO: options: { dbFile: './faces.json', dbMax: 10000, threadPoolSize: 6, workerSrc: './node-match-worker.js', debug: false, minThreshold: 0.9, descLength: 1024 } -2021-10-13 07:53:36 DATA: created shared buffer: { maxDescriptors: 10000, totalBytes: 40960000, totalElements: 10240000 } -2021-10-13 07:53:36 DATA: db loaded: { existingRecords: 0, newRecords: 5700 } -2021-10-13 07:53:36 INFO: starting worker thread pool: { totalWorkers: 6, alreadyActive: 0 } -2021-10-13 07:53:36 STATE: submitted: { matchJobs: 100, poolSize: 6, activeWorkers: 6 } -2021-10-13 07:53:38 STATE: { matchJobsFinished: 100, totalTimeMs: 1769, averageTimeMs: 17.69 } -2021-10-13 07:53:38 INFO: closing workers: { poolSize: 6, activeWorkers: 6 } +INFO: options: { dbFile: './faces.json', dbMax: 10000, threadPoolSize: 6, workerSrc: './node-match-worker.js', debug: false, minThreshold: 0.9, descLength: 1024 } +DATA: created shared buffer: { maxDescriptors: 10000, totalBytes: 40960000, totalElements: 10240000 } +DATA: db loaded: { existingRecords: 0, newRecords: 5700 } +INFO: starting worker thread pool: { totalWorkers: 6, alreadyActive: 0 } +STATE: submitted: { matchJobs: 100, poolSize: 6, activeWorkers: 6 } +STATE: { matchJobsFinished: 100, totalTimeMs: 1769, averageTimeMs: 17.69 } +INFO: closing workers: { poolSize: 6, activeWorkers: 6 } ``` diff --git a/demo/multithread/README.md b/demo/multithread/README.md index 7b47e6b4..4c654883 100644 --- a/demo/multithread/README.md +++ b/demo/multithread/README.md @@ -16,6 +16,7 @@ node demo/nodejs/node-multiprocess.js ``` + ```json 2021-06-01 08:54:19 INFO: @vladmandic/human version 2.0.0 2021-06-01 08:54:19 INFO: User: vlado Platform: linux Arch: x64 Node: v16.0.0 diff --git a/demo/nodejs/README.md b/demo/nodejs/README.md index e5ef81f7..279eddec 100644 --- a/demo/nodejs/README.md +++ b/demo/nodejs/README.md @@ -28,7 +28,8 @@ or you can pass a path to image to analyze, either on local filesystem or using node demo/nodejs/node.js ``` -```json + +```js 2021-06-01 08:52:15 INFO: @vladmandic/human version 2.0.0 2021-06-01 08:52:15 INFO: User: vlado Platform: linux Arch: x64 Node: v16.0.0 2021-06-01 08:52:15 INFO: Current folder: /home/vlado/dev/human diff --git a/package.json b/package.json index b9a815af..2ad0ec38 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "eslint-plugin-html": "^7.1.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-json": "^3.1.0", + "eslint-plugin-markdown": "^3.0.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", "rimraf": "^3.0.2", diff --git a/test/build.log b/test/build.log index ae17ccbf..56da9100 100644 --- a/test/build.log +++ b/test/build.log @@ -1,50 +1,50 @@ -2022-11-18 11:12:48 DATA:  Build {"name":"@vladmandic/human","version":"3.0.0"} -2022-11-18 11:12:48 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.0"} -2022-11-18 11:12:48 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-11-18 11:12:48 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.14","typescript":"4.9.3","typedoc":"0.23.21","eslint":"8.27.0"} -2022-11-18 11:12:48 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-11-18 11:12:48 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2022-11-18 11:12:48 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} -2022-11-18 11:12:48 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} -2022-11-18 11:12:48 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":670091,"outputBytes":317438} -2022-11-18 11:12:48 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} -2022-11-18 11:12:48 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":670095,"outputBytes":317442} -2022-11-18 11:12:48 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} -2022-11-18 11:12:48 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671043,"outputBytes":317553} -2022-11-18 11:12:48 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} -2022-11-18 11:12:48 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":669837,"outputBytes":316023} -2022-11-18 11:12:49 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1144900} -2022-11-18 11:12:49 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1814067,"outputBytes":1457337} -2022-11-18 11:12:49 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1814067,"outputBytes":1914669} -2022-11-18 11:12:52 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} -2022-11-18 11:12:54 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} -2022-11-18 11:12:54 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":2913} -2022-11-18 11:12:54 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":9456} -2022-11-18 11:13:02 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":114,"errors":0,"warnings":0} -2022-11-18 11:13:02 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-11-18 11:13:02 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} -2022-11-18 11:13:02 INFO:  Done... -2022-11-18 11:13:02 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} -2022-11-18 11:13:02 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} -2022-11-18 11:13:02 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} -2022-11-18 11:13:02 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} -2022-11-18 11:13:02 STATE: Filter: {"input":"types/tfjs-core.d.ts"} -2022-11-18 11:13:03 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":195} -2022-11-18 11:13:03 STATE: Filter: {"input":"types/human.d.ts"} -2022-11-18 11:13:03 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} -2022-11-18 11:13:03 STATE: Write: {"output":"dist/human.esm.d.ts"} -2022-11-18 11:13:03 STATE: Write: {"output":"dist/human.d.ts"} -2022-11-18 11:13:03 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} -2022-11-18 11:13:03 STATE: Write: {"output":"dist/human.node.d.ts"} -2022-11-18 11:13:03 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} -2022-11-18 11:13:03 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2022-11-18 11:13:03 STATE: Models {"folder":"./models","models":12} -2022-11-18 11:13:03 STATE: Models {"folder":"../human-models/models","models":43} -2022-11-18 11:13:03 STATE: Models {"folder":"../blazepose/model/","models":4} -2022-11-18 11:13:03 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2022-11-18 11:13:03 STATE: Models {"folder":"../efficientpose/models","models":3} -2022-11-18 11:13:03 STATE: Models {"folder":"../insightface/models","models":5} -2022-11-18 11:13:03 STATE: Models {"folder":"../movenet/models","models":3} -2022-11-18 11:13:03 STATE: Models {"folder":"../nanodet/models","models":4} -2022-11-18 11:13:03 STATE: Models: {"count":58,"totalSize":386543911} -2022-11-18 11:13:03 INFO:  Human Build complete... {"logFile":"test/build.log"} +2022-11-18 11:52:39 DATA:  Build {"name":"@vladmandic/human","version":"3.0.0"} +2022-11-18 11:52:39 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.0"} +2022-11-18 11:52:39 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-11-18 11:52:39 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.14","typescript":"4.9.3","typedoc":"0.23.21","eslint":"8.27.0"} +2022-11-18 11:52:39 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-11-18 11:52:39 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2022-11-18 11:52:39 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} +2022-11-18 11:52:39 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} +2022-11-18 11:52:39 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":670131,"outputBytes":317438} +2022-11-18 11:52:39 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} +2022-11-18 11:52:39 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":670135,"outputBytes":317442} +2022-11-18 11:52:39 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} +2022-11-18 11:52:39 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671083,"outputBytes":317553} +2022-11-18 11:52:39 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} +2022-11-18 11:52:39 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":669877,"outputBytes":316023} +2022-11-18 11:52:39 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1144900} +2022-11-18 11:52:39 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1814107,"outputBytes":1457337} +2022-11-18 11:52:39 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1814107,"outputBytes":1914669} +2022-11-18 11:52:43 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} +2022-11-18 11:52:45 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} +2022-11-18 11:52:45 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":2913} +2022-11-18 11:52:45 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":9456} +2022-11-18 11:52:53 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":114,"errors":0,"warnings":0} +2022-11-18 11:52:53 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-11-18 11:52:53 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} +2022-11-18 11:52:53 INFO:  Done... +2022-11-18 11:52:53 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} +2022-11-18 11:52:53 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} +2022-11-18 11:52:53 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} +2022-11-18 11:52:53 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} +2022-11-18 11:52:53 STATE: Filter: {"input":"types/tfjs-core.d.ts"} +2022-11-18 11:52:54 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":195} +2022-11-18 11:52:54 STATE: Filter: {"input":"types/human.d.ts"} +2022-11-18 11:52:54 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} +2022-11-18 11:52:54 STATE: Write: {"output":"dist/human.esm.d.ts"} +2022-11-18 11:52:54 STATE: Write: {"output":"dist/human.d.ts"} +2022-11-18 11:52:54 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} +2022-11-18 11:52:54 STATE: Write: {"output":"dist/human.node.d.ts"} +2022-11-18 11:52:54 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} +2022-11-18 11:52:54 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2022-11-18 11:52:54 STATE: Models {"folder":"./models","models":12} +2022-11-18 11:52:54 STATE: Models {"folder":"../human-models/models","models":43} +2022-11-18 11:52:54 STATE: Models {"folder":"../blazepose/model/","models":4} +2022-11-18 11:52:54 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2022-11-18 11:52:54 STATE: Models {"folder":"../efficientpose/models","models":3} +2022-11-18 11:52:54 STATE: Models {"folder":"../insightface/models","models":5} +2022-11-18 11:52:54 STATE: Models {"folder":"../movenet/models","models":3} +2022-11-18 11:52:54 STATE: Models {"folder":"../nanodet/models","models":4} +2022-11-18 11:52:54 STATE: Models: {"count":58,"totalSize":386543911} +2022-11-18 11:52:54 INFO:  Human Build complete... {"logFile":"test/build.log"} diff --git a/test/test.log b/test/test.log index 34f79111..e2c8659c 100644 --- a/test/test.log +++ b/test/test.log @@ -1,657 +1,656 @@ -2022-11-17 14:20:18 INFO:  @vladmandic/human version 3.0.0 -2022-11-17 14:20:18 INFO:  User: vlado Platform: linux Arch: x64 Node: v19.1.0 -2022-11-17 14:20:18 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/nodejs/process-folder.js","args":["samples"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]}] -2022-11-17 14:20:18 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start -2022-11-17 14:20:19 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start -2022-11-17 14:20:20 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start -2022-11-17 14:20:21 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start -2022-11-17 14:20:21 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start -2022-11-17 14:20:22 INFO:  {"cmd":"../demo/nodejs/process-folder.js","args":["samples"]} start -2022-11-17 14:20:24 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start -2022-11-17 14:20:36 INFO:  {"cmd":"../demo/facematch/node-match.js","args":[]} start -2022-11-17 14:20:36 INFO:  tests: ["test-node-load.js","test-node-gear.js","test-backend-node.js","test-backend-node-gpu.js","test-backend-node-wasm.js"] -2022-11-17 14:20:36 INFO:  -2022-11-17 14:20:36 INFO:  test-node-load.js start -2022-11-17 14:20:37 INFO:  test-node-load.js load start {"human":"3.0.0","tf":"4.0.0","progress":0} -2022-11-17 14:20:37 DATA:  test-node-load.js load interval {"elapsed":0,"progress":0} -2022-11-17 14:20:37 DATA:  test-node-load.js load interval {"elapsed":10,"progress":0} -2022-11-17 14:20:37 DATA:  test-node-load.js load interval {"elapsed":26,"progress":0.11143791531203556} -2022-11-17 14:20:37 DATA:  test-node-load.js load interval {"elapsed":42,"progress":0.3961518088579138} -2022-11-17 14:20:37 DATA:  test-node-load.js load interval {"elapsed":64,"progress":0.5125946867158943} -2022-11-17 14:20:37 DATA:  test-node-load.js load interval {"elapsed":75,"progress":0.7259096583739463} -2022-11-17 14:20:37 STATE: test-node-load.js passed {"progress":1} -2022-11-17 14:20:37 INFO:  test-node-load.js load final {"progress":1} -2022-11-17 14:20:37 DATA:  test-node-load.js load interval {"elapsed":424,"progress":1} -2022-11-17 14:20:37 INFO:  -2022-11-17 14:20:37 INFO:  test-node-gear.js start -2022-11-17 14:20:37 DATA:  test-node-gear.js input: ["samples/in/ai-face.jpg"] -2022-11-17 14:20:38 STATE: test-node-gear.js passed: gear faceres samples/in/ai-face.jpg -2022-11-17 14:20:38 DATA:  test-node-gear.js results {"face":0,"model":"faceres","image":"samples/in/ai-face.jpg","age":23.5,"gender":"female","genderScore":0.92} -2022-11-17 14:20:39 STATE: test-node-gear.js passed: gear gear samples/in/ai-face.jpg -2022-11-17 14:20:39 DATA:  test-node-gear.js results {"face":0,"model":"gear","image":"samples/in/ai-face.jpg","age":23.3,"gender":"female","genderScore":0.51,"race":[{"score":0.93,"race":"white"}]} -2022-11-17 14:20:39 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg -2022-11-17 14:20:39 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"female","genderScore":0.99} -2022-11-17 14:20:39 INFO:  -2022-11-17 14:20:39 INFO:  test-backend-node.js start -2022-11-17 14:20:39 INFO:  test-backend-node.js test: configuration validation -2022-11-17 14:20:39 STATE: test-backend-node.js passed: configuration default validation [] -2022-11-17 14:20:39 STATE: test-backend-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-11-17 14:20:39 INFO:  test-backend-node.js test: model load -2022-11-17 14:20:39 STATE: test-backend-node.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] -2022-11-17 14:20:39 INFO:  test-backend-node.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} -2022-11-17 14:20:39 INFO:  test-backend-node.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2022-11-17 14:20:39 INFO:  test-backend-node.js test: warmup -2022-11-17 14:20:39 STATE: test-backend-node.js passed: create human -2022-11-17 14:20:39 INFO:  test-backend-node.js human version: 3.0.0 -2022-11-17 14:20:39 INFO:  test-backend-node.js platform: linux x64 agent: NodeJS v19.1.0 -2022-11-17 14:20:39 INFO:  test-backend-node.js tfjs version: 4.0.0 -2022-11-17 14:20:39 INFO:  test-backend-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} -2022-11-17 14:20:39 STATE: test-backend-node.js passed: set backend: tensorflow -2022-11-17 14:20:39 STATE: test-backend-node.js tensors 1785 -2022-11-17 14:20:39 STATE: test-backend-node.js passed: load models -2022-11-17 14:20:39 STATE: test-backend-node.js result: defined models: 2 loaded models: 2 -2022-11-17 14:20:39 STATE: test-backend-node.js passed: warmup: none default -2022-11-17 14:20:39 DATA:  test-backend-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-11-17 14:20:39 DATA:  test-backend-node.js result: performance: load: null total: null -2022-11-17 14:20:39 STATE: test-backend-node.js passed: warmup none result match -2022-11-17 14:20:39 STATE: test-backend-node.js event: image -2022-11-17 14:20:39 STATE: test-backend-node.js event: detect -2022-11-17 14:20:39 STATE: test-backend-node.js event: warmup -2022-11-17 14:20:39 STATE: test-backend-node.js passed: warmup: face default -2022-11-17 14:20:39 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-11-17 14:20:39 DATA:  test-backend-node.js result: performance: load: null total: 422 -2022-11-17 14:20:39 STATE: test-backend-node.js passed: warmup face result match -2022-11-17 14:20:39 STATE: test-backend-node.js event: image -2022-11-17 14:20:40 STATE: test-backend-node.js event: detect -2022-11-17 14:20:40 STATE: test-backend-node.js event: warmup -2022-11-17 14:20:40 STATE: test-backend-node.js passed: warmup: body default -2022-11-17 14:20:40 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:40 DATA:  test-backend-node.js result: performance: load: null total: 352 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: warmup body result match -2022-11-17 14:20:40 STATE: test-backend-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-11-17 14:20:40 INFO:  test-backend-node.js test: details verification -2022-11-17 14:20:40 STATE: test-backend-node.js start default -2022-11-17 14:20:40 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:40 STATE: test-backend-node.js event: image -2022-11-17 14:20:40 STATE: test-backend-node.js event: detect -2022-11-17 14:20:40 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg default -2022-11-17 14:20:40 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:40 DATA:  test-backend-node.js result: performance: load: null total: 319 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details face length 1 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details face score 1 0.93 1 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details face age/gender 23.7 female 0.97 2.34 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details face arrays 4 478 1024 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details face anti-spoofing 0.79 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details face liveness 0.83 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details body length 1 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details body 0.92 17 6 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details hand length 1 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details hand 0.51 0.73 point -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details hand arrays 21 5 7 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details gesture length 7 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details object length 1 -2022-11-17 14:20:40 STATE: test-backend-node.js passed: details object 0.72 person -2022-11-17 14:20:40 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-11-17 14:20:40 STATE: test-backend-node.js event: image -2022-11-17 14:20:41 STATE: test-backend-node.js event: detect -2022-11-17 14:20:41 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-11-17 14:20:41 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-11-17 14:20:41 STATE: test-backend-node.js event: image -2022-11-17 14:20:41 STATE: test-backend-node.js event: detect -2022-11-17 14:20:41 STATE: test-backend-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-11-17 14:20:41 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:41 STATE: test-backend-node.js event: image -2022-11-17 14:20:42 STATE: test-backend-node.js event: detect -2022-11-17 14:20:42 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-11-17 14:20:42 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:42 STATE: test-backend-node.js event: image -2022-11-17 14:20:42 STATE: test-backend-node.js event: detect -2022-11-17 14:20:42 STATE: test-backend-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-11-17 14:20:42 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-11-17 14:20:42 STATE: test-backend-node.js event: image -2022-11-17 14:20:43 STATE: test-backend-node.js event: detect -2022-11-17 14:20:43 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-11-17 14:20:43 INFO:  test-backend-node.js test default -2022-11-17 14:20:43 STATE: test-backend-node.js start async -2022-11-17 14:20:43 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:43 STATE: test-backend-node.js event: image -2022-11-17 14:20:43 STATE: test-backend-node.js event: detect -2022-11-17 14:20:43 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg async -2022-11-17 14:20:43 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:43 DATA:  test-backend-node.js result: performance: load: null total: 293 -2022-11-17 14:20:43 STATE: test-backend-node.js passed: default result face match 1 female 0.97 -2022-11-17 14:20:43 INFO:  test-backend-node.js test sync -2022-11-17 14:20:43 STATE: test-backend-node.js start sync -2022-11-17 14:20:43 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:43 STATE: test-backend-node.js event: image -2022-11-17 14:20:44 STATE: test-backend-node.js event: detect -2022-11-17 14:20:44 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sync -2022-11-17 14:20:44 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:44 DATA:  test-backend-node.js result: performance: load: null total: 312 -2022-11-17 14:20:44 STATE: test-backend-node.js passed: default sync 1 female 0.97 -2022-11-17 14:20:44 INFO:  test-backend-node.js test: image process -2022-11-17 14:20:44 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-17 14:20:44 STATE: test-backend-node.js passed: image input null [1,256,256,3] -2022-11-17 14:20:44 INFO:  test-backend-node.js test: image null -2022-11-17 14:20:44 STATE: test-backend-node.js passed: invalid input could not convert input to tensor -2022-11-17 14:20:44 INFO:  test-backend-node.js test face similarity -2022-11-17 14:20:44 STATE: test-backend-node.js start face similarity -2022-11-17 14:20:44 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-17 14:20:44 STATE: test-backend-node.js event: image -2022-11-17 14:20:44 STATE: test-backend-node.js event: detect -2022-11-17 14:20:44 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face similarity -2022-11-17 14:20:44 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-11-17 14:20:44 DATA:  test-backend-node.js result: performance: load: null total: 294 -2022-11-17 14:20:44 STATE: test-backend-node.js start face similarity -2022-11-17 14:20:44 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:44 STATE: test-backend-node.js event: image -2022-11-17 14:20:45 STATE: test-backend-node.js event: detect -2022-11-17 14:20:45 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg face similarity -2022-11-17 14:20:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:45 DATA:  test-backend-node.js result: performance: load: null total: 290 -2022-11-17 14:20:45 STATE: test-backend-node.js start face similarity -2022-11-17 14:20:45 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-11-17 14:20:45 STATE: test-backend-node.js event: image -2022-11-17 14:20:45 STATE: test-backend-node.js event: detect -2022-11-17 14:20:45 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-11-17 14:20:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-11-17 14:20:45 DATA:  test-backend-node.js result: performance: load: null total: 269 -2022-11-17 14:20:45 STATE: test-backend-node.js passed: face descriptor -2022-11-17 14:20:45 STATE: test-backend-node.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]} -2022-11-17 14:20:45 INFO:  test-backend-node.js test object -2022-11-17 14:20:45 STATE: test-backend-node.js start object -2022-11-17 14:20:45 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:45 STATE: test-backend-node.js event: image -2022-11-17 14:20:45 STATE: test-backend-node.js event: detect -2022-11-17 14:20:45 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object -2022-11-17 14:20:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:45 DATA:  test-backend-node.js result: performance: load: null total: 298 -2022-11-17 14:20:45 STATE: test-backend-node.js passed: centernet -2022-11-17 14:20:45 STATE: test-backend-node.js start object -2022-11-17 14:20:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:47 STATE: test-backend-node.js event: image -2022-11-17 14:20:47 STATE: test-backend-node.js event: detect -2022-11-17 14:20:47 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object -2022-11-17 14:20:47 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:47 DATA:  test-backend-node.js result: performance: load: null total: 297 -2022-11-17 14:20:47 STATE: test-backend-node.js passed: nanodet -2022-11-17 14:20:47 INFO:  test-backend-node.js test sensitive -2022-11-17 14:20:47 STATE: test-backend-node.js start sensitive -2022-11-17 14:20:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:47 STATE: test-backend-node.js event: image -2022-11-17 14:20:47 STATE: test-backend-node.js event: detect -2022-11-17 14:20:47 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sensitive -2022-11-17 14:20:47 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-17 14:20:47 DATA:  test-backend-node.js result: performance: load: null total: 253 -2022-11-17 14:20:47 STATE: test-backend-node.js passed: sensitive result match -2022-11-17 14:20:47 STATE: test-backend-node.js passed: sensitive face result match -2022-11-17 14:20:47 STATE: test-backend-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-11-17 14:20:47 STATE: test-backend-node.js passed: sensitive body result match -2022-11-17 14:20:47 STATE: test-backend-node.js passed: sensitive hand result match -2022-11-17 14:20:47 INFO:  test-backend-node.js test body -2022-11-17 14:20:47 STATE: test-backend-node.js start blazepose -2022-11-17 14:20:50 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:50 STATE: test-backend-node.js event: image -2022-11-17 14:20:50 STATE: test-backend-node.js event: detect -2022-11-17 14:20:50 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg blazepose -2022-11-17 14:20:50 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-11-17 14:20:50 DATA:  test-backend-node.js result: performance: load: null total: 336 -2022-11-17 14:20:50 STATE: test-backend-node.js passed: blazepose -2022-11-17 14:20:50 STATE: test-backend-node.js start efficientpose -2022-11-17 14:20:51 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:51 STATE: test-backend-node.js event: image -2022-11-17 14:20:51 STATE: test-backend-node.js event: detect -2022-11-17 14:20:51 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-11-17 14:20:51 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-11-17 14:20:51 DATA:  test-backend-node.js result: performance: load: null total: 306 -2022-11-17 14:20:51 STATE: test-backend-node.js passed: efficientpose -2022-11-17 14:20:51 STATE: test-backend-node.js start posenet -2022-11-17 14:20:52 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:52 STATE: test-backend-node.js event: image -2022-11-17 14:20:52 STATE: test-backend-node.js event: detect -2022-11-17 14:20:52 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg posenet -2022-11-17 14:20:52 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-11-17 14:20:52 DATA:  test-backend-node.js result: performance: load: null total: 255 -2022-11-17 14:20:52 STATE: test-backend-node.js passed: posenet -2022-11-17 14:20:52 STATE: test-backend-node.js start movenet -2022-11-17 14:20:52 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-17 14:20:52 STATE: test-backend-node.js event: image -2022-11-17 14:20:52 STATE: test-backend-node.js event: detect -2022-11-17 14:20:52 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg movenet -2022-11-17 14:20:52 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-17 14:20:52 DATA:  test-backend-node.js result: performance: load: null total: 249 -2022-11-17 14:20:52 STATE: test-backend-node.js passed: movenet -2022-11-17 14:20:52 INFO:  test-backend-node.js test face matching -2022-11-17 14:20:52 STATE: test-backend-node.js passed: face database 40 -2022-11-17 14:20:52 STATE: test-backend-node.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}} -2022-11-17 14:20:52 INFO:  test-backend-node.js test face similarity alternative -2022-11-17 14:20:52 STATE: test-backend-node.js start face embeddings -2022-11-17 14:20:53 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-17 14:20:53 STATE: test-backend-node.js event: image -2022-11-17 14:20:53 ERROR: test-backend-node.js failed: testDetect face embeddings -2022-11-17 14:20:53 ERROR: test-backend-node.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node.js:121:37595"," at new Promise ()"," at V5 (/home/vlado/dev/human/dist/human.node.js:121:37364)"," at q5 (/home/vlado/dev/human/dist/human.node.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node.js:840:8563"]} -2022-11-17 14:20:53 INFO:  -2022-11-17 14:20:53 INFO:  test-backend-node-gpu.js start -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js test: configuration validation -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js passed: configuration default validation [] -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js test: model load -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js test: warmup -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js passed: create human -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js human version: 3.0.0 -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js platform: linux x64 agent: NodeJS v19.1.0 -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js tfjs version: 4.0.0 -2022-11-17 14:20:54 INFO:  test-backend-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js passed: set backend: tensorflow -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js tensors 1785 -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js passed: load models -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js result: defined models: 2 loaded models: 2 -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js passed: warmup: none default -2022-11-17 14:20:54 DATA:  test-backend-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-11-17 14:20:54 DATA:  test-backend-node-gpu.js result: performance: load: null total: null -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js passed: warmup none result match -2022-11-17 14:20:54 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js event: warmup -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js passed: warmup: face default -2022-11-17 14:20:57 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-11-17 14:20:57 DATA:  test-backend-node-gpu.js result: performance: load: null total: 2683 -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js passed: warmup face result match -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js event: warmup -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js passed: warmup: body default -2022-11-17 14:20:57 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:57 DATA:  test-backend-node-gpu.js result: performance: load: null total: 144 -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js passed: warmup body result match -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-11-17 14:20:57 INFO:  test-backend-node-gpu.js test: details verification -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js start default -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:20:57 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-11-17 14:20:58 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:20:58 DATA:  test-backend-node-gpu.js result: performance: load: null total: 144 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details face length 1 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details face score 1 0.93 1 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details face age/gender 23.7 female 0.97 2.34 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details face arrays 4 478 1024 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details face anti-spoofing 0.79 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details face liveness 0.83 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details body length 1 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details body 0.92 17 6 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details hand length 1 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details hand 0.51 0.73 point -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details hand arrays 21 5 7 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details gesture length 7 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details object length 1 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: details object 0.72 person -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:20:58 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-11-17 14:20:59 INFO:  test-backend-node-gpu.js test default -2022-11-17 14:20:59 STATE: test-backend-node-gpu.js start async -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg async -2022-11-17 14:21:00 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:00 DATA:  test-backend-node-gpu.js result: performance: load: null total: 113 -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: default result face match 1 female 0.97 -2022-11-17 14:21:00 INFO:  test-backend-node-gpu.js test sync -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js start sync -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sync -2022-11-17 14:21:00 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:00 DATA:  test-backend-node-gpu.js result: performance: load: null total: 116 -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: default sync 1 female 0.97 -2022-11-17 14:21:00 INFO:  test-backend-node-gpu.js test: image process -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: image input null [1,256,256,3] -2022-11-17 14:21:00 INFO:  test-backend-node-gpu.js test: image null -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: invalid input could not convert input to tensor -2022-11-17 14:21:00 INFO:  test-backend-node-gpu.js test face similarity -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js start face similarity -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity -2022-11-17 14:21:00 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-11-17 14:21:00 DATA:  test-backend-node-gpu.js result: performance: load: null total: 122 -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js start face similarity -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity -2022-11-17 14:21:00 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:00 DATA:  test-backend-node-gpu.js result: performance: load: null total: 135 -2022-11-17 14:21:00 STATE: test-backend-node-gpu.js start face similarity -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-11-17 14:21:01 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-11-17 14:21:01 DATA:  test-backend-node-gpu.js result: performance: load: null total: 119 -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js passed: face descriptor -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js passed: face similarity {"similarity":[1,0.4475002983522097,0.5570879556505012],"descriptors":[1024,1024,1024]} -2022-11-17 14:21:01 INFO:  test-backend-node-gpu.js test object -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js start object -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2022-11-17 14:21:01 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:01 DATA:  test-backend-node-gpu.js result: performance: load: null total: 111 -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js passed: centernet -2022-11-17 14:21:01 STATE: test-backend-node-gpu.js start object -2022-11-17 14:21:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:02 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:02 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2022-11-17 14:21:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 388 -2022-11-17 14:21:02 STATE: test-backend-node-gpu.js passed: nanodet -2022-11-17 14:21:02 INFO:  test-backend-node-gpu.js test sensitive -2022-11-17 14:21:02 STATE: test-backend-node-gpu.js start sensitive -2022-11-17 14:21:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:02 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:03 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:03 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive -2022-11-17 14:21:03 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-17 14:21:03 DATA:  test-backend-node-gpu.js result: performance: load: null total: 112 -2022-11-17 14:21:03 STATE: test-backend-node-gpu.js passed: sensitive result match -2022-11-17 14:21:03 STATE: test-backend-node-gpu.js passed: sensitive face result match -2022-11-17 14:21:03 STATE: test-backend-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-11-17 14:21:03 STATE: test-backend-node-gpu.js passed: sensitive body result match -2022-11-17 14:21:03 STATE: test-backend-node-gpu.js passed: sensitive hand result match -2022-11-17 14:21:03 INFO:  test-backend-node-gpu.js test body -2022-11-17 14:21:03 STATE: test-backend-node-gpu.js start blazepose -2022-11-17 14:21:05 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:05 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:05 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose -2022-11-17 14:21:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-11-17 14:21:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 269 -2022-11-17 14:21:05 STATE: test-backend-node-gpu.js passed: blazepose -2022-11-17 14:21:05 STATE: test-backend-node-gpu.js start efficientpose -2022-11-17 14:21:05 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:05 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:06 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:06 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-11-17 14:21:06 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-11-17 14:21:06 DATA:  test-backend-node-gpu.js result: performance: load: null total: 972 -2022-11-17 14:21:06 STATE: test-backend-node-gpu.js passed: efficientpose -2022-11-17 14:21:06 STATE: test-backend-node-gpu.js start posenet -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet -2022-11-17 14:21:07 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-11-17 14:21:07 DATA:  test-backend-node-gpu.js result: performance: load: null total: 125 -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js passed: posenet -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js start movenet -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js event: detect -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet -2022-11-17 14:21:07 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-17 14:21:07 DATA:  test-backend-node-gpu.js result: performance: load: null total: 99 -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js passed: movenet -2022-11-17 14:21:07 INFO:  test-backend-node-gpu.js test face matching -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js passed: face database 40 -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7829338043932047}} {"second":{"index":4,"similarity":0.5002928781584631}} {"third":{"index":4,"similarity":0.5402934771672516}} -2022-11-17 14:21:07 INFO:  test-backend-node-gpu.js test face similarity alternative -2022-11-17 14:21:07 STATE: test-backend-node-gpu.js start face embeddings -2022-11-17 14:21:08 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-17 14:21:08 STATE: test-backend-node-gpu.js event: image -2022-11-17 14:21:08 ERROR: test-backend-node-gpu.js failed: testDetect face embeddings -2022-11-17 14:21:08 ERROR: test-backend-node-gpu.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node-gpu.js:121:37595"," at new Promise ()"," at V5 (/home/vlado/dev/human/dist/human.node-gpu.js:121:37364)"," at q5 (/home/vlado/dev/human/dist/human.node-gpu.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node-gpu.js:840:8563"]} -2022-11-17 14:21:08 INFO:  -2022-11-17 14:21:08 INFO:  test-backend-node-wasm.js start -2022-11-17 14:21:08 DATA:  test-backend-node-wasm.js stdout: 2022-11-17 14:21:08 INFO:  { supported: true, backend: true, simd: undefined, multithread: undefined } https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.0.0/dist/ -2022-11-17 14:21:09 STATE: test-backend-node-wasm.js passed: model server: https://vladmandic.github.io/human-models/models/ -2022-11-17 14:21:09 INFO:  test-backend-node-wasm.js test: configuration validation -2022-11-17 14:21:09 STATE: test-backend-node-wasm.js passed: configuration default validation [] -2022-11-17 14:21:09 STATE: test-backend-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-11-17 14:21:09 INFO:  test-backend-node-wasm.js test: model load -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"https://vladmandic.github.io/human-models/models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"https://vladmandic.github.io/human-models/models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"https://vladmandic.github.io/human-models/models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"https://vladmandic.github.io/human-models/models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"https://vladmandic.github.io/human-models/models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"https://vladmandic.github.io/human-models/models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"https://vladmandic.github.io/human-models/models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"https://vladmandic.github.io/human-models/models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"https://vladmandic.github.io/human-models/models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"https://vladmandic.github.io/human-models/models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] -2022-11-17 14:21:11 INFO:  test-backend-node-wasm.js memory: {"memory":{"unreliable":false,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} -2022-11-17 14:21:11 INFO:  test-backend-node-wasm.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2022-11-17 14:21:11 INFO:  test-backend-node-wasm.js test: warmup -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js passed: create human -2022-11-17 14:21:11 INFO:  test-backend-node-wasm.js human version: 3.0.0 -2022-11-17 14:21:11 INFO:  test-backend-node-wasm.js platform: linux x64 agent: NodeJS v19.1.0 -2022-11-17 14:21:11 INFO:  test-backend-node-wasm.js tfjs version: 4.0.0 -2022-11-17 14:21:11 INFO:  test-backend-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["wasm"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":126} -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js passed: set backend: wasm -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js tensors 1785 -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js passed: load models -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js result: defined models: 2 loaded models: 2 -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js passed: warmup: none default -2022-11-17 14:21:11 DATA:  test-backend-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-11-17 14:21:11 DATA:  test-backend-node-wasm.js result: performance: load: null total: null -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js passed: warmup none result match -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js event: warmup -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js passed: warmup: face default -2022-11-17 14:21:11 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-11-17 14:21:11 DATA:  test-backend-node-wasm.js result: performance: load: null total: 513 -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js passed: warmup face result match -2022-11-17 14:21:11 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js event: warmup -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: warmup: body default -2022-11-17 14:21:12 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:12 DATA:  test-backend-node-wasm.js result: performance: load: null total: 342 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: warmup body result match -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-11-17 14:21:12 INFO:  test-backend-node-wasm.js test: details verification -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js start default -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-11-17 14:21:12 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:12 DATA:  test-backend-node-wasm.js result: performance: load: null total: 325 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details face length 1 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details face score 1 0.93 1 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details face age/gender 23.7 female 0.97 2.34 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details face arrays 4 478 1024 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details face anti-spoofing 0.79 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details face liveness 0.83 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details body length 1 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details body 0.92 17 6 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details hand length 1 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details hand 0.51 0.73 point -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details hand arrays 21 5 7 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details gesture length 7 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details object length 1 -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: details object 0.72 person -2022-11-17 14:21:12 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2022-11-17 14:21:13 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:13 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:13 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-11-17 14:21:13 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2022-11-17 14:21:13 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:13 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:13 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-11-17 14:21:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:14 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:14 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:14 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-11-17 14:21:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:14 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:14 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:14 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-11-17 14:21:15 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-11-17 14:21:15 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:15 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:15 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-11-17 14:21:15 INFO:  test-backend-node-wasm.js test default -2022-11-17 14:21:15 STATE: test-backend-node-wasm.js start async -2022-11-17 14:21:15 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:15 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg async -2022-11-17 14:21:16 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:16 DATA:  test-backend-node-wasm.js result: performance: load: null total: 338 -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: default result face match 1 female 0.97 -2022-11-17 14:21:16 INFO:  test-backend-node-wasm.js test sync -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js start sync -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sync -2022-11-17 14:21:16 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:16 DATA:  test-backend-node-wasm.js result: performance: load: null total: 334 -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: default sync 1 female 0.97 -2022-11-17 14:21:16 INFO:  test-backend-node-wasm.js test: image process -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: image input null [1,256,256,3] -2022-11-17 14:21:16 INFO:  test-backend-node-wasm.js test: image null -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: invalid input could not convert input to tensor -2022-11-17 14:21:16 INFO:  test-backend-node-wasm.js test face similarity -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js start face similarity -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-11-17 14:21:16 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity -2022-11-17 14:21:17 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-11-17 14:21:17 DATA:  test-backend-node-wasm.js result: performance: load: null total: 301 -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js start face similarity -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity -2022-11-17 14:21:17 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:17 DATA:  test-backend-node-wasm.js result: performance: load: null total: 326 -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js start face similarity -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-11-17 14:21:17 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-11-17 14:21:17 DATA:  test-backend-node-wasm.js result: performance: load: null total: 294 -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js passed: face descriptor -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} -2022-11-17 14:21:17 INFO:  test-backend-node-wasm.js test object -2022-11-17 14:21:17 STATE: test-backend-node-wasm.js start object -2022-11-17 14:21:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:18 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:18 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:18 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2022-11-17 14:21:18 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-17 14:21:18 DATA:  test-backend-node-wasm.js result: performance: load: null total: 370 -2022-11-17 14:21:18 STATE: test-backend-node-wasm.js passed: centernet -2022-11-17 14:21:18 STATE: test-backend-node-wasm.js start object -2022-11-17 14:21:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:19 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:19 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:19 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2022-11-17 14:21:19 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-17 14:21:19 DATA:  test-backend-node-wasm.js result: performance: load: null total: 231 -2022-11-17 14:21:19 ERROR: test-backend-node-wasm.js failed: nanodet [] -2022-11-17 14:21:19 INFO:  test-backend-node-wasm.js test sensitive -2022-11-17 14:21:19 STATE: test-backend-node-wasm.js start sensitive -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive -2022-11-17 14:21:20 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-17 14:21:20 DATA:  test-backend-node-wasm.js result: performance: load: null total: 272 -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js passed: sensitive result match -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js passed: sensitive face result match -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js passed: sensitive body result match -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js passed: sensitive hand result match -2022-11-17 14:21:20 INFO:  test-backend-node-wasm.js test body -2022-11-17 14:21:20 STATE: test-backend-node-wasm.js start blazepose -2022-11-17 14:21:23 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:23 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:23 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:23 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose -2022-11-17 14:21:23 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-11-17 14:21:23 DATA:  test-backend-node-wasm.js result: performance: load: null total: 394 -2022-11-17 14:21:23 STATE: test-backend-node-wasm.js passed: blazepose -2022-11-17 14:21:23 STATE: test-backend-node-wasm.js start efficientpose -2022-11-17 14:21:24 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:24 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:25 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:25 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-11-17 14:21:25 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-11-17 14:21:25 DATA:  test-backend-node-wasm.js result: performance: load: null total: 667 -2022-11-17 14:21:25 STATE: test-backend-node-wasm.js passed: efficientpose -2022-11-17 14:21:25 STATE: test-backend-node-wasm.js start posenet -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet -2022-11-17 14:21:26 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-11-17 14:21:26 DATA:  test-backend-node-wasm.js result: performance: load: null total: 297 -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js passed: posenet -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js start movenet -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js event: detect -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet -2022-11-17 14:21:26 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-17 14:21:26 DATA:  test-backend-node-wasm.js result: performance: load: null total: 232 -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js passed: movenet -2022-11-17 14:21:26 INFO:  test-backend-node-wasm.js test face matching -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js passed: face database 40 -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} -2022-11-17 14:21:26 INFO:  test-backend-node-wasm.js test face similarity alternative -2022-11-17 14:21:26 STATE: test-backend-node-wasm.js start face embeddings -2022-11-17 14:21:27 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-11-17 14:21:27 STATE: test-backend-node-wasm.js event: image -2022-11-17 14:21:27 ERROR: test-backend-node-wasm.js failed: testDetect face embeddings -2022-11-17 14:21:27 ERROR: test-backend-node-wasm.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node-wasm.js:121:37595"," at new Promise ()"," at Z5 (/home/vlado/dev/human/dist/human.node-wasm.js:121:37364)"," at U5 (/home/vlado/dev/human/dist/human.node-wasm.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node-wasm.js:840:8563"]} -2022-11-17 14:21:27 STATE: all tests complete -2022-11-17 14:21:27 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"../demo/nodejs/process-folder.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"../demo/facematch/node-match.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"test-node-load.js","passed":1,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"test-node-gear.js","passed":3,"failed":0} -2022-11-17 14:21:27 INFO:  status {"test":"test-backend-node.js","passed":85,"failed":1} -2022-11-17 14:21:27 INFO:  status {"test":"test-backend-node-gpu.js","passed":85,"failed":1} -2022-11-17 14:21:27 INFO:  status {"test":"test-backend-node-wasm.js","passed":85,"failed":2} -2022-11-17 14:21:27 INFO:  failures {"count":4} -2022-11-17 14:21:27 WARN:  failed {"test":"test-backend-node.js","message":["error",["failed:","testDetect face embeddings"]]} -2022-11-17 14:21:27 WARN:  failed {"test":"test-backend-node-gpu.js","message":["error",["failed:","testDetect face embeddings"]]} -2022-11-17 14:21:27 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed: nanodet",[]]]} -2022-11-17 14:21:27 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed:","testDetect face embeddings"]]} +2022-11-18 11:54:19 INFO:  @vladmandic/human version 3.0.0 +2022-11-18 11:54:19 INFO:  User: vlado Platform: linux Arch: x64 Node: v19.1.0 +2022-11-18 11:54:19 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/nodejs/process-folder.js","args":["samples"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]}] +2022-11-18 11:54:19 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start +2022-11-18 11:54:20 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start +2022-11-18 11:54:21 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start +2022-11-18 11:54:22 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start +2022-11-18 11:54:22 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start +2022-11-18 11:54:23 INFO:  {"cmd":"../demo/nodejs/process-folder.js","args":["samples"]} start +2022-11-18 11:54:25 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start +2022-11-18 11:54:37 INFO:  {"cmd":"../demo/facematch/node-match.js","args":[]} start +2022-11-18 11:54:38 INFO:  tests: ["test-node-load.js","test-node-gear.js","test-backend-node.js","test-backend-node-gpu.js","test-backend-node-wasm.js"] +2022-11-18 11:54:38 INFO:  +2022-11-18 11:54:38 INFO:  test-node-load.js start +2022-11-18 11:54:38 INFO:  test-node-load.js load start {"human":"3.0.0","tf":"4.0.0","progress":0} +2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":1,"progress":0} +2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":10,"progress":0} +2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":22,"progress":0.05339166087267679} +2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":57,"progress":0.3299591712723044} +2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":79,"progress":0.7259096583739463} +2022-11-18 11:54:38 STATE: test-node-load.js passed {"progress":1} +2022-11-18 11:54:38 INFO:  test-node-load.js load final {"progress":1} +2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":434,"progress":1} +2022-11-18 11:54:38 INFO:  +2022-11-18 11:54:38 INFO:  test-node-gear.js start +2022-11-18 11:54:39 DATA:  test-node-gear.js input: ["samples/in/ai-face.jpg"] +2022-11-18 11:54:40 STATE: test-node-gear.js passed: gear faceres samples/in/ai-face.jpg +2022-11-18 11:54:40 DATA:  test-node-gear.js results {"face":0,"model":"faceres","image":"samples/in/ai-face.jpg","age":23.5,"gender":"female","genderScore":0.92} +2022-11-18 11:54:40 STATE: test-node-gear.js passed: gear gear samples/in/ai-face.jpg +2022-11-18 11:54:40 DATA:  test-node-gear.js results {"face":0,"model":"gear","image":"samples/in/ai-face.jpg","age":23.3,"gender":"female","genderScore":0.51,"race":[{"score":0.93,"race":"white"}]} +2022-11-18 11:54:40 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg +2022-11-18 11:54:40 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"female","genderScore":0.99} +2022-11-18 11:54:40 INFO:  +2022-11-18 11:54:40 INFO:  test-backend-node.js start +2022-11-18 11:54:41 INFO:  test-backend-node.js test: configuration validation +2022-11-18 11:54:41 STATE: test-backend-node.js passed: configuration default validation [] +2022-11-18 11:54:41 STATE: test-backend-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-11-18 11:54:41 INFO:  test-backend-node.js test: model load +2022-11-18 11:54:41 STATE: test-backend-node.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] +2022-11-18 11:54:41 INFO:  test-backend-node.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} +2022-11-18 11:54:41 INFO:  test-backend-node.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2022-11-18 11:54:41 INFO:  test-backend-node.js test: warmup +2022-11-18 11:54:41 STATE: test-backend-node.js passed: create human +2022-11-18 11:54:41 INFO:  test-backend-node.js human version: 3.0.0 +2022-11-18 11:54:41 INFO:  test-backend-node.js platform: linux x64 agent: NodeJS v19.1.0 +2022-11-18 11:54:41 INFO:  test-backend-node.js tfjs version: 4.0.0 +2022-11-18 11:54:41 INFO:  test-backend-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} +2022-11-18 11:54:41 STATE: test-backend-node.js passed: set backend: tensorflow +2022-11-18 11:54:41 STATE: test-backend-node.js tensors 1785 +2022-11-18 11:54:41 STATE: test-backend-node.js passed: load models +2022-11-18 11:54:41 STATE: test-backend-node.js result: defined models: 2 loaded models: 2 +2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup: none default +2022-11-18 11:54:41 DATA:  test-backend-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-11-18 11:54:41 DATA:  test-backend-node.js result: performance: load: null total: null +2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup none result match +2022-11-18 11:54:41 STATE: test-backend-node.js event: image +2022-11-18 11:54:41 STATE: test-backend-node.js event: detect +2022-11-18 11:54:41 STATE: test-backend-node.js event: warmup +2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup: face default +2022-11-18 11:54:41 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-11-18 11:54:41 DATA:  test-backend-node.js result: performance: load: null total: 403 +2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup face result match +2022-11-18 11:54:41 STATE: test-backend-node.js event: image +2022-11-18 11:54:41 STATE: test-backend-node.js event: detect +2022-11-18 11:54:41 STATE: test-backend-node.js event: warmup +2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup: body default +2022-11-18 11:54:41 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:54:41 DATA:  test-backend-node.js result: performance: load: null total: 326 +2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup body result match +2022-11-18 11:54:41 STATE: test-backend-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-11-18 11:54:41 INFO:  test-backend-node.js test: details verification +2022-11-18 11:54:41 STATE: test-backend-node.js start default +2022-11-18 11:54:42 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:42 STATE: test-backend-node.js event: image +2022-11-18 11:54:42 STATE: test-backend-node.js event: detect +2022-11-18 11:54:42 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg default +2022-11-18 11:54:42 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:54:42 DATA:  test-backend-node.js result: performance: load: null total: 308 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face length 1 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face score 1 0.93 1 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face age/gender 23.7 female 0.97 2.34 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face arrays 4 478 1024 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face anti-spoofing 0.79 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face liveness 0.83 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details body length 1 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details body 0.92 17 6 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details hand length 1 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details hand 0.51 0.73 point +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details hand arrays 21 5 7 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details gesture length 7 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details object length 1 +2022-11-18 11:54:42 STATE: test-backend-node.js passed: details object 0.72 person +2022-11-18 11:54:42 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-11-18 11:54:42 STATE: test-backend-node.js event: image +2022-11-18 11:54:42 STATE: test-backend-node.js event: detect +2022-11-18 11:54:42 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-11-18 11:54:43 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-11-18 11:54:43 STATE: test-backend-node.js event: image +2022-11-18 11:54:43 STATE: test-backend-node.js event: detect +2022-11-18 11:54:43 STATE: test-backend-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-11-18 11:54:43 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:43 STATE: test-backend-node.js event: image +2022-11-18 11:54:43 STATE: test-backend-node.js event: detect +2022-11-18 11:54:43 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-11-18 11:54:44 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:44 STATE: test-backend-node.js event: image +2022-11-18 11:54:44 STATE: test-backend-node.js event: detect +2022-11-18 11:54:44 STATE: test-backend-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-11-18 11:54:44 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-11-18 11:54:44 STATE: test-backend-node.js event: image +2022-11-18 11:54:44 STATE: test-backend-node.js event: detect +2022-11-18 11:54:44 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-11-18 11:54:44 INFO:  test-backend-node.js test default +2022-11-18 11:54:44 STATE: test-backend-node.js start async +2022-11-18 11:54:45 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:45 STATE: test-backend-node.js event: image +2022-11-18 11:54:45 STATE: test-backend-node.js event: detect +2022-11-18 11:54:45 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg async +2022-11-18 11:54:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:54:45 DATA:  test-backend-node.js result: performance: load: null total: 294 +2022-11-18 11:54:45 STATE: test-backend-node.js passed: default result face match 1 female 0.97 +2022-11-18 11:54:45 INFO:  test-backend-node.js test sync +2022-11-18 11:54:45 STATE: test-backend-node.js start sync +2022-11-18 11:54:45 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:45 STATE: test-backend-node.js event: image +2022-11-18 11:54:45 STATE: test-backend-node.js event: detect +2022-11-18 11:54:45 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sync +2022-11-18 11:54:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:54:45 DATA:  test-backend-node.js result: performance: load: null total: 288 +2022-11-18 11:54:45 STATE: test-backend-node.js passed: default sync 1 female 0.97 +2022-11-18 11:54:45 INFO:  test-backend-node.js test: image process +2022-11-18 11:54:45 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-18 11:54:45 STATE: test-backend-node.js passed: image input null [1,256,256,3] +2022-11-18 11:54:45 INFO:  test-backend-node.js test: image null +2022-11-18 11:54:45 STATE: test-backend-node.js passed: invalid input could not convert input to tensor +2022-11-18 11:54:45 INFO:  test-backend-node.js test face similarity +2022-11-18 11:54:45 STATE: test-backend-node.js start face similarity +2022-11-18 11:54:45 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-18 11:54:45 STATE: test-backend-node.js event: image +2022-11-18 11:54:46 STATE: test-backend-node.js event: detect +2022-11-18 11:54:46 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face similarity +2022-11-18 11:54:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-11-18 11:54:46 DATA:  test-backend-node.js result: performance: load: null total: 284 +2022-11-18 11:54:46 STATE: test-backend-node.js start face similarity +2022-11-18 11:54:46 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:46 STATE: test-backend-node.js event: image +2022-11-18 11:54:46 STATE: test-backend-node.js event: detect +2022-11-18 11:54:46 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg face similarity +2022-11-18 11:54:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:54:46 DATA:  test-backend-node.js result: performance: load: null total: 288 +2022-11-18 11:54:46 STATE: test-backend-node.js start face similarity +2022-11-18 11:54:46 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-11-18 11:54:46 STATE: test-backend-node.js event: image +2022-11-18 11:54:46 STATE: test-backend-node.js event: detect +2022-11-18 11:54:46 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-11-18 11:54:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-11-18 11:54:46 DATA:  test-backend-node.js result: performance: load: null total: 262 +2022-11-18 11:54:46 STATE: test-backend-node.js passed: face descriptor +2022-11-18 11:54:46 STATE: test-backend-node.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]} +2022-11-18 11:54:46 INFO:  test-backend-node.js test object +2022-11-18 11:54:46 STATE: test-backend-node.js start object +2022-11-18 11:54:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:47 STATE: test-backend-node.js event: image +2022-11-18 11:54:47 STATE: test-backend-node.js event: detect +2022-11-18 11:54:47 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object +2022-11-18 11:54:47 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:54:47 DATA:  test-backend-node.js result: performance: load: null total: 298 +2022-11-18 11:54:47 STATE: test-backend-node.js passed: centernet +2022-11-18 11:54:47 STATE: test-backend-node.js start object +2022-11-18 11:54:48 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:48 STATE: test-backend-node.js event: image +2022-11-18 11:54:48 STATE: test-backend-node.js event: detect +2022-11-18 11:54:48 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object +2022-11-18 11:54:48 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:54:48 DATA:  test-backend-node.js result: performance: load: null total: 291 +2022-11-18 11:54:48 STATE: test-backend-node.js passed: nanodet +2022-11-18 11:54:48 INFO:  test-backend-node.js test sensitive +2022-11-18 11:54:48 STATE: test-backend-node.js start sensitive +2022-11-18 11:54:49 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:49 STATE: test-backend-node.js event: image +2022-11-18 11:54:49 STATE: test-backend-node.js event: detect +2022-11-18 11:54:49 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sensitive +2022-11-18 11:54:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-18 11:54:49 DATA:  test-backend-node.js result: performance: load: null total: 261 +2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive result match +2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive face result match +2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive body result match +2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive hand result match +2022-11-18 11:54:49 INFO:  test-backend-node.js test body +2022-11-18 11:54:49 STATE: test-backend-node.js start blazepose +2022-11-18 11:54:51 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:51 STATE: test-backend-node.js event: image +2022-11-18 11:54:51 STATE: test-backend-node.js event: detect +2022-11-18 11:54:51 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg blazepose +2022-11-18 11:54:51 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-11-18 11:54:51 DATA:  test-backend-node.js result: performance: load: null total: 333 +2022-11-18 11:54:51 STATE: test-backend-node.js passed: blazepose +2022-11-18 11:54:51 STATE: test-backend-node.js start efficientpose +2022-11-18 11:54:52 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:52 STATE: test-backend-node.js event: image +2022-11-18 11:54:52 STATE: test-backend-node.js event: detect +2022-11-18 11:54:52 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-11-18 11:54:52 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-11-18 11:54:52 DATA:  test-backend-node.js result: performance: load: null total: 300 +2022-11-18 11:54:52 STATE: test-backend-node.js passed: efficientpose +2022-11-18 11:54:52 STATE: test-backend-node.js start posenet +2022-11-18 11:54:53 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:53 STATE: test-backend-node.js event: image +2022-11-18 11:54:53 STATE: test-backend-node.js event: detect +2022-11-18 11:54:53 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg posenet +2022-11-18 11:54:53 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-11-18 11:54:53 DATA:  test-backend-node.js result: performance: load: null total: 245 +2022-11-18 11:54:53 STATE: test-backend-node.js passed: posenet +2022-11-18 11:54:53 STATE: test-backend-node.js start movenet +2022-11-18 11:54:54 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-18 11:54:54 STATE: test-backend-node.js event: image +2022-11-18 11:54:54 STATE: test-backend-node.js event: detect +2022-11-18 11:54:54 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg movenet +2022-11-18 11:54:54 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-18 11:54:54 DATA:  test-backend-node.js result: performance: load: null total: 251 +2022-11-18 11:54:54 STATE: test-backend-node.js passed: movenet +2022-11-18 11:54:54 INFO:  test-backend-node.js test face matching +2022-11-18 11:54:54 STATE: test-backend-node.js passed: face database 40 +2022-11-18 11:54:54 STATE: test-backend-node.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}} +2022-11-18 11:54:54 INFO:  test-backend-node.js test face similarity alternative +2022-11-18 11:54:54 STATE: test-backend-node.js start face embeddings +2022-11-18 11:54:54 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-18 11:54:54 STATE: test-backend-node.js event: image +2022-11-18 11:54:55 ERROR: test-backend-node.js failed: testDetect face embeddings +2022-11-18 11:54:55 ERROR: test-backend-node.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node.js:121:37595"," at new Promise ()"," at B5 (/home/vlado/dev/human/dist/human.node.js:121:37364)"," at V5 (/home/vlado/dev/human/dist/human.node.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node.js:840:8294"]} +2022-11-18 11:54:55 INFO:  +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js start +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js test: configuration validation +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: configuration default validation [] +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js test: model load +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js test: warmup +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: create human +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js human version: 3.0.0 +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js platform: linux x64 agent: NodeJS v19.1.0 +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js tfjs version: 4.0.0 +2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: set backend: tensorflow +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js tensors 1785 +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: load models +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js result: defined models: 2 loaded models: 2 +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: warmup: none default +2022-11-18 11:54:55 DATA:  test-backend-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-11-18 11:54:55 DATA:  test-backend-node-gpu.js result: performance: load: null total: null +2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: warmup none result match +2022-11-18 11:54:56 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: warmup +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: warmup: face default +2022-11-18 11:54:59 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-11-18 11:54:59 DATA:  test-backend-node-gpu.js result: performance: load: null total: 3308 +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: warmup face result match +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: warmup +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: warmup: body default +2022-11-18 11:54:59 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:54:59 DATA:  test-backend-node-gpu.js result: performance: load: null total: 174 +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: warmup body result match +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-11-18 11:54:59 INFO:  test-backend-node-gpu.js test: details verification +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js start default +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-11-18 11:55:00 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:00 DATA:  test-backend-node-gpu.js result: performance: load: null total: 154 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face length 1 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face score 1 0.93 1 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face age/gender 23.7 female 0.97 2.34 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face arrays 4 478 1024 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face anti-spoofing 0.79 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face liveness 0.83 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details body length 1 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details body 0.92 17 6 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details hand length 1 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details hand 0.51 0.73 point +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details hand arrays 21 5 7 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details gesture length 7 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details object length 1 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details object 0.72 person +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-11-18 11:55:01 INFO:  test-backend-node-gpu.js test default +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js start async +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg async +2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 144 +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: default result face match 1 female 0.97 +2022-11-18 11:55:02 INFO:  test-backend-node-gpu.js test sync +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js start sync +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sync +2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 140 +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: default sync 1 female 0.97 +2022-11-18 11:55:02 INFO:  test-backend-node-gpu.js test: image process +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: image input null [1,256,256,3] +2022-11-18 11:55:02 INFO:  test-backend-node-gpu.js test: image null +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: invalid input could not convert input to tensor +2022-11-18 11:55:02 INFO:  test-backend-node-gpu.js test face similarity +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js start face similarity +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity +2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 133 +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js start face similarity +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity +2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 133 +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js start face similarity +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-11-18 11:55:03 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-11-18 11:55:03 DATA:  test-backend-node-gpu.js result: performance: load: null total: 117 +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: face descriptor +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: face similarity {"similarity":[1,0.4475002983522097,0.5570879556505012],"descriptors":[1024,1024,1024]} +2022-11-18 11:55:03 INFO:  test-backend-node-gpu.js test object +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js start object +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2022-11-18 11:55:03 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:03 DATA:  test-backend-node-gpu.js result: performance: load: null total: 130 +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: centernet +2022-11-18 11:55:03 STATE: test-backend-node-gpu.js start object +2022-11-18 11:55:04 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:04 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2022-11-18 11:55:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 523 +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: nanodet +2022-11-18 11:55:05 INFO:  test-backend-node-gpu.js test sensitive +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js start sensitive +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive +2022-11-18 11:55:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-18 11:55:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 124 +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive result match +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive face result match +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive body result match +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive hand result match +2022-11-18 11:55:05 INFO:  test-backend-node-gpu.js test body +2022-11-18 11:55:05 STATE: test-backend-node-gpu.js start blazepose +2022-11-18 11:55:07 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:07 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:07 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:07 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose +2022-11-18 11:55:07 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-11-18 11:55:07 DATA:  test-backend-node-gpu.js result: performance: load: null total: 230 +2022-11-18 11:55:07 STATE: test-backend-node-gpu.js passed: blazepose +2022-11-18 11:55:07 STATE: test-backend-node-gpu.js start efficientpose +2022-11-18 11:55:07 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:07 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:08 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:08 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-11-18 11:55:08 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-11-18 11:55:08 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1013 +2022-11-18 11:55:08 STATE: test-backend-node-gpu.js passed: efficientpose +2022-11-18 11:55:08 STATE: test-backend-node-gpu.js start posenet +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet +2022-11-18 11:55:09 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-11-18 11:55:09 DATA:  test-backend-node-gpu.js result: performance: load: null total: 132 +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: posenet +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js start movenet +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js event: detect +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet +2022-11-18 11:55:09 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-18 11:55:09 DATA:  test-backend-node-gpu.js result: performance: load: null total: 93 +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: movenet +2022-11-18 11:55:09 INFO:  test-backend-node-gpu.js test face matching +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: face database 40 +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7829338043932047}} {"second":{"index":4,"similarity":0.5002928781584631}} {"third":{"index":4,"similarity":0.5402934771672516}} +2022-11-18 11:55:09 INFO:  test-backend-node-gpu.js test face similarity alternative +2022-11-18 11:55:09 STATE: test-backend-node-gpu.js start face embeddings +2022-11-18 11:55:10 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-18 11:55:10 STATE: test-backend-node-gpu.js event: image +2022-11-18 11:55:10 ERROR: test-backend-node-gpu.js failed: testDetect face embeddings +2022-11-18 11:55:10 ERROR: test-backend-node-gpu.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node-gpu.js:121:37595"," at new Promise ()"," at B5 (/home/vlado/dev/human/dist/human.node-gpu.js:121:37364)"," at V5 (/home/vlado/dev/human/dist/human.node-gpu.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node-gpu.js:840:8294"]} +2022-11-18 11:55:10 INFO:  +2022-11-18 11:55:10 INFO:  test-backend-node-wasm.js start +2022-11-18 11:55:10 DATA:  test-backend-node-wasm.js stdout: 2022-11-18 11:55:10 INFO:  { supported: true, backend: true, simd: undefined, multithread: undefined } https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.0.0/dist/ +2022-11-18 11:55:11 STATE: test-backend-node-wasm.js passed: model server: https://vladmandic.github.io/human-models/models/ +2022-11-18 11:55:11 INFO:  test-backend-node-wasm.js test: configuration validation +2022-11-18 11:55:11 STATE: test-backend-node-wasm.js passed: configuration default validation [] +2022-11-18 11:55:11 STATE: test-backend-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-11-18 11:55:11 INFO:  test-backend-node-wasm.js test: model load +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"https://vladmandic.github.io/human-models/models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"https://vladmandic.github.io/human-models/models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"https://vladmandic.github.io/human-models/models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"https://vladmandic.github.io/human-models/models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"https://vladmandic.github.io/human-models/models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"https://vladmandic.github.io/human-models/models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"https://vladmandic.github.io/human-models/models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"https://vladmandic.github.io/human-models/models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"https://vladmandic.github.io/human-models/models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"https://vladmandic.github.io/human-models/models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] +2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js memory: {"memory":{"unreliable":false,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} +2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js test: warmup +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: create human +2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js human version: 3.0.0 +2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js platform: linux x64 agent: NodeJS v19.1.0 +2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js tfjs version: 4.0.0 +2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["wasm"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":126} +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: set backend: wasm +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js tensors 1785 +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: load models +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js result: defined models: 2 loaded models: 2 +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: warmup: none default +2022-11-18 11:55:13 DATA:  test-backend-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-11-18 11:55:13 DATA:  test-backend-node-wasm.js result: performance: load: null total: null +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: warmup none result match +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js event: warmup +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: warmup: face default +2022-11-18 11:55:13 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-11-18 11:55:13 DATA:  test-backend-node-wasm.js result: performance: load: null total: 480 +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: warmup face result match +2022-11-18 11:55:13 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: warmup +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: warmup: body default +2022-11-18 11:55:14 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: 335 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: warmup body result match +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-11-18 11:55:14 INFO:  test-backend-node-wasm.js test: details verification +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js start default +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-11-18 11:55:14 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: 320 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face length 1 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face score 1 0.93 1 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face age/gender 23.7 female 0.97 2.34 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face arrays 4 478 1024 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face anti-spoofing 0.79 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face liveness 0.83 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details body length 1 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details body 0.92 17 6 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details hand length 1 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details hand 0.51 0.73 point +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details hand arrays 21 5 7 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details gesture length 7 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details object length 1 +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details object 0.72 person +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:15 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:15 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-11-18 11:55:15 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2022-11-18 11:55:15 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:15 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:15 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-11-18 11:55:15 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:15 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:16 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:16 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-11-18 11:55:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:16 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:16 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:16 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-11-18 11:55:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-11-18 11:55:16 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-11-18 11:55:17 INFO:  test-backend-node-wasm.js test default +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js start async +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg async +2022-11-18 11:55:17 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:17 DATA:  test-backend-node-wasm.js result: performance: load: null total: 319 +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js passed: default result face match 1 female 0.97 +2022-11-18 11:55:17 INFO:  test-backend-node-wasm.js test sync +2022-11-18 11:55:17 STATE: test-backend-node-wasm.js start sync +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sync +2022-11-18 11:55:18 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:18 DATA:  test-backend-node-wasm.js result: performance: load: null total: 321 +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: default sync 1 female 0.97 +2022-11-18 11:55:18 INFO:  test-backend-node-wasm.js test: image process +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: image input null [1,256,256,3] +2022-11-18 11:55:18 INFO:  test-backend-node-wasm.js test: image null +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: invalid input could not convert input to tensor +2022-11-18 11:55:18 INFO:  test-backend-node-wasm.js test face similarity +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js start face similarity +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity +2022-11-18 11:55:18 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-11-18 11:55:18 DATA:  test-backend-node-wasm.js result: performance: load: null total: 301 +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js start face similarity +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity +2022-11-18 11:55:19 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:19 DATA:  test-backend-node-wasm.js result: performance: load: null total: 308 +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js start face similarity +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-11-18 11:55:19 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-11-18 11:55:19 DATA:  test-backend-node-wasm.js result: performance: load: null total: 288 +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: face descriptor +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} +2022-11-18 11:55:19 INFO:  test-backend-node-wasm.js test object +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js start object +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:19 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:20 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:20 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2022-11-18 11:55:20 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-18 11:55:20 DATA:  test-backend-node-wasm.js result: performance: load: null total: 314 +2022-11-18 11:55:20 STATE: test-backend-node-wasm.js passed: centernet +2022-11-18 11:55:20 STATE: test-backend-node-wasm.js start object +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2022-11-18 11:55:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-18 11:55:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 208 +2022-11-18 11:55:21 ERROR: test-backend-node-wasm.js failed: nanodet [] +2022-11-18 11:55:21 INFO:  test-backend-node-wasm.js test sensitive +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js start sensitive +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive +2022-11-18 11:55:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-18 11:55:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 245 +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive result match +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive face result match +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive body result match +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive hand result match +2022-11-18 11:55:21 INFO:  test-backend-node-wasm.js test body +2022-11-18 11:55:21 STATE: test-backend-node-wasm.js start blazepose +2022-11-18 11:55:23 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:23 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:24 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:24 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose +2022-11-18 11:55:24 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-11-18 11:55:24 DATA:  test-backend-node-wasm.js result: performance: load: null total: 393 +2022-11-18 11:55:24 STATE: test-backend-node-wasm.js passed: blazepose +2022-11-18 11:55:24 STATE: test-backend-node-wasm.js start efficientpose +2022-11-18 11:55:24 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:24 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:25 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:25 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-11-18 11:55:25 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-11-18 11:55:25 DATA:  test-backend-node-wasm.js result: performance: load: null total: 658 +2022-11-18 11:55:25 STATE: test-backend-node-wasm.js passed: efficientpose +2022-11-18 11:55:25 STATE: test-backend-node-wasm.js start posenet +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet +2022-11-18 11:55:26 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-11-18 11:55:26 DATA:  test-backend-node-wasm.js result: performance: load: null total: 277 +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: posenet +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js start movenet +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js event: detect +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet +2022-11-18 11:55:26 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-18 11:55:26 DATA:  test-backend-node-wasm.js result: performance: load: null total: 237 +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: movenet +2022-11-18 11:55:26 INFO:  test-backend-node-wasm.js test face matching +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: face database 40 +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} +2022-11-18 11:55:26 INFO:  test-backend-node-wasm.js test face similarity alternative +2022-11-18 11:55:26 STATE: test-backend-node-wasm.js start face embeddings +2022-11-18 11:55:27 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-18 11:55:27 STATE: test-backend-node-wasm.js event: image +2022-11-18 11:55:27 ERROR: test-backend-node-wasm.js failed: testDetect face embeddings +2022-11-18 11:55:27 ERROR: test-backend-node-wasm.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node-wasm.js:121:37595"," at new Promise ()"," at H5 (/home/vlado/dev/human/dist/human.node-wasm.js:121:37364)"," at Z5 (/home/vlado/dev/human/dist/human.node-wasm.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node-wasm.js:840:8294"]} +2022-11-18 11:55:27 STATE: all tests complete +2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/process-folder.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"../demo/facematch/node-match.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"test-node-load.js","passed":1,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"test-node-gear.js","passed":3,"failed":0} +2022-11-18 11:55:27 INFO:  status {"test":"test-backend-node.js","passed":85,"failed":1} +2022-11-18 11:55:27 INFO:  status {"test":"test-backend-node-gpu.js","passed":85,"failed":1} +2022-11-18 11:55:27 INFO:  status {"test":"test-backend-node-wasm.js","passed":85,"failed":2} +2022-11-18 11:55:27 INFO:  failures {"count":4} +2022-11-18 11:55:27 WARN:  failed {"test":"test-backend-node.js","message":["error",["failed:","testDetect face embeddings"]]} +2022-11-18 11:55:27 WARN:  failed {"test":"test-backend-node-gpu.js","message":["error",["failed:","testDetect face embeddings"]]} +2022-11-18 11:55:27 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed: nanodet",[]]]} +2022-11-18 11:55:27 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed:","testDetect face embeddings"]]}

#S+6Bc-*ifIl7 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 Mr%iNAbexd?0UJRNy8r+H diff --git a/assets/screenshot-results.png b/assets/screenshot-results.png index 4a6a6d1bfec0c3af87475317c42ccf817c9006b5..4e6aef7b930498b14e19a284fcdeee8c898e96be 100644 GIT binary patch literal 14628 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 T#`?m(=7Lj@0Z5lh8U_3xBNKi3 literal 35049 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 z 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