From 7ec9dfe13066725d6b281be83e70df66e298c347 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 2 Jun 2022 10:39:53 -0400 Subject: [PATCH] webgpu and wasm optimizations --- CHANGELOG.md | 6 +- TODO.md | 60 +- demo/typescript/index.js | 4 +- demo/typescript/index.js.map | 4 +- demo/typescript/index.ts | 3 +- package.json | 10 +- src/face/attention.ts | 10 +- src/face/faceboxes.ts | 2 +- src/face/facemesh.ts | 2 +- src/human.ts | 4 + src/tfjs/backend.ts | 13 + test/build.log | 49 +- test/test-node-wasm.js | 5 +- test/test.log | 1368 +++++++++++++++++----------------- 14 files changed, 792 insertions(+), 748 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2906ed31..4c03089c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,13 @@ ## Changelog -### **HEAD -> main** 2022/05/24 mandic00@live.com +### **HEAD -> main** 2022/05/30 mandic00@live.com +### **origin/main** 2022/05/29 mandic00@live.com + +- full rebuild + ### **2.7.4** 2022/05/24 mandic00@live.com diff --git a/TODO.md b/TODO.md index 24665425..408513ef 100644 --- a/TODO.md +++ b/TODO.md @@ -1,38 +1,64 @@ # To-Do list for Human library -## Work in Progress +## Work-in-Progress -### Exploring +N/A -- Optical flow: -- Advanced histogram equalization: Adaptive, Contrast Limited, CLAHE -- TFLite models: -- Body segmentation: `robust-video-matting` +

-


+## Exploring + +- Optical flow for intelligent temporal interpolation + +- Advanced histogram equalization for optimization of badly lit scenes + **Adaptive**, **Contrast Limited**, **CLAHE** +- TFLite models + +- Body segmentation with temporal analysis + + +

## Known Issues +### Face with Attention +`FaceMesh-Landmarks` model is supported only with `CPU` and `WebGL` backends due to `TFJS` issues -#### WebGPU +### WASM -Experimental support only until support is officially added in Chromium +Support for **WASM SIMD** and **WASM MultiThreading** is still disabled by default in **Chromium** based browsers +Suggestion is to enable it manually for major performance boost +Enable via + +### WebGPU + +Experimental support only until support is officially added in Chromium +Enable via + +### Firefox + +Running in **web workers** requires `OffscreenCanvas` which is still disabled by default in **Firefox** +Enable via `about:config` -> `gfx.offscreencanvas.enabled` ### Face Detection -Enhanced rotation correction for face detection is not working in NodeJS due to missing kernel op in TFJS -Feature is automatically disabled in NodeJS without user impact +Enhanced rotation correction for face detection is not working in **NodeJS** due to missing kernel op in **TFJS** +Feature is automatically disabled in **NodeJS** without user impact -- Backend NodeJS missing kernel op `RotateWithOffset` - +

-


- -## Pending Release Notes +## Pending Release Changes - Updated **FaceMesh-Landmarks** models - Added **FaceMesh-with-Attention** model is disabled by defauls, enable using `config.face.mesh.attention = true` -- If **FaceMesh-with-Attention** model is anbled, Iris model gets disabled +- If **FaceMesh-with-Attention** model is enabled, Iris model gets disabled as its functionality is superseded by attention model - Results include more detailed face mesh annotations `result.face[].annotations` +- Update benchmarks: `demo/benchmark` +- Slight performance improvement with canvas reads using `WASM` backend +- Default to RTM version of `WASM` binaries +- Enhanced `WebGPU` compatibility +- Support for **NodeJS v18** +- Updated **Known Issues** + See diff --git a/demo/typescript/index.js b/demo/typescript/index.js index 09621031..c59e271c 100644 --- a/demo/typescript/index.js +++ b/demo/typescript/index.js @@ -4,8 +4,8 @@ author: ' */ -import{Human as p}from"../../dist/human.esm.js";var w={async:!0,modelBasePath:"../../models",filter:{enabled:!0,equalization:!1},cacheSensitivity:0,face:{enabled:!0,detector:{rotation:!1},mesh:{enabled:!0},attention:{enabled:!1},iris:{enabled:!0},description:{enabled:!0},emotion:{enabled:!0}},body:{enabled:!0},hand:{enabled:!0},object:{enabled:!1},gesture:{enabled:!0}},t=new p(w);t.env.perfadd=!1;t.draw.options.font='small-caps 18px "Lato"';t.draw.options.lineHeight=20;var e={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("status"),perf:document.getElementById("performance")},o={detect:0,draw:0,tensors:0},d={detect:0,draw:0},s=(...a)=>{e.log.innerText+=a.join(" ")+` -`,console.log(...a)},r=a=>e.fps.innerText=a,b=a=>e.perf.innerText="tensors:"+t.tf.memory().numTensors+" | performance: "+JSON.stringify(a).replace(/"|{|}/g,"").replace(/,/g," | ");async function h(){r("starting webcam...");let a={audio:!1,video:{facingMode:"user",resizeMode:"none",width:{ideal:document.body.clientWidth},height:{ideal:document.body.clientHeight}}},n=await navigator.mediaDevices.getUserMedia(a),m=new Promise(f=>{e.video.onloadeddata=()=>f(!0)});e.video.srcObject=n,e.video.play(),await m,e.canvas.width=e.video.videoWidth,e.canvas.height=e.video.videoHeight;let i=n.getVideoTracks()[0],g=i.getCapabilities?i.getCapabilities():"",u=i.getSettings?i.getSettings():"",v=i.getConstraints?i.getConstraints():"";s("video:",e.video.videoWidth,e.video.videoHeight,i.label,{stream:n,track:i,settings:u,constraints:v,capabilities:g}),e.canvas.onclick=()=>{e.video.paused?e.video.play():e.video.pause()}}async function c(){if(!e.video.paused){await t.detect(e.video);let n=t.tf.memory().numTensors;n-o.tensors!==0&&s("allocated tensors:",n-o.tensors),o.tensors=n}let a=t.now();d.detect=1e3/(a-o.detect),o.detect=a,requestAnimationFrame(c)}async function l(){if(!e.video.paused){let n=await t.next(t.result);await t.draw.canvas(e.video,e.canvas),await t.draw.all(e.canvas,n),b(n.performance)}let a=t.now();d.draw=1e3/(a-o.draw),o.draw=a,r(e.video.paused?"paused":`fps: ${d.detect.toFixed(1).padStart(5," ")} detect | ${d.draw.toFixed(1).padStart(5," ")} draw`),setTimeout(l,30)}async function y(){s("human version:",t.version,"| tfjs version:",t.tf.version["tfjs-core"]),s("platform:",t.env.platform,"| agent:",t.env.agent),r("loading..."),await t.load(),s("backend:",t.tf.getBackend(),"| available:",t.env.backends),s("loaded models:",Object.values(t.models).filter(a=>a!==null).length),r("initializing..."),await t.warmup(),await h(),await c(),await l()}window.onload=y; +import{Human as p}from"../../dist/human.esm.js";var w={async:!0,modelBasePath:"../../models",filter:{enabled:!0,equalization:!1},face:{enabled:!0,detector:{rotation:!1},mesh:{enabled:!0},attention:{enabled:!1},iris:{enabled:!0},description:{enabled:!0},emotion:{enabled:!0}},body:{enabled:!0},hand:{enabled:!0},object:{enabled:!1},gesture:{enabled:!0}},t=new p(w);t.env.perfadd=!1;t.draw.options.font='small-caps 18px "Lato"';t.draw.options.lineHeight=20;var e={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("status"),perf:document.getElementById("performance")},i={detect:0,draw:0,tensors:0},d={detect:0,draw:0},s=(...a)=>{e.log.innerText+=a.join(" ")+` +`,console.log(...a)},r=a=>e.fps.innerText=a,b=a=>e.perf.innerText="tensors:"+t.tf.memory().numTensors+" | performance: "+JSON.stringify(a).replace(/"|{|}/g,"").replace(/,/g," | ");async function h(){r("starting webcam...");let a={audio:!1,video:{facingMode:"user",resizeMode:"none",width:{ideal:document.body.clientWidth},height:{ideal:document.body.clientHeight}}},n=await navigator.mediaDevices.getUserMedia(a),m=new Promise(f=>{e.video.onloadeddata=()=>f(!0)});e.video.srcObject=n,e.video.play(),await m,e.canvas.width=e.video.videoWidth,e.canvas.height=e.video.videoHeight;let o=n.getVideoTracks()[0],g=o.getCapabilities?o.getCapabilities():"",u=o.getSettings?o.getSettings():"",v=o.getConstraints?o.getConstraints():"";s("video:",e.video.videoWidth,e.video.videoHeight,o.label,{stream:n,track:o,settings:u,constraints:v,capabilities:g}),e.canvas.onclick=()=>{e.video.paused?e.video.play():e.video.pause()}}async function c(){if(!e.video.paused){await t.detect(e.video);let n=t.tf.memory().numTensors;n-i.tensors!==0&&s("allocated tensors:",n-i.tensors),i.tensors=n}let a=t.now();d.detect=1e3/(a-i.detect),i.detect=a,requestAnimationFrame(c)}async function l(){if(!e.video.paused){let n=await t.next(t.result);await t.draw.canvas(e.video,e.canvas),await t.draw.all(e.canvas,n),b(n.performance)}let a=t.now();d.draw=1e3/(a-i.draw),i.draw=a,r(e.video.paused?"paused":`fps: ${d.detect.toFixed(1).padStart(5," ")} detect | ${d.draw.toFixed(1).padStart(5," ")} draw`),setTimeout(l,30)}async function y(){s("human version:",t.version,"| tfjs version:",t.tf.version["tfjs-core"]),s("platform:",t.env.platform,"| agent:",t.env.agent),r("loading..."),await t.load(),s("backend:",t.tf.getBackend(),"| available:",t.env.backends),s("loaded models:",Object.values(t.models).filter(a=>a!==null).length),r("initializing..."),await t.warmup(),await h(),await c(),await l()}window.onload=y; /** * Human demo for browsers * @default Human Library diff --git a/demo/typescript/index.js.map b/demo/typescript/index.js.map index 5540c5f2..4f68190a 100644 --- a/demo/typescript/index.js.map +++ b/demo/typescript/index.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["index.ts"], - "sourcesContent": ["/**\n * Human demo for browsers\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\nimport { Human, Config } from '../../dist/human.esm.js'; // equivalent of @vladmandic/Human\n\nconst humanConfig: Partial = { // user configuration for human, used to fine-tune behavior\n // backend: 'webgpu' as const,\n // wasmPath: 'https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.18.0/dist/',\n async: true,\n modelBasePath: '../../models',\n filter: { enabled: true, equalization: false },\n //\n cacheSensitivity: 0,\n face: { enabled: true, detector: { rotation: false }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true } },\n body: { enabled: true },\n hand: { enabled: true },\n object: { enabled: false },\n gesture: { enabled: true },\n};\n\nconst human = new Human(humanConfig); // create instance of human with overrides from user configuration\n\nhuman.env['perfadd'] = false; // is performance data showing instant or total values\nhuman.draw.options.font = 'small-caps 18px \"Lato\"'; // set font used to draw labels when using draw methods\nhuman.draw.options.lineHeight = 20;\n\nconst dom = { // grab instances of dom objects so we dont have to look them up later\n video: document.getElementById('video') as HTMLVideoElement,\n canvas: document.getElementById('canvas') as HTMLCanvasElement,\n log: document.getElementById('log') as HTMLPreElement,\n fps: document.getElementById('status') as HTMLPreElement,\n perf: document.getElementById('performance') as HTMLDivElement,\n};\nconst timestamp = { detect: 0, draw: 0, tensors: 0 }; // holds information used to calculate performance and possible memory leaks\nconst fps = { detect: 0, draw: 0 }; // holds calculated fps information for both detect and screen refresh\n\nconst log = (...msg) => { // helper method to output messages\n dom.log.innerText += msg.join(' ') + '\\n';\n // eslint-disable-next-line no-console\n console.log(...msg);\n};\nconst status = (msg) => dom.fps.innerText = msg; // print status element\nconst perf = (msg) => dom.perf.innerText = 'tensors:' + human.tf.memory().numTensors + ' | performance: ' + JSON.stringify(msg).replace(/\"|{|}/g, '').replace(/,/g, ' | '); // print performance element\n\nasync function webCam() { // initialize webcam\n status('starting webcam...');\n // @ts-ignore resizeMode is not yet defined in tslib\n const options: MediaStreamConstraints = { audio: false, video: { facingMode: 'user', resizeMode: 'none', width: { ideal: document.body.clientWidth }, height: { ideal: document.body.clientHeight } } };\n const stream: MediaStream = await navigator.mediaDevices.getUserMedia(options);\n const ready = new Promise((resolve) => { dom.video.onloadeddata = () => resolve(true); });\n dom.video.srcObject = stream;\n dom.video.play();\n await ready;\n dom.canvas.width = dom.video.videoWidth;\n dom.canvas.height = dom.video.videoHeight;\n const track: MediaStreamTrack = stream.getVideoTracks()[0];\n const capabilities: MediaTrackCapabilities | string = track.getCapabilities ? track.getCapabilities() : '';\n const settings: MediaTrackSettings | string = track.getSettings ? track.getSettings() : '';\n const constraints: MediaTrackConstraints | string = track.getConstraints ? track.getConstraints() : '';\n log('video:', dom.video.videoWidth, dom.video.videoHeight, track.label, { stream, track, settings, constraints, capabilities });\n dom.canvas.onclick = () => { // pause when clicked on screen and resume on next click\n if (dom.video.paused) dom.video.play();\n else dom.video.pause();\n };\n}\n\nasync function detectionLoop() { // main detection loop\n if (!dom.video.paused) {\n // console.log('profiling data:', await human.profile(dom.video));\n await human.detect(dom.video); // actual detection; were not capturing output in a local variable as it can also be reached via human.result\n const tensors = human.tf.memory().numTensors; // check current tensor usage for memory leaks\n if (tensors - timestamp.tensors !== 0) log('allocated tensors:', tensors - timestamp.tensors); // printed on start and each time there is a tensor leak\n timestamp.tensors = tensors;\n }\n const now = human.now();\n fps.detect = 1000 / (now - timestamp.detect);\n timestamp.detect = now;\n requestAnimationFrame(detectionLoop); // start new frame immediately\n}\n\nasync function drawLoop() { // main screen refresh loop\n if (!dom.video.paused) {\n const interpolated = await human.next(human.result); // smoothen result using last-known results\n await human.draw.canvas(dom.video, dom.canvas); // draw canvas to screen\n await human.draw.all(dom.canvas, interpolated); // draw labels, boxes, lines, etc.\n perf(interpolated.performance); // write performance data\n }\n const now = human.now();\n fps.draw = 1000 / (now - timestamp.draw);\n timestamp.draw = now;\n status(dom.video.paused ? 'paused' : `fps: ${fps.detect.toFixed(1).padStart(5, ' ')} detect | ${fps.draw.toFixed(1).padStart(5, ' ')} draw`); // write status\n // requestAnimationFrame(drawLoop); // refresh at screen refresh rate\n setTimeout(drawLoop, 30); // use to slow down refresh from max refresh rate to target of 30 fps\n}\n\nasync function main() { // main entry point\n log('human version:', human.version, '| tfjs version:', human.tf.version['tfjs-core']);\n log('platform:', human.env.platform, '| agent:', human.env.agent);\n status('loading...');\n await human.load(); // preload all models\n log('backend:', human.tf.getBackend(), '| available:', human.env.backends);\n log('loaded models:', Object.values(human.models).filter((model) => model !== null).length);\n status('initializing...');\n await human.warmup(); // warmup function to initialize backend for future faster detection\n await webCam(); // start webcam\n await detectionLoop(); // start detection loop\n await drawLoop(); // start draw loop\n}\n\nwindow.onload = main;\n"], - "mappings": ";;;;;;AASA,gDATA,AAWA,GAAM,GAA+B,CAGnC,MAAO,GACP,cAAe,eACf,OAAQ,CAAE,QAAS,GAAM,aAAc,EAAM,EAE7C,iBAAkB,EAClB,KAAM,CAAE,QAAS,GAAM,SAAU,CAAE,SAAU,EAAM,EAAG,KAAM,CAAE,QAAS,EAAK,EAAG,UAAW,CAAE,QAAS,EAAM,EAAG,KAAM,CAAE,QAAS,EAAK,EAAG,YAAa,CAAE,QAAS,EAAK,EAAG,QAAS,CAAE,QAAS,EAAK,CAAE,EAClM,KAAM,CAAE,QAAS,EAAK,EACtB,KAAM,CAAE,QAAS,EAAK,EACtB,OAAQ,CAAE,QAAS,EAAM,EACzB,QAAS,CAAE,QAAS,EAAK,CAC3B,EAEM,EAAQ,GAAI,GAAM,CAAW,EAEnC,EAAM,IAAI,QAAa,GACvB,EAAM,KAAK,QAAQ,KAAO,yBAC1B,EAAM,KAAK,QAAQ,WAAa,GAEhC,GAAM,GAAM,CACV,MAAO,SAAS,eAAe,OAAO,EACtC,OAAQ,SAAS,eAAe,QAAQ,EACxC,IAAK,SAAS,eAAe,KAAK,EAClC,IAAK,SAAS,eAAe,QAAQ,EACrC,KAAM,SAAS,eAAe,aAAa,CAC7C,EACM,EAAY,CAAE,OAAQ,EAAG,KAAM,EAAG,QAAS,CAAE,EAC7C,EAAM,CAAE,OAAQ,EAAG,KAAM,CAAE,EAE3B,EAAM,IAAI,IAAQ,CACtB,EAAI,IAAI,WAAa,EAAI,KAAK,GAAG,EAAI;AAAA,EAErC,QAAQ,IAAI,GAAG,CAAG,CACpB,EACM,EAAS,AAAC,GAAQ,EAAI,IAAI,UAAY,EACtC,EAAO,AAAC,GAAQ,EAAI,KAAK,UAAY,WAAa,EAAM,GAAG,OAAO,EAAE,WAAa,mBAAqB,KAAK,UAAU,CAAG,EAAE,QAAQ,SAAU,EAAE,EAAE,QAAQ,KAAM,KAAK,EAEzK,kBAAwB,CACtB,EAAO,oBAAoB,EAE3B,GAAM,GAAkC,CAAE,MAAO,GAAO,MAAO,CAAE,WAAY,OAAQ,WAAY,OAAQ,MAAO,CAAE,MAAO,SAAS,KAAK,WAAY,EAAG,OAAQ,CAAE,MAAO,SAAS,KAAK,YAAa,CAAE,CAAE,EAChM,EAAsB,KAAM,WAAU,aAAa,aAAa,CAAO,EACvE,EAAQ,GAAI,SAAQ,AAAC,GAAY,CAAE,EAAI,MAAM,aAAe,IAAM,EAAQ,EAAI,CAAG,CAAC,EACxF,EAAI,MAAM,UAAY,EACtB,EAAI,MAAM,KAAK,EACf,KAAM,GACN,EAAI,OAAO,MAAQ,EAAI,MAAM,WAC7B,EAAI,OAAO,OAAS,EAAI,MAAM,YAC9B,GAAM,GAA0B,EAAO,eAAe,EAAE,GAClD,EAAgD,EAAM,gBAAkB,EAAM,gBAAgB,EAAI,GAClG,EAAwC,EAAM,YAAc,EAAM,YAAY,EAAI,GAClF,EAA8C,EAAM,eAAiB,EAAM,eAAe,EAAI,GACpG,EAAI,SAAU,EAAI,MAAM,WAAY,EAAI,MAAM,YAAa,EAAM,MAAO,CAAE,SAAQ,QAAO,WAAU,cAAa,cAAa,CAAC,EAC9H,EAAI,OAAO,QAAU,IAAM,CACzB,AAAI,EAAI,MAAM,OAAQ,EAAI,MAAM,KAAK,EAChC,EAAI,MAAM,MAAM,CACvB,CACF,CAEA,kBAA+B,CAC7B,GAAI,CAAC,EAAI,MAAM,OAAQ,CAErB,KAAM,GAAM,OAAO,EAAI,KAAK,EAC5B,GAAM,GAAU,EAAM,GAAG,OAAO,EAAE,WAClC,AAAI,EAAU,EAAU,UAAY,GAAG,EAAI,qBAAsB,EAAU,EAAU,OAAO,EAC5F,EAAU,QAAU,CACtB,CACA,GAAM,GAAM,EAAM,IAAI,EACtB,EAAI,OAAS,IAAQ,GAAM,EAAU,QACrC,EAAU,OAAS,EACnB,sBAAsB,CAAa,CACrC,CAEA,kBAA0B,CACxB,GAAI,CAAC,EAAI,MAAM,OAAQ,CACrB,GAAM,GAAe,KAAM,GAAM,KAAK,EAAM,MAAM,EAClD,KAAM,GAAM,KAAK,OAAO,EAAI,MAAO,EAAI,MAAM,EAC7C,KAAM,GAAM,KAAK,IAAI,EAAI,OAAQ,CAAY,EAC7C,EAAK,EAAa,WAAW,CAC/B,CACA,GAAM,GAAM,EAAM,IAAI,EACtB,EAAI,KAAO,IAAQ,GAAM,EAAU,MACnC,EAAU,KAAO,EACjB,EAAO,EAAI,MAAM,OAAS,SAAW,QAAQ,EAAI,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,cAAc,EAAI,KAAK,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,QAAQ,EAE3I,WAAW,EAAU,EAAE,CACzB,CAEA,kBAAsB,CACpB,EAAI,iBAAkB,EAAM,QAAS,kBAAmB,EAAM,GAAG,QAAQ,YAAY,EACrF,EAAI,YAAa,EAAM,IAAI,SAAU,WAAY,EAAM,IAAI,KAAK,EAChE,EAAO,YAAY,EACnB,KAAM,GAAM,KAAK,EACjB,EAAI,WAAY,EAAM,GAAG,WAAW,EAAG,eAAgB,EAAM,IAAI,QAAQ,EACzE,EAAI,iBAAkB,OAAO,OAAO,EAAM,MAAM,EAAE,OAAO,AAAC,GAAU,IAAU,IAAI,EAAE,MAAM,EAC1F,EAAO,iBAAiB,EACxB,KAAM,GAAM,OAAO,EACnB,KAAM,GAAO,EACb,KAAM,GAAc,EACpB,KAAM,GAAS,CACjB,CAEA,OAAO,OAAS", + "sourcesContent": ["/**\n * Human demo for browsers\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\nimport { Human, Config } from '../../dist/human.esm.js'; // equivalent of @vladmandic/Human\n\nconst humanConfig: Partial = { // user configuration for human, used to fine-tune behavior\n // backend: 'webgpu' as const,\n // wasmPath: 'https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.18.0/dist/',\n // cacheSensitivity: 0,\n async: true,\n modelBasePath: '../../models',\n filter: { enabled: true, equalization: false },\n face: { enabled: true, detector: { rotation: false }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true } },\n body: { enabled: true },\n hand: { enabled: true },\n object: { enabled: false },\n gesture: { enabled: true },\n};\n\nconst human = new Human(humanConfig); // create instance of human with overrides from user configuration\n\nhuman.env['perfadd'] = false; // is performance data showing instant or total values\nhuman.draw.options.font = 'small-caps 18px \"Lato\"'; // set font used to draw labels when using draw methods\nhuman.draw.options.lineHeight = 20;\n\nconst dom = { // grab instances of dom objects so we dont have to look them up later\n video: document.getElementById('video') as HTMLVideoElement,\n canvas: document.getElementById('canvas') as HTMLCanvasElement,\n log: document.getElementById('log') as HTMLPreElement,\n fps: document.getElementById('status') as HTMLPreElement,\n perf: document.getElementById('performance') as HTMLDivElement,\n};\nconst timestamp = { detect: 0, draw: 0, tensors: 0 }; // holds information used to calculate performance and possible memory leaks\nconst fps = { detect: 0, draw: 0 }; // holds calculated fps information for both detect and screen refresh\n\nconst log = (...msg) => { // helper method to output messages\n dom.log.innerText += msg.join(' ') + '\\n';\n // eslint-disable-next-line no-console\n console.log(...msg);\n};\nconst status = (msg) => dom.fps.innerText = msg; // print status element\nconst perf = (msg) => dom.perf.innerText = 'tensors:' + human.tf.memory().numTensors + ' | performance: ' + JSON.stringify(msg).replace(/\"|{|}/g, '').replace(/,/g, ' | '); // print performance element\n\nasync function webCam() { // initialize webcam\n status('starting webcam...');\n // @ts-ignore resizeMode is not yet defined in tslib\n const options: MediaStreamConstraints = { audio: false, video: { facingMode: 'user', resizeMode: 'none', width: { ideal: document.body.clientWidth }, height: { ideal: document.body.clientHeight } } };\n const stream: MediaStream = await navigator.mediaDevices.getUserMedia(options);\n const ready = new Promise((resolve) => { dom.video.onloadeddata = () => resolve(true); });\n dom.video.srcObject = stream;\n dom.video.play();\n await ready;\n dom.canvas.width = dom.video.videoWidth;\n dom.canvas.height = dom.video.videoHeight;\n const track: MediaStreamTrack = stream.getVideoTracks()[0];\n const capabilities: MediaTrackCapabilities | string = track.getCapabilities ? track.getCapabilities() : '';\n const settings: MediaTrackSettings | string = track.getSettings ? track.getSettings() : '';\n const constraints: MediaTrackConstraints | string = track.getConstraints ? track.getConstraints() : '';\n log('video:', dom.video.videoWidth, dom.video.videoHeight, track.label, { stream, track, settings, constraints, capabilities });\n dom.canvas.onclick = () => { // pause when clicked on screen and resume on next click\n if (dom.video.paused) dom.video.play();\n else dom.video.pause();\n };\n}\n\nasync function detectionLoop() { // main detection loop\n if (!dom.video.paused) {\n // console.log('profiling data:', await human.profile(dom.video));\n await human.detect(dom.video); // actual detection; were not capturing output in a local variable as it can also be reached via human.result\n const tensors = human.tf.memory().numTensors; // check current tensor usage for memory leaks\n if (tensors - timestamp.tensors !== 0) log('allocated tensors:', tensors - timestamp.tensors); // printed on start and each time there is a tensor leak\n timestamp.tensors = tensors;\n }\n const now = human.now();\n fps.detect = 1000 / (now - timestamp.detect);\n timestamp.detect = now;\n requestAnimationFrame(detectionLoop); // start new frame immediately\n}\n\nasync function drawLoop() { // main screen refresh loop\n if (!dom.video.paused) {\n const interpolated = await human.next(human.result); // smoothen result using last-known results\n await human.draw.canvas(dom.video, dom.canvas); // draw canvas to screen\n await human.draw.all(dom.canvas, interpolated); // draw labels, boxes, lines, etc.\n perf(interpolated.performance); // write performance data\n }\n const now = human.now();\n fps.draw = 1000 / (now - timestamp.draw);\n timestamp.draw = now;\n status(dom.video.paused ? 'paused' : `fps: ${fps.detect.toFixed(1).padStart(5, ' ')} detect | ${fps.draw.toFixed(1).padStart(5, ' ')} draw`); // write status\n // requestAnimationFrame(drawLoop); // refresh at screen refresh rate\n setTimeout(drawLoop, 30); // use to slow down refresh from max refresh rate to target of 30 fps\n}\n\nasync function main() { // main entry point\n log('human version:', human.version, '| tfjs version:', human.tf.version['tfjs-core']);\n log('platform:', human.env.platform, '| agent:', human.env.agent);\n status('loading...');\n await human.load(); // preload all models\n log('backend:', human.tf.getBackend(), '| available:', human.env.backends);\n log('loaded models:', Object.values(human.models).filter((model) => model !== null).length);\n status('initializing...');\n await human.warmup(); // warmup function to initialize backend for future faster detection\n await webCam(); // start webcam\n await detectionLoop(); // start detection loop\n await drawLoop(); // start draw loop\n}\n\nwindow.onload = main;\n"], + "mappings": ";;;;;;AASA,gDATA,AAWA,GAAM,GAA+B,CAInC,MAAO,GACP,cAAe,eACf,OAAQ,CAAE,QAAS,GAAM,aAAc,EAAM,EAC7C,KAAM,CAAE,QAAS,GAAM,SAAU,CAAE,SAAU,EAAM,EAAG,KAAM,CAAE,QAAS,EAAK,EAAG,UAAW,CAAE,QAAS,EAAM,EAAG,KAAM,CAAE,QAAS,EAAK,EAAG,YAAa,CAAE,QAAS,EAAK,EAAG,QAAS,CAAE,QAAS,EAAK,CAAE,EAClM,KAAM,CAAE,QAAS,EAAK,EACtB,KAAM,CAAE,QAAS,EAAK,EACtB,OAAQ,CAAE,QAAS,EAAM,EACzB,QAAS,CAAE,QAAS,EAAK,CAC3B,EAEM,EAAQ,GAAI,GAAM,CAAW,EAEnC,EAAM,IAAI,QAAa,GACvB,EAAM,KAAK,QAAQ,KAAO,yBAC1B,EAAM,KAAK,QAAQ,WAAa,GAEhC,GAAM,GAAM,CACV,MAAO,SAAS,eAAe,OAAO,EACtC,OAAQ,SAAS,eAAe,QAAQ,EACxC,IAAK,SAAS,eAAe,KAAK,EAClC,IAAK,SAAS,eAAe,QAAQ,EACrC,KAAM,SAAS,eAAe,aAAa,CAC7C,EACM,EAAY,CAAE,OAAQ,EAAG,KAAM,EAAG,QAAS,CAAE,EAC7C,EAAM,CAAE,OAAQ,EAAG,KAAM,CAAE,EAE3B,EAAM,IAAI,IAAQ,CACtB,EAAI,IAAI,WAAa,EAAI,KAAK,GAAG,EAAI;AAAA,EAErC,QAAQ,IAAI,GAAG,CAAG,CACpB,EACM,EAAS,AAAC,GAAQ,EAAI,IAAI,UAAY,EACtC,EAAO,AAAC,GAAQ,EAAI,KAAK,UAAY,WAAa,EAAM,GAAG,OAAO,EAAE,WAAa,mBAAqB,KAAK,UAAU,CAAG,EAAE,QAAQ,SAAU,EAAE,EAAE,QAAQ,KAAM,KAAK,EAEzK,kBAAwB,CACtB,EAAO,oBAAoB,EAE3B,GAAM,GAAkC,CAAE,MAAO,GAAO,MAAO,CAAE,WAAY,OAAQ,WAAY,OAAQ,MAAO,CAAE,MAAO,SAAS,KAAK,WAAY,EAAG,OAAQ,CAAE,MAAO,SAAS,KAAK,YAAa,CAAE,CAAE,EAChM,EAAsB,KAAM,WAAU,aAAa,aAAa,CAAO,EACvE,EAAQ,GAAI,SAAQ,AAAC,GAAY,CAAE,EAAI,MAAM,aAAe,IAAM,EAAQ,EAAI,CAAG,CAAC,EACxF,EAAI,MAAM,UAAY,EACtB,EAAI,MAAM,KAAK,EACf,KAAM,GACN,EAAI,OAAO,MAAQ,EAAI,MAAM,WAC7B,EAAI,OAAO,OAAS,EAAI,MAAM,YAC9B,GAAM,GAA0B,EAAO,eAAe,EAAE,GAClD,EAAgD,EAAM,gBAAkB,EAAM,gBAAgB,EAAI,GAClG,EAAwC,EAAM,YAAc,EAAM,YAAY,EAAI,GAClF,EAA8C,EAAM,eAAiB,EAAM,eAAe,EAAI,GACpG,EAAI,SAAU,EAAI,MAAM,WAAY,EAAI,MAAM,YAAa,EAAM,MAAO,CAAE,SAAQ,QAAO,WAAU,cAAa,cAAa,CAAC,EAC9H,EAAI,OAAO,QAAU,IAAM,CACzB,AAAI,EAAI,MAAM,OAAQ,EAAI,MAAM,KAAK,EAChC,EAAI,MAAM,MAAM,CACvB,CACF,CAEA,kBAA+B,CAC7B,GAAI,CAAC,EAAI,MAAM,OAAQ,CAErB,KAAM,GAAM,OAAO,EAAI,KAAK,EAC5B,GAAM,GAAU,EAAM,GAAG,OAAO,EAAE,WAClC,AAAI,EAAU,EAAU,UAAY,GAAG,EAAI,qBAAsB,EAAU,EAAU,OAAO,EAC5F,EAAU,QAAU,CACtB,CACA,GAAM,GAAM,EAAM,IAAI,EACtB,EAAI,OAAS,IAAQ,GAAM,EAAU,QACrC,EAAU,OAAS,EACnB,sBAAsB,CAAa,CACrC,CAEA,kBAA0B,CACxB,GAAI,CAAC,EAAI,MAAM,OAAQ,CACrB,GAAM,GAAe,KAAM,GAAM,KAAK,EAAM,MAAM,EAClD,KAAM,GAAM,KAAK,OAAO,EAAI,MAAO,EAAI,MAAM,EAC7C,KAAM,GAAM,KAAK,IAAI,EAAI,OAAQ,CAAY,EAC7C,EAAK,EAAa,WAAW,CAC/B,CACA,GAAM,GAAM,EAAM,IAAI,EACtB,EAAI,KAAO,IAAQ,GAAM,EAAU,MACnC,EAAU,KAAO,EACjB,EAAO,EAAI,MAAM,OAAS,SAAW,QAAQ,EAAI,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,cAAc,EAAI,KAAK,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,QAAQ,EAE3I,WAAW,EAAU,EAAE,CACzB,CAEA,kBAAsB,CACpB,EAAI,iBAAkB,EAAM,QAAS,kBAAmB,EAAM,GAAG,QAAQ,YAAY,EACrF,EAAI,YAAa,EAAM,IAAI,SAAU,WAAY,EAAM,IAAI,KAAK,EAChE,EAAO,YAAY,EACnB,KAAM,GAAM,KAAK,EACjB,EAAI,WAAY,EAAM,GAAG,WAAW,EAAG,eAAgB,EAAM,IAAI,QAAQ,EACzE,EAAI,iBAAkB,OAAO,OAAO,EAAM,MAAM,EAAE,OAAO,AAAC,GAAU,IAAU,IAAI,EAAE,MAAM,EAC1F,EAAO,iBAAiB,EACxB,KAAM,GAAM,OAAO,EACnB,KAAM,GAAO,EACb,KAAM,GAAc,EACpB,KAAM,GAAS,CACjB,CAEA,OAAO,OAAS", "names": [] } diff --git a/demo/typescript/index.ts b/demo/typescript/index.ts index b5a836b7..c3ee84eb 100644 --- a/demo/typescript/index.ts +++ b/demo/typescript/index.ts @@ -12,11 +12,10 @@ import { Human, Config } from '../../dist/human.esm.js'; // equivalent of @vladm const humanConfig: Partial = { // user configuration for human, used to fine-tune behavior // backend: 'webgpu' as const, // wasmPath: 'https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.18.0/dist/', + // cacheSensitivity: 0, async: true, modelBasePath: '../../models', filter: { enabled: true, equalization: false }, - // - cacheSensitivity: 0, face: { enabled: true, detector: { rotation: false }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true } }, body: { enabled: true }, hand: { enabled: true }, diff --git a/package.json b/package.json index e62ed39b..7ff8b6e1 100644 --- a/package.json +++ b/package.json @@ -65,10 +65,10 @@ "@tensorflow/tfjs-layers": "^3.18.0", "@tensorflow/tfjs-node": "^3.18.0", "@tensorflow/tfjs-node-gpu": "^3.18.0", - "@types/node": "^17.0.36", + "@types/node": "^17.0.38", "@types/offscreencanvas": "^2019.7.0", - "@typescript-eslint/eslint-plugin": "^5.26.0", - "@typescript-eslint/parser": "^5.26.0", + "@typescript-eslint/eslint-plugin": "^5.27.0", + "@typescript-eslint/parser": "^5.27.0", "@vladmandic/build": "^0.7.4", "@vladmandic/pilogger": "^0.4.4", "@vladmandic/tfjs": "github:vladmandic/tfjs", @@ -82,11 +82,11 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.0.0", - "node-fetch": "^3.2.4", + "node-fetch": "^3.2.5", "rimraf": "^3.0.2", "seedrandom": "^3.0.5", "tslib": "^2.4.0", - "typedoc": "0.22.15", + "typedoc": "0.22.17", "typescript": "4.7.2" } } diff --git a/src/face/attention.ts b/src/face/attention.ts index c61d26ec..46960a43 100644 --- a/src/face/attention.ts +++ b/src/face/attention.ts @@ -5,11 +5,11 @@ export async function augment(rawCoords, results: Tensor[]) { const t: Record = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords // mesh: results[0], // already have it in rawCoords // output_mesh_identity // flag: results[1], // already processed in parent // conv_faceflag - lips: results.filter((r) => r.size === 160)[0].dataSync() as Float32Array, // 80 x 2d = 160 // output_lips - irisL: results.filter((r) => r.size === 10)[0].dataSync() as Float32Array, // 5 x 2d = 10 // output_right_iris - eyeL: results.filter((r) => r.size === 142)[0].dataSync() as Float32Array, // 71 x 2d = 142 // output_right_eye - irisR: results.filter((r) => r.size === 10)[1].dataSync() as Float32Array, // 5 x 2d = 10 // output_left_iris - eyeR: results.filter((r) => r.size === 142)[1].dataSync() as Float32Array, // 71 x 2d = 142// output_left_eye + lips: await results.filter((r) => r.size === 160)[0].data() as Float32Array, // 80 x 2d = 160 // output_lips + irisL: await results.filter((r) => r.size === 10)[0].data() as Float32Array, // 5 x 2d = 10 // output_right_iris + eyeL: await results.filter((r) => r.size === 142)[0].data() as Float32Array, // 71 x 2d = 142 // output_right_eye + irisR: await results.filter((r) => r.size === 10)[1].data() as Float32Array, // 5 x 2d = 10 // output_left_iris + eyeR: await results.filter((r) => r.size === 142)[1].data() as Float32Array, // 71 x 2d = 142// output_left_eye }; // augment iris: adds additional 5 keypoints per eye diff --git a/src/face/faceboxes.ts b/src/face/faceboxes.ts index 3690ffc0..cf84b56d 100644 --- a/src/face/faceboxes.ts +++ b/src/face/faceboxes.ts @@ -26,7 +26,7 @@ export class FaceBoxes { const resizeT = tf.image.resizeBilinear(input, [this.inputSize, this.inputSize]); const castT = resizeT.toInt(); const [scoresT, boxesT, numT] = await this.model.executeAsync(castT) as Tensor[]; - const scores = scoresT.dataSync(); + const scores = await scoresT.data(); const squeezeT = tf.squeeze(boxesT); const boxes = squeezeT.arraySync(); scoresT.dispose(); diff --git a/src/face/facemesh.ts b/src/face/facemesh.ts index 4e092eae..7b525900 100644 --- a/src/face/facemesh.ts +++ b/src/face/facemesh.ts @@ -88,7 +88,7 @@ export async function predict(input: Tensor, config: Config): Promise; const confidenceT = results.find((t) => t.shape[t.shape.length - 1] === 1) as Tensor; const meshT = results.find((t) => t.shape[t.shape.length - 1] === 1404) as Tensor; - const faceConfidence = confidenceT.dataSync(); + const faceConfidence = await confidenceT.data(); face.faceScore = Math.round(100 * faceConfidence[0]) / 100; const coordsReshaped = tf.reshape(meshT, [-1, 3]); let rawCoords = await coordsReshaped.array(); diff --git a/src/human.ts b/src/human.ts index b0a4bc90..d8224aea 100644 --- a/src/human.ts +++ b/src/human.ts @@ -125,9 +125,13 @@ export class Human { */ constructor(userConfig?: Partial) { this.env = env; + /* defaults.wasmPath = tf.version['tfjs-core'].includes('-') // custom build or official build ? 'https://vladmandic.github.io/tfjs/dist/' : `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tf.version_core}/dist/`; + */ + const tfVersion = (tf.version?.tfjs || tf.version_core).replace(/-(.*)/, ''); + defaults.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`; defaults.modelBasePath = env.browser ? '../models/' : 'file://models/'; defaults.backend = env.browser ? 'humangl' : 'tensorflow'; this.version = app.version; // expose version property on instance of class diff --git a/src/tfjs/backend.ts b/src/tfjs/backend.ts index a55dfc3b..1b9421ad 100644 --- a/src/tfjs/backend.ts +++ b/src/tfjs/backend.ts @@ -58,6 +58,16 @@ export async function check(instance: Human, force = false) { } else { const adapter = await navigator['gpu'].requestAdapter(); if (instance.config.debug) log('enumerated webgpu adapter:', adapter); + if (!adapter) { + log('override: backend set to webgpu but browser reports no available gpu'); + instance.config.backend = 'humangl'; + } else { + // @ts-ignore requestAdapterInfo is not in tslib + // eslint-disable-next-line no-undef + const adapterInfo = 'requestAdapterInfo' in adapter ? await (adapter as GPUAdapter).requestAdapterInfo() : undefined; + // if (adapter.features) adapter.features.forEach((feature) => log('webgpu features:', feature)); + log('webgpu adapter info:', adapterInfo); + } } } @@ -76,6 +86,9 @@ export async function check(instance: Human, force = false) { // customize wasm if (instance.config.backend === 'wasm') { + try { + tf.env().set('CANVAS2D_WILL_READ_FREQUENTLY', true); + } catch { /**/ } if (instance.config.debug) log('wasm path:', instance.config.wasmPath); if (typeof tf?.setWasmPaths !== 'undefined') await tf.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch); else throw new Error('backend error: attempting to use wasm backend but wasm path is not set'); diff --git a/test/build.log b/test/build.log index 48d33b9f..57834a58 100644 --- a/test/build.log +++ b/test/build.log @@ -1,25 +1,24 @@ -2022-05-29 21:08:33 INFO:  Application: {"name":"@vladmandic/human","version":"2.8.0"} -2022-05-29 21:08:33 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-05-29 21:08:33 INFO:  Toolchain: {"build":"0.7.3","esbuild":"0.14.42","typescript":"4.7.2","typedoc":"0.22.15","eslint":"8.16.0"} -2022-05-29 21:08:33 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-05-29 21:08:33 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} -2022-05-29 21:08:33 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":595} -2022-05-29 21:08:33 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":73,"inputBytes":641913,"outputBytes":300409} -2022-05-29 21:08:33 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":599} -2022-05-29 21:08:33 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":73,"inputBytes":641917,"outputBytes":300413} -2022-05-29 21:08:33 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":651} -2022-05-29 21:08:33 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":73,"inputBytes":641969,"outputBytes":300463} -2022-05-29 21:08:33 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1069,"outputBytes":358} -2022-05-29 21:08:33 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1032,"outputBytes":583} -2022-05-29 21:08:33 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":73,"inputBytes":641901,"outputBytes":299319} -2022-05-29 21:08:34 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1354096} -2022-05-29 21:08:34 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":73,"inputBytes":1995414,"outputBytes":1652490} -2022-05-29 21:08:34 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":73,"inputBytes":1995414,"outputBytes":2138654} -2022-05-29 21:08:40 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":116} -2022-05-29 21:08:40 WARN:  You are running with an unsupported TypeScript version! This may work, or it might break. TypeDoc supports 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6 -2022-05-29 21:08:42 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":73,"generated":true} -2022-05-29 21:08:42 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6056,"outputBytes":3008} -2022-05-29 21:08:42 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15174,"outputBytes":7820} -2022-05-29 21:08:50 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":105,"errors":0,"warnings":0} -2022-05-29 21:08:50 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-05-29 21:08:50 INFO:  Done... +2022-06-02 10:37:20 INFO:  Application: {"name":"@vladmandic/human","version":"2.8.0"} +2022-06-02 10:37:20 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-06-02 10:37:20 INFO:  Toolchain: {"build":"0.7.3","esbuild":"0.14.42","typescript":"4.7.2","typedoc":"0.22.17","eslint":"8.16.0"} +2022-06-02 10:37:20 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-06-02 10:37:20 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} +2022-06-02 10:37:20 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":595} +2022-06-02 10:37:20 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":73,"inputBytes":642827,"outputBytes":300685} +2022-06-02 10:37:20 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":599} +2022-06-02 10:37:20 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":73,"inputBytes":642831,"outputBytes":300689} +2022-06-02 10:37:20 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":651} +2022-06-02 10:37:20 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":73,"inputBytes":642883,"outputBytes":300739} +2022-06-02 10:37:20 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1069,"outputBytes":358} +2022-06-02 10:37:20 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1032,"outputBytes":583} +2022-06-02 10:37:20 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":73,"inputBytes":642815,"outputBytes":299595} +2022-06-02 10:37:20 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1353524} +2022-06-02 10:37:21 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":73,"inputBytes":1995756,"outputBytes":1652193} +2022-06-02 10:37:21 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":73,"inputBytes":1995756,"outputBytes":2139052} +2022-06-02 10:37:25 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":116} +2022-06-02 10:37:27 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":73,"generated":true} +2022-06-02 10:37:27 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6054,"outputBytes":2989} +2022-06-02 10:37:27 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15174,"outputBytes":7820} +2022-06-02 10:37:35 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":106,"errors":0,"warnings":0} +2022-06-02 10:37:35 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-06-02 10:37:35 INFO:  Done... diff --git a/test/test-node-wasm.js b/test/test-node-wasm.js index fe35a3f3..4c961bef 100644 --- a/test/test-node-wasm.js +++ b/test/test-node-wasm.js @@ -12,10 +12,9 @@ Human.env.Image = Image; // requires monkey-patch as wasm does not have tf.brows const config = { cacheSensitivity: 0, modelBasePath: 'https://vladmandic.github.io/human/models/', - // modelBasePath: 'http://localhost:10030/models/', backend: 'wasm', - wasmPath: 'node_modules/@tensorflow/tfjs-backend-wasm/dist/', - // wasmPath: 'https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.9.0/dist/', + // wasmPath: 'node_modules/@tensorflow/tfjs-backend-wasm/dist/', + wasmPath: `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tf.version_core}/dist/`, debug: false, async: false, face: { diff --git a/test/test.log b/test/test.log index 48d1bcf7..7713516c 100644 --- a/test/test.log +++ b/test/test.log @@ -1,684 +1,684 @@ -2022-05-29 21:08:56 INFO:  @vladmandic/human version 2.8.0 -2022-05-29 21:08:56 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.15.0 -2022-05-29 21:08:56 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2022-05-29 21:08:56 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"] -2022-05-29 21:08:56 INFO:  -2022-05-29 21:08:56 INFO:  test-node.js start -2022-05-29 21:08:56 INFO:  test-node.js test: configuration validation -2022-05-29 21:08:56 STATE: test-node.js passed: configuration default validation [] -2022-05-29 21:08:56 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-05-29 21:08:56 INFO:  test-node.js test: model load -2022-05-29 21:08:56 STATE: test-node.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] -2022-05-29 21:08:56 INFO:  test-node.js test: warmup -2022-05-29 21:08:56 STATE: test-node.js passed: create human -2022-05-29 21:08:56 INFO:  test-node.js human version: 2.8.0 -2022-05-29 21:08:56 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.15.0 -2022-05-29 21:08:56 INFO:  test-node.js tfjs version: 3.18.0 -2022-05-29 21:08:56 INFO:  test-node.js tensorflow binding version: 2.7.0-dev20211101 -2022-05-29 21:08:56 STATE: test-node.js passed: set backend: tensorflow -2022-05-29 21:08:56 STATE: test-node.js tensors 1921 -2022-05-29 21:08:56 STATE: test-node.js passed: load models -2022-05-29 21:08:56 STATE: test-node.js result: defined models: 22 loaded models: 12 -2022-05-29 21:08:56 STATE: test-node.js passed: warmup: none default -2022-05-29 21:08:56 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-05-29 21:08:56 DATA:  test-node.js result: performance: load: null total: null -2022-05-29 21:08:56 STATE: test-node.js passed: warmup none result match -2022-05-29 21:08:56 STATE: test-node.js event: image -2022-05-29 21:08:56 STATE: test-node.js event: detect -2022-05-29 21:08:56 STATE: test-node.js event: warmup -2022-05-29 21:08:56 STATE: test-node.js passed: warmup: face default -2022-05-29 21:08:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-05-29 21:08:56 DATA:  test-node.js result: performance: load: null total: 343 -2022-05-29 21:08:56 STATE: test-node.js passed: warmup face result match -2022-05-29 21:08:56 STATE: test-node.js event: image -2022-05-29 21:08:57 STATE: test-node.js event: detect -2022-05-29 21:08:57 STATE: test-node.js event: warmup -2022-05-29 21:08:57 STATE: test-node.js passed: warmup: body default -2022-05-29 21:08:57 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:08:57 DATA:  test-node.js result: performance: load: null total: 259 -2022-05-29 21:08:57 STATE: test-node.js passed: warmup body result match -2022-05-29 21:08:57 STATE: test-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-05-29 21:08:57 INFO:  test-node.js test: details verification -2022-05-29 21:08:57 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:08:57 STATE: test-node.js event: image -2022-05-29 21:08:57 STATE: test-node.js event: detect -2022-05-29 21:08:57 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:08:57 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:08:57 DATA:  test-node.js result: performance: load: null total: 242 -2022-05-29 21:08:57 STATE: test-node.js passed: details face length 1 -2022-05-29 21:08:57 STATE: test-node.js passed: details face score 1 0.93 1 -2022-05-29 21:08:57 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-05-29 21:08:57 STATE: test-node.js passed: details face arrays 4 478 1024 -2022-05-29 21:08:57 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-05-29 21:08:57 STATE: test-node.js passed: details face anti-spoofing 0.79 -2022-05-29 21:08:57 STATE: test-node.js passed: details face liveness 0.83 -2022-05-29 21:08:57 STATE: test-node.js passed: details body length 1 -2022-05-29 21:08:57 STATE: test-node.js passed: details body 0.92 17 6 -2022-05-29 21:08:57 STATE: test-node.js passed: details hand length 1 -2022-05-29 21:08:57 STATE: test-node.js passed: details hand 0.51 0.73 point -2022-05-29 21:08:57 STATE: test-node.js passed: details hand arrays 21 5 7 -2022-05-29 21:08:57 STATE: test-node.js passed: details gesture length 7 -2022-05-29 21:08:57 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-05-29 21:08:57 STATE: test-node.js passed: details object length 1 -2022-05-29 21:08:57 STATE: test-node.js passed: details object 0.72 person -2022-05-29 21:08:57 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-05-29 21:08:57 STATE: test-node.js event: image -2022-05-29 21:08:58 STATE: test-node.js event: detect -2022-05-29 21:08:58 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-05-29 21:08:58 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-05-29 21:08:58 STATE: test-node.js event: image -2022-05-29 21:08:58 STATE: test-node.js event: detect -2022-05-29 21:08:58 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-05-29 21:08:58 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:08:58 STATE: test-node.js event: image -2022-05-29 21:08:58 STATE: test-node.js event: detect -2022-05-29 21:08:58 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-05-29 21:08:59 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2022-05-29 21:08:59 STATE: test-node.js event: image -2022-05-29 21:08:59 STATE: test-node.js event: detect -2022-05-29 21:08:59 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-05-29 21:08:59 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-05-29 21:08:59 STATE: test-node.js event: image -2022-05-29 21:08:59 STATE: test-node.js event: detect -2022-05-29 21:08:59 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-05-29 21:08:59 INFO:  test-node.js test default -2022-05-29 21:08:59 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:08:59 STATE: test-node.js event: image -2022-05-29 21:09:00 STATE: test-node.js event: detect -2022-05-29 21:09:00 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:00 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:00 DATA:  test-node.js result: performance: load: null total: 216 -2022-05-29 21:09:00 STATE: test-node.js passed: default result face match 1 female 0.97 -2022-05-29 21:09:00 INFO:  test-node.js test sync -2022-05-29 21:09:00 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:00 STATE: test-node.js event: image -2022-05-29 21:09:00 STATE: test-node.js event: detect -2022-05-29 21:09:00 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:00 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:00 DATA:  test-node.js result: performance: load: null total: 205 -2022-05-29 21:09:00 STATE: test-node.js passed: default sync 1 female 0.97 -2022-05-29 21:09:00 INFO:  test-node.js test: image process -2022-05-29 21:09:00 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:00 STATE: test-node.js passed: image input null [1,256,256,3] -2022-05-29 21:09:00 INFO:  test-node.js test: image null -2022-05-29 21:09:00 STATE: test-node.js passed: invalid input could not convert input to tensor -2022-05-29 21:09:00 INFO:  test-node.js test face similarity -2022-05-29 21:09:00 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:00 STATE: test-node.js event: image -2022-05-29 21:09:00 STATE: test-node.js event: detect -2022-05-29 21:09:00 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:00 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-05-29 21:09:00 DATA:  test-node.js result: performance: load: null total: 210 -2022-05-29 21:09:00 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:00 STATE: test-node.js event: image -2022-05-29 21:09:01 STATE: test-node.js event: detect -2022-05-29 21:09:01 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:01 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:01 DATA:  test-node.js result: performance: load: null total: 215 -2022-05-29 21:09:01 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-05-29 21:09:01 STATE: test-node.js event: image -2022-05-29 21:09:01 STATE: test-node.js event: detect -2022-05-29 21:09:01 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:01 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-05-29 21:09:01 DATA:  test-node.js result: performance: load: null total: 191 -2022-05-29 21:09:01 STATE: test-node.js passed: face descriptor -2022-05-29 21:09:01 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} -2022-05-29 21:09:01 INFO:  test-node.js test face matching -2022-05-29 21:09:01 STATE: test-node.js passed: face database 40 -2022-05-29 21:09:01 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.7827852615252829}} {"second":{"index":4,"similarity":0.5002052633015844}} {"third":{"index":4,"similarity":0.5401587887998899}} -2022-05-29 21:09:01 INFO:  test-node.js test object -2022-05-29 21:09:01 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:01 STATE: test-node.js event: image -2022-05-29 21:09:01 STATE: test-node.js event: detect -2022-05-29 21:09:01 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:01 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:01 DATA:  test-node.js result: performance: load: null total: 209 -2022-05-29 21:09:01 STATE: test-node.js passed: object result match -2022-05-29 21:09:01 INFO:  test-node.js test sensitive -2022-05-29 21:09:01 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:01 STATE: test-node.js event: image -2022-05-29 21:09:02 STATE: test-node.js event: detect -2022-05-29 21:09:02 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:02 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:02 DATA:  test-node.js result: performance: load: null total: 226 -2022-05-29 21:09:02 STATE: test-node.js passed: sensitive result match -2022-05-29 21:09:02 STATE: test-node.js passed: sensitive face result match -2022-05-29 21:09:02 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-05-29 21:09:02 STATE: test-node.js passed: sensitive body result match -2022-05-29 21:09:02 STATE: test-node.js passed: sensitive hand result match -2022-05-29 21:09:02 INFO:  test-node.js test detectors -2022-05-29 21:09:02 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:02 STATE: test-node.js event: image -2022-05-29 21:09:02 STATE: test-node.js event: detect -2022-05-29 21:09:02 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:02 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:02 DATA:  test-node.js result: performance: load: null total: 151 -2022-05-29 21:09:02 STATE: test-node.js passed: detector result face match -2022-05-29 21:09:02 STATE: test-node.js passed: detector result hand match -2022-05-29 21:09:02 INFO:  test-node.js test: multi-instance -2022-05-29 21:09:02 STATE: test-node.js event: image -2022-05-29 21:09:02 STATE: test-node.js event: detect -2022-05-29 21:09:02 STATE: test-node.js passed: detect: random default -2022-05-29 21:09:02 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2022-05-29 21:09:02 DATA:  test-node.js result: performance: load: null total: 140 -2022-05-29 21:09:02 INFO:  test-node.js test: first instance -2022-05-29 21:09:02 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-05-29 21:09:02 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:02 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:02 DATA:  test-node.js result: performance: load: null total: 135 -2022-05-29 21:09:02 INFO:  test-node.js test: second instance -2022-05-29 21:09:02 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-05-29 21:09:03 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:03 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:03 DATA:  test-node.js result: performance: load: null total: 144 -2022-05-29 21:09:03 INFO:  test-node.js test: concurrent -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:03 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-05-29 21:09:03 STATE: test-node.js event: image -2022-05-29 21:09:03 STATE: test-node.js event: image -2022-05-29 21:09:03 STATE: test-node.js event: image -2022-05-29 21:09:04 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:04 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:04 DATA:  test-node.js result: performance: load: null total: 1349 -2022-05-29 21:09:04 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:04 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:04 DATA:  test-node.js result: performance: load: null total: 1349 -2022-05-29 21:09:05 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:05 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:05 DATA:  test-node.js result: performance: load: null total: 1465 -2022-05-29 21:09:05 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:05 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:05 DATA:  test-node.js result: performance: load: null total: 1465 -2022-05-29 21:09:05 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:05 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:05 DATA:  test-node.js result: performance: load: null total: 1465 -2022-05-29 21:09:05 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:05 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:05 DATA:  test-node.js result: performance: load: null total: 1465 -2022-05-29 21:09:05 STATE: test-node.js event: detect -2022-05-29 21:09:05 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:05 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:05 DATA:  test-node.js result: performance: load: null total: 1230 -2022-05-29 21:09:05 STATE: test-node.js event: detect -2022-05-29 21:09:05 STATE: test-node.js event: detect -2022-05-29 21:09:05 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:05 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:05 DATA:  test-node.js result: performance: load: null total: 1230 -2022-05-29 21:09:05 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:05 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:05 DATA:  test-node.js result: performance: load: null total: 1230 -2022-05-29 21:09:05 INFO:  test-node.js test: monkey-patch -2022-05-29 21:09:05 STATE: test-node.js event: image -2022-05-29 21:09:05 STATE: test-node.js event: detect -2022-05-29 21:09:05 STATE: test-node.js passed: monkey patch -2022-05-29 21:09:05 STATE: test-node.js passed: segmentation [65536] -2022-05-29 21:09:05 STATE: test-node.js passeed: equal usage -2022-05-29 21:09:05 INFO:  test-node.js test: input compare -2022-05-29 21:09:05 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-05-29 21:09:05 STATE: test-node.js passed: image compare 0 23.275441687091504 -2022-05-29 21:09:05 INFO:  test-node.js events: {"image":21,"detect":21,"warmup":2} -2022-05-29 21:09:05 INFO:  test-node.js tensors 1927 -2022-05-29 21:09:05 INFO:  test-node.js test complete: 8956 ms -2022-05-29 21:09:05 INFO:  -2022-05-29 21:09:05 INFO:  test-node-gpu.js start -2022-05-29 21:09:06 INFO:  test-node-gpu.js test: configuration validation -2022-05-29 21:09:06 STATE: test-node-gpu.js passed: configuration default validation [] -2022-05-29 21:09:06 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-05-29 21:09:06 INFO:  test-node-gpu.js test: model load -2022-05-29 21:09:06 STATE: test-node-gpu.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] -2022-05-29 21:09:06 INFO:  test-node-gpu.js test: warmup -2022-05-29 21:09:06 STATE: test-node-gpu.js passed: create human -2022-05-29 21:09:06 INFO:  test-node-gpu.js human version: 2.8.0 -2022-05-29 21:09:06 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.15.0 -2022-05-29 21:09:06 INFO:  test-node-gpu.js tfjs version: 3.18.0 -2022-05-29 21:09:06 INFO:  test-node-gpu.js tensorflow binding version: 2.7.0-dev20211101 -2022-05-29 21:09:06 STATE: test-node-gpu.js passed: set backend: tensorflow -2022-05-29 21:09:06 STATE: test-node-gpu.js tensors 1921 -2022-05-29 21:09:06 STATE: test-node-gpu.js passed: load models -2022-05-29 21:09:06 STATE: test-node-gpu.js result: defined models: 22 loaded models: 12 -2022-05-29 21:09:06 STATE: test-node-gpu.js passed: warmup: none default -2022-05-29 21:09:06 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-05-29 21:09:06 DATA:  test-node-gpu.js result: performance: load: null total: null -2022-05-29 21:09:06 STATE: test-node-gpu.js passed: warmup none result match -2022-05-29 21:09:06 STATE: test-node-gpu.js event: image -2022-05-29 21:09:09 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:09 STATE: test-node-gpu.js event: warmup -2022-05-29 21:09:09 STATE: test-node-gpu.js passed: warmup: face default -2022-05-29 21:09:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-05-29 21:09:09 DATA:  test-node-gpu.js result: performance: load: null total: 3049 -2022-05-29 21:09:09 STATE: test-node-gpu.js passed: warmup face result match -2022-05-29 21:09:09 STATE: test-node-gpu.js event: image -2022-05-29 21:09:09 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:09 STATE: test-node-gpu.js event: warmup -2022-05-29 21:09:09 STATE: test-node-gpu.js passed: warmup: body default -2022-05-29 21:09:09 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:09 DATA:  test-node-gpu.js result: performance: load: null total: 174 -2022-05-29 21:09:09 STATE: test-node-gpu.js passed: warmup body result match -2022-05-29 21:09:09 STATE: test-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-05-29 21:09:09 INFO:  test-node-gpu.js test: details verification -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:10 STATE: test-node-gpu.js event: image -2022-05-29 21:09:10 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:10 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:10 DATA:  test-node-gpu.js result: performance: load: null total: 167 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details face length 1 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details face score 1 0.93 1 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details face liveness 0.83 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details body length 1 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details body 0.92 17 6 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details hand length 1 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details gesture length 7 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details object length 1 -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: details object 0.72 person -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-05-29 21:09:10 STATE: test-node-gpu.js event: image -2022-05-29 21:09:10 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:10 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-05-29 21:09:11 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-05-29 21:09:11 STATE: test-node-gpu.js event: image -2022-05-29 21:09:11 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:11 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-05-29 21:09:11 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:11 STATE: test-node-gpu.js event: image -2022-05-29 21:09:11 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:11 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-05-29 21:09:11 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:11 STATE: test-node-gpu.js event: image -2022-05-29 21:09:12 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:12 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-05-29 21:09:12 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-05-29 21:09:12 STATE: test-node-gpu.js event: image -2022-05-29 21:09:12 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:12 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-05-29 21:09:12 INFO:  test-node-gpu.js test default -2022-05-29 21:09:12 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:12 STATE: test-node-gpu.js event: image -2022-05-29 21:09:12 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:12 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:12 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:12 DATA:  test-node-gpu.js result: performance: load: null total: 155 -2022-05-29 21:09:12 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 -2022-05-29 21:09:12 INFO:  test-node-gpu.js test sync -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:13 STATE: test-node-gpu.js event: image -2022-05-29 21:09:13 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:13 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:13 DATA:  test-node-gpu.js result: performance: load: null total: 159 -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: default sync 1 female 0.97 -2022-05-29 21:09:13 INFO:  test-node-gpu.js test: image process -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2022-05-29 21:09:13 INFO:  test-node-gpu.js test: image null -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor -2022-05-29 21:09:13 INFO:  test-node-gpu.js test face similarity -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:13 STATE: test-node-gpu.js event: image -2022-05-29 21:09:13 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:13 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-05-29 21:09:13 DATA:  test-node-gpu.js result: performance: load: null total: 146 -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:13 STATE: test-node-gpu.js event: image -2022-05-29 21:09:13 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:13 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:13 DATA:  test-node-gpu.js result: performance: load: null total: 209 -2022-05-29 21:09:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-05-29 21:09:13 STATE: test-node-gpu.js event: image -2022-05-29 21:09:14 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:14 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-05-29 21:09:14 DATA:  test-node-gpu.js result: performance: load: null total: 181 -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: face descriptor -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} -2022-05-29 21:09:14 INFO:  test-node-gpu.js test face matching -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: face database 40 -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7828184453007331}} {"second":{"index":4,"similarity":0.5001334216773398}} {"third":{"index":4,"similarity":0.5403054967489764}} -2022-05-29 21:09:14 INFO:  test-node-gpu.js test object -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:14 STATE: test-node-gpu.js event: image -2022-05-29 21:09:14 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:14 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:14 DATA:  test-node-gpu.js result: performance: load: null total: 149 -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: object result match -2022-05-29 21:09:14 INFO:  test-node-gpu.js test sensitive -2022-05-29 21:09:14 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:14 STATE: test-node-gpu.js event: image -2022-05-29 21:09:15 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:15 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:15 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:15 DATA:  test-node-gpu.js result: performance: load: null total: 158 -2022-05-29 21:09:15 STATE: test-node-gpu.js passed: sensitive result match -2022-05-29 21:09:15 STATE: test-node-gpu.js passed: sensitive face result match -2022-05-29 21:09:15 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-05-29 21:09:15 STATE: test-node-gpu.js passed: sensitive body result match -2022-05-29 21:09:15 STATE: test-node-gpu.js passed: sensitive hand result match -2022-05-29 21:09:15 INFO:  test-node-gpu.js test detectors -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:16 STATE: test-node-gpu.js event: image -2022-05-29 21:09:16 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:16 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:16 DATA:  test-node-gpu.js result: performance: load: null total: 155 -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: detector result face match -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: detector result hand match -2022-05-29 21:09:16 INFO:  test-node-gpu.js test: multi-instance -2022-05-29 21:09:16 STATE: test-node-gpu.js event: image -2022-05-29 21:09:16 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: detect: random default -2022-05-29 21:09:16 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2022-05-29 21:09:16 DATA:  test-node-gpu.js result: performance: load: null total: 133 -2022-05-29 21:09:16 INFO:  test-node-gpu.js test: first instance -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:16 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:16 DATA:  test-node-gpu.js result: performance: load: null total: 108 -2022-05-29 21:09:16 INFO:  test-node-gpu.js test: second instance -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:16 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:16 DATA:  test-node-gpu.js result: performance: load: null total: 67 -2022-05-29 21:09:16 INFO:  test-node-gpu.js test: concurrent -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-05-29 21:09:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-05-29 21:09:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-05-29 21:09:17 STATE: test-node-gpu.js event: image -2022-05-29 21:09:17 STATE: test-node-gpu.js event: image -2022-05-29 21:09:17 STATE: test-node-gpu.js event: image -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 866 -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 866 -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 915 -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 915 -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 915 -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 915 -2022-05-29 21:09:18 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 654 -2022-05-29 21:09:18 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:18 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 654 -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:18 DATA:  test-node-gpu.js result: performance: load: null total: 654 -2022-05-29 21:09:18 INFO:  test-node-gpu.js test: monkey-patch -2022-05-29 21:09:18 STATE: test-node-gpu.js event: image -2022-05-29 21:09:18 STATE: test-node-gpu.js event: detect -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: monkey patch -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: segmentation [65536] -2022-05-29 21:09:18 STATE: test-node-gpu.js passeed: equal usage -2022-05-29 21:09:18 INFO:  test-node-gpu.js test: input compare -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-05-29 21:09:18 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 -2022-05-29 21:09:18 INFO:  test-node-gpu.js events: {"image":21,"detect":21,"warmup":2} -2022-05-29 21:09:18 INFO:  test-node-gpu.js tensors 1927 -2022-05-29 21:09:18 INFO:  test-node-gpu.js test complete: 12643 ms -2022-05-29 21:09:19 INFO:  -2022-05-29 21:09:19 INFO:  test-node-wasm.js start -2022-05-29 21:09:19 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2022-05-29 21:09:19 INFO:  test-node-wasm.js test: configuration validation -2022-05-29 21:09:19 STATE: test-node-wasm.js passed: configuration default validation [] -2022-05-29 21:09:19 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-05-29 21:09:19 INFO:  test-node-wasm.js test: model load -2022-05-29 21:09:21 STATE: test-node-wasm.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"https://vladmandic.github.io/human/models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"https://vladmandic.github.io/human/models/emotion.json"},{"name":"facedetect","loaded":true,"url":"https://vladmandic.github.io/human/models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"https://vladmandic.github.io/human/models/iris.json"},{"name":"facemesh","loaded":true,"url":"https://vladmandic.github.io/human/models/facemesh.json"},{"name":"faceres","loaded":true,"url":"https://vladmandic.github.io/human/models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"https://vladmandic.github.io/human/models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"https://vladmandic.github.io/human/models/handtrack.json"},{"name":"liveness","loaded":true,"url":"https://vladmandic.github.io/human/models/liveness.json"},{"name":"movenet","loaded":true,"url":"https://vladmandic.github.io/human/models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"https://vladmandic.github.io/human/models/selfie.json"},{"name":"antispoof","loaded":true,"url":"https://vladmandic.github.io/human/models/antispoof.json"}] -2022-05-29 21:09:21 INFO:  test-node-wasm.js test: warmup -2022-05-29 21:09:21 STATE: test-node-wasm.js passed: create human -2022-05-29 21:09:21 INFO:  test-node-wasm.js human version: 2.8.0 -2022-05-29 21:09:21 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.15.0 -2022-05-29 21:09:21 INFO:  test-node-wasm.js tfjs version: 3.18.0 -2022-05-29 21:09:21 STATE: test-node-wasm.js passed: set backend: wasm -2022-05-29 21:09:21 STATE: test-node-wasm.js tensors 1919 -2022-05-29 21:09:21 STATE: test-node-wasm.js passed: load models -2022-05-29 21:09:21 STATE: test-node-wasm.js result: defined models: 22 loaded models: 12 -2022-05-29 21:09:21 STATE: test-node-wasm.js passed: warmup: none default -2022-05-29 21:09:21 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-05-29 21:09:21 DATA:  test-node-wasm.js result: performance: load: null total: null -2022-05-29 21:09:21 STATE: test-node-wasm.js passed: warmup none result match -2022-05-29 21:09:21 STATE: test-node-wasm.js event: image -2022-05-29 21:09:21 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:21 STATE: test-node-wasm.js event: warmup -2022-05-29 21:09:21 STATE: test-node-wasm.js passed: warmup: face default -2022-05-29 21:09:21 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-05-29 21:09:21 DATA:  test-node-wasm.js result: performance: load: null total: 494 -2022-05-29 21:09:21 STATE: test-node-wasm.js passed: warmup face result match -2022-05-29 21:09:21 STATE: test-node-wasm.js event: image -2022-05-29 21:09:22 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:22 STATE: test-node-wasm.js event: warmup -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: warmup: body default -2022-05-29 21:09:22 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:22 DATA:  test-node-wasm.js result: performance: load: null total: 368 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: warmup body result match -2022-05-29 21:09:22 STATE: test-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-05-29 21:09:22 INFO:  test-node-wasm.js test: details verification -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:22 STATE: test-node-wasm.js event: image -2022-05-29 21:09:22 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:22 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:22 DATA:  test-node-wasm.js result: performance: load: null total: 335 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details face length 1 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details face score 1 0.93 1 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 73.26 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details face liveness 0.83 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details body length 1 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details body 0.92 17 6 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details hand length 1 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details gesture length 6 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details object length 1 -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: details object 0.72 person -2022-05-29 21:09:22 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2022-05-29 21:09:22 STATE: test-node-wasm.js event: image -2022-05-29 21:09:23 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:23 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-05-29 21:09:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2022-05-29 21:09:23 STATE: test-node-wasm.js event: image -2022-05-29 21:09:23 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:23 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-05-29 21:09:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:24 STATE: test-node-wasm.js event: image -2022-05-29 21:09:24 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:24 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-05-29 21:09:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:24 STATE: test-node-wasm.js event: image -2022-05-29 21:09:24 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:24 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-05-29 21:09:25 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-05-29 21:09:25 STATE: test-node-wasm.js event: image -2022-05-29 21:09:25 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:25 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-05-29 21:09:25 INFO:  test-node-wasm.js test default -2022-05-29 21:09:25 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:25 STATE: test-node-wasm.js event: image -2022-05-29 21:09:25 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:25 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:25 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:25 DATA:  test-node-wasm.js result: performance: load: null total: 324 -2022-05-29 21:09:25 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 -2022-05-29 21:09:25 INFO:  test-node-wasm.js test sync -2022-05-29 21:09:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:26 STATE: test-node-wasm.js event: image -2022-05-29 21:09:26 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:26 DATA:  test-node-wasm.js result: performance: load: null total: 317 -2022-05-29 21:09:26 STATE: test-node-wasm.js passed: default sync 1 female 0.97 -2022-05-29 21:09:26 INFO:  test-node-wasm.js test: image process -2022-05-29 21:09:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-05-29 21:09:26 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2022-05-29 21:09:26 INFO:  test-node-wasm.js test: image null -2022-05-29 21:09:26 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor -2022-05-29 21:09:26 INFO:  test-node-wasm.js test face similarity -2022-05-29 21:09:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-05-29 21:09:26 STATE: test-node-wasm.js event: image -2022-05-29 21:09:26 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:26 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-05-29 21:09:26 DATA:  test-node-wasm.js result: performance: load: null total: 301 -2022-05-29 21:09:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:27 STATE: test-node-wasm.js event: image -2022-05-29 21:09:27 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:27 DATA:  test-node-wasm.js result: performance: load: null total: 320 -2022-05-29 21:09:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-05-29 21:09:27 STATE: test-node-wasm.js event: image -2022-05-29 21:09:27 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:27 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-05-29 21:09:27 DATA:  test-node-wasm.js result: performance: load: null total: 291 -2022-05-29 21:09:27 STATE: test-node-wasm.js passed: face descriptor -2022-05-29 21:09:27 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} -2022-05-29 21:09:27 INFO:  test-node-wasm.js test face matching -2022-05-29 21:09:27 STATE: test-node-wasm.js passed: face database 40 -2022-05-29 21:09:27 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} -2022-05-29 21:09:27 INFO:  test-node-wasm.js test object -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:28 STATE: test-node-wasm.js event: image -2022-05-29 21:09:28 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:28 DATA:  test-node-wasm.js result: performance: load: null total: 329 -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: object result match -2022-05-29 21:09:28 INFO:  test-node-wasm.js test sensitive -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:28 STATE: test-node-wasm.js event: image -2022-05-29 21:09:28 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:28 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:28 DATA:  test-node-wasm.js result: performance: load: null total: 354 -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: sensitive result match -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: sensitive face result match -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: sensitive body result match -2022-05-29 21:09:28 STATE: test-node-wasm.js passed: sensitive hand result match -2022-05-29 21:09:28 INFO:  test-node-wasm.js test detectors -2022-05-29 21:09:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:29 STATE: test-node-wasm.js event: image -2022-05-29 21:09:29 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:29 DATA:  test-node-wasm.js result: performance: load: null total: 234 -2022-05-29 21:09:29 STATE: test-node-wasm.js passed: detector result face match -2022-05-29 21:09:29 STATE: test-node-wasm.js passed: detector result hand match -2022-05-29 21:09:29 INFO:  test-node-wasm.js test: multi-instance -2022-05-29 21:09:29 STATE: test-node-wasm.js event: image -2022-05-29 21:09:29 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:29 STATE: test-node-wasm.js passed: detect: random default -2022-05-29 21:09:29 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.05,"keypoints":15} -2022-05-29 21:09:29 DATA:  test-node-wasm.js result: performance: load: null total: 206 -2022-05-29 21:09:29 INFO:  test-node-wasm.js test: first instance -2022-05-29 21:09:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:30 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:30 DATA:  test-node-wasm.js result: performance: load: null total: 226 -2022-05-29 21:09:30 INFO:  test-node-wasm.js test: second instance -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:30 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:30 DATA:  test-node-wasm.js result: performance: load: null total: 222 -2022-05-29 21:09:30 INFO:  test-node-wasm.js test: concurrent -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-05-29 21:09:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-05-29 21:09:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-05-29 21:09:31 STATE: test-node-wasm.js event: image -2022-05-29 21:09:31 STATE: test-node-wasm.js event: image -2022-05-29 21:09:31 STATE: test-node-wasm.js event: image -2022-05-29 21:09:32 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:32 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:32 DATA:  test-node-wasm.js result: performance: load: null total: 2026 -2022-05-29 21:09:32 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:32 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:32 DATA:  test-node-wasm.js result: performance: load: null total: 2026 -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: performance: load: null total: 2241 -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: performance: load: null total: 2241 -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: performance: load: null total: 2241 -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: performance: load: null total: 2241 -2022-05-29 21:09:33 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: performance: load: null total: 1927 -2022-05-29 21:09:33 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:33 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: performance: load: null total: 1927 -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-05-29 21:09:33 DATA:  test-node-wasm.js result: performance: load: null total: 1927 -2022-05-29 21:09:33 INFO:  test-node-wasm.js test: monkey-patch -2022-05-29 21:09:33 STATE: test-node-wasm.js event: image -2022-05-29 21:09:33 STATE: test-node-wasm.js event: detect -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: monkey patch -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: segmentation [65536] -2022-05-29 21:09:33 STATE: test-node-wasm.js passeed: equal usage -2022-05-29 21:09:33 INFO:  test-node-wasm.js test: input compare -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-05-29 21:09:33 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 -2022-05-29 21:09:33 INFO:  test-node-wasm.js events: {"image":21,"detect":21,"warmup":2} -2022-05-29 21:09:33 INFO:  test-node-wasm.js tensors 1927 -2022-05-29 21:09:33 INFO:  test-node-wasm.js test complete: 13734 ms -2022-05-29 21:09:33 INFO:  all tests complete -2022-05-29 21:09:33 INFO:  failed: {"count":0,"messages":[]} -2022-05-29 21:09:33 INFO:  status: {"test":"test-node.js","passed":101,"failed":0} -2022-05-29 21:09:33 INFO:  status: {"test":"test-node-gpu.js","passed":101,"failed":0} -2022-05-29 21:09:33 INFO:  status: {"test":"test-node-wasm.js","passed":102,"failed":0} +2022-06-02 10:37:47 INFO:  @vladmandic/human version 2.8.0 +2022-06-02 10:37:47 INFO:  User: vlado Platform: linux Arch: x64 Node: v18.1.0 +2022-06-02 10:37:47 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2022-06-02 10:37:47 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"] +2022-06-02 10:37:47 INFO:  +2022-06-02 10:37:47 INFO:  test-node.js start +2022-06-02 10:37:47 INFO:  test-node.js test: configuration validation +2022-06-02 10:37:47 STATE: test-node.js passed: configuration default validation [] +2022-06-02 10:37:47 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-06-02 10:37:47 INFO:  test-node.js test: model load +2022-06-02 10:37:47 STATE: test-node.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] +2022-06-02 10:37:47 INFO:  test-node.js test: warmup +2022-06-02 10:37:47 STATE: test-node.js passed: create human +2022-06-02 10:37:47 INFO:  test-node.js human version: 2.8.0 +2022-06-02 10:37:47 INFO:  test-node.js platform: linux x64 agent: NodeJS v18.1.0 +2022-06-02 10:37:47 INFO:  test-node.js tfjs version: 3.18.0 +2022-06-02 10:37:47 INFO:  test-node.js tensorflow binding version: 2.7.0-dev20211101 +2022-06-02 10:37:47 STATE: test-node.js passed: set backend: tensorflow +2022-06-02 10:37:47 STATE: test-node.js tensors 1921 +2022-06-02 10:37:47 STATE: test-node.js passed: load models +2022-06-02 10:37:47 STATE: test-node.js result: defined models: 22 loaded models: 12 +2022-06-02 10:37:47 STATE: test-node.js passed: warmup: none default +2022-06-02 10:37:47 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-06-02 10:37:47 DATA:  test-node.js result: performance: load: null total: null +2022-06-02 10:37:47 STATE: test-node.js passed: warmup none result match +2022-06-02 10:37:47 STATE: test-node.js event: image +2022-06-02 10:37:48 STATE: test-node.js event: detect +2022-06-02 10:37:48 STATE: test-node.js event: warmup +2022-06-02 10:37:48 STATE: test-node.js passed: warmup: face default +2022-06-02 10:37:48 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-06-02 10:37:48 DATA:  test-node.js result: performance: load: null total: 354 +2022-06-02 10:37:48 STATE: test-node.js passed: warmup face result match +2022-06-02 10:37:48 STATE: test-node.js event: image +2022-06-02 10:37:48 STATE: test-node.js event: detect +2022-06-02 10:37:48 STATE: test-node.js event: warmup +2022-06-02 10:37:48 STATE: test-node.js passed: warmup: body default +2022-06-02 10:37:48 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:48 DATA:  test-node.js result: performance: load: null total: 260 +2022-06-02 10:37:48 STATE: test-node.js passed: warmup body result match +2022-06-02 10:37:48 STATE: test-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-06-02 10:37:48 INFO:  test-node.js test: details verification +2022-06-02 10:37:48 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:48 STATE: test-node.js event: image +2022-06-02 10:37:48 STATE: test-node.js event: detect +2022-06-02 10:37:48 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:48 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:48 DATA:  test-node.js result: performance: load: null total: 239 +2022-06-02 10:37:48 STATE: test-node.js passed: details face length 1 +2022-06-02 10:37:48 STATE: test-node.js passed: details face score 1 0.93 1 +2022-06-02 10:37:48 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-06-02 10:37:48 STATE: test-node.js passed: details face arrays 4 478 1024 +2022-06-02 10:37:48 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-06-02 10:37:48 STATE: test-node.js passed: details face anti-spoofing 0.79 +2022-06-02 10:37:48 STATE: test-node.js passed: details face liveness 0.83 +2022-06-02 10:37:48 STATE: test-node.js passed: details body length 1 +2022-06-02 10:37:48 STATE: test-node.js passed: details body 0.92 17 6 +2022-06-02 10:37:48 STATE: test-node.js passed: details hand length 1 +2022-06-02 10:37:48 STATE: test-node.js passed: details hand 0.51 0.73 point +2022-06-02 10:37:48 STATE: test-node.js passed: details hand arrays 21 5 7 +2022-06-02 10:37:48 STATE: test-node.js passed: details gesture length 7 +2022-06-02 10:37:48 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-06-02 10:37:48 STATE: test-node.js passed: details object length 1 +2022-06-02 10:37:48 STATE: test-node.js passed: details object 0.72 person +2022-06-02 10:37:48 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-06-02 10:37:48 STATE: test-node.js event: image +2022-06-02 10:37:49 STATE: test-node.js event: detect +2022-06-02 10:37:49 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-06-02 10:37:49 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-06-02 10:37:49 STATE: test-node.js event: image +2022-06-02 10:37:49 STATE: test-node.js event: detect +2022-06-02 10:37:49 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-06-02 10:37:49 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:49 STATE: test-node.js event: image +2022-06-02 10:37:50 STATE: test-node.js event: detect +2022-06-02 10:37:50 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-06-02 10:37:50 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:50 STATE: test-node.js event: image +2022-06-02 10:37:50 STATE: test-node.js event: detect +2022-06-02 10:37:50 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-06-02 10:37:50 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-06-02 10:37:50 STATE: test-node.js event: image +2022-06-02 10:37:50 STATE: test-node.js event: detect +2022-06-02 10:37:50 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-06-02 10:37:50 INFO:  test-node.js test default +2022-06-02 10:37:51 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:51 STATE: test-node.js event: image +2022-06-02 10:37:51 STATE: test-node.js event: detect +2022-06-02 10:37:51 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:51 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:51 DATA:  test-node.js result: performance: load: null total: 217 +2022-06-02 10:37:51 STATE: test-node.js passed: default result face match 1 female 0.97 +2022-06-02 10:37:51 INFO:  test-node.js test sync +2022-06-02 10:37:51 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:51 STATE: test-node.js event: image +2022-06-02 10:37:51 STATE: test-node.js event: detect +2022-06-02 10:37:51 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:51 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:51 DATA:  test-node.js result: performance: load: null total: 236 +2022-06-02 10:37:51 STATE: test-node.js passed: default sync 1 female 0.97 +2022-06-02 10:37:51 INFO:  test-node.js test: image process +2022-06-02 10:37:51 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:37:51 STATE: test-node.js passed: image input null [1,256,256,3] +2022-06-02 10:37:51 INFO:  test-node.js test: image null +2022-06-02 10:37:51 STATE: test-node.js passed: invalid input could not convert input to tensor +2022-06-02 10:37:51 INFO:  test-node.js test face similarity +2022-06-02 10:37:51 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:37:51 STATE: test-node.js event: image +2022-06-02 10:37:51 STATE: test-node.js event: detect +2022-06-02 10:37:51 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:37:51 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-06-02 10:37:51 DATA:  test-node.js result: performance: load: null total: 213 +2022-06-02 10:37:52 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:52 STATE: test-node.js event: image +2022-06-02 10:37:52 STATE: test-node.js event: detect +2022-06-02 10:37:52 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:52 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:52 DATA:  test-node.js result: performance: load: null total: 215 +2022-06-02 10:37:52 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-06-02 10:37:52 STATE: test-node.js event: image +2022-06-02 10:37:52 STATE: test-node.js event: detect +2022-06-02 10:37:52 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:37:52 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-06-02 10:37:52 DATA:  test-node.js result: performance: load: null total: 195 +2022-06-02 10:37:52 STATE: test-node.js passed: face descriptor +2022-06-02 10:37:52 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} +2022-06-02 10:37:52 INFO:  test-node.js test face matching +2022-06-02 10:37:52 STATE: test-node.js passed: face database 40 +2022-06-02 10:37:52 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.7827852615252829}} {"second":{"index":4,"similarity":0.5002052633015844}} {"third":{"index":4,"similarity":0.5401587887998899}} +2022-06-02 10:37:52 INFO:  test-node.js test object +2022-06-02 10:37:52 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:52 STATE: test-node.js event: image +2022-06-02 10:37:52 STATE: test-node.js event: detect +2022-06-02 10:37:52 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:52 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:52 DATA:  test-node.js result: performance: load: null total: 215 +2022-06-02 10:37:52 STATE: test-node.js passed: object result match +2022-06-02 10:37:52 INFO:  test-node.js test sensitive +2022-06-02 10:37:53 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:53 STATE: test-node.js event: image +2022-06-02 10:37:53 STATE: test-node.js event: detect +2022-06-02 10:37:53 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:53 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:53 DATA:  test-node.js result: performance: load: null total: 233 +2022-06-02 10:37:53 STATE: test-node.js passed: sensitive result match +2022-06-02 10:37:53 STATE: test-node.js passed: sensitive face result match +2022-06-02 10:37:53 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-06-02 10:37:53 STATE: test-node.js passed: sensitive body result match +2022-06-02 10:37:53 STATE: test-node.js passed: sensitive hand result match +2022-06-02 10:37:53 INFO:  test-node.js test detectors +2022-06-02 10:37:53 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:53 STATE: test-node.js event: image +2022-06-02 10:37:53 STATE: test-node.js event: detect +2022-06-02 10:37:53 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:53 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:53 DATA:  test-node.js result: performance: load: null total: 167 +2022-06-02 10:37:53 STATE: test-node.js passed: detector result face match +2022-06-02 10:37:53 STATE: test-node.js passed: detector result hand match +2022-06-02 10:37:53 INFO:  test-node.js test: multi-instance +2022-06-02 10:37:53 STATE: test-node.js event: image +2022-06-02 10:37:53 STATE: test-node.js event: detect +2022-06-02 10:37:53 STATE: test-node.js passed: detect: random default +2022-06-02 10:37:53 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} +2022-06-02 10:37:53 DATA:  test-node.js result: performance: load: null total: 149 +2022-06-02 10:37:53 INFO:  test-node.js test: first instance +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-06-02 10:37:54 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:37:54 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:37:54 DATA:  test-node.js result: performance: load: null total: 148 +2022-06-02 10:37:54 INFO:  test-node.js test: second instance +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-06-02 10:37:54 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:37:54 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:37:54 DATA:  test-node.js result: performance: load: null total: 145 +2022-06-02 10:37:54 INFO:  test-node.js test: concurrent +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-06-02 10:37:54 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:37:55 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:55 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-06-02 10:37:55 STATE: test-node.js event: image +2022-06-02 10:37:55 STATE: test-node.js event: image +2022-06-02 10:37:55 STATE: test-node.js event: image +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1417 +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1417 +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1538 +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1538 +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1538 +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1538 +2022-06-02 10:37:56 STATE: test-node.js event: detect +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1283 +2022-06-02 10:37:56 STATE: test-node.js event: detect +2022-06-02 10:37:56 STATE: test-node.js event: detect +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1283 +2022-06-02 10:37:56 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:37:56 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:37:56 DATA:  test-node.js result: performance: load: null total: 1283 +2022-06-02 10:37:56 INFO:  test-node.js test: monkey-patch +2022-06-02 10:37:56 STATE: test-node.js event: image +2022-06-02 10:37:56 STATE: test-node.js event: detect +2022-06-02 10:37:56 STATE: test-node.js passed: monkey patch +2022-06-02 10:37:56 STATE: test-node.js passed: segmentation [65536] +2022-06-02 10:37:56 STATE: test-node.js passeed: equal usage +2022-06-02 10:37:56 INFO:  test-node.js test: input compare +2022-06-02 10:37:56 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:37:56 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-06-02 10:37:56 STATE: test-node.js passed: image compare 0 23.275441687091504 +2022-06-02 10:37:56 INFO:  test-node.js events: {"image":21,"detect":21,"warmup":2} +2022-06-02 10:37:56 INFO:  test-node.js tensors 1927 +2022-06-02 10:37:56 INFO:  test-node.js test complete: 9338 ms +2022-06-02 10:37:56 INFO:  +2022-06-02 10:37:56 INFO:  test-node-gpu.js start +2022-06-02 10:37:57 INFO:  test-node-gpu.js test: configuration validation +2022-06-02 10:37:57 STATE: test-node-gpu.js passed: configuration default validation [] +2022-06-02 10:37:57 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-06-02 10:37:57 INFO:  test-node-gpu.js test: model load +2022-06-02 10:37:57 STATE: test-node-gpu.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"file://models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"file://models/emotion.json"},{"name":"facedetect","loaded":true,"url":"file://models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"url":"file://models/facemesh.json"},{"name":"faceres","loaded":true,"url":"file://models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"file://models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"file://models/handtrack.json"},{"name":"liveness","loaded":true,"url":"file://models/liveness.json"},{"name":"movenet","loaded":true,"url":"file://models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"file://models/selfie.json"},{"name":"antispoof","loaded":true,"url":"file://models/antispoof.json"}] +2022-06-02 10:37:57 INFO:  test-node-gpu.js test: warmup +2022-06-02 10:37:57 STATE: test-node-gpu.js passed: create human +2022-06-02 10:37:57 INFO:  test-node-gpu.js human version: 2.8.0 +2022-06-02 10:37:57 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v18.1.0 +2022-06-02 10:37:57 INFO:  test-node-gpu.js tfjs version: 3.18.0 +2022-06-02 10:37:57 INFO:  test-node-gpu.js tensorflow binding version: 2.7.0-dev20211101 +2022-06-02 10:37:57 STATE: test-node-gpu.js passed: set backend: tensorflow +2022-06-02 10:37:57 STATE: test-node-gpu.js tensors 1921 +2022-06-02 10:37:57 STATE: test-node-gpu.js passed: load models +2022-06-02 10:37:57 STATE: test-node-gpu.js result: defined models: 22 loaded models: 12 +2022-06-02 10:37:57 STATE: test-node-gpu.js passed: warmup: none default +2022-06-02 10:37:57 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-06-02 10:37:57 DATA:  test-node-gpu.js result: performance: load: null total: null +2022-06-02 10:37:57 STATE: test-node-gpu.js passed: warmup none result match +2022-06-02 10:37:58 STATE: test-node-gpu.js event: image +2022-06-02 10:38:00 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:00 STATE: test-node-gpu.js event: warmup +2022-06-02 10:38:00 STATE: test-node-gpu.js passed: warmup: face default +2022-06-02 10:38:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-06-02 10:38:00 DATA:  test-node-gpu.js result: performance: load: null total: 2264 +2022-06-02 10:38:00 STATE: test-node-gpu.js passed: warmup face result match +2022-06-02 10:38:00 STATE: test-node-gpu.js event: image +2022-06-02 10:38:00 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:00 STATE: test-node-gpu.js event: warmup +2022-06-02 10:38:00 STATE: test-node-gpu.js passed: warmup: body default +2022-06-02 10:38:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:00 DATA:  test-node-gpu.js result: performance: load: null total: 201 +2022-06-02 10:38:00 STATE: test-node-gpu.js passed: warmup body result match +2022-06-02 10:38:00 STATE: test-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-06-02 10:38:00 INFO:  test-node-gpu.js test: details verification +2022-06-02 10:38:00 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:00 STATE: test-node-gpu.js event: image +2022-06-02 10:38:01 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:01 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:01 DATA:  test-node-gpu.js result: performance: load: null total: 258 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details face length 1 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details face score 1 0.93 1 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details face liveness 0.83 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details body length 1 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details body 0.92 17 6 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details hand length 1 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details gesture length 7 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details object length 1 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: details object 0.72 person +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-06-02 10:38:01 STATE: test-node-gpu.js event: image +2022-06-02 10:38:01 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-06-02 10:38:01 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-06-02 10:38:01 STATE: test-node-gpu.js event: image +2022-06-02 10:38:02 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:02 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-06-02 10:38:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:02 STATE: test-node-gpu.js event: image +2022-06-02 10:38:02 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:02 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-06-02 10:38:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:02 STATE: test-node-gpu.js event: image +2022-06-02 10:38:02 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:02 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-06-02 10:38:02 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-06-02 10:38:02 STATE: test-node-gpu.js event: image +2022-06-02 10:38:03 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-06-02 10:38:03 INFO:  test-node-gpu.js test default +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:03 STATE: test-node-gpu.js event: image +2022-06-02 10:38:03 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:03 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:03 DATA:  test-node-gpu.js result: performance: load: null total: 192 +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 +2022-06-02 10:38:03 INFO:  test-node-gpu.js test sync +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:03 STATE: test-node-gpu.js event: image +2022-06-02 10:38:03 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:03 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:03 DATA:  test-node-gpu.js result: performance: load: null total: 191 +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: default sync 1 female 0.97 +2022-06-02 10:38:03 INFO:  test-node-gpu.js test: image process +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2022-06-02 10:38:03 INFO:  test-node-gpu.js test: image null +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor +2022-06-02 10:38:03 INFO:  test-node-gpu.js test face similarity +2022-06-02 10:38:03 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:38:03 STATE: test-node-gpu.js event: image +2022-06-02 10:38:04 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:38:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-06-02 10:38:04 DATA:  test-node-gpu.js result: performance: load: null total: 184 +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:04 STATE: test-node-gpu.js event: image +2022-06-02 10:38:04 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:04 DATA:  test-node-gpu.js result: performance: load: null total: 191 +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-06-02 10:38:04 STATE: test-node-gpu.js event: image +2022-06-02 10:38:04 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-06-02 10:38:04 DATA:  test-node-gpu.js result: performance: load: null total: 208 +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: face descriptor +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} +2022-06-02 10:38:04 INFO:  test-node-gpu.js test face matching +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: face database 40 +2022-06-02 10:38:04 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7828184453007331}} {"second":{"index":4,"similarity":0.5001334216773398}} {"third":{"index":4,"similarity":0.5403054967489764}} +2022-06-02 10:38:04 INFO:  test-node-gpu.js test object +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:05 STATE: test-node-gpu.js event: image +2022-06-02 10:38:05 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:05 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:05 DATA:  test-node-gpu.js result: performance: load: null total: 226 +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: object result match +2022-06-02 10:38:05 INFO:  test-node-gpu.js test sensitive +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:05 STATE: test-node-gpu.js event: image +2022-06-02 10:38:05 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:05 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:05 DATA:  test-node-gpu.js result: performance: load: null total: 222 +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: sensitive result match +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: sensitive face result match +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: sensitive body result match +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: sensitive hand result match +2022-06-02 10:38:05 INFO:  test-node-gpu.js test detectors +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:05 STATE: test-node-gpu.js event: image +2022-06-02 10:38:05 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:05 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:05 DATA:  test-node-gpu.js result: performance: load: null total: 94 +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: detector result face match +2022-06-02 10:38:05 STATE: test-node-gpu.js passed: detector result hand match +2022-06-02 10:38:05 INFO:  test-node-gpu.js test: multi-instance +2022-06-02 10:38:05 STATE: test-node-gpu.js event: image +2022-06-02 10:38:06 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: detect: random default +2022-06-02 10:38:06 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.06,"keypoints":15} +2022-06-02 10:38:06 DATA:  test-node-gpu.js result: performance: load: null total: 102 +2022-06-02 10:38:06 INFO:  test-node-gpu.js test: first instance +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:06 DATA:  test-node-gpu.js result: performance: load: null total: 91 +2022-06-02 10:38:06 INFO:  test-node-gpu.js test: second instance +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:06 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:06 DATA:  test-node-gpu.js result: performance: load: null total: 82 +2022-06-02 10:38:06 INFO:  test-node-gpu.js test: concurrent +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-06-02 10:38:06 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-06-02 10:38:07 STATE: test-node-gpu.js event: image +2022-06-02 10:38:07 STATE: test-node-gpu.js event: image +2022-06-02 10:38:07 STATE: test-node-gpu.js event: image +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 945 +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 945 +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 999 +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 999 +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 999 +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 999 +2022-06-02 10:38:07 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 752 +2022-06-02 10:38:07 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:07 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 753 +2022-06-02 10:38:07 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:07 DATA:  test-node-gpu.js result: performance: load: null total: 753 +2022-06-02 10:38:07 INFO:  test-node-gpu.js test: monkey-patch +2022-06-02 10:38:07 STATE: test-node-gpu.js event: image +2022-06-02 10:38:08 STATE: test-node-gpu.js event: detect +2022-06-02 10:38:08 STATE: test-node-gpu.js passed: monkey patch +2022-06-02 10:38:08 STATE: test-node-gpu.js passed: segmentation [65536] +2022-06-02 10:38:08 STATE: test-node-gpu.js passeed: equal usage +2022-06-02 10:38:08 INFO:  test-node-gpu.js test: input compare +2022-06-02 10:38:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-06-02 10:38:08 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-06-02 10:38:08 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 +2022-06-02 10:38:08 INFO:  test-node-gpu.js events: {"image":21,"detect":21,"warmup":2} +2022-06-02 10:38:08 INFO:  test-node-gpu.js tensors 1927 +2022-06-02 10:38:08 INFO:  test-node-gpu.js test complete: 10665 ms +2022-06-02 10:38:08 INFO:  +2022-06-02 10:38:08 INFO:  test-node-wasm.js start +2022-06-02 10:38:09 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2022-06-02 10:38:09 INFO:  test-node-wasm.js test: configuration validation +2022-06-02 10:38:09 STATE: test-node-wasm.js passed: configuration default validation [] +2022-06-02 10:38:09 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-06-02 10:38:09 INFO:  test-node-wasm.js test: model load +2022-06-02 10:38:10 STATE: test-node-wasm.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false,"url":null},{"name":"gear","loaded":false,"url":null},{"name":"blazeposedetect","loaded":false,"url":null},{"name":"blazepose","loaded":false,"url":null},{"name":"centernet","loaded":true,"url":"https://vladmandic.github.io/human/models/mb3-centernet.json"},{"name":"efficientpose","loaded":false,"url":null},{"name":"mobilefacenet","loaded":false,"url":null},{"name":"emotion","loaded":true,"url":"https://vladmandic.github.io/human/models/emotion.json"},{"name":"facedetect","loaded":true,"url":"https://vladmandic.github.io/human/models/blazeface.json"},{"name":"faceiris","loaded":true,"url":"https://vladmandic.github.io/human/models/iris.json"},{"name":"facemesh","loaded":true,"url":"https://vladmandic.github.io/human/models/facemesh.json"},{"name":"faceres","loaded":true,"url":"https://vladmandic.github.io/human/models/faceres.json"},{"name":"ssrnetgender","loaded":false,"url":null},{"name":"handpose","loaded":false,"url":null},{"name":"handskeleton","loaded":true,"url":"https://vladmandic.github.io/human/models/handlandmark-full.json"},{"name":"handtrack","loaded":true,"url":"https://vladmandic.github.io/human/models/handtrack.json"},{"name":"liveness","loaded":true,"url":"https://vladmandic.github.io/human/models/liveness.json"},{"name":"movenet","loaded":true,"url":"https://vladmandic.github.io/human/models/movenet-lightning.json"},{"name":"nanodet","loaded":false,"url":null},{"name":"posenet","loaded":false,"url":null},{"name":"segmentation","loaded":true,"url":"https://vladmandic.github.io/human/models/selfie.json"},{"name":"antispoof","loaded":true,"url":"https://vladmandic.github.io/human/models/antispoof.json"}] +2022-06-02 10:38:10 INFO:  test-node-wasm.js test: warmup +2022-06-02 10:38:10 STATE: test-node-wasm.js passed: create human +2022-06-02 10:38:10 INFO:  test-node-wasm.js human version: 2.8.0 +2022-06-02 10:38:10 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v18.1.0 +2022-06-02 10:38:10 INFO:  test-node-wasm.js tfjs version: 3.18.0 +2022-06-02 10:38:10 STATE: test-node-wasm.js passed: set backend: wasm +2022-06-02 10:38:10 STATE: test-node-wasm.js tensors 1921 +2022-06-02 10:38:10 STATE: test-node-wasm.js passed: load models +2022-06-02 10:38:10 STATE: test-node-wasm.js result: defined models: 22 loaded models: 12 +2022-06-02 10:38:10 STATE: test-node-wasm.js passed: warmup: none default +2022-06-02 10:38:10 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-06-02 10:38:10 DATA:  test-node-wasm.js result: performance: load: null total: null +2022-06-02 10:38:10 STATE: test-node-wasm.js passed: warmup none result match +2022-06-02 10:38:10 STATE: test-node-wasm.js event: image +2022-06-02 10:38:11 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:11 STATE: test-node-wasm.js event: warmup +2022-06-02 10:38:11 STATE: test-node-wasm.js passed: warmup: face default +2022-06-02 10:38:11 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-06-02 10:38:11 DATA:  test-node-wasm.js result: performance: load: null total: 552 +2022-06-02 10:38:11 STATE: test-node-wasm.js passed: warmup face result match +2022-06-02 10:38:11 STATE: test-node-wasm.js event: image +2022-06-02 10:38:11 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:11 STATE: test-node-wasm.js event: warmup +2022-06-02 10:38:11 STATE: test-node-wasm.js passed: warmup: body default +2022-06-02 10:38:11 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:11 DATA:  test-node-wasm.js result: performance: load: null total: 427 +2022-06-02 10:38:11 STATE: test-node-wasm.js passed: warmup body result match +2022-06-02 10:38:11 STATE: test-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-06-02 10:38:11 INFO:  test-node-wasm.js test: details verification +2022-06-02 10:38:11 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:11 STATE: test-node-wasm.js event: image +2022-06-02 10:38:12 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:12 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:12 DATA:  test-node-wasm.js result: performance: load: null total: 355 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details face length 1 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details face score 1 0.93 1 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details face liveness 0.83 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details body length 1 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details body 0.92 17 6 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details hand length 1 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details gesture length 7 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details object length 1 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: details object 0.72 person +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2022-06-02 10:38:12 STATE: test-node-wasm.js event: image +2022-06-02 10:38:12 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-06-02 10:38:12 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2022-06-02 10:38:13 STATE: test-node-wasm.js event: image +2022-06-02 10:38:13 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:13 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-06-02 10:38:13 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:13 STATE: test-node-wasm.js event: image +2022-06-02 10:38:14 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:14 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-06-02 10:38:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:14 STATE: test-node-wasm.js event: image +2022-06-02 10:38:14 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:14 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-06-02 10:38:14 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-06-02 10:38:14 STATE: test-node-wasm.js event: image +2022-06-02 10:38:15 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:15 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-06-02 10:38:15 INFO:  test-node-wasm.js test default +2022-06-02 10:38:15 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:15 STATE: test-node-wasm.js event: image +2022-06-02 10:38:15 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:15 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:15 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:15 DATA:  test-node-wasm.js result: performance: load: null total: 376 +2022-06-02 10:38:15 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 +2022-06-02 10:38:15 INFO:  test-node-wasm.js test sync +2022-06-02 10:38:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:16 STATE: test-node-wasm.js event: image +2022-06-02 10:38:16 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:16 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:16 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:16 DATA:  test-node-wasm.js result: performance: load: null total: 360 +2022-06-02 10:38:16 STATE: test-node-wasm.js passed: default sync 1 female 0.97 +2022-06-02 10:38:16 INFO:  test-node-wasm.js test: image process +2022-06-02 10:38:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-06-02 10:38:16 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2022-06-02 10:38:16 INFO:  test-node-wasm.js test: image null +2022-06-02 10:38:16 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor +2022-06-02 10:38:16 INFO:  test-node-wasm.js test face similarity +2022-06-02 10:38:16 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-06-02 10:38:16 STATE: test-node-wasm.js event: image +2022-06-02 10:38:16 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:16 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:38:16 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-06-02 10:38:16 DATA:  test-node-wasm.js result: performance: load: null total: 342 +2022-06-02 10:38:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:17 STATE: test-node-wasm.js event: image +2022-06-02 10:38:17 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:17 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:17 DATA:  test-node-wasm.js result: performance: load: null total: 352 +2022-06-02 10:38:17 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-06-02 10:38:17 STATE: test-node-wasm.js event: image +2022-06-02 10:38:17 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:17 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:17 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-06-02 10:38:17 DATA:  test-node-wasm.js result: performance: load: null total: 332 +2022-06-02 10:38:17 STATE: test-node-wasm.js passed: face descriptor +2022-06-02 10:38:17 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} +2022-06-02 10:38:17 INFO:  test-node-wasm.js test face matching +2022-06-02 10:38:17 STATE: test-node-wasm.js passed: face database 40 +2022-06-02 10:38:17 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} +2022-06-02 10:38:17 INFO:  test-node-wasm.js test object +2022-06-02 10:38:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:18 STATE: test-node-wasm.js event: image +2022-06-02 10:38:18 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:18 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:18 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:18 DATA:  test-node-wasm.js result: performance: load: null total: 376 +2022-06-02 10:38:18 STATE: test-node-wasm.js passed: object result match +2022-06-02 10:38:18 INFO:  test-node-wasm.js test sensitive +2022-06-02 10:38:18 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:18 STATE: test-node-wasm.js event: image +2022-06-02 10:38:19 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:19 DATA:  test-node-wasm.js result: performance: load: null total: 400 +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: sensitive result match +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: sensitive face result match +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: sensitive body result match +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: sensitive hand result match +2022-06-02 10:38:19 INFO:  test-node-wasm.js test detectors +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:19 STATE: test-node-wasm.js event: image +2022-06-02 10:38:19 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:19 DATA:  test-node-wasm.js result: performance: load: null total: 265 +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: detector result face match +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: detector result hand match +2022-06-02 10:38:19 INFO:  test-node-wasm.js test: multi-instance +2022-06-02 10:38:19 STATE: test-node-wasm.js event: image +2022-06-02 10:38:19 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: detect: random default +2022-06-02 10:38:19 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} +2022-06-02 10:38:19 DATA:  test-node-wasm.js result: performance: load: null total: 232 +2022-06-02 10:38:19 INFO:  test-node-wasm.js test: first instance +2022-06-02 10:38:19 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-06-02 10:38:20 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:20 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:20 DATA:  test-node-wasm.js result: performance: load: null total: 254 +2022-06-02 10:38:20 INFO:  test-node-wasm.js test: second instance +2022-06-02 10:38:20 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-06-02 10:38:20 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:20 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:20 DATA:  test-node-wasm.js result: performance: load: null total: 229 +2022-06-02 10:38:20 INFO:  test-node-wasm.js test: concurrent +2022-06-02 10:38:20 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-06-02 10:38:20 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-06-02 10:38:20 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-06-02 10:38:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-06-02 10:38:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-06-02 10:38:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:21 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-06-02 10:38:21 STATE: test-node-wasm.js event: image +2022-06-02 10:38:21 STATE: test-node-wasm.js event: image +2022-06-02 10:38:21 STATE: test-node-wasm.js event: image +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2190 +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2190 +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2419 +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2419 +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2419 +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2419 +2022-06-02 10:38:23 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2088 +2022-06-02 10:38:23 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:23 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2088 +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-06-02 10:38:23 DATA:  test-node-wasm.js result: performance: load: null total: 2088 +2022-06-02 10:38:23 INFO:  test-node-wasm.js test: monkey-patch +2022-06-02 10:38:23 STATE: test-node-wasm.js event: image +2022-06-02 10:38:23 STATE: test-node-wasm.js event: detect +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: monkey patch +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: segmentation [65536] +2022-06-02 10:38:23 STATE: test-node-wasm.js passeed: equal usage +2022-06-02 10:38:23 INFO:  test-node-wasm.js test: input compare +2022-06-02 10:38:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-06-02 10:38:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-06-02 10:38:24 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 +2022-06-02 10:38:24 INFO:  test-node-wasm.js events: {"image":21,"detect":21,"warmup":2} +2022-06-02 10:38:24 INFO:  test-node-wasm.js tensors 1929 +2022-06-02 10:38:24 INFO:  test-node-wasm.js test complete: 14643 ms +2022-06-02 10:38:24 INFO:  all tests complete +2022-06-02 10:38:24 INFO:  failed: {"count":0,"messages":[]} +2022-06-02 10:38:24 INFO:  status: {"test":"test-node.js","passed":101,"failed":0} +2022-06-02 10:38:24 INFO:  status: {"test":"test-node-gpu.js","passed":101,"failed":0} +2022-06-02 10:38:24 INFO:  status: {"test":"test-node-wasm.js","passed":102,"failed":0}