diff --git a/CHANGELOG.md b/CHANGELOG.md index 57799137..65e2a5c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### **HEAD -> main** 2021/10/12 mandic00@live.com +- optimize image preprocessing ### **release: 2.3.2** 2021/10/11 mandic00@live.com diff --git a/TODO.md b/TODO.md index ad31cff3..1329df03 100644 --- a/TODO.md +++ b/TODO.md @@ -30,6 +30,7 @@ Experimental support only until support is officially added in Chromium - Optical Flow: - TFLite Models: +- Histogram Equalization: Regular, Adaptive, Contrast Limited


diff --git a/demo/facematch/node-match-worker.js b/demo/facematch/node-match-worker.js new file mode 100644 index 00000000..d0be27ba --- /dev/null +++ b/demo/facematch/node-match-worker.js @@ -0,0 +1,69 @@ +const threads = require('worker_threads'); + +let debug = false; + +/** @type SharedArrayBuffer */ +let buffer; +/** @type Float32Array */ +let view; +let threshold = 0; +let records = 0; + +const descLength = 1024; // descriptor length in bytes + +function distance(descriptor1, index, options = { order: 2 }) { + let sum = 0; + for (let i = 0; i < descriptor1.length; i++) { + const diff = (options.order === 2) ? (descriptor1[i] - view[index * descLength + i]) : (Math.abs(descriptor1[i] - view[index * descLength + i])); + sum += (options.order === 2) ? (diff * diff) : (diff ** options.order); + } + return sum; +} + +function match(descriptor, options = { order: 2 }) { + let best = Number.MAX_SAFE_INTEGER; + let index = -1; + for (let i = 0; i < records; i++) { + const res = distance(descriptor, i, { order: options.order }); + if (res < best) { + best = res; + index = i; + } + if (best < threshold || best === 0) break; // short circuit + } + best = (options.order === 2) ? Math.sqrt(best) : best ** (1 / options.order); + return { index, distance: best, similarity: Math.max(0, 100 - best) / 100.0 }; +} + +threads.parentPort?.on('message', (msg) => { + if (typeof msg.descriptor !== 'undefined') { // actual work order to find a match + const t0 = performance.now(); + const result = match(msg.descriptor); + const t1 = performance.now(); + threads.parentPort?.postMessage({ request: msg.request, time: Math.trunc(t1 - t0), ...result }); + return; // short circuit + } + if (msg instanceof SharedArrayBuffer) { // called only once to receive reference to shared array buffer + buffer = msg; + view = new Float32Array(buffer); // initialize f64 view into buffer + if (debug) threads.parentPort?.postMessage(`buffer: ${buffer?.byteLength}`); + } + if (typeof msg.records !== 'undefined') { // recived every time when number of records changes + records = msg.records; + if (debug) threads.parentPort?.postMessage(`records: ${records}`); + } + if (typeof msg.debug !== 'undefined') { // set verbose logging + debug = msg.debug; + if (debug) threads.parentPort?.postMessage(`debug: ${debug}`); + } + if (typeof msg.threshold !== 'undefined') { // set minimum similarity threshold + threshold = msg.threshold; + if (debug) threads.parentPort?.postMessage(`threshold: ${threshold}`); + } + if (typeof msg.shutdown !== 'undefined') { // got message to close worker + if (debug) threads.parentPort?.postMessage('shutting down'); + process.exit(0); + } +}); + +if (debug) threads.parentPort?.postMessage('started'); diff --git a/demo/facematch/node-match.js b/demo/facematch/node-match.js new file mode 100644 index 00000000..58245f6b --- /dev/null +++ b/demo/facematch/node-match.js @@ -0,0 +1,174 @@ +const fs = require('fs'); +const path = require('path'); +const log = require('@vladmandic/pilogger'); +const threads = require('worker_threads'); + +// global optinos +const options = { + dbFile: './faces.json', // sample face db + dbMax: 10000, // maximum number of records to hold in memory + threadPoolSize: 6, // number of worker threads to create in thread pool + workerSrc: './node-match-worker.js', // code that executes in the worker thread + debug: false, // verbose messages + minThreshold: 0.9, // match returns first record that meets the similarity threshold, set to 0 to always scan all records + descLength: 1024, // descriptor length +}; + +// test options +const testOptions = { + dbFact: 100, // load db n times to fake huge size + maxJobs: 100, // exit after processing this many jobs + fuzDescriptors: true, // randomize descriptor content before match for harder jobs +}; + +// global data structures +const data = { + /** @type string[] */ + labels: [], // array of strings, length of array serves as overal number of records so has to be maintained carefully + /** @type SharedArrayBuffer | null */ + buffer: null, + /** @type Float32Array | null */ + view: null, + /** @type threads.Worker[] */ + workers: [], // holds instance of workers. worker can be null if exited + requestID: 0, // each request should increment this counter as its used for round robin assignment +}; + +let t0 = process.hrtime.bigint(); // used for perf counters + +const appendRecords = (labels, descriptors) => { + if (!data.view) return 0; + if (descriptors.length !== labels.length) { + log.error('append error:', { descriptors: descriptors.length, labels: labels.length }); + } + // if (options.debug) log.state('appending:', { descriptors: descriptors.length, labels: labels.length }); + for (let i = 0; i < descriptors.length; i++) { + for (let j = 0; j < descriptors[i].length; j++) { + data.view[data.labels.length * descriptors[i].length + j] = descriptors[i][j]; // add each descriptors element to buffer + } + data.labels.push(labels[i]); // finally add to labels + } + for (const worker of data.workers) { // inform all workers how many records we have + if (worker) worker.postMessage({ records: data.labels.length }); + } + return data.labels.length; +}; + +const getLabel = (index) => data.labels[index]; + +const getDescriptor = (index) => { + if (!data.view) return []; + const descriptor = []; + for (let i = 0; i < 1024; i++) descriptor.push(data.view[index * options.descLength + i]); + return descriptor; +}; + +const fuzDescriptor = (descriptor) => { + for (let i = 0; i < descriptor.length; i++) descriptor[i] += Math.random() - 0.5; + return descriptor; +}; + +const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +async function workersClose() { + const current = data.workers.filter((worker) => !!worker).length; + log.info('closing workers:', { poolSize: data.workers.length, activeWorkers: current }); + for (const worker of data.workers) { + if (worker) worker.postMessage({ shutdown: true }); // tell worker to exit + } + await delay(250); // wait a little for threads to exit on their own + const remaining = data.workers.filter((worker) => !!worker).length; + if (remaining > 0) { + log.info('terminating remaining workers:', { remaining: current, pool: data.workers.length }); + for (const worker of data.workers) { + if (worker) worker.terminate(); // if worker did not exit cleany terminate it + } + } +} + +const workerMessage = (index, msg) => { + if (msg.request) { + if (options.debug) log.data('message:', { worker: index, request: msg.request, time: msg.time, label: getLabel(msg.index), similarity: msg.similarity }); + if (msg.request >= testOptions.maxJobs) { + const t1 = process.hrtime.bigint(); + const elapsed = Math.round(Number(t1 - t0) / 1000 / 1000); + log.state({ matchJobsFinished: testOptions.maxJobs, totalTimeMs: elapsed, averageTimeMs: Math.round(100 * elapsed / testOptions.maxJobs) / 100 }); + workersClose(); + } + } else { + log.data('message:', { worker: index, msg }); + } +}; + +async function workerClose(id, code) { + const previous = data.workers.filter((worker) => !!worker).length; + delete data.workers[id]; + const current = data.workers.filter((worker) => !!worker).length; + if (options.debug) log.state('worker exit:', { id, code, previous, current }); +} + +async function workersStart(numWorkers) { + const previous = data.workers.filter((worker) => !!worker).length; + log.info('starting worker thread pool:', { totalWorkers: numWorkers, alreadyActive: previous }); + for (let i = 0; i < numWorkers; i++) { + if (!data.workers[i]) { // worker does not exist, so create it + const worker = new threads.Worker(path.join(__dirname, options.workerSrc)); + worker.on('message', (msg) => workerMessage(i, msg)); + worker.on('error', (err) => log.error('worker error:', { err })); + worker.on('exit', (code) => workerClose(i, code)); + worker.postMessage(data.buffer); // send buffer to worker + data.workers[i] = worker; + } + data.workers[i]?.postMessage({ records: data.labels.length, threshold: options.minThreshold, debug: options.debug }); // inform worker how many records there are + } + await delay(100); // just wait a bit for everything to settle down +} + +const match = (descriptor) => { + const available = data.workers.filter((worker) => !!worker).length; // find number of available workers + if (available > 0) data.workers[data.requestID % available].postMessage({ descriptor, request: data.requestID }); // round robin to first available worker + else log.error('no available workers'); +}; + +async function loadDB(count) { + const previous = data.labels.length; + if (!fs.existsSync(options.dbFile)) { + log.error('db file does not exist:', options.dbFile); + return; + } + t0 = process.hrtime.bigint(); + for (let i = 0; i < count; i++) { // test loop: load entire face db from array of objects n times into buffer + const db = JSON.parse(fs.readFileSync(options.dbFile).toString()); + const names = db.map((record) => record.name); + const descriptors = db.map((record) => record.embedding); + appendRecords(names, descriptors); + } + log.data('db loaded:', { existingRecords: previous, newRecords: data.labels.length }); +} + +async function createBuffer() { + data.buffer = new SharedArrayBuffer(4 * options.dbMax * options.descLength); // preallocate max number of records as sharedarraybuffers cannot grow + data.view = new Float32Array(data.buffer); // create view into buffer + data.labels.length = 0; + log.data('created shared buffer:', { maxDescriptors: data.view?.length / options.descLength, totalBytes: data.buffer.byteLength, totalElements: data.view?.length }); +} + +async function main() { + log.header(); + log.info('options:', options); + + await createBuffer(); // create shared buffer array + await loadDB(testOptions.dbFact); // loadDB is a test method that calls actual addRecords + await workersStart(options.threadPoolSize); // can be called at anytime to modify worker pool size + for (let i = 0; i < testOptions.maxJobs; i++) { + const idx = Math.trunc(data.labels.length * Math.random()); // grab a random descriptor index that we'll search for + const descriptor = getDescriptor(idx); // grab a descriptor at index + data.requestID++; // increase request id + if (testOptions.fuzDescriptors) match(fuzDescriptor(descriptor)); // fuz descriptor for harder match + else match(descriptor); + if (options.debug) log.info('submited job', data.requestID); // we already know what we're searching for so we can compare results + } + log.state('submitted:', { matchJobs: testOptions.maxJobs, poolSize: data.workers.length, activeWorkers: data.workers.filter((worker) => !!worker).length }); +} + +main(); diff --git a/demo/facematch/node-match.md b/demo/facematch/node-match.md new file mode 100644 index 00000000..4a669d08 --- /dev/null +++ b/demo/facematch/node-match.md @@ -0,0 +1,60 @@ +# NodeJS Multi-Threading Match Solution + +See `node-match.js` and `node-match-worker.js` + +## Methods and Properties in `node-match` + +- `createBuffer`: create shared buffer array + single copy of data regardless of number of workers + fixed size based on `options.dbMax` +- `appendRecord`: add additional batch of descriptors to buffer + can append batch of records to buffer at anytime + workers are informed of the new content after append has been completed +- `workersStart`: start or expand pool of `threadPoolSize` workers + each worker runs `node-match-worker` and listens for messages from main thread + can shutdown workers or create additional worker threads on-the-fly + safe against workers that exit +- `workersClose`: close workers in a pool + first request workers to exit then terminate after timeout +- `match`: dispach a match job to a worker + returns first match that satisfies `minThreshold` + assigment to workers using round-robin + since timing for each job is near-fixed and predictable +- `getDescriptor`: get descriptor array for a given id from a buffer +- `fuzDescriptor`: small randomize descriptor content for harder match +- `getLabel`: fetch label for resolved descriptor index +- `loadDB`: load face database from a JSON file `dbFile` + extracts descriptors and adds them to buffer + extracts labels and maintains them in main thread + for test purposes loads same database `dbFact` times to create a very large database + +`node-match` runs in a listens for messages from workers until `maxJobs` have been reached + +## Performance + +Linear performance decrease that depends on number of records in database +Non-linear performance that increases with number of worker threads due to communication overhead + +- Face dataase with 10k records: + > threadPoolSize: 1 => ~60 ms / match job + > threadPoolSize: 6 => ~25 ms / match job +- Face database with 50k records: + > threadPoolSize: 1 => ~300 ms / match job + > threadPoolSize: 6 => ~100 ms / match job +- Face database with 100k records: + > threadPoolSize: 1 => ~600 ms / match job + > threadPoolSize: 6 => ~200 ms / match job + +## Example + +> 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 } +``` diff --git a/package.json b/package.json index 5cc43da6..7ac29164 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "tensorflow" ], "devDependencies": { + "@tensorflow/tfjs": "^3.9.0", "@tensorflow/tfjs-backend-cpu": "^3.9.0", "@tensorflow/tfjs-backend-wasm": "^3.9.0", "@tensorflow/tfjs-backend-webgl": "^3.9.0", @@ -63,30 +64,27 @@ "@tensorflow/tfjs-core": "^3.9.0", "@tensorflow/tfjs-data": "^3.9.0", "@tensorflow/tfjs-layers": "^3.9.0", - "@tensorflow/tfjs-node-gpu": "^3.9.0", "@tensorflow/tfjs-node": "^3.9.0", - "@tensorflow/tfjs": "^3.9.0", - "@types/node": "^16.10.4", + "@tensorflow/tfjs-node-gpu": "^3.9.0", + "@types/node": "^16.10.5", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "@vladmandic/build": "^0.6.0", "@vladmandic/pilogger": "^0.3.3", "canvas": "^2.8.0", "dayjs": "^1.10.7", - "esbuild": "^0.13.4", + "esbuild": "^0.13.5", + "eslint": "8.0.0", "eslint-config-airbnb-base": "^14.2.1", - "eslint-plugin-import": "^2.25.1", + "eslint-plugin-import": "^2.25.2", "eslint-plugin-json": "^3.1.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^5.1.0", - "eslint": "8.0.0", "node-fetch": "^3.0.0", "rimraf": "^3.0.2", "seedrandom": "^3.0.5", "tslib": "^2.3.1", "typedoc": "0.22.5", - "typescript": "4.4.3" - }, - "dependencies": { + "typescript": "4.4.4" } } diff --git a/test/build.log b/test/build.log index 729aef00..aa590a05 100644 --- a/test/build.log +++ b/test/build.log @@ -1,24 +1,24 @@ -2021-10-12 14:13:03 INFO:  @vladmandic/human version 2.3.3 -2021-10-12 14:13:03 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 -2021-10-12 14:13:03 INFO:  Application: {"name":"@vladmandic/human","version":"2.3.3"} -2021-10-12 14:13:03 INFO:  Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true} -2021-10-12 14:13:03 INFO:  Toolchain: {"build":"0.6.0","esbuild":"0.13.4","typescript":"4.4.3","typedoc":"0.22.5","eslint":"8.0.0"} -2021-10-12 14:13:03 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2021-10-12 14:13:03 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2021-10-12 14:13:03 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1275} -2021-10-12 14:13:03 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":53,"inputBytes":515658,"outputBytes":428192} -2021-10-12 14:13:03 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283} -2021-10-12 14:13:03 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":53,"inputBytes":515666,"outputBytes":428196} -2021-10-12 14:13:03 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350} -2021-10-12 14:13:03 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":53,"inputBytes":515733,"outputBytes":428268} -2021-10-12 14:13:03 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631} -2021-10-12 14:13:03 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3085,"outputBytes":856} -2021-10-12 14:13:03 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":53,"inputBytes":515239,"outputBytes":429801} -2021-10-12 14:13:04 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3085,"outputBytes":2691961} -2021-10-12 14:13:05 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":53,"inputBytes":3206344,"outputBytes":1607589} -2021-10-12 14:13:05 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":53,"inputBytes":3206344,"outputBytes":2921701} -2021-10-12 14:13:23 STATE: Typings: {"input":"src/human.ts","output":"types","files":6} -2021-10-12 14:13:29 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":35,"generated":true} -2021-10-12 14:14:01 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":87,"errors":0,"warnings":0} -2021-10-12 14:14:01 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2021-10-12 14:14:01 INFO:  Done... +2021-10-13 08:02:50 INFO:  @vladmandic/human version 2.3.3 +2021-10-13 08:02:50 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 +2021-10-13 08:02:50 INFO:  Application: {"name":"@vladmandic/human","version":"2.3.3"} +2021-10-13 08:02:50 INFO:  Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true} +2021-10-13 08:02:50 INFO:  Toolchain: {"build":"0.6.0","esbuild":"0.13.5","typescript":"4.4.4","typedoc":"0.22.5","eslint":"8.0.0"} +2021-10-13 08:02:50 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2021-10-13 08:02:50 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2021-10-13 08:02:50 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1275} +2021-10-13 08:02:50 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":53,"inputBytes":515633,"outputBytes":428192} +2021-10-13 08:02:50 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283} +2021-10-13 08:02:50 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":53,"inputBytes":515641,"outputBytes":428196} +2021-10-13 08:02:50 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350} +2021-10-13 08:02:50 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":53,"inputBytes":515708,"outputBytes":428268} +2021-10-13 08:02:50 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631} +2021-10-13 08:02:50 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":3085,"outputBytes":856} +2021-10-13 08:02:50 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":53,"inputBytes":515214,"outputBytes":429801} +2021-10-13 08:02:51 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3085,"outputBytes":2691961} +2021-10-13 08:02:52 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":53,"inputBytes":3206319,"outputBytes":1607589} +2021-10-13 08:02:52 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":53,"inputBytes":3206319,"outputBytes":2921701} +2021-10-13 08:03:10 STATE: Typings: {"input":"src/human.ts","output":"types","files":6} +2021-10-13 08:03:17 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":35,"generated":true} +2021-10-13 08:03:46 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":89,"errors":0,"warnings":0} +2021-10-13 08:03:47 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2021-10-13 08:03:47 INFO:  Done... diff --git a/test/test.log b/test/test.log index c2a7ccf0..b83da842 100644 --- a/test/test.log +++ b/test/test.log @@ -1,602 +1,602 @@ -2021-10-12 14:05:45 INFO:  @vladmandic/human version 2.3.2 -2021-10-12 14:05:45 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 -2021-10-12 14:05:45 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2021-10-12 14:05:45 INFO:  demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"] -2021-10-12 14:05:45 INFO:  -2021-10-12 14:05:45 INFO:  test-node.js start -2021-10-12 14:05:46 STATE: test-node.js passed: configuration default validation [] -2021-10-12 14:05:46 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-12 14:05:47 STATE: test-node.js passed: models loaded 20 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true}] -2021-10-12 14:05:47 STATE: test-node.js passed: create human -2021-10-12 14:05:47 INFO:  test-node.js human version: 2.3.2 -2021-10-12 14:05:47 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-12 14:05:47 INFO:  test-node.js tfjs version: 3.9.0 -2021-10-12 14:05:47 STATE: test-node.js passed: set backend: tensorflow -2021-10-12 14:05:47 STATE: test-node.js tensors 1920 -2021-10-12 14:05:47 STATE: test-node.js passed: load models -2021-10-12 14:05:47 STATE: test-node.js result: defined models: 20 loaded models: 10 -2021-10-12 14:05:47 STATE: test-node.js passed: warmup: none default -2021-10-12 14:05:47 STATE: test-node.js passed: warmup none result match -2021-10-12 14:05:47 STATE: test-node.js event: image -2021-10-12 14:05:48 STATE: test-node.js event: detect -2021-10-12 14:05:48 STATE: test-node.js event: warmup -2021-10-12 14:05:48 STATE: test-node.js passed: warmup: face default -2021-10-12 14:05:48 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2021-10-12 14:05:48 DATA:  test-node.js result: performance: load: 388 total: 1453 -2021-10-12 14:05:48 STATE: test-node.js passed: warmup face result match -2021-10-12 14:05:48 STATE: test-node.js event: image -2021-10-12 14:05:49 STATE: test-node.js event: detect -2021-10-12 14:05:49 STATE: test-node.js event: warmup -2021-10-12 14:05:49 STATE: test-node.js passed: warmup: body default -2021-10-12 14:05:49 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:05:49 DATA:  test-node.js result: performance: load: 388 total: 1066 -2021-10-12 14:05:49 STATE: test-node.js passed: warmup body result match -2021-10-12 14:05:49 INFO:  test-node.js test default -2021-10-12 14:05:50 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:05:50 STATE: test-node.js event: image -2021-10-12 14:05:51 STATE: test-node.js event: detect -2021-10-12 14:05:51 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:05:51 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:05:51 DATA:  test-node.js result: performance: load: 388 total: 1072 -2021-10-12 14:05:51 STATE: test-node.js passed: default result face match -2021-10-12 14:05:51 INFO:  test-node.js test sync -2021-10-12 14:05:52 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:05:52 STATE: test-node.js event: image -2021-10-12 14:05:53 STATE: test-node.js event: detect -2021-10-12 14:05:53 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:05:53 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:05:53 DATA:  test-node.js result: performance: load: 388 total: 1086 -2021-10-12 14:05:53 STATE: test-node.js passed: default sync -2021-10-12 14:05:53 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:05:53 STATE: test-node.js passed: image input null [1,256,256,3] -2021-10-12 14:05:53 STATE: test-node.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-12 14:05:53 INFO:  test-node.js test face similarity -2021-10-12 14:05:53 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:05:53 STATE: test-node.js event: image -2021-10-12 14:05:54 STATE: test-node.js event: detect -2021-10-12 14:05:54 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:05:54 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":4} -2021-10-12 14:05:54 DATA:  test-node.js result: performance: load: 388 total: 925 -2021-10-12 14:05:55 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:05:55 STATE: test-node.js event: image -2021-10-12 14:05:56 STATE: test-node.js event: detect -2021-10-12 14:05:56 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:05:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:05:56 DATA:  test-node.js result: performance: load: 388 total: 1017 -2021-10-12 14:05:56 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:05:56 STATE: test-node.js event: image -2021-10-12 14:05:57 STATE: test-node.js event: detect -2021-10-12 14:05:57 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:05:57 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} -2021-10-12 14:05:57 DATA:  test-node.js result: performance: load: 388 total: 873 -2021-10-12 14:05:57 STATE: test-node.js passed: face descriptor -2021-10-12 14:05:57 STATE: test-node.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} -2021-10-12 14:05:57 INFO:  test-node.js test face matching -2021-10-12 14:05:57 STATE: test-node.js passed: face database 57 -2021-10-12 14:05:57 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}} -2021-10-12 14:05:57 INFO:  test-node.js test object -2021-10-12 14:05:58 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:05:58 STATE: test-node.js event: image -2021-10-12 14:05:59 STATE: test-node.js event: detect -2021-10-12 14:05:59 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:05:59 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:05:59 DATA:  test-node.js result: performance: load: 388 total: 1048 -2021-10-12 14:05:59 STATE: test-node.js passed: object result match -2021-10-12 14:05:59 INFO:  test-node.js test sensitive -2021-10-12 14:06:00 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:00 STATE: test-node.js event: image -2021-10-12 14:06:01 STATE: test-node.js event: detect -2021-10-12 14:06:01 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:01 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:01 DATA:  test-node.js result: performance: load: 388 total: 1082 -2021-10-12 14:06:01 STATE: test-node.js passed: sensitive result match -2021-10-12 14:06:01 STATE: test-node.js passed: sensitive face result match -2021-10-12 14:06:01 STATE: test-node.js passed: sensitive face emotion result mismatch 4 -2021-10-12 14:06:01 STATE: test-node.js passed: sensitive body result match -2021-10-12 14:06:01 STATE: test-node.js passed: sensitive hand result match -2021-10-12 14:06:01 INFO:  test-node.js test detectors -2021-10-12 14:06:02 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:02 STATE: test-node.js event: image -2021-10-12 14:06:03 STATE: test-node.js event: detect -2021-10-12 14:06:03 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:03 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:03 DATA:  test-node.js result: performance: load: 388 total: 669 -2021-10-12 14:06:03 STATE: test-node.js passed: detector result face match -2021-10-12 14:06:03 STATE: test-node.js passed: detector result hand match -2021-10-12 14:06:03 INFO:  test-node.js test body variants -2021-10-12 14:06:03 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:03 STATE: test-node.js event: image -2021-10-12 14:06:04 STATE: test-node.js event: detect -2021-10-12 14:06:04 STATE: test-node.js passed: detect: samples/in/ai-body.jpg posenet -2021-10-12 14:06:04 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17} -2021-10-12 14:06:04 DATA:  test-node.js result: performance: load: 388 total: 731 -2021-10-12 14:06:04 STATE: test-node.js passed: body posenet -2021-10-12 14:06:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:05 STATE: test-node.js event: image -2021-10-12 14:06:06 STATE: test-node.js event: detect -2021-10-12 14:06:06 STATE: test-node.js passed: detect: samples/in/ai-body.jpg movenet -2021-10-12 14:06:06 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:06 DATA:  test-node.js result: performance: load: 388 total: 634 -2021-10-12 14:06:06 STATE: test-node.js passed: body movenet -2021-10-12 14:06:06 INFO:  test-node.js test hand variants -2021-10-12 14:06:06 DATA:  test-node.js stdout: 14:06:06.229 Human: load model failed: handskeleton.json -2021-10-12 14:06:07 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:07 STATE: test-node.js event: image -2021-10-12 14:06:07 STATE: test-node.js event: detect -2021-10-12 14:06:07 STATE: test-node.js passed: detect: samples/in/ai-body.jpg handdetect -2021-10-12 14:06:07 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:07 DATA:  test-node.js result: performance: load: 388 total: 634 -2021-10-12 14:06:07 STATE: test-node.js passed: hand handdetect -2021-10-12 14:06:08 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:08 STATE: test-node.js event: image -2021-10-12 14:06:09 STATE: test-node.js event: detect -2021-10-12 14:06:09 STATE: test-node.js passed: detect: samples/in/ai-body.jpg handtrack -2021-10-12 14:06:09 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:09 DATA:  test-node.js result: performance: load: 388 total: 661 -2021-10-12 14:06:09 STATE: test-node.js passed: hand handdetect -2021-10-12 14:06:09 STATE: test-node.js event: image -2021-10-12 14:06:09 STATE: test-node.js event: detect -2021-10-12 14:06:09 STATE: test-node.js passed: detect: random default -2021-10-12 14:06:09 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2021-10-12 14:06:09 DATA:  test-node.js result: performance: load: 388 total: 542 -2021-10-12 14:06:09 INFO:  test-node.js test: first instance -2021-10-12 14:06:10 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:11 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:06:11 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} -2021-10-12 14:06:11 DATA:  test-node.js result: performance: load: 2 total: 860 -2021-10-12 14:06:11 INFO:  test-node.js test: second instance -2021-10-12 14:06:11 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:12 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:06:12 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} -2021-10-12 14:06:12 DATA:  test-node.js result: performance: load: 2 total: 891 -2021-10-12 14:06:12 INFO:  test-node.js test: concurrent -2021-10-12 14:06:12 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:06:12 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:06:13 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:14 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:14 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:14 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:14 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:06:15 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:15 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:16 STATE: test-node.js event: image -2021-10-12 14:06:16 STATE: test-node.js event: image -2021-10-12 14:06:16 STATE: test-node.js event: image -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 1189 total: 8095 -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 1189 total: 8095 -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 1189 total: 8095 -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 1189 total: 8095 -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 1189 total: 8095 -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 1189 total: 8095 -2021-10-12 14:06:22 STATE: test-node.js event: detect -2021-10-12 14:06:22 STATE: test-node.js event: detect -2021-10-12 14:06:22 STATE: test-node.js event: detect -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 3 body: 1 hand: 2 gesture: 1 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 2357 total: 6908 -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 4 body: 1 hand: 2 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 2357 total: 6908 -2021-10-12 14:06:22 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:06:22 DATA:  test-node.js result: face: 5 body: 1 hand: 2 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} -2021-10-12 14:06:22 DATA:  test-node.js result: performance: load: 2357 total: 6908 -2021-10-12 14:06:22 STATE: test-node.js event: image -2021-10-12 14:06:23 STATE: test-node.js event: detect -2021-10-12 14:06:23 STATE: test-node.js passed: monkey patch -2021-10-12 14:06:23 STATE: test-node.js passed: segmentation [65536] -2021-10-12 14:06:23 STATE: test-node.js passeed: equal usage -2021-10-12 14:06:23 INFO:  test-node.js events: {"image":19,"detect":19,"warmup":2} -2021-10-12 14:06:23 INFO:  test-node.js tensors 2141 -2021-10-12 14:06:23 INFO:  test-node.js test complete: 36567 ms -2021-10-12 14:06:23 INFO:  -2021-10-12 14:06:23 INFO:  test-node-gpu.js start -2021-10-12 14:06:24 STATE: test-node-gpu.js passed: configuration default validation [] -2021-10-12 14:06:24 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-12 14:06:25 STATE: test-node-gpu.js passed: models loaded 20 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true}] -2021-10-12 14:06:25 STATE: test-node-gpu.js passed: create human -2021-10-12 14:06:25 INFO:  test-node-gpu.js human version: 2.3.2 -2021-10-12 14:06:25 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-12 14:06:25 INFO:  test-node-gpu.js tfjs version: 3.9.0 -2021-10-12 14:06:25 STATE: test-node-gpu.js passed: set backend: tensorflow -2021-10-12 14:06:25 STATE: test-node-gpu.js tensors 1920 -2021-10-12 14:06:25 STATE: test-node-gpu.js passed: load models -2021-10-12 14:06:25 STATE: test-node-gpu.js result: defined models: 20 loaded models: 10 -2021-10-12 14:06:25 STATE: test-node-gpu.js passed: warmup: none default -2021-10-12 14:06:25 STATE: test-node-gpu.js passed: warmup none result match -2021-10-12 14:06:25 STATE: test-node-gpu.js event: image -2021-10-12 14:06:26 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:26 STATE: test-node-gpu.js event: warmup -2021-10-12 14:06:26 STATE: test-node-gpu.js passed: warmup: face default -2021-10-12 14:06:26 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2021-10-12 14:06:26 DATA:  test-node-gpu.js result: performance: load: 364 total: 1455 -2021-10-12 14:06:26 STATE: test-node-gpu.js passed: warmup face result match -2021-10-12 14:06:26 STATE: test-node-gpu.js event: image -2021-10-12 14:06:27 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:27 STATE: test-node-gpu.js event: warmup -2021-10-12 14:06:27 STATE: test-node-gpu.js passed: warmup: body default -2021-10-12 14:06:27 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:27 DATA:  test-node-gpu.js result: performance: load: 364 total: 1084 -2021-10-12 14:06:27 STATE: test-node-gpu.js passed: warmup body result match -2021-10-12 14:06:27 INFO:  test-node-gpu.js test default -2021-10-12 14:06:28 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:28 STATE: test-node-gpu.js event: image -2021-10-12 14:06:29 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:29 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:29 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:29 DATA:  test-node-gpu.js result: performance: load: 364 total: 984 -2021-10-12 14:06:29 STATE: test-node-gpu.js passed: default result face match -2021-10-12 14:06:29 INFO:  test-node-gpu.js test sync -2021-10-12 14:06:30 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:30 STATE: test-node-gpu.js event: image -2021-10-12 14:06:31 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:31 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:31 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:31 DATA:  test-node-gpu.js result: performance: load: 364 total: 966 -2021-10-12 14:06:31 STATE: test-node-gpu.js passed: default sync -2021-10-12 14:06:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:06:31 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2021-10-12 14:06:31 STATE: test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-12 14:06:31 INFO:  test-node-gpu.js test face similarity -2021-10-12 14:06:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:06:31 STATE: test-node-gpu.js event: image -2021-10-12 14:06:32 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:32 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:06:32 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":4} -2021-10-12 14:06:32 DATA:  test-node-gpu.js result: performance: load: 364 total: 932 -2021-10-12 14:06:33 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:33 STATE: test-node-gpu.js event: image -2021-10-12 14:06:34 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:34 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:34 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:34 DATA:  test-node-gpu.js result: performance: load: 364 total: 977 -2021-10-12 14:06:34 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:34 STATE: test-node-gpu.js event: image -2021-10-12 14:06:35 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:35 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:06:35 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} -2021-10-12 14:06:35 DATA:  test-node-gpu.js result: performance: load: 364 total: 811 -2021-10-12 14:06:35 STATE: test-node-gpu.js passed: face descriptor -2021-10-12 14:06:35 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} -2021-10-12 14:06:35 INFO:  test-node-gpu.js test face matching -2021-10-12 14:06:35 STATE: test-node-gpu.js passed: face database 57 -2021-10-12 14:06:35 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}} -2021-10-12 14:06:35 INFO:  test-node-gpu.js test object -2021-10-12 14:06:36 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:36 STATE: test-node-gpu.js event: image -2021-10-12 14:06:37 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:37 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:37 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:37 DATA:  test-node-gpu.js result: performance: load: 364 total: 985 -2021-10-12 14:06:37 STATE: test-node-gpu.js passed: object result match -2021-10-12 14:06:37 INFO:  test-node-gpu.js test sensitive -2021-10-12 14:06:38 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:38 STATE: test-node-gpu.js event: image -2021-10-12 14:06:39 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:39 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:39 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:39 DATA:  test-node-gpu.js result: performance: load: 364 total: 1076 -2021-10-12 14:06:39 STATE: test-node-gpu.js passed: sensitive result match -2021-10-12 14:06:39 STATE: test-node-gpu.js passed: sensitive face result match -2021-10-12 14:06:39 STATE: test-node-gpu.js passed: sensitive face emotion result mismatch 4 -2021-10-12 14:06:39 STATE: test-node-gpu.js passed: sensitive body result match -2021-10-12 14:06:39 STATE: test-node-gpu.js passed: sensitive hand result match -2021-10-12 14:06:39 INFO:  test-node-gpu.js test detectors -2021-10-12 14:06:40 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:40 STATE: test-node-gpu.js event: image -2021-10-12 14:06:40 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:40 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:06:40 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:40 DATA:  test-node-gpu.js result: performance: load: 364 total: 668 -2021-10-12 14:06:40 STATE: test-node-gpu.js passed: detector result face match -2021-10-12 14:06:40 STATE: test-node-gpu.js passed: detector result hand match -2021-10-12 14:06:40 INFO:  test-node-gpu.js test body variants -2021-10-12 14:06:41 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:41 STATE: test-node-gpu.js event: image -2021-10-12 14:06:42 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:42 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet -2021-10-12 14:06:42 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17} -2021-10-12 14:06:42 DATA:  test-node-gpu.js result: performance: load: 364 total: 759 -2021-10-12 14:06:42 STATE: test-node-gpu.js passed: body posenet -2021-10-12 14:06:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:43 STATE: test-node-gpu.js event: image -2021-10-12 14:06:44 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:44 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet -2021-10-12 14:06:44 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:44 DATA:  test-node-gpu.js result: performance: load: 364 total: 668 -2021-10-12 14:06:44 STATE: test-node-gpu.js passed: body movenet -2021-10-12 14:06:44 INFO:  test-node-gpu.js test hand variants -2021-10-12 14:06:44 DATA:  test-node-gpu.js stdout: 14:06:44.085 Human: load model failed: handskeleton.json -2021-10-12 14:06:44 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:44 STATE: test-node-gpu.js event: image -2021-10-12 14:06:45 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:45 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg handdetect -2021-10-12 14:06:45 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:45 DATA:  test-node-gpu.js result: performance: load: 364 total: 640 -2021-10-12 14:06:45 STATE: test-node-gpu.js passed: hand handdetect -2021-10-12 14:06:46 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:46 STATE: test-node-gpu.js event: image -2021-10-12 14:06:47 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg handtrack -2021-10-12 14:06:47 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:06:47 DATA:  test-node-gpu.js result: performance: load: 364 total: 739 -2021-10-12 14:06:47 STATE: test-node-gpu.js passed: hand handdetect -2021-10-12 14:06:47 STATE: test-node-gpu.js event: image -2021-10-12 14:06:47 STATE: test-node-gpu.js event: detect -2021-10-12 14:06:47 STATE: test-node-gpu.js passed: detect: random default -2021-10-12 14:06:47 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2021-10-12 14:06:47 DATA:  test-node-gpu.js result: performance: load: 364 total: 555 -2021-10-12 14:06:47 INFO:  test-node-gpu.js test: first instance -2021-10-12 14:06:48 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:49 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:06:49 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} -2021-10-12 14:06:49 DATA:  test-node-gpu.js result: performance: load: 2 total: 914 -2021-10-12 14:06:49 INFO:  test-node-gpu.js test: second instance -2021-10-12 14:06:49 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:50 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:06:50 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} -2021-10-12 14:06:50 DATA:  test-node-gpu.js result: performance: load: 3 total: 903 -2021-10-12 14:06:50 INFO:  test-node-gpu.js test: concurrent -2021-10-12 14:06:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:06:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:06:51 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2021-10-12 14:06:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2021-10-12 14:06:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} -2021-10-12 14:06:54 STATE: test-node-gpu.js event: image -2021-10-12 14:06:54 STATE: test-node-gpu.js event: image -2021-10-12 14:06:54 STATE: test-node-gpu.js event: image -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 1170 total: 8238 -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 1170 total: 8238 -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 1170 total: 8238 -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 1170 total: 8238 -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 1170 total: 8238 -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 1170 total: 8238 -2021-10-12 14:07:00 STATE: test-node-gpu.js event: detect -2021-10-12 14:07:00 STATE: test-node-gpu.js event: detect -2021-10-12 14:07:00 STATE: test-node-gpu.js event: detect -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 3 body: 1 hand: 2 gesture: 1 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 2373 total: 7069 -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 4 body: 1 hand: 2 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 2373 total: 7069 -2021-10-12 14:07:00 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: face: 5 body: 1 hand: 2 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} -2021-10-12 14:07:00 DATA:  test-node-gpu.js result: performance: load: 2373 total: 7069 -2021-10-12 14:07:00 STATE: test-node-gpu.js event: image -2021-10-12 14:07:01 STATE: test-node-gpu.js event: detect -2021-10-12 14:07:01 STATE: test-node-gpu.js passed: monkey patch -2021-10-12 14:07:01 STATE: test-node-gpu.js passed: segmentation [65536] -2021-10-12 14:07:01 STATE: test-node-gpu.js passeed: equal usage -2021-10-12 14:07:01 INFO:  test-node-gpu.js events: {"image":19,"detect":19,"warmup":2} -2021-10-12 14:07:01 INFO:  test-node-gpu.js tensors 2141 -2021-10-12 14:07:01 INFO:  test-node-gpu.js test complete: 36675 ms -2021-10-12 14:07:01 INFO:  -2021-10-12 14:07:01 INFO:  test-node-wasm.js start -2021-10-12 14:07:02 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2021-10-12 14:07:02 STATE: test-node-wasm.js passed: configuration default validation [] -2021-10-12 14:07:02 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2021-10-12 14:07:03 STATE: test-node-wasm.js passed: models loaded 20 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true}] -2021-10-12 14:07:03 STATE: test-node-wasm.js passed: create human -2021-10-12 14:07:03 INFO:  test-node-wasm.js human version: 2.3.2 -2021-10-12 14:07:03 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.10.0 -2021-10-12 14:07:03 INFO:  test-node-wasm.js tfjs version: 3.9.0 -2021-10-12 14:07:03 STATE: test-node-wasm.js passed: set backend: wasm -2021-10-12 14:07:03 STATE: test-node-wasm.js tensors 1920 -2021-10-12 14:07:03 STATE: test-node-wasm.js passed: load models -2021-10-12 14:07:03 STATE: test-node-wasm.js result: defined models: 20 loaded models: 10 -2021-10-12 14:07:03 STATE: test-node-wasm.js passed: warmup: none default -2021-10-12 14:07:03 STATE: test-node-wasm.js passed: warmup none result match -2021-10-12 14:07:04 STATE: test-node-wasm.js event: image -2021-10-12 14:07:05 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:05 STATE: test-node-wasm.js event: warmup -2021-10-12 14:07:05 STATE: test-node-wasm.js passed: warmup: face default -2021-10-12 14:07:05 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":4} -2021-10-12 14:07:05 DATA:  test-node-wasm.js result: performance: load: 1582 total: 1153 -2021-10-12 14:07:05 ERROR: test-node-wasm.js failed: warmup face result mismatch 1 1 1 5 -2021-10-12 14:07:05 STATE: test-node-wasm.js event: image -2021-10-12 14:07:06 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:06 STATE: test-node-wasm.js event: warmup -2021-10-12 14:07:06 STATE: test-node-wasm.js passed: warmup: body default -2021-10-12 14:07:06 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:06 DATA:  test-node-wasm.js result: performance: load: 1582 total: 839 -2021-10-12 14:07:06 STATE: test-node-wasm.js passed: warmup body result match -2021-10-12 14:07:06 INFO:  test-node-wasm.js test default -2021-10-12 14:07:08 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:08 STATE: test-node-wasm.js event: image -2021-10-12 14:07:09 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:09 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:09 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:09 DATA:  test-node-wasm.js result: performance: load: 1582 total: 878 -2021-10-12 14:07:09 STATE: test-node-wasm.js passed: default result face match -2021-10-12 14:07:09 INFO:  test-node-wasm.js test sync -2021-10-12 14:07:10 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:10 STATE: test-node-wasm.js event: image -2021-10-12 14:07:11 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:11 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:11 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:11 DATA:  test-node-wasm.js result: performance: load: 1582 total: 875 -2021-10-12 14:07:11 STATE: test-node-wasm.js passed: default sync -2021-10-12 14:07:11 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-12 14:07:11 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2021-10-12 14:07:11 STATE: test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"} -2021-10-12 14:07:11 INFO:  test-node-wasm.js test face similarity -2021-10-12 14:07:11 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-12 14:07:11 STATE: test-node-wasm.js event: image -2021-10-12 14:07:12 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:12 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:07:12 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.4,"gender":"female"} {} {"score":0.47,"keypoints":4} -2021-10-12 14:07:12 DATA:  test-node-wasm.js result: performance: load: 1582 total: 721 -2021-10-12 14:07:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:14 STATE: test-node-wasm.js event: image -2021-10-12 14:07:15 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:15 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:15 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:15 DATA:  test-node-wasm.js result: performance: load: 1582 total: 837 -2021-10-12 14:07:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-12 14:07:15 STATE: test-node-wasm.js event: image -2021-10-12 14:07:16 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:16 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:16 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 5 object: 0 person: 1 {"score":1,"age":29.5,"gender":"female"} {} {"score":0.69,"keypoints":10} -2021-10-12 14:07:16 DATA:  test-node-wasm.js result: performance: load: 1582 total: 616 -2021-10-12 14:07:16 STATE: test-node-wasm.js passed: face descriptor -2021-10-12 14:07:16 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.9040641336882139,0.895983704095898],"descriptors":[1024,1024,1024]} -2021-10-12 14:07:16 INFO:  test-node-wasm.js test face matching -2021-10-12 14:07:16 STATE: test-node-wasm.js passed: face database 57 -2021-10-12 14:07:16 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.9902354470817274}} {"second":{"index":4,"similarity":0.9045213429149392}} {"third":{"index":4,"similarity":0.8965257196777969}} -2021-10-12 14:07:16 INFO:  test-node-wasm.js test object -2021-10-12 14:07:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:18 STATE: test-node-wasm.js event: image -2021-10-12 14:07:18 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:18 DATA:  test-node-wasm.js result: performance: load: 1582 total: 845 -2021-10-12 14:07:18 ERROR: test-node-wasm.js failed: object result mismatch 0 -2021-10-12 14:07:18 INFO:  test-node-wasm.js test sensitive -2021-10-12 14:07:20 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:20 STATE: test-node-wasm.js event: image -2021-10-12 14:07:21 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:21 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:21 DATA:  test-node-wasm.js result: performance: load: 1582 total: 967 -2021-10-12 14:07:21 STATE: test-node-wasm.js passed: sensitive result match -2021-10-12 14:07:21 STATE: test-node-wasm.js passed: sensitive face result match -2021-10-12 14:07:21 ERROR: test-node-wasm.js failed: sensitive face emotion result mismatch 3 -2021-10-12 14:07:21 STATE: test-node-wasm.js passed: sensitive body result match -2021-10-12 14:07:21 STATE: test-node-wasm.js passed: sensitive hand result match -2021-10-12 14:07:21 INFO:  test-node-wasm.js test detectors -2021-10-12 14:07:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:23 STATE: test-node-wasm.js event: image -2021-10-12 14:07:23 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:23 DATA:  test-node-wasm.js result: performance: load: 1582 total: 354 -2021-10-12 14:07:23 STATE: test-node-wasm.js passed: detector result face match -2021-10-12 14:07:23 STATE: test-node-wasm.js passed: detector result hand match -2021-10-12 14:07:23 INFO:  test-node-wasm.js test body variants -2021-10-12 14:07:25 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:25 STATE: test-node-wasm.js event: image -2021-10-12 14:07:26 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet -2021-10-12 14:07:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.91,"keypoints":17} -2021-10-12 14:07:26 DATA:  test-node-wasm.js result: performance: load: 1582 total: 499 -2021-10-12 14:07:26 STATE: test-node-wasm.js passed: body posenet -2021-10-12 14:07:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:28 STATE: test-node-wasm.js event: image -2021-10-12 14:07:28 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet -2021-10-12 14:07:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:28 DATA:  test-node-wasm.js result: performance: load: 1582 total: 348 -2021-10-12 14:07:28 STATE: test-node-wasm.js passed: body movenet -2021-10-12 14:07:28 INFO:  test-node-wasm.js test hand variants -2021-10-12 14:07:28 DATA:  test-node-wasm.js stdout: 14:07:28.915 Human: load model failed: handskeleton.json -2021-10-12 14:07:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:30 STATE: test-node-wasm.js event: image -2021-10-12 14:07:31 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg handdetect -2021-10-12 14:07:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:31 DATA:  test-node-wasm.js result: performance: load: 1582 total: 397 -2021-10-12 14:07:31 STATE: test-node-wasm.js passed: hand handdetect -2021-10-12 14:07:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:32 STATE: test-node-wasm.js event: image -2021-10-12 14:07:33 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg handtrack -2021-10-12 14:07:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:33 DATA:  test-node-wasm.js result: performance: load: 1582 total: 349 -2021-10-12 14:07:33 STATE: test-node-wasm.js passed: hand handdetect -2021-10-12 14:07:33 STATE: test-node-wasm.js event: image -2021-10-12 14:07:33 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:33 STATE: test-node-wasm.js passed: detect: random default -2021-10-12 14:07:33 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2021-10-12 14:07:33 DATA:  test-node-wasm.js result: performance: load: 1582 total: 253 -2021-10-12 14:07:33 INFO:  test-node-wasm.js test: first instance -2021-10-12 14:07:34 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-12 14:07:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:34 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.69,"keypoints":10} -2021-10-12 14:07:34 DATA:  test-node-wasm.js result: performance: load: 3 total: 641 -2021-10-12 14:07:34 INFO:  test-node-wasm.js test: second instance -2021-10-12 14:07:35 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-12 14:07:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.69,"keypoints":10} -2021-10-12 14:07:36 DATA:  test-node-wasm.js result: performance: load: 2 total: 633 -2021-10-12 14:07:36 INFO:  test-node-wasm.js test: concurrent -2021-10-12 14:07:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-12 14:07:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-12 14:07:37 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:39 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:40 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-12 14:07:40 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-12 14:07:40 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2021-10-12 14:07:42 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2021-10-12 14:07:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2021-10-12 14:07:43 STATE: test-node-wasm.js event: image -2021-10-12 14:07:43 STATE: test-node-wasm.js event: image -2021-10-12 14:07:43 STATE: test-node-wasm.js event: image -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.91} {} {"score":0.47,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 2369 total: 7257 -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 0 person: 2 {"score":0.91} {} {"score":0.47,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 2369 total: 7257 -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 2369 total: 7257 -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 2369 total: 7257 -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.69,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 2369 total: 7257 -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 0 person: 2 {"score":0.96} {} {"score":0.69,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 2369 total: 7257 -2021-10-12 14:07:48 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:48 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:48 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 3 body: 1 hand: 2 gesture: 1 object: 0 person: 3 {"score":0.96} {} {"score":0.47,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 4756 total: 4890 -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 4 body: 1 hand: 2 gesture: 1 object: 0 person: 4 {"score":0.96} {} {"score":0.92,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 4756 total: 4890 -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: face: 5 body: 1 hand: 2 gesture: 1 object: 0 person: 5 {"score":0.96} {} {"score":0.69,"keypoints":17} -2021-10-12 14:07:48 DATA:  test-node-wasm.js result: performance: load: 4756 total: 4890 -2021-10-12 14:07:48 STATE: test-node-wasm.js event: image -2021-10-12 14:07:48 STATE: test-node-wasm.js event: detect -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: monkey patch -2021-10-12 14:07:48 STATE: test-node-wasm.js passed: segmentation [65536] -2021-10-12 14:07:48 STATE: test-node-wasm.js passeed: equal usage -2021-10-12 14:07:48 INFO:  test-node-wasm.js events: {"image":19,"detect":19,"warmup":2} -2021-10-12 14:07:48 INFO:  test-node-wasm.js tensors 2143 -2021-10-12 14:07:48 INFO:  test-node-wasm.js test complete: 46164 ms -2021-10-12 14:07:48 INFO:  -2021-10-12 14:07:48 INFO:  failed [{"test":"test-node-wasm.js","data":["error",["failed: warmup face result mismatch",1,1,1,5]]},{"test":"test-node-wasm.js","data":["error",["failed: object result mismatch",0]]},{"test":"test-node-wasm.js","data":["error",["failed: sensitive face emotion result mismatch",3]]}] -2021-10-12 14:07:48 INFO:  status: {"test-node.js":{"passed":82,"failed":0},"test-node-gpu.js":{"passed":82,"failed":0},"test-node-wasm.js":{"passed":80,"failed":3}} +2021-10-13 08:03:55 INFO:  @vladmandic/human version 2.3.3 +2021-10-13 08:03:55 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.10.0 +2021-10-13 08:03:55 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2021-10-13 08:03:55 INFO:  demos: ["../demo/nodejs/node.js","../demo/nodejs/node-canvas.js","../demo/nodejs/node-env.js","../demo/nodejs/node-event.js","../demo/nodejs/node-multiprocess.js"] +2021-10-13 08:03:55 INFO:  +2021-10-13 08:03:55 INFO:  test-node.js start +2021-10-13 08:03:56 STATE: test-node.js passed: configuration default validation [] +2021-10-13 08:03:56 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-13 08:03:56 STATE: test-node.js passed: models loaded 20 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true}] +2021-10-13 08:03:56 STATE: test-node.js passed: create human +2021-10-13 08:03:56 INFO:  test-node.js human version: 2.3.3 +2021-10-13 08:03:56 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-13 08:03:56 INFO:  test-node.js tfjs version: 3.9.0 +2021-10-13 08:03:56 STATE: test-node.js passed: set backend: tensorflow +2021-10-13 08:03:56 STATE: test-node.js tensors 1920 +2021-10-13 08:03:56 STATE: test-node.js passed: load models +2021-10-13 08:03:56 STATE: test-node.js result: defined models: 20 loaded models: 10 +2021-10-13 08:03:56 STATE: test-node.js passed: warmup: none default +2021-10-13 08:03:56 STATE: test-node.js passed: warmup none result match +2021-10-13 08:03:56 STATE: test-node.js event: image +2021-10-13 08:03:58 STATE: test-node.js event: detect +2021-10-13 08:03:58 STATE: test-node.js event: warmup +2021-10-13 08:03:58 STATE: test-node.js passed: warmup: face default +2021-10-13 08:03:58 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2021-10-13 08:03:58 DATA:  test-node.js result: performance: load: 448 total: 1344 +2021-10-13 08:03:58 STATE: test-node.js passed: warmup face result match +2021-10-13 08:03:58 STATE: test-node.js event: image +2021-10-13 08:03:59 STATE: test-node.js event: detect +2021-10-13 08:03:59 STATE: test-node.js event: warmup +2021-10-13 08:03:59 STATE: test-node.js passed: warmup: body default +2021-10-13 08:03:59 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:03:59 DATA:  test-node.js result: performance: load: 448 total: 1064 +2021-10-13 08:03:59 STATE: test-node.js passed: warmup body result match +2021-10-13 08:03:59 INFO:  test-node.js test default +2021-10-13 08:04:00 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:00 STATE: test-node.js event: image +2021-10-13 08:04:01 STATE: test-node.js event: detect +2021-10-13 08:04:01 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:01 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:01 DATA:  test-node.js result: performance: load: 448 total: 1069 +2021-10-13 08:04:01 STATE: test-node.js passed: default result face match +2021-10-13 08:04:01 INFO:  test-node.js test sync +2021-10-13 08:04:02 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:02 STATE: test-node.js event: image +2021-10-13 08:04:03 STATE: test-node.js event: detect +2021-10-13 08:04:03 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:03 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:03 DATA:  test-node.js result: performance: load: 448 total: 1032 +2021-10-13 08:04:03 STATE: test-node.js passed: default sync +2021-10-13 08:04:03 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:03 STATE: test-node.js passed: image input null [1,256,256,3] +2021-10-13 08:04:03 STATE: test-node.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-13 08:04:03 INFO:  test-node.js test face similarity +2021-10-13 08:04:03 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:03 STATE: test-node.js event: image +2021-10-13 08:04:04 STATE: test-node.js event: detect +2021-10-13 08:04:04 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:04:04 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":4} +2021-10-13 08:04:04 DATA:  test-node.js result: performance: load: 448 total: 926 +2021-10-13 08:04:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:05 STATE: test-node.js event: image +2021-10-13 08:04:06 STATE: test-node.js event: detect +2021-10-13 08:04:06 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:06 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:06 DATA:  test-node.js result: performance: load: 448 total: 1000 +2021-10-13 08:04:06 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:06 STATE: test-node.js event: image +2021-10-13 08:04:07 STATE: test-node.js event: detect +2021-10-13 08:04:07 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:07 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} +2021-10-13 08:04:07 DATA:  test-node.js result: performance: load: 448 total: 867 +2021-10-13 08:04:07 STATE: test-node.js passed: face descriptor +2021-10-13 08:04:07 STATE: test-node.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} +2021-10-13 08:04:07 INFO:  test-node.js test face matching +2021-10-13 08:04:07 STATE: test-node.js passed: face database 57 +2021-10-13 08:04:07 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}} +2021-10-13 08:04:07 INFO:  test-node.js test object +2021-10-13 08:04:08 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:08 STATE: test-node.js event: image +2021-10-13 08:04:09 STATE: test-node.js event: detect +2021-10-13 08:04:09 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:09 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:09 DATA:  test-node.js result: performance: load: 448 total: 1020 +2021-10-13 08:04:09 STATE: test-node.js passed: object result match +2021-10-13 08:04:09 INFO:  test-node.js test sensitive +2021-10-13 08:04:09 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:09 STATE: test-node.js event: image +2021-10-13 08:04:10 STATE: test-node.js event: detect +2021-10-13 08:04:10 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:10 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:10 DATA:  test-node.js result: performance: load: 448 total: 1053 +2021-10-13 08:04:10 STATE: test-node.js passed: sensitive result match +2021-10-13 08:04:10 STATE: test-node.js passed: sensitive face result match +2021-10-13 08:04:10 STATE: test-node.js passed: sensitive face emotion result mismatch 4 +2021-10-13 08:04:10 STATE: test-node.js passed: sensitive body result match +2021-10-13 08:04:10 STATE: test-node.js passed: sensitive hand result match +2021-10-13 08:04:10 INFO:  test-node.js test detectors +2021-10-13 08:04:11 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:11 STATE: test-node.js event: image +2021-10-13 08:04:12 STATE: test-node.js event: detect +2021-10-13 08:04:12 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:12 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:12 DATA:  test-node.js result: performance: load: 448 total: 634 +2021-10-13 08:04:12 STATE: test-node.js passed: detector result face match +2021-10-13 08:04:12 STATE: test-node.js passed: detector result hand match +2021-10-13 08:04:12 INFO:  test-node.js test body variants +2021-10-13 08:04:13 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:13 STATE: test-node.js event: image +2021-10-13 08:04:14 STATE: test-node.js event: detect +2021-10-13 08:04:14 STATE: test-node.js passed: detect: samples/in/ai-body.jpg posenet +2021-10-13 08:04:14 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17} +2021-10-13 08:04:14 DATA:  test-node.js result: performance: load: 448 total: 720 +2021-10-13 08:04:14 STATE: test-node.js passed: body posenet +2021-10-13 08:04:14 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:14 STATE: test-node.js event: image +2021-10-13 08:04:15 STATE: test-node.js event: detect +2021-10-13 08:04:15 STATE: test-node.js passed: detect: samples/in/ai-body.jpg movenet +2021-10-13 08:04:15 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:15 DATA:  test-node.js result: performance: load: 448 total: 639 +2021-10-13 08:04:15 STATE: test-node.js passed: body movenet +2021-10-13 08:04:15 INFO:  test-node.js test hand variants +2021-10-13 08:04:15 DATA:  test-node.js stdout: 08:04:15.618 Human: load model failed: handskeleton.json +2021-10-13 08:04:16 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:16 STATE: test-node.js event: image +2021-10-13 08:04:17 STATE: test-node.js event: detect +2021-10-13 08:04:17 STATE: test-node.js passed: detect: samples/in/ai-body.jpg handdetect +2021-10-13 08:04:17 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:17 DATA:  test-node.js result: performance: load: 448 total: 602 +2021-10-13 08:04:17 STATE: test-node.js passed: hand handdetect +2021-10-13 08:04:17 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:17 STATE: test-node.js event: image +2021-10-13 08:04:18 STATE: test-node.js event: detect +2021-10-13 08:04:18 STATE: test-node.js passed: detect: samples/in/ai-body.jpg handtrack +2021-10-13 08:04:18 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:18 DATA:  test-node.js result: performance: load: 448 total: 638 +2021-10-13 08:04:18 STATE: test-node.js passed: hand handdetect +2021-10-13 08:04:18 STATE: test-node.js event: image +2021-10-13 08:04:19 STATE: test-node.js event: detect +2021-10-13 08:04:19 STATE: test-node.js passed: detect: random default +2021-10-13 08:04:19 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2021-10-13 08:04:19 DATA:  test-node.js result: performance: load: 448 total: 528 +2021-10-13 08:04:19 INFO:  test-node.js test: first instance +2021-10-13 08:04:19 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:20 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:20 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} +2021-10-13 08:04:20 DATA:  test-node.js result: performance: load: 2 total: 867 +2021-10-13 08:04:20 INFO:  test-node.js test: second instance +2021-10-13 08:04:20 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:21 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:21 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} +2021-10-13 08:04:21 DATA:  test-node.js result: performance: load: 1 total: 838 +2021-10-13 08:04:21 INFO:  test-node.js test: concurrent +2021-10-13 08:04:21 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:21 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:22 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:23 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:23 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:23 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:23 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:24 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:25 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:25 STATE: test-node.js event: image +2021-10-13 08:04:25 STATE: test-node.js event: image +2021-10-13 08:04:25 STATE: test-node.js event: image +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 1171 total: 7973 +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 1171 total: 7973 +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 1171 total: 7973 +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 1171 total: 7973 +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 1171 total: 7973 +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 1171 total: 7973 +2021-10-13 08:04:31 STATE: test-node.js event: detect +2021-10-13 08:04:31 STATE: test-node.js event: detect +2021-10-13 08:04:31 STATE: test-node.js event: detect +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 3 body: 1 hand: 2 gesture: 1 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 2370 total: 6804 +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 4 body: 1 hand: 2 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 2370 total: 6804 +2021-10-13 08:04:31 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:31 DATA:  test-node.js result: face: 5 body: 1 hand: 2 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} +2021-10-13 08:04:31 DATA:  test-node.js result: performance: load: 2370 total: 6804 +2021-10-13 08:04:31 STATE: test-node.js event: image +2021-10-13 08:04:32 STATE: test-node.js event: detect +2021-10-13 08:04:32 STATE: test-node.js passed: monkey patch +2021-10-13 08:04:32 STATE: test-node.js passed: segmentation [65536] +2021-10-13 08:04:32 STATE: test-node.js passeed: equal usage +2021-10-13 08:04:32 INFO:  test-node.js events: {"image":19,"detect":19,"warmup":2} +2021-10-13 08:04:32 INFO:  test-node.js tensors 2141 +2021-10-13 08:04:32 INFO:  test-node.js test complete: 36192 ms +2021-10-13 08:04:32 INFO:  +2021-10-13 08:04:32 INFO:  test-node-gpu.js start +2021-10-13 08:04:33 STATE: test-node-gpu.js passed: configuration default validation [] +2021-10-13 08:04:33 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-13 08:04:34 STATE: test-node-gpu.js passed: models loaded 20 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true}] +2021-10-13 08:04:34 STATE: test-node-gpu.js passed: create human +2021-10-13 08:04:34 INFO:  test-node-gpu.js human version: 2.3.3 +2021-10-13 08:04:34 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-13 08:04:34 INFO:  test-node-gpu.js tfjs version: 3.9.0 +2021-10-13 08:04:34 STATE: test-node-gpu.js passed: set backend: tensorflow +2021-10-13 08:04:34 STATE: test-node-gpu.js tensors 1920 +2021-10-13 08:04:34 STATE: test-node-gpu.js passed: load models +2021-10-13 08:04:34 STATE: test-node-gpu.js result: defined models: 20 loaded models: 10 +2021-10-13 08:04:34 STATE: test-node-gpu.js passed: warmup: none default +2021-10-13 08:04:34 STATE: test-node-gpu.js passed: warmup none result match +2021-10-13 08:04:34 STATE: test-node-gpu.js event: image +2021-10-13 08:04:35 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:35 STATE: test-node-gpu.js event: warmup +2021-10-13 08:04:35 STATE: test-node-gpu.js passed: warmup: face default +2021-10-13 08:04:35 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2021-10-13 08:04:35 DATA:  test-node-gpu.js result: performance: load: 391 total: 1401 +2021-10-13 08:04:35 STATE: test-node-gpu.js passed: warmup face result match +2021-10-13 08:04:35 STATE: test-node-gpu.js event: image +2021-10-13 08:04:36 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:36 STATE: test-node-gpu.js event: warmup +2021-10-13 08:04:36 STATE: test-node-gpu.js passed: warmup: body default +2021-10-13 08:04:36 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:36 DATA:  test-node-gpu.js result: performance: load: 391 total: 1063 +2021-10-13 08:04:36 STATE: test-node-gpu.js passed: warmup body result match +2021-10-13 08:04:36 INFO:  test-node-gpu.js test default +2021-10-13 08:04:37 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:37 STATE: test-node-gpu.js event: image +2021-10-13 08:04:38 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:38 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:38 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:38 DATA:  test-node-gpu.js result: performance: load: 391 total: 1064 +2021-10-13 08:04:38 STATE: test-node-gpu.js passed: default result face match +2021-10-13 08:04:38 INFO:  test-node-gpu.js test sync +2021-10-13 08:04:39 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:39 STATE: test-node-gpu.js event: image +2021-10-13 08:04:40 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:40 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:40 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:40 DATA:  test-node-gpu.js result: performance: load: 391 total: 946 +2021-10-13 08:04:40 STATE: test-node-gpu.js passed: default sync +2021-10-13 08:04:40 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:40 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2021-10-13 08:04:40 STATE: test-node-gpu.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-13 08:04:40 INFO:  test-node-gpu.js test face similarity +2021-10-13 08:04:40 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:40 STATE: test-node-gpu.js event: image +2021-10-13 08:04:41 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:41 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:04:41 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":4} +2021-10-13 08:04:41 DATA:  test-node-gpu.js result: performance: load: 391 total: 964 +2021-10-13 08:04:42 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:42 STATE: test-node-gpu.js event: image +2021-10-13 08:04:43 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:43 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:43 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:43 DATA:  test-node-gpu.js result: performance: load: 391 total: 1042 +2021-10-13 08:04:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:43 STATE: test-node-gpu.js event: image +2021-10-13 08:04:44 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:44 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:44 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} +2021-10-13 08:04:44 DATA:  test-node-gpu.js result: performance: load: 391 total: 882 +2021-10-13 08:04:44 STATE: test-node-gpu.js passed: face descriptor +2021-10-13 08:04:44 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.9020035660133001,0.8971897628968076],"descriptors":[1024,1024,1024]} +2021-10-13 08:04:44 INFO:  test-node-gpu.js test face matching +2021-10-13 08:04:44 STATE: test-node-gpu.js passed: face database 57 +2021-10-13 08:04:44 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.953739066390141}} {"second":{"index":4,"similarity":0.9028518469611467}} {"third":{"index":4,"similarity":0.9020967977212865}} +2021-10-13 08:04:44 INFO:  test-node-gpu.js test object +2021-10-13 08:04:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:45 STATE: test-node-gpu.js event: image +2021-10-13 08:04:46 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:46 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:46 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:46 DATA:  test-node-gpu.js result: performance: load: 391 total: 949 +2021-10-13 08:04:46 STATE: test-node-gpu.js passed: object result match +2021-10-13 08:04:46 INFO:  test-node-gpu.js test sensitive +2021-10-13 08:04:47 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:47 STATE: test-node-gpu.js event: image +2021-10-13 08:04:48 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:48 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:48 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:48 DATA:  test-node-gpu.js result: performance: load: 391 total: 1046 +2021-10-13 08:04:48 STATE: test-node-gpu.js passed: sensitive result match +2021-10-13 08:04:48 STATE: test-node-gpu.js passed: sensitive face result match +2021-10-13 08:04:48 STATE: test-node-gpu.js passed: sensitive face emotion result mismatch 4 +2021-10-13 08:04:48 STATE: test-node-gpu.js passed: sensitive body result match +2021-10-13 08:04:48 STATE: test-node-gpu.js passed: sensitive hand result match +2021-10-13 08:04:48 INFO:  test-node-gpu.js test detectors +2021-10-13 08:04:49 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:49 STATE: test-node-gpu.js event: image +2021-10-13 08:04:49 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:49 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:04:49 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:49 DATA:  test-node-gpu.js result: performance: load: 391 total: 660 +2021-10-13 08:04:49 STATE: test-node-gpu.js passed: detector result face match +2021-10-13 08:04:49 STATE: test-node-gpu.js passed: detector result hand match +2021-10-13 08:04:49 INFO:  test-node-gpu.js test body variants +2021-10-13 08:04:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:50 STATE: test-node-gpu.js event: image +2021-10-13 08:04:51 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:51 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet +2021-10-13 08:04:51 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17} +2021-10-13 08:04:51 DATA:  test-node-gpu.js result: performance: load: 391 total: 737 +2021-10-13 08:04:51 STATE: test-node-gpu.js passed: body posenet +2021-10-13 08:04:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:52 STATE: test-node-gpu.js event: image +2021-10-13 08:04:52 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:52 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet +2021-10-13 08:04:52 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:52 DATA:  test-node-gpu.js result: performance: load: 391 total: 639 +2021-10-13 08:04:52 STATE: test-node-gpu.js passed: body movenet +2021-10-13 08:04:52 INFO:  test-node-gpu.js test hand variants +2021-10-13 08:04:52 DATA:  test-node-gpu.js stdout: 08:04:52.964 Human: load model failed: handskeleton.json +2021-10-13 08:04:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:53 STATE: test-node-gpu.js event: image +2021-10-13 08:04:54 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:54 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg handdetect +2021-10-13 08:04:54 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:54 DATA:  test-node-gpu.js result: performance: load: 391 total: 597 +2021-10-13 08:04:54 STATE: test-node-gpu.js passed: hand handdetect +2021-10-13 08:04:55 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:04:55 STATE: test-node-gpu.js event: image +2021-10-13 08:04:55 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:55 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg handtrack +2021-10-13 08:04:55 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:04:55 DATA:  test-node-gpu.js result: performance: load: 391 total: 622 +2021-10-13 08:04:55 STATE: test-node-gpu.js passed: hand handdetect +2021-10-13 08:04:56 STATE: test-node-gpu.js event: image +2021-10-13 08:04:56 STATE: test-node-gpu.js event: detect +2021-10-13 08:04:56 STATE: test-node-gpu.js passed: detect: random default +2021-10-13 08:04:56 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2021-10-13 08:04:56 DATA:  test-node-gpu.js result: performance: load: 391 total: 520 +2021-10-13 08:04:56 INFO:  test-node-gpu.js test: first instance +2021-10-13 08:04:56 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:57 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:57 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} +2021-10-13 08:04:57 DATA:  test-node-gpu.js result: performance: load: 2 total: 840 +2021-10-13 08:04:57 INFO:  test-node-gpu.js test: second instance +2021-10-13 08:04:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:04:58 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:04:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10} +2021-10-13 08:04:58 DATA:  test-node-gpu.js result: performance: load: 2 total: 844 +2021-10-13 08:04:58 INFO:  test-node-gpu.js test: concurrent +2021-10-13 08:04:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:58 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:04:59 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:05:00 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:05:00 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:05:01 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:05:01 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2021-10-13 08:05:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2021-10-13 08:05:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289040} +2021-10-13 08:05:02 STATE: test-node-gpu.js event: image +2021-10-13 08:05:02 STATE: test-node-gpu.js event: image +2021-10-13 08:05:02 STATE: test-node-gpu.js event: image +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 1178 total: 8218 +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 1178 total: 8218 +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 1178 total: 8218 +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 1178 total: 8218 +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 1178 total: 8218 +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 1 person: 2 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 1178 total: 8218 +2021-10-13 08:05:09 STATE: test-node-gpu.js event: detect +2021-10-13 08:05:09 STATE: test-node-gpu.js event: detect +2021-10-13 08:05:09 STATE: test-node-gpu.js event: detect +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 3 body: 1 hand: 2 gesture: 1 object: 1 person: 3 {"score":0.96} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 2376 total: 7043 +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 4 body: 1 hand: 2 gesture: 1 object: 1 person: 4 {"score":0.96} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 2376 total: 7043 +2021-10-13 08:05:09 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: face: 5 body: 1 hand: 2 gesture: 1 object: 1 person: 5 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":17} +2021-10-13 08:05:09 DATA:  test-node-gpu.js result: performance: load: 2376 total: 7043 +2021-10-13 08:05:09 STATE: test-node-gpu.js event: image +2021-10-13 08:05:10 STATE: test-node-gpu.js event: detect +2021-10-13 08:05:10 STATE: test-node-gpu.js passed: monkey patch +2021-10-13 08:05:10 STATE: test-node-gpu.js passed: segmentation [65536] +2021-10-13 08:05:10 STATE: test-node-gpu.js passeed: equal usage +2021-10-13 08:05:10 INFO:  test-node-gpu.js events: {"image":19,"detect":19,"warmup":2} +2021-10-13 08:05:10 INFO:  test-node-gpu.js tensors 2141 +2021-10-13 08:05:10 INFO:  test-node-gpu.js test complete: 36409 ms +2021-10-13 08:05:10 INFO:  +2021-10-13 08:05:10 INFO:  test-node-wasm.js start +2021-10-13 08:05:10 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2021-10-13 08:05:10 STATE: test-node-wasm.js passed: configuration default validation [] +2021-10-13 08:05:10 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2021-10-13 08:05:12 STATE: test-node-wasm.js passed: models loaded 20 10 [{"name":"age","loaded":false},{"name":"agegenderrace","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"embedding","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"gender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true}] +2021-10-13 08:05:12 STATE: test-node-wasm.js passed: create human +2021-10-13 08:05:12 INFO:  test-node-wasm.js human version: 2.3.3 +2021-10-13 08:05:12 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.10.0 +2021-10-13 08:05:12 INFO:  test-node-wasm.js tfjs version: 3.9.0 +2021-10-13 08:05:12 STATE: test-node-wasm.js passed: set backend: wasm +2021-10-13 08:05:12 STATE: test-node-wasm.js tensors 1920 +2021-10-13 08:05:12 STATE: test-node-wasm.js passed: load models +2021-10-13 08:05:12 STATE: test-node-wasm.js result: defined models: 20 loaded models: 10 +2021-10-13 08:05:12 STATE: test-node-wasm.js passed: warmup: none default +2021-10-13 08:05:12 STATE: test-node-wasm.js passed: warmup none result match +2021-10-13 08:05:12 STATE: test-node-wasm.js event: image +2021-10-13 08:05:13 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:13 STATE: test-node-wasm.js event: warmup +2021-10-13 08:05:13 STATE: test-node-wasm.js passed: warmup: face default +2021-10-13 08:05:13 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":4} +2021-10-13 08:05:13 DATA:  test-node-wasm.js result: performance: load: 1201 total: 1177 +2021-10-13 08:05:13 ERROR: test-node-wasm.js failed: warmup face result mismatch 1 1 1 5 +2021-10-13 08:05:13 STATE: test-node-wasm.js event: image +2021-10-13 08:05:14 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:14 STATE: test-node-wasm.js event: warmup +2021-10-13 08:05:14 STATE: test-node-wasm.js passed: warmup: body default +2021-10-13 08:05:14 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:14 DATA:  test-node-wasm.js result: performance: load: 1201 total: 829 +2021-10-13 08:05:14 STATE: test-node-wasm.js passed: warmup body result match +2021-10-13 08:05:14 INFO:  test-node-wasm.js test default +2021-10-13 08:05:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:16 STATE: test-node-wasm.js event: image +2021-10-13 08:05:17 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:17 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:17 DATA:  test-node-wasm.js result: performance: load: 1201 total: 863 +2021-10-13 08:05:17 STATE: test-node-wasm.js passed: default result face match +2021-10-13 08:05:17 INFO:  test-node-wasm.js test sync +2021-10-13 08:05:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:18 STATE: test-node-wasm.js event: image +2021-10-13 08:05:19 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:19 DATA:  test-node-wasm.js result: performance: load: 1201 total: 855 +2021-10-13 08:05:19 STATE: test-node-wasm.js passed: default sync +2021-10-13 08:05:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-13 08:05:19 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2021-10-13 08:05:19 STATE: test-node-wasm.js passed: invalid input {"error":"could not convert input to tensor"} +2021-10-13 08:05:19 INFO:  test-node-wasm.js test face similarity +2021-10-13 08:05:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-13 08:05:19 STATE: test-node-wasm.js event: image +2021-10-13 08:05:20 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:20 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:05:20 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.4,"gender":"female"} {} {"score":0.47,"keypoints":4} +2021-10-13 08:05:20 DATA:  test-node-wasm.js result: performance: load: 1201 total: 739 +2021-10-13 08:05:22 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:22 STATE: test-node-wasm.js event: image +2021-10-13 08:05:23 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:23 DATA:  test-node-wasm.js result: performance: load: 1201 total: 858 +2021-10-13 08:05:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-13 08:05:23 STATE: test-node-wasm.js event: image +2021-10-13 08:05:24 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:24 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:24 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 5 object: 0 person: 1 {"score":1,"age":29.5,"gender":"female"} {} {"score":0.69,"keypoints":10} +2021-10-13 08:05:24 DATA:  test-node-wasm.js result: performance: load: 1201 total: 618 +2021-10-13 08:05:24 STATE: test-node-wasm.js passed: face descriptor +2021-10-13 08:05:24 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.9040641336882139,0.895983704095898],"descriptors":[1024,1024,1024]} +2021-10-13 08:05:24 INFO:  test-node-wasm.js test face matching +2021-10-13 08:05:24 STATE: test-node-wasm.js passed: face database 57 +2021-10-13 08:05:24 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.9902354470817274}} {"second":{"index":4,"similarity":0.9045213429149392}} {"third":{"index":4,"similarity":0.8965257196777969}} +2021-10-13 08:05:24 INFO:  test-node-wasm.js test object +2021-10-13 08:05:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:26 STATE: test-node-wasm.js event: image +2021-10-13 08:05:27 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 5 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:27 DATA:  test-node-wasm.js result: performance: load: 1201 total: 823 +2021-10-13 08:05:27 ERROR: test-node-wasm.js failed: object result mismatch 0 +2021-10-13 08:05:27 INFO:  test-node-wasm.js test sensitive +2021-10-13 08:05:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:28 STATE: test-node-wasm.js event: image +2021-10-13 08:05:29 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 7 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:29 DATA:  test-node-wasm.js result: performance: load: 1201 total: 1002 +2021-10-13 08:05:29 STATE: test-node-wasm.js passed: sensitive result match +2021-10-13 08:05:29 STATE: test-node-wasm.js passed: sensitive face result match +2021-10-13 08:05:29 ERROR: test-node-wasm.js failed: sensitive face emotion result mismatch 3 +2021-10-13 08:05:29 STATE: test-node-wasm.js passed: sensitive body result match +2021-10-13 08:05:29 STATE: test-node-wasm.js passed: sensitive hand result match +2021-10-13 08:05:29 INFO:  test-node-wasm.js test detectors +2021-10-13 08:05:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:31 STATE: test-node-wasm.js event: image +2021-10-13 08:05:31 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:31 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:31 DATA:  test-node-wasm.js result: performance: load: 1201 total: 370 +2021-10-13 08:05:31 STATE: test-node-wasm.js passed: detector result face match +2021-10-13 08:05:31 STATE: test-node-wasm.js passed: detector result hand match +2021-10-13 08:05:31 INFO:  test-node-wasm.js test body variants +2021-10-13 08:05:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:33 STATE: test-node-wasm.js event: image +2021-10-13 08:05:34 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet +2021-10-13 08:05:34 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.91,"keypoints":17} +2021-10-13 08:05:34 DATA:  test-node-wasm.js result: performance: load: 1201 total: 494 +2021-10-13 08:05:34 STATE: test-node-wasm.js passed: body posenet +2021-10-13 08:05:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:36 STATE: test-node-wasm.js event: image +2021-10-13 08:05:36 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet +2021-10-13 08:05:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:36 DATA:  test-node-wasm.js result: performance: load: 1201 total: 347 +2021-10-13 08:05:36 STATE: test-node-wasm.js passed: body movenet +2021-10-13 08:05:36 INFO:  test-node-wasm.js test hand variants +2021-10-13 08:05:37 DATA:  test-node-wasm.js stdout: 08:05:37.396 Human: load model failed: handskeleton.json +2021-10-13 08:05:39 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:39 STATE: test-node-wasm.js event: image +2021-10-13 08:05:39 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:39 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg handdetect +2021-10-13 08:05:39 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:39 DATA:  test-node-wasm.js result: performance: load: 1201 total: 411 +2021-10-13 08:05:39 STATE: test-node-wasm.js passed: hand handdetect +2021-10-13 08:05:41 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:41 STATE: test-node-wasm.js event: image +2021-10-13 08:05:41 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:41 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg handtrack +2021-10-13 08:05:41 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:41 DATA:  test-node-wasm.js result: performance: load: 1201 total: 330 +2021-10-13 08:05:41 STATE: test-node-wasm.js passed: hand handdetect +2021-10-13 08:05:41 STATE: test-node-wasm.js event: image +2021-10-13 08:05:42 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:42 STATE: test-node-wasm.js passed: detect: random default +2021-10-13 08:05:42 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2021-10-13 08:05:42 DATA:  test-node-wasm.js result: performance: load: 1201 total: 263 +2021-10-13 08:05:42 INFO:  test-node-wasm.js test: first instance +2021-10-13 08:05:42 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-13 08:05:43 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:43 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.69,"keypoints":10} +2021-10-13 08:05:43 DATA:  test-node-wasm.js result: performance: load: 2 total: 667 +2021-10-13 08:05:43 INFO:  test-node-wasm.js test: second instance +2021-10-13 08:05:44 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-13 08:05:44 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:44 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.69,"keypoints":10} +2021-10-13 08:05:44 DATA:  test-node-wasm.js result: performance: load: 3 total: 627 +2021-10-13 08:05:44 INFO:  test-node-wasm.js test: concurrent +2021-10-13 08:05:44 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-13 08:05:44 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-13 08:05:46 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:48 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:48 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-13 08:05:49 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-13 08:05:49 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2021-10-13 08:05:51 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2021-10-13 08:05:51 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2021-10-13 08:05:52 STATE: test-node-wasm.js event: image +2021-10-13 08:05:52 STATE: test-node-wasm.js event: image +2021-10-13 08:05:52 STATE: test-node-wasm.js event: image +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.91} {} {"score":0.47,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 2360 total: 7257 +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 0 person: 2 {"score":0.91} {} {"score":0.47,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 2360 total: 7258 +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 2360 total: 7257 +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 2360 total: 7258 +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 5 object: 0 person: 1 {"score":0.96} {} {"score":0.69,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 2360 total: 7257 +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 2 body: 1 hand: 2 gesture: 5 object: 0 person: 2 {"score":0.96} {} {"score":0.69,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 2360 total: 7258 +2021-10-13 08:05:56 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:56 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:56 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 3 body: 1 hand: 2 gesture: 1 object: 0 person: 3 {"score":0.96} {} {"score":0.47,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 4826 total: 4899 +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 4 body: 1 hand: 2 gesture: 1 object: 0 person: 4 {"score":0.96} {} {"score":0.92,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 4826 total: 4899 +2021-10-13 08:05:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: face: 5 body: 1 hand: 2 gesture: 1 object: 0 person: 5 {"score":0.96} {} {"score":0.69,"keypoints":17} +2021-10-13 08:05:56 DATA:  test-node-wasm.js result: performance: load: 4826 total: 4899 +2021-10-13 08:05:56 STATE: test-node-wasm.js event: image +2021-10-13 08:05:57 STATE: test-node-wasm.js event: detect +2021-10-13 08:05:57 STATE: test-node-wasm.js passed: monkey patch +2021-10-13 08:05:57 STATE: test-node-wasm.js passed: segmentation [65536] +2021-10-13 08:05:57 STATE: test-node-wasm.js passeed: equal usage +2021-10-13 08:05:57 INFO:  test-node-wasm.js events: {"image":19,"detect":19,"warmup":2} +2021-10-13 08:05:57 INFO:  test-node-wasm.js tensors 2143 +2021-10-13 08:05:57 INFO:  test-node-wasm.js test complete: 46236 ms +2021-10-13 08:05:57 INFO:  +2021-10-13 08:05:57 INFO:  failed [{"test":"test-node-wasm.js","data":["error",["failed: warmup face result mismatch",1,1,1,5]]},{"test":"test-node-wasm.js","data":["error",["failed: object result mismatch",0]]},{"test":"test-node-wasm.js","data":["error",["failed: sensitive face emotion result mismatch",3]]}] +2021-10-13 08:05:57 INFO:  status: {"test-node.js":{"passed":82,"failed":0},"test-node-gpu.js":{"passed":82,"failed":0},"test-node-wasm.js":{"passed":80,"failed":3}} diff --git a/wiki b/wiki index 89065def..e3e6effa 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 89065def6080803129c020a2c824f6bdb0db9851 +Subproject commit e3e6effa32ae988716728d870b06be0da83951ec