From 321f96289432759f96d60ba4ae017aed97fb2747 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 4 Aug 2022 09:15:13 -0400 Subject: [PATCH] update profiling methods --- CHANGELOG.md | 2 +- demo/typescript/index.html | 2 +- demo/typescript/index.js | 4 +- demo/typescript/index.js.map | 6 +- demo/typescript/index.ts | 19 +- package.json | 17 +- src/human.ts | 18 +- src/tfjs/backend.ts | 26 +- src/tfjs/humangl.ts | 2 +- src/warmup.ts | 1 + test/build.log | 48 +- test/test.log | 1368 +++++++++++++++++----------------- 12 files changed, 761 insertions(+), 752 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7b14eda..2dab53ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ ## Changelog -### **HEAD -> main** 2022/07/26 mandic00@live.com +### **HEAD -> main** 2022/07/29 mandic00@live.com ### **release: 2.9.1** 2022/07/25 mandic00@live.com diff --git a/demo/typescript/index.html b/demo/typescript/index.html index 47296bfb..a74a14bc 100644 --- a/demo/typescript/index.html +++ b/demo/typescript/index.html @@ -25,6 +25,6 @@

     

-    
+
diff --git a/demo/typescript/index.js b/demo/typescript/index.js index f01ad6bd..042f59ee 100644 --- a/demo/typescript/index.js +++ b/demo/typescript/index.js @@ -4,6 +4,6 @@ author: ' */ -import{Human as p}from"../../dist/human.esm.js";var w={async:!0,modelBasePath:"../../models",filter:{enabled:!0,equalization:!1,flip:!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")},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(u=>{e.video.onloadeddata=()=>u(!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],f=i.getCapabilities?i.getCapabilities():"",v=i.getSettings?i.getSettings():"",g=i.getConstraints?i.getConstraints():"";s("video:",e.video.videoWidth,e.video.videoHeight,i.label,{stream:n,track:i,settings:v,constraints:g,capabilities:f}),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);t.config.filter.flip?await t.draw.canvas(n.canvas,e.canvas):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("models stats:",t.getModelStats()),s("models loaded:",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,flip:!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}},e=new p(w);e.env.perfadd=!1;e.draw.options.font='small-caps 18px "Lato"';e.draw.options.lineHeight=20;var t={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("status"),perf:document.getElementById("performance")},n={detect:0,draw:0,tensors:0,start:0},o={detectFPS:0,drawFPS:0,frames:0,averageMs:0},i=(...a)=>{t.log.innerText+=a.join(" ")+` +`,console.log(...a)},r=a=>t.fps.innerText=a,b=a=>t.perf.innerText="tensors:"+e.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}}},d=await navigator.mediaDevices.getUserMedia(a),m=new Promise(u=>{t.video.onloadeddata=()=>u(!0)});t.video.srcObject=d,t.video.play(),await m,t.canvas.width=t.video.videoWidth,t.canvas.height=t.video.videoHeight;let s=d.getVideoTracks()[0],f=s.getCapabilities?s.getCapabilities():"",v=s.getSettings?s.getSettings():"",g=s.getConstraints?s.getConstraints():"";i("video:",t.video.videoWidth,t.video.videoHeight,s.label,{stream:d,track:s,settings:v,constraints:g,capabilities:f}),t.canvas.onclick=()=>{t.video.paused?t.video.play():t.video.pause()}}async function c(){if(!t.video.paused){n.start===0&&(n.start=e.now()),await e.detect(t.video);let a=e.tf.memory().numTensors;a-n.tensors!==0&&i("allocated tensors:",a-n.tensors),n.tensors=a,o.detectFPS=Math.round(1e3*1e3/(e.now()-n.detect))/1e3,o.frames++,o.averageMs=Math.round(1e3*(e.now()-n.start)/o.frames)/1e3,o.frames%100===0&&!t.video.paused&&i("performance",{...o,tensors:n.tensors})}n.detect=e.now(),requestAnimationFrame(c)}async function l(){if(!t.video.paused){let d=await e.next(e.result);e.config.filter.flip?await e.draw.canvas(d.canvas,t.canvas):await e.draw.canvas(t.video,t.canvas),await e.draw.all(t.canvas,d),b(d.performance)}let a=e.now();o.drawFPS=Math.round(1e3*1e3/(a-n.draw))/1e3,n.draw=a,r(t.video.paused?"paused":`fps: ${o.detectFPS.toFixed(1).padStart(5," ")} detect | ${o.drawFPS.toFixed(1).padStart(5," ")} draw`),setTimeout(l,30)}async function M(){i("human version:",e.version,"| tfjs version:",e.tf.version["tfjs-core"]),i("platform:",e.env.platform,"| agent:",e.env.agent),r("loading..."),await e.load(),i("backend:",e.tf.getBackend(),"| available:",e.env.backends),i("models stats:",e.getModelStats()),i("models loaded:",Object.values(e.models).filter(a=>a!==null).length),r("initializing..."),await e.warmup(),await h(),await c(),await l()}window.onload=M; //# sourceMappingURL=index.js.map diff --git a/demo/typescript/index.js.map b/demo/typescript/index.js.map index 3f5a5d0c..f410639d 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: 'wasm' 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, flip: 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// human.draw.options.fillPolygons = true;\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 if (human.config.filter.flip) await human.draw.canvas(interpolated.canvas as HTMLCanvasElement, dom.canvas); // draw processed image to screen canvas\n else await human.draw.canvas(dom.video, dom.canvas); // draw original video to screen canvas // better than using procesed image as this loop happens faster than processing loop\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('models stats:', human.getModelStats());\n log('models loaded:', 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,OAAS,SAAAA,MAAqB,0BAE9B,IAAMC,EAA+B,CAInC,MAAO,GACP,cAAe,eACf,OAAQ,CAAE,QAAS,GAAM,aAAc,GAAO,KAAM,EAAM,EAC1D,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,EAEMC,EAAQ,IAAIF,EAAMC,CAAW,EAEnCC,EAAM,IAAI,QAAa,GACvBA,EAAM,KAAK,QAAQ,KAAO,yBAC1BA,EAAM,KAAK,QAAQ,WAAa,GAGhC,IAAMC,EAAM,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,EACMC,EAAY,CAAE,OAAQ,EAAG,KAAM,EAAG,QAAS,CAAE,EAC7CC,EAAM,CAAE,OAAQ,EAAG,KAAM,CAAE,EAE3BC,EAAM,IAAIC,IAAQ,CACtBJ,EAAI,IAAI,WAAaI,EAAI,KAAK,GAAG,EAAI;AAAA,EAErC,QAAQ,IAAI,GAAGA,CAAG,CACpB,EACMC,EAAUD,GAAQJ,EAAI,IAAI,UAAYI,EACtCE,EAAQF,GAAQJ,EAAI,KAAK,UAAY,WAAaD,EAAM,GAAG,OAAO,EAAE,WAAa,mBAAqB,KAAK,UAAUK,CAAG,EAAE,QAAQ,SAAU,EAAE,EAAE,QAAQ,KAAM,KAAK,EAEzK,eAAeG,GAAS,CACtBF,EAAO,oBAAoB,EAE3B,IAAMG,EAAkC,CAAE,MAAO,GAAO,MAAO,CAAE,WAAY,OAAQ,WAAY,OAAQ,MAAO,CAAE,MAAO,SAAS,KAAK,WAAY,EAAG,OAAQ,CAAE,MAAO,SAAS,KAAK,YAAa,CAAE,CAAE,EAChMC,EAAsB,MAAM,UAAU,aAAa,aAAaD,CAAO,EACvEE,EAAQ,IAAI,QAASC,GAAY,CAAEX,EAAI,MAAM,aAAe,IAAMW,EAAQ,EAAI,CAAG,CAAC,EACxFX,EAAI,MAAM,UAAYS,EACtBT,EAAI,MAAM,KAAK,EACf,MAAMU,EACNV,EAAI,OAAO,MAAQA,EAAI,MAAM,WAC7BA,EAAI,OAAO,OAASA,EAAI,MAAM,YAC9B,IAAMY,EAA0BH,EAAO,eAAe,EAAE,GAClDI,EAAgDD,EAAM,gBAAkBA,EAAM,gBAAgB,EAAI,GAClGE,EAAwCF,EAAM,YAAcA,EAAM,YAAY,EAAI,GAClFG,EAA8CH,EAAM,eAAiBA,EAAM,eAAe,EAAI,GACpGT,EAAI,SAAUH,EAAI,MAAM,WAAYA,EAAI,MAAM,YAAaY,EAAM,MAAO,CAAE,OAAAH,EAAQ,MAAAG,EAAO,SAAAE,EAAU,YAAAC,EAAa,aAAAF,CAAa,CAAC,EAC9Hb,EAAI,OAAO,QAAU,IAAM,CACrBA,EAAI,MAAM,OAAQA,EAAI,MAAM,KAAK,EAChCA,EAAI,MAAM,MAAM,CACvB,CACF,CAEA,eAAegB,GAAgB,CAC7B,GAAI,CAAChB,EAAI,MAAM,OAAQ,CAErB,MAAMD,EAAM,OAAOC,EAAI,KAAK,EAC5B,IAAMiB,EAAUlB,EAAM,GAAG,OAAO,EAAE,WAC9BkB,EAAUhB,EAAU,UAAY,GAAGE,EAAI,qBAAsBc,EAAUhB,EAAU,OAAO,EAC5FA,EAAU,QAAUgB,CACtB,CACA,IAAMC,EAAMnB,EAAM,IAAI,EACtBG,EAAI,OAAS,KAAQgB,EAAMjB,EAAU,QACrCA,EAAU,OAASiB,EACnB,sBAAsBF,CAAa,CACrC,CAEA,eAAeG,GAAW,CACxB,GAAI,CAACnB,EAAI,MAAM,OAAQ,CACrB,IAAMoB,EAAe,MAAMrB,EAAM,KAAKA,EAAM,MAAM,EAC9CA,EAAM,OAAO,OAAO,KAAM,MAAMA,EAAM,KAAK,OAAOqB,EAAa,OAA6BpB,EAAI,MAAM,EACrG,MAAMD,EAAM,KAAK,OAAOC,EAAI,MAAOA,EAAI,MAAM,EAClD,MAAMD,EAAM,KAAK,IAAIC,EAAI,OAAQoB,CAAY,EAC7Cd,EAAKc,EAAa,WAAW,CAC/B,CACA,IAAMF,EAAMnB,EAAM,IAAI,EACtBG,EAAI,KAAO,KAAQgB,EAAMjB,EAAU,MACnCA,EAAU,KAAOiB,EACjBb,EAAOL,EAAI,MAAM,OAAS,SAAW,QAAQE,EAAI,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,cAAcA,EAAI,KAAK,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,QAAQ,EAE3I,WAAWiB,EAAU,EAAE,CACzB,CAEA,eAAeE,GAAO,CACpBlB,EAAI,iBAAkBJ,EAAM,QAAS,kBAAmBA,EAAM,GAAG,QAAQ,YAAY,EACrFI,EAAI,YAAaJ,EAAM,IAAI,SAAU,WAAYA,EAAM,IAAI,KAAK,EAChEM,EAAO,YAAY,EACnB,MAAMN,EAAM,KAAK,EACjBI,EAAI,WAAYJ,EAAM,GAAG,WAAW,EAAG,eAAgBA,EAAM,IAAI,QAAQ,EACzEI,EAAI,gBAAiBJ,EAAM,cAAc,CAAC,EAC1CI,EAAI,iBAAkB,OAAO,OAAOJ,EAAM,MAAM,EAAE,OAAQuB,GAAUA,IAAU,IAAI,EAAE,MAAM,EAC1FjB,EAAO,iBAAiB,EACxB,MAAMN,EAAM,OAAO,EACnB,MAAMQ,EAAO,EACb,MAAMS,EAAc,EACpB,MAAMG,EAAS,CACjB,CAEA,OAAO,OAASE", - "names": ["Human", "humanConfig", "human", "dom", "timestamp", "fps", "log", "msg", "status", "perf", "webCam", "options", "stream", "ready", "resolve", "track", "capabilities", "settings", "constraints", "detectionLoop", "tensors", "now", "drawLoop", "interpolated", "main", "model"] + "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: 'wasm' 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, flip: 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// human.draw.options.fillPolygons = true;\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, start: 0 }; // holds information used to calculate performance and possible memory leaks\nconst fps = { detectFPS: 0, drawFPS: 0, frames: 0, averageMs: 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 if (timestamp.start === 0) timestamp.start = human.now();\n // 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 fps.detectFPS = Math.round(1000 * 1000 / (human.now() - timestamp.detect)) / 1000;\n fps.frames++;\n fps.averageMs = Math.round(1000 * (human.now() - timestamp.start) / fps.frames) / 1000;\n if (fps.frames % 100 === 0 && !dom.video.paused) log('performance', { ...fps, tensors: timestamp.tensors });\n }\n timestamp.detect = human.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 if (human.config.filter.flip) await human.draw.canvas(interpolated.canvas as HTMLCanvasElement, dom.canvas); // draw processed image to screen canvas\n else await human.draw.canvas(dom.video, dom.canvas); // draw original video to screen canvas // better than using procesed image as this loop happens faster than processing loop\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.drawFPS = Math.round(1000 * 1000 / (now - timestamp.draw)) / 1000;\n timestamp.draw = now;\n status(dom.video.paused ? 'paused' : `fps: ${fps.detectFPS.toFixed(1).padStart(5, ' ')} detect | ${fps.drawFPS.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('models stats:', human.getModelStats());\n log('models loaded:', 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,OAAS,SAAAA,MAAqB,0BAE9B,IAAMC,EAA+B,CAInC,MAAO,GACP,cAAe,eACf,OAAQ,CAAE,QAAS,GAAM,aAAc,GAAO,KAAM,EAAM,EAC1D,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,EAEMC,EAAQ,IAAIF,EAAMC,CAAW,EAEnCC,EAAM,IAAI,QAAa,GACvBA,EAAM,KAAK,QAAQ,KAAO,yBAC1BA,EAAM,KAAK,QAAQ,WAAa,GAGhC,IAAMC,EAAM,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,EACMC,EAAY,CAAE,OAAQ,EAAG,KAAM,EAAG,QAAS,EAAG,MAAO,CAAE,EACvDC,EAAM,CAAE,UAAW,EAAG,QAAS,EAAG,OAAQ,EAAG,UAAW,CAAE,EAE1DC,EAAM,IAAIC,IAAQ,CACtBJ,EAAI,IAAI,WAAaI,EAAI,KAAK,GAAG,EAAI;AAAA,EAErC,QAAQ,IAAI,GAAGA,CAAG,CACpB,EACMC,EAAUD,GAAQJ,EAAI,IAAI,UAAYI,EACtCE,EAAQF,GAAQJ,EAAI,KAAK,UAAY,WAAaD,EAAM,GAAG,OAAO,EAAE,WAAa,mBAAqB,KAAK,UAAUK,CAAG,EAAE,QAAQ,SAAU,EAAE,EAAE,QAAQ,KAAM,KAAK,EAEzK,eAAeG,GAAS,CACtBF,EAAO,oBAAoB,EAE3B,IAAMG,EAAkC,CAAE,MAAO,GAAO,MAAO,CAAE,WAAY,OAAQ,WAAY,OAAQ,MAAO,CAAE,MAAO,SAAS,KAAK,WAAY,EAAG,OAAQ,CAAE,MAAO,SAAS,KAAK,YAAa,CAAE,CAAE,EAChMC,EAAsB,MAAM,UAAU,aAAa,aAAaD,CAAO,EACvEE,EAAQ,IAAI,QAASC,GAAY,CAAEX,EAAI,MAAM,aAAe,IAAMW,EAAQ,EAAI,CAAG,CAAC,EACxFX,EAAI,MAAM,UAAYS,EACtBT,EAAI,MAAM,KAAK,EACf,MAAMU,EACNV,EAAI,OAAO,MAAQA,EAAI,MAAM,WAC7BA,EAAI,OAAO,OAASA,EAAI,MAAM,YAC9B,IAAMY,EAA0BH,EAAO,eAAe,EAAE,GAClDI,EAAgDD,EAAM,gBAAkBA,EAAM,gBAAgB,EAAI,GAClGE,EAAwCF,EAAM,YAAcA,EAAM,YAAY,EAAI,GAClFG,EAA8CH,EAAM,eAAiBA,EAAM,eAAe,EAAI,GACpGT,EAAI,SAAUH,EAAI,MAAM,WAAYA,EAAI,MAAM,YAAaY,EAAM,MAAO,CAAE,OAAAH,EAAQ,MAAAG,EAAO,SAAAE,EAAU,YAAAC,EAAa,aAAAF,CAAa,CAAC,EAC9Hb,EAAI,OAAO,QAAU,IAAM,CACrBA,EAAI,MAAM,OAAQA,EAAI,MAAM,KAAK,EAChCA,EAAI,MAAM,MAAM,CACvB,CACF,CAEA,eAAegB,GAAgB,CAC7B,GAAI,CAAChB,EAAI,MAAM,OAAQ,CACjBC,EAAU,QAAU,IAAGA,EAAU,MAAQF,EAAM,IAAI,GAEvD,MAAMA,EAAM,OAAOC,EAAI,KAAK,EAC5B,IAAMiB,EAAUlB,EAAM,GAAG,OAAO,EAAE,WAC9BkB,EAAUhB,EAAU,UAAY,GAAGE,EAAI,qBAAsBc,EAAUhB,EAAU,OAAO,EAC5FA,EAAU,QAAUgB,EACpBf,EAAI,UAAY,KAAK,MAAM,IAAO,KAAQH,EAAM,IAAI,EAAIE,EAAU,OAAO,EAAI,IAC7EC,EAAI,SACJA,EAAI,UAAY,KAAK,MAAM,KAAQH,EAAM,IAAI,EAAIE,EAAU,OAASC,EAAI,MAAM,EAAI,IAC9EA,EAAI,OAAS,MAAQ,GAAK,CAACF,EAAI,MAAM,QAAQG,EAAI,cAAe,CAAE,GAAGD,EAAK,QAASD,EAAU,OAAQ,CAAC,CAC5G,CACAA,EAAU,OAASF,EAAM,IAAI,EAC7B,sBAAsBiB,CAAa,CACrC,CAEA,eAAeE,GAAW,CACxB,GAAI,CAAClB,EAAI,MAAM,OAAQ,CACrB,IAAMmB,EAAe,MAAMpB,EAAM,KAAKA,EAAM,MAAM,EAC9CA,EAAM,OAAO,OAAO,KAAM,MAAMA,EAAM,KAAK,OAAOoB,EAAa,OAA6BnB,EAAI,MAAM,EACrG,MAAMD,EAAM,KAAK,OAAOC,EAAI,MAAOA,EAAI,MAAM,EAClD,MAAMD,EAAM,KAAK,IAAIC,EAAI,OAAQmB,CAAY,EAC7Cb,EAAKa,EAAa,WAAW,CAC/B,CACA,IAAMC,EAAMrB,EAAM,IAAI,EACtBG,EAAI,QAAU,KAAK,MAAM,IAAO,KAAQkB,EAAMnB,EAAU,KAAK,EAAI,IACjEA,EAAU,KAAOmB,EACjBf,EAAOL,EAAI,MAAM,OAAS,SAAW,QAAQE,EAAI,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,cAAcA,EAAI,QAAQ,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,QAAQ,EAEjJ,WAAWgB,EAAU,EAAE,CACzB,CAEA,eAAeG,GAAO,CACpBlB,EAAI,iBAAkBJ,EAAM,QAAS,kBAAmBA,EAAM,GAAG,QAAQ,YAAY,EACrFI,EAAI,YAAaJ,EAAM,IAAI,SAAU,WAAYA,EAAM,IAAI,KAAK,EAChEM,EAAO,YAAY,EACnB,MAAMN,EAAM,KAAK,EACjBI,EAAI,WAAYJ,EAAM,GAAG,WAAW,EAAG,eAAgBA,EAAM,IAAI,QAAQ,EACzEI,EAAI,gBAAiBJ,EAAM,cAAc,CAAC,EAC1CI,EAAI,iBAAkB,OAAO,OAAOJ,EAAM,MAAM,EAAE,OAAQuB,GAAUA,IAAU,IAAI,EAAE,MAAM,EAC1FjB,EAAO,iBAAiB,EACxB,MAAMN,EAAM,OAAO,EACnB,MAAMQ,EAAO,EACb,MAAMS,EAAc,EACpB,MAAME,EAAS,CACjB,CAEA,OAAO,OAASG", + "names": ["Human", "humanConfig", "human", "dom", "timestamp", "fps", "log", "msg", "status", "perf", "webCam", "options", "stream", "ready", "resolve", "track", "capabilities", "settings", "constraints", "detectionLoop", "tensors", "drawLoop", "interpolated", "now", "main", "model"] } diff --git a/demo/typescript/index.ts b/demo/typescript/index.ts index ca7f28c8..4107cd10 100644 --- a/demo/typescript/index.ts +++ b/demo/typescript/index.ts @@ -37,8 +37,8 @@ const dom = { // grab instances of dom objects so we dont have to look them up l fps: document.getElementById('status') as HTMLPreElement, perf: document.getElementById('performance') as HTMLDivElement, }; -const timestamp = { detect: 0, draw: 0, tensors: 0 }; // holds information used to calculate performance and possible memory leaks -const fps = { detect: 0, draw: 0 }; // holds calculated fps information for both detect and screen refresh +const timestamp = { detect: 0, draw: 0, tensors: 0, start: 0 }; // holds information used to calculate performance and possible memory leaks +const fps = { detectFPS: 0, drawFPS: 0, frames: 0, averageMs: 0 }; // holds calculated fps information for both detect and screen refresh const log = (...msg) => { // helper method to output messages dom.log.innerText += msg.join(' ') + '\n'; @@ -72,15 +72,18 @@ async function webCam() { // initialize webcam async function detectionLoop() { // main detection loop if (!dom.video.paused) { - // console.log('profiling data:', await human.profile(dom.video)); + if (timestamp.start === 0) timestamp.start = human.now(); + // log('profiling data:', await human.profile(dom.video)); await human.detect(dom.video); // actual detection; were not capturing output in a local variable as it can also be reached via human.result const tensors = human.tf.memory().numTensors; // check current tensor usage for memory leaks if (tensors - timestamp.tensors !== 0) log('allocated tensors:', tensors - timestamp.tensors); // printed on start and each time there is a tensor leak timestamp.tensors = tensors; + fps.detectFPS = Math.round(1000 * 1000 / (human.now() - timestamp.detect)) / 1000; + fps.frames++; + fps.averageMs = Math.round(1000 * (human.now() - timestamp.start) / fps.frames) / 1000; + if (fps.frames % 100 === 0 && !dom.video.paused) log('performance', { ...fps, tensors: timestamp.tensors }); } - const now = human.now(); - fps.detect = 1000 / (now - timestamp.detect); - timestamp.detect = now; + timestamp.detect = human.now(); requestAnimationFrame(detectionLoop); // start new frame immediately } @@ -93,9 +96,9 @@ async function drawLoop() { // main screen refresh loop perf(interpolated.performance); // write performance data } const now = human.now(); - fps.draw = 1000 / (now - timestamp.draw); + fps.drawFPS = Math.round(1000 * 1000 / (now - timestamp.draw)) / 1000; timestamp.draw = now; - status(dom.video.paused ? 'paused' : `fps: ${fps.detect.toFixed(1).padStart(5, ' ')} detect | ${fps.draw.toFixed(1).padStart(5, ' ')} draw`); // write status + status(dom.video.paused ? 'paused' : `fps: ${fps.detectFPS.toFixed(1).padStart(5, ' ')} detect | ${fps.drawFPS.toFixed(1).padStart(5, ' ')} draw`); // write status // requestAnimationFrame(drawLoop); // refresh at screen refresh rate setTimeout(drawLoop, 30); // use to slow down refresh from max refresh rate to target of 30 fps } diff --git a/package.json b/package.json index 092bf647..0ae4e747 100644 --- a/package.json +++ b/package.json @@ -55,11 +55,11 @@ ], "optionalDependencies": { "canvas": "^2.9.3", - "node-fetch": "^3.2.9", + "node-fetch": "^3.2.10", "node-webcam": "^0.8.1" }, "devDependencies": { - "@microsoft/api-extractor": "^7.28.6", + "@microsoft/api-extractor": "^7.29.0", "@tensorflow/tfjs": "^3.19.0", "@tensorflow/tfjs-backend-cpu": "^3.19.0", "@tensorflow/tfjs-backend-wasm": "^3.19.0", @@ -72,15 +72,16 @@ "@tensorflow/tfjs-node": "^3.19.0", "@tensorflow/tfjs-node-gpu": "^3.19.0", "@tensorflow/tfjs-tflite": "0.0.1-alpha.8", - "@types/node": "^18.6.2", + "@types/node": "^18.6.3", "@types/offscreencanvas": "^2019.7.0", - "@typescript-eslint/eslint-plugin": "^5.31.0", - "@typescript-eslint/parser": "^5.31.0", + "@typescript-eslint/eslint-plugin": "^5.32.0", + "@typescript-eslint/parser": "^5.32.0", "@vladmandic/build": "^0.7.8", "@vladmandic/pilogger": "^0.4.5", "@vladmandic/tfjs": "github:vladmandic/tfjs", - "esbuild": "^0.14.51", - "eslint": "8.20.0", + "@webgpu/types": "^0.1.21", + "esbuild": "^0.14.53", + "eslint": "8.21.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-html": "^7.1.0", "eslint-plugin-import": "^2.26.0", @@ -90,7 +91,7 @@ "rimraf": "^3.0.2", "seedrandom": "^3.0.5", "tslib": "^2.4.0", - "typedoc": "0.23.9", + "typedoc": "0.23.10", "typescript": "4.7.4" } } diff --git a/src/human.ts b/src/human.ts index 2873e276..d27e9cff 100644 --- a/src/human.ts +++ b/src/human.ts @@ -350,20 +350,24 @@ export class Human { * - result object will contain total exeuction time information for top-20 kernels * - actual detection object can be accessed via `human.result` */ - async profile(input: Input, userConfig?: Partial): Promise> { + async profile(input: Input, userConfig?: Partial): Promise> { const profile = await this.tf.profile(() => this.detect(input, userConfig)); const kernels: Record = {}; + let total = 0; for (const kernel of profile.kernels) { // sum kernel time values per kernel if (kernels[kernel.name]) kernels[kernel.name] += kernel.kernelTimeMs; else kernels[kernel.name] = kernel.kernelTimeMs; + total += kernel.kernelTimeMs; } - const kernelArr: Array<{ name: string, ms: number }> = []; - Object.entries(kernels).forEach((key) => kernelArr.push({ name: key[0], ms: key[1] as unknown as number })); // convert to array - kernelArr.sort((a, b) => b.ms - a.ms); // sort + const kernelArr: Array<{ kernel: string, time: number, perc: number }> = []; + Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1] as unknown as number, perc: 0 })); // convert to array + for (const kernel of kernelArr) { + kernel.perc = Math.round(1000 * kernel.time / total) / 1000; + kernel.time = Math.round(1000 * kernel.time) / 1000; + } + kernelArr.sort((a, b) => b.time - a.time); // sort kernelArr.length = 20; // crop - const res: Record = {}; - for (const kernel of kernelArr) res[kernel.name] = kernel.ms; // create perf objects - return res; + return kernelArr; } /** Main detection method diff --git a/src/tfjs/backend.ts b/src/tfjs/backend.ts index 1b9421ad..908ea234 100644 --- a/src/tfjs/backend.ts +++ b/src/tfjs/backend.ts @@ -86,9 +86,7 @@ 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 (tf.env().flagRegistry['CANVAS2D_WILL_READ_FREQUENTLY']) tf.env().set('CANVAS2D_WILL_READ_FREQUENTLY', true); 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'); @@ -110,15 +108,17 @@ export async function check(instance: Human, force = false) { // customize humangl if (tf.getBackend() === 'humangl') { - tf.ENV.set('CHECK_COMPUTATION_FOR_ERRORS', false); - tf.ENV.set('WEBGL_CPU_FORWARD', true); - // tf.ENV.set('WEBGL_PACK_DEPTHWISECONV', false); - tf.ENV.set('WEBGL_USE_SHAPES_UNIFORMS', true); - tf.ENV.set('CPU_HANDOFF_SIZE_THRESHOLD', 256); - // if (!instance.config.object.enabled) tf.ENV.set('WEBGL_FORCE_F16_TEXTURES', true); // safe to use 16bit precision + if (tf.env().flagRegistry['CHECK_COMPUTATION_FOR_ERRORS']) tf.env().set('CHECK_COMPUTATION_FOR_ERRORS', false); + if (tf.env().flagRegistry['WEBGL_CPU_FORWARD']) tf.env().set('WEBGL_CPU_FORWARD', true); + if (tf.env().flagRegistry['WEBGL_USE_SHAPES_UNIFORMS']) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', true); + if (tf.env().flagRegistry['CPU_HANDOFF_SIZE_THRESHOLD']) tf.env().set('CPU_HANDOFF_SIZE_THRESHOLD', 256); + if (tf.env().flagRegistry['WEBGL_EXP_CONV']) tf.env().set('WEBGL_EXP_CONV', true); // + if (tf.env().flagRegistry['USE_SETTIMEOUTWPM']) tf.env().set('USE_SETTIMEOUTWPM', true); // + // if (tf.env().flagRegistry['WEBGL_PACK_DEPTHWISECONV']) tf.env().set('WEBGL_PACK_DEPTHWISECONV', false); + // if (if (tf.env().flagRegistry['WEBGL_FORCE_F16_TEXTURES']) && !instance.config.object.enabled) tf.env().set('WEBGL_FORCE_F16_TEXTURES', true); // safe to use 16bit precision if (typeof instance.config['deallocate'] !== 'undefined' && instance.config['deallocate']) { // hidden param log('changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:', true); - tf.ENV.set('WEBGL_DELETE_TEXTURE_THRESHOLD', 0); + tf.env().set('WEBGL_DELETE_TEXTURE_THRESHOLD', 0); } if (tf.backend().getGPGPUContext) { const gl = await tf.backend().getGPGPUContext().gl; @@ -128,9 +128,9 @@ export async function check(instance: Human, force = false) { // customize webgpu if (tf.getBackend() === 'webgpu') { - // tf.ENV.set('WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD', 512); - // tf.ENV.set('WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE', 0); - // tf.ENV.set('WEBGPU_CPU_FORWARD', true); + // if (tf.env().flagRegistry['WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD']) tf.env().set('WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD', 512); + // if (tf.env().flagRegistry['WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE']) tf.env().set('WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE', 0); + // if (tf.env().flagRegistry['WEBGPU_CPU_FORWARD']) tf.env().set('WEBGPU_CPU_FORWARD', true); } // wait for ready diff --git a/src/tfjs/humangl.ts b/src/tfjs/humangl.ts index 912d27fb..3757b70e 100644 --- a/src/tfjs/humangl.ts +++ b/src/tfjs/humangl.ts @@ -123,7 +123,7 @@ export async function register(instance: Human): Promise { return; } try { - tf.ENV.set('WEBGL_VERSION', 2); + if (tf.env().flagRegistry['WEBGL_VERSION']) tf.env().set('WEBGL_VERSION', 2); } catch (err) { log('error: cannot set WebGL backend flags:', err); return; diff --git a/src/warmup.ts b/src/warmup.ts index 9ad08bd7..c01cfe37 100644 --- a/src/warmup.ts +++ b/src/warmup.ts @@ -109,6 +109,7 @@ async function runInference(instance: Human) { /** Runs pre-compile on all loaded models */ export async function runCompile(allModels: Models) { + if (!tf.env().flagRegistry['ENGINE_COMPILE_ONLY']) return; // tfjs does not support compile-only inference const backendType = tf.getBackend(); const webGLBackend = tf.backend(); if ((backendType !== 'webgl' && backendType !== 'humangl') || (!webGLBackend || !webGLBackend.checkCompileCompletion)) { diff --git a/test/build.log b/test/build.log index b90a0546..efeb664e 100644 --- a/test/build.log +++ b/test/build.log @@ -1,24 +1,24 @@ -2022-07-29 09:21:22 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.1"} -2022-07-29 09:21:22 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-07-29 09:21:22 INFO:  Toolchain: {"build":"0.7.8","esbuild":"0.14.51","typescript":"4.7.4","typedoc":"0.23.9","eslint":"8.20.0"} -2022-07-29 09:21:22 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-07-29 09:21:22 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} -2022-07-29 09:21:22 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":608} -2022-07-29 09:21:22 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":74,"inputBytes":647939,"outputBytes":303804} -2022-07-29 09:21:22 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":612} -2022-07-29 09:21:22 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":74,"inputBytes":647943,"outputBytes":303808} -2022-07-29 09:21:22 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":664} -2022-07-29 09:21:22 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":74,"inputBytes":647995,"outputBytes":303858} -2022-07-29 09:21:22 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-07-29 09:21:22 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-07-29 09:21:22 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":74,"inputBytes":647914,"outputBytes":302683} -2022-07-29 09:21:22 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1271,"outputBytes":2787569} -2022-07-29 09:21:22 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":74,"inputBytes":3434900,"outputBytes":1665591} -2022-07-29 09:21:22 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":74,"inputBytes":3434900,"outputBytes":3066202} -2022-07-29 09:21:29 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} -2022-07-29 09:21:31 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":76,"generated":true} -2022-07-29 09:21:31 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6414,"outputBytes":2878} -2022-07-29 09:21:31 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15174,"outputBytes":7604} -2022-07-29 09:21:40 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":107,"errors":0,"warnings":0} -2022-07-29 09:21:40 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-07-29 09:21:40 INFO:  Done... +2022-08-04 09:11:15 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.1"} +2022-08-04 09:11:15 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-08-04 09:11:15 INFO:  Toolchain: {"build":"0.7.8","esbuild":"0.14.53","typescript":"4.7.4","typedoc":"0.23.10","eslint":"8.21.0"} +2022-08-04 09:11:15 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-08-04 09:11:15 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} +2022-08-04 09:11:15 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":608} +2022-08-04 09:11:15 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":74,"inputBytes":649269,"outputBytes":304361} +2022-08-04 09:11:15 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":612} +2022-08-04 09:11:15 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":74,"inputBytes":649273,"outputBytes":304365} +2022-08-04 09:11:15 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":664} +2022-08-04 09:11:15 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":74,"inputBytes":649325,"outputBytes":304415} +2022-08-04 09:11:15 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-08-04 09:11:15 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-08-04 09:11:15 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":74,"inputBytes":649244,"outputBytes":303238} +2022-08-04 09:11:15 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1271,"outputBytes":2787569} +2022-08-04 09:11:15 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":74,"inputBytes":3436230,"outputBytes":1666096} +2022-08-04 09:11:16 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":74,"inputBytes":3436230,"outputBytes":3066923} +2022-08-04 09:11:22 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} +2022-08-04 09:11:25 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":76,"generated":true} +2022-08-04 09:11:25 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6787,"outputBytes":3141} +2022-08-04 09:11:25 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15174,"outputBytes":7604} +2022-08-04 09:11:35 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":107,"errors":0,"warnings":0} +2022-08-04 09:11:35 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-08-04 09:11:35 INFO:  Done... diff --git a/test/test.log b/test/test.log index 8e64e263..c8617008 100644 --- a/test/test.log +++ b/test/test.log @@ -1,684 +1,684 @@ -2022-07-29 09:22:56 INFO:  @vladmandic/human version 2.9.1 -2022-07-29 09:22:56 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.15.0 -2022-07-29 09:22:56 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2022-07-29 09:22: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-07-29 09:22:56 INFO:  -2022-07-29 09:22:56 INFO:  test-node.js start -2022-07-29 09:22:56 INFO:  test-node.js test: configuration validation -2022-07-29 09:22:56 STATE: test-node.js passed: configuration default validation [] -2022-07-29 09:22:56 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-07-29 09:22:56 INFO:  test-node.js test: model load -2022-07-29 09:22: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-07-29 09:22:56 INFO:  test-node.js test: warmup -2022-07-29 09:22:56 STATE: test-node.js passed: create human -2022-07-29 09:22:56 INFO:  test-node.js human version: 2.9.1 -2022-07-29 09:22:56 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.15.0 -2022-07-29 09:22:56 INFO:  test-node.js tfjs version: 3.19.0 -2022-07-29 09:22:56 INFO:  test-node.js tensorflow binding version: 2.7.3-dev20220521 -2022-07-29 09:22:56 STATE: test-node.js passed: set backend: tensorflow -2022-07-29 09:22:56 STATE: test-node.js tensors 1921 -2022-07-29 09:22:56 STATE: test-node.js passed: load models -2022-07-29 09:22:56 STATE: test-node.js result: defined models: 22 loaded models: 12 -2022-07-29 09:22:56 STATE: test-node.js passed: warmup: none default -2022-07-29 09:22:56 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-07-29 09:22:56 DATA:  test-node.js result: performance: load: null total: null -2022-07-29 09:22:56 STATE: test-node.js passed: warmup none result match -2022-07-29 09:22:56 STATE: test-node.js event: image -2022-07-29 09:22:56 STATE: test-node.js event: detect -2022-07-29 09:22:56 STATE: test-node.js event: warmup -2022-07-29 09:22:56 STATE: test-node.js passed: warmup: face default -2022-07-29 09:22: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-07-29 09:22:56 DATA:  test-node.js result: performance: load: null total: 332 -2022-07-29 09:22:56 STATE: test-node.js passed: warmup face result match -2022-07-29 09:22:56 STATE: test-node.js event: image -2022-07-29 09:22:57 STATE: test-node.js event: detect -2022-07-29 09:22:57 STATE: test-node.js event: warmup -2022-07-29 09:22:57 STATE: test-node.js passed: warmup: body default -2022-07-29 09:22: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-07-29 09:22:57 DATA:  test-node.js result: performance: load: null total: 253 -2022-07-29 09:22:57 STATE: test-node.js passed: warmup body result match -2022-07-29 09:22: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-07-29 09:22:57 INFO:  test-node.js test: details verification -2022-07-29 09:22:57 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:22:57 STATE: test-node.js event: image -2022-07-29 09:22:57 STATE: test-node.js event: detect -2022-07-29 09:22:57 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:22: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-07-29 09:22:57 DATA:  test-node.js result: performance: load: null total: 246 -2022-07-29 09:22:57 STATE: test-node.js passed: details face length 1 -2022-07-29 09:22:57 STATE: test-node.js passed: details face score 1 0.93 1 -2022-07-29 09:22:57 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-07-29 09:22:57 STATE: test-node.js passed: details face arrays 4 478 1024 -2022-07-29 09:22:57 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-07-29 09:22:57 STATE: test-node.js passed: details face anti-spoofing 0.79 -2022-07-29 09:22:57 STATE: test-node.js passed: details face liveness 0.83 -2022-07-29 09:22:57 STATE: test-node.js passed: details body length 1 -2022-07-29 09:22:57 STATE: test-node.js passed: details body 0.92 17 6 -2022-07-29 09:22:57 STATE: test-node.js passed: details hand length 1 -2022-07-29 09:22:57 STATE: test-node.js passed: details hand 0.51 0.73 point -2022-07-29 09:22:57 STATE: test-node.js passed: details hand arrays 21 5 7 -2022-07-29 09:22:57 STATE: test-node.js passed: details gesture length 7 -2022-07-29 09:22:57 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-07-29 09:22:57 STATE: test-node.js passed: details object length 1 -2022-07-29 09:22:57 STATE: test-node.js passed: details object 0.72 person -2022-07-29 09:22:57 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-07-29 09:22:57 STATE: test-node.js event: image -2022-07-29 09:22:58 STATE: test-node.js event: detect -2022-07-29 09:22:58 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-07-29 09:22:58 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-07-29 09:22:58 STATE: test-node.js event: image -2022-07-29 09:22:58 STATE: test-node.js event: detect -2022-07-29 09:22:58 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-07-29 09:22:58 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:22:58 STATE: test-node.js event: image -2022-07-29 09:22:59 STATE: test-node.js event: detect -2022-07-29 09:22:59 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-07-29 09:22:59 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2022-07-29 09:22:59 STATE: test-node.js event: image -2022-07-29 09:22:59 STATE: test-node.js event: detect -2022-07-29 09:22:59 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-07-29 09:22:59 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-07-29 09:22:59 STATE: test-node.js event: image -2022-07-29 09:23:00 STATE: test-node.js event: detect -2022-07-29 09:23:00 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-07-29 09:23:00 INFO:  test-node.js test default -2022-07-29 09:23:00 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:00 STATE: test-node.js event: image -2022-07-29 09:23:00 STATE: test-node.js event: detect -2022-07-29 09:23:00 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:00 DATA:  test-node.js result: performance: load: null total: 227 -2022-07-29 09:23:00 STATE: test-node.js passed: default result face match 1 female 0.97 -2022-07-29 09:23:00 INFO:  test-node.js test sync -2022-07-29 09:23:00 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:00 STATE: test-node.js event: image -2022-07-29 09:23:00 STATE: test-node.js event: detect -2022-07-29 09:23:00 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:00 DATA:  test-node.js result: performance: load: null total: 213 -2022-07-29 09:23:00 STATE: test-node.js passed: default sync 1 female 0.97 -2022-07-29 09:23:00 INFO:  test-node.js test: image process -2022-07-29 09:23:00 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:00 STATE: test-node.js passed: image input null [1,256,256,3] -2022-07-29 09:23:00 INFO:  test-node.js test: image null -2022-07-29 09:23:00 STATE: test-node.js passed: invalid input could not convert input to tensor -2022-07-29 09:23:00 INFO:  test-node.js test face similarity -2022-07-29 09:23:00 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:00 STATE: test-node.js event: image -2022-07-29 09:23:01 STATE: test-node.js event: detect -2022-07-29 09:23:01 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23:01 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-07-29 09:23:01 DATA:  test-node.js result: performance: load: null total: 203 -2022-07-29 09:23:01 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:01 STATE: test-node.js event: image -2022-07-29 09:23:01 STATE: test-node.js event: detect -2022-07-29 09:23:01 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:01 DATA:  test-node.js result: performance: load: null total: 213 -2022-07-29 09:23:01 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-29 09:23:01 STATE: test-node.js event: image -2022-07-29 09:23:01 STATE: test-node.js event: detect -2022-07-29 09:23:01 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:01 DATA:  test-node.js result: performance: load: null total: 193 -2022-07-29 09:23:01 STATE: test-node.js passed: face descriptor -2022-07-29 09:23:01 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} -2022-07-29 09:23:01 INFO:  test-node.js test face matching -2022-07-29 09:23:01 STATE: test-node.js passed: face database 40 -2022-07-29 09:23: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-07-29 09:23:01 INFO:  test-node.js test object -2022-07-29 09:23:01 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:01 STATE: test-node.js event: image -2022-07-29 09:23:02 STATE: test-node.js event: detect -2022-07-29 09:23:02 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:02 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-07-29 09:23:02 DATA:  test-node.js result: performance: load: null total: 204 -2022-07-29 09:23:02 STATE: test-node.js passed: object result match -2022-07-29 09:23:02 INFO:  test-node.js test sensitive -2022-07-29 09:23:02 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:02 STATE: test-node.js event: image -2022-07-29 09:23:02 STATE: test-node.js event: detect -2022-07-29 09:23:02 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:02 DATA:  test-node.js result: performance: load: null total: 229 -2022-07-29 09:23:02 STATE: test-node.js passed: sensitive result match -2022-07-29 09:23:02 STATE: test-node.js passed: sensitive face result match -2022-07-29 09:23:02 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-07-29 09:23:02 STATE: test-node.js passed: sensitive body result match -2022-07-29 09:23:02 STATE: test-node.js passed: sensitive hand result match -2022-07-29 09:23:02 INFO:  test-node.js test detectors -2022-07-29 09:23:02 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:02 STATE: test-node.js event: image -2022-07-29 09:23:02 STATE: test-node.js event: detect -2022-07-29 09:23:02 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:02 DATA:  test-node.js result: performance: load: null total: 144 -2022-07-29 09:23:02 STATE: test-node.js passed: detector result face match -2022-07-29 09:23:02 STATE: test-node.js passed: detector result hand match -2022-07-29 09:23:02 INFO:  test-node.js test: multi-instance -2022-07-29 09:23:02 STATE: test-node.js event: image -2022-07-29 09:23:03 STATE: test-node.js event: detect -2022-07-29 09:23:03 STATE: test-node.js passed: detect: random default -2022-07-29 09:23:03 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2022-07-29 09:23:03 DATA:  test-node.js result: performance: load: null total: 133 -2022-07-29 09:23:03 INFO:  test-node.js test: first instance -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-29 09:23:03 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:03 DATA:  test-node.js result: performance: load: null total: 144 -2022-07-29 09:23:03 INFO:  test-node.js test: second instance -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-29 09:23:03 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:03 DATA:  test-node.js result: performance: load: null total: 144 -2022-07-29 09:23:03 INFO:  test-node.js test: concurrent -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-29 09:23:03 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:04 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:04 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-29 09:23:04 STATE: test-node.js event: image -2022-07-29 09:23:04 STATE: test-node.js event: image -2022-07-29 09:23:04 STATE: test-node.js event: image -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1333 -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1333 -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1447 -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1447 -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1447 -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1447 -2022-07-29 09:23:05 STATE: test-node.js event: detect -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1209 -2022-07-29 09:23:05 STATE: test-node.js event: detect -2022-07-29 09:23:05 STATE: test-node.js event: detect -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1209 -2022-07-29 09:23:05 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:05 DATA:  test-node.js result: performance: load: null total: 1209 -2022-07-29 09:23:05 INFO:  test-node.js test: monkey-patch -2022-07-29 09:23:05 STATE: test-node.js event: image -2022-07-29 09:23:05 STATE: test-node.js event: detect -2022-07-29 09:23:05 STATE: test-node.js passed: monkey patch -2022-07-29 09:23:05 STATE: test-node.js passed: segmentation [65536] -2022-07-29 09:23:05 STATE: test-node.js passeed: equal usage -2022-07-29 09:23:05 INFO:  test-node.js test: input compare -2022-07-29 09:23:05 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-29 09:23:05 STATE: test-node.js passed: image compare 0 23.275441687091504 -2022-07-29 09:23:05 INFO:  test-node.js events: {"image":21,"detect":21,"warmup":2} -2022-07-29 09:23:05 INFO:  test-node.js tensors 1927 -2022-07-29 09:23:05 INFO:  test-node.js test complete: 9269 ms -2022-07-29 09:23:05 INFO:  -2022-07-29 09:23:05 INFO:  test-node-gpu.js start -2022-07-29 09:23:06 INFO:  test-node-gpu.js test: configuration validation -2022-07-29 09:23:06 STATE: test-node-gpu.js passed: configuration default validation [] -2022-07-29 09:23:06 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-07-29 09:23:06 INFO:  test-node-gpu.js test: model load -2022-07-29 09:23: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-07-29 09:23:06 INFO:  test-node-gpu.js test: warmup -2022-07-29 09:23:06 STATE: test-node-gpu.js passed: create human -2022-07-29 09:23:06 INFO:  test-node-gpu.js human version: 2.9.1 -2022-07-29 09:23:06 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.15.0 -2022-07-29 09:23:06 INFO:  test-node-gpu.js tfjs version: 3.19.0 -2022-07-29 09:23:06 INFO:  test-node-gpu.js tensorflow binding version: 2.7.3-dev20220521 -2022-07-29 09:23:06 STATE: test-node-gpu.js passed: set backend: tensorflow -2022-07-29 09:23:06 STATE: test-node-gpu.js tensors 1921 -2022-07-29 09:23:06 STATE: test-node-gpu.js passed: load models -2022-07-29 09:23:06 STATE: test-node-gpu.js result: defined models: 22 loaded models: 12 -2022-07-29 09:23:06 STATE: test-node-gpu.js passed: warmup: none default -2022-07-29 09:23:06 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-07-29 09:23:06 DATA:  test-node-gpu.js result: performance: load: null total: null -2022-07-29 09:23:06 STATE: test-node-gpu.js passed: warmup none result match -2022-07-29 09:23:07 STATE: test-node-gpu.js event: image -2022-07-29 09:23:10 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:10 STATE: test-node-gpu.js event: warmup -2022-07-29 09:23:10 STATE: test-node-gpu.js passed: warmup: face default -2022-07-29 09:23:10 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-07-29 09:23:10 DATA:  test-node-gpu.js result: performance: load: null total: 3380 -2022-07-29 09:23:10 STATE: test-node-gpu.js passed: warmup face result match -2022-07-29 09:23:10 STATE: test-node-gpu.js event: image -2022-07-29 09:23:10 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:10 STATE: test-node-gpu.js event: warmup -2022-07-29 09:23:10 STATE: test-node-gpu.js passed: warmup: body default -2022-07-29 09:23: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-07-29 09:23:10 DATA:  test-node-gpu.js result: performance: load: null total: 267 -2022-07-29 09:23:10 STATE: test-node-gpu.js passed: warmup body result match -2022-07-29 09:23:10 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-07-29 09:23:10 INFO:  test-node-gpu.js test: details verification -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:11 STATE: test-node-gpu.js event: image -2022-07-29 09:23:11 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:11 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-07-29 09:23:11 DATA:  test-node-gpu.js result: performance: load: null total: 223 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details face length 1 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details face score 1 0.93 1 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details face liveness 0.83 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details body length 1 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details body 0.92 17 6 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details hand length 1 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details gesture length 7 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details object length 1 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: details object 0.72 person -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-07-29 09:23:11 STATE: test-node-gpu.js event: image -2022-07-29 09:23:11 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-07-29 09:23:11 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-07-29 09:23:11 STATE: test-node-gpu.js event: image -2022-07-29 09:23:12 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:12 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-07-29 09:23:12 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:12 STATE: test-node-gpu.js event: image -2022-07-29 09:23:12 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:12 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-07-29 09:23:12 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:12 STATE: test-node-gpu.js event: image -2022-07-29 09:23:12 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:12 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-07-29 09:23:13 STATE: test-node-gpu.js event: image -2022-07-29 09:23:13 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-07-29 09:23:13 INFO:  test-node-gpu.js test default -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:13 STATE: test-node-gpu.js event: image -2022-07-29 09:23:13 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:13 DATA:  test-node-gpu.js result: performance: load: null total: 193 -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 -2022-07-29 09:23:13 INFO:  test-node-gpu.js test sync -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:13 STATE: test-node-gpu.js event: image -2022-07-29 09:23:13 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:13 DATA:  test-node-gpu.js result: performance: load: null total: 176 -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: default sync 1 female 0.97 -2022-07-29 09:23:13 INFO:  test-node-gpu.js test: image process -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2022-07-29 09:23:13 INFO:  test-node-gpu.js test: image null -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor -2022-07-29 09:23:13 INFO:  test-node-gpu.js test face similarity -2022-07-29 09:23:13 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:13 STATE: test-node-gpu.js event: image -2022-07-29 09:23:14 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23:14 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-07-29 09:23:14 DATA:  test-node-gpu.js result: performance: load: null total: 186 -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:14 STATE: test-node-gpu.js event: image -2022-07-29 09:23:14 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:14 DATA:  test-node-gpu.js result: performance: load: null total: 192 -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-29 09:23:14 STATE: test-node-gpu.js event: image -2022-07-29 09:23:14 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:14 DATA:  test-node-gpu.js result: performance: load: null total: 178 -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: face descriptor -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} -2022-07-29 09:23:14 INFO:  test-node-gpu.js test face matching -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: face database 40 -2022-07-29 09:23: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-07-29 09:23:14 INFO:  test-node-gpu.js test object -2022-07-29 09:23:14 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:14 STATE: test-node-gpu.js event: image -2022-07-29 09:23:15 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:15 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-07-29 09:23:15 DATA:  test-node-gpu.js result: performance: load: null total: 220 -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: object result match -2022-07-29 09:23:15 INFO:  test-node-gpu.js test sensitive -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:15 STATE: test-node-gpu.js event: image -2022-07-29 09:23:15 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:15 DATA:  test-node-gpu.js result: performance: load: null total: 235 -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: sensitive result match -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: sensitive face result match -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: sensitive body result match -2022-07-29 09:23:15 STATE: test-node-gpu.js passed: sensitive hand result match -2022-07-29 09:23:15 INFO:  test-node-gpu.js test detectors -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:16 STATE: test-node-gpu.js event: image -2022-07-29 09:23:16 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:16 DATA:  test-node-gpu.js result: performance: load: null total: 139 -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: detector result face match -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: detector result hand match -2022-07-29 09:23:16 INFO:  test-node-gpu.js test: multi-instance -2022-07-29 09:23:16 STATE: test-node-gpu.js event: image -2022-07-29 09:23:16 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: detect: random default -2022-07-29 09:23:16 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.06,"keypoints":15} -2022-07-29 09:23:16 DATA:  test-node-gpu.js result: performance: load: null total: 81 -2022-07-29 09:23:16 INFO:  test-node-gpu.js test: first instance -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:16 DATA:  test-node-gpu.js result: performance: load: null total: 96 -2022-07-29 09:23:16 INFO:  test-node-gpu.js test: second instance -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:16 DATA:  test-node-gpu.js result: performance: load: null total: 100 -2022-07-29 09:23:16 INFO:  test-node-gpu.js test: concurrent -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:16 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-29 09:23:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-29 09:23:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:17 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-29 09:23:17 STATE: test-node-gpu.js event: image -2022-07-29 09:23:17 STATE: test-node-gpu.js event: image -2022-07-29 09:23:17 STATE: test-node-gpu.js event: image -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 1009 -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 1009 -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 1079 -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 1079 -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 1079 -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 1079 -2022-07-29 09:23:18 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 832 -2022-07-29 09:23:18 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:18 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 833 -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23: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-07-29 09:23:18 DATA:  test-node-gpu.js result: performance: load: null total: 833 -2022-07-29 09:23:18 INFO:  test-node-gpu.js test: monkey-patch -2022-07-29 09:23:18 STATE: test-node-gpu.js event: image -2022-07-29 09:23:18 STATE: test-node-gpu.js event: detect -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: monkey patch -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: segmentation [65536] -2022-07-29 09:23:18 STATE: test-node-gpu.js passeed: equal usage -2022-07-29 09:23:18 INFO:  test-node-gpu.js test: input compare -2022-07-29 09:23:18 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-29 09:23:19 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-29 09:23:19 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 -2022-07-29 09:23:19 INFO:  test-node-gpu.js events: {"image":21,"detect":21,"warmup":2} -2022-07-29 09:23:19 INFO:  test-node-gpu.js tensors 1927 -2022-07-29 09:23:19 INFO:  test-node-gpu.js test complete: 12418 ms -2022-07-29 09:23:19 INFO:  -2022-07-29 09:23:19 INFO:  test-node-wasm.js start -2022-07-29 09:23:20 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2022-07-29 09:23:20 INFO:  test-node-wasm.js test: configuration validation -2022-07-29 09:23:20 STATE: test-node-wasm.js passed: configuration default validation [] -2022-07-29 09:23:20 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-07-29 09:23:20 INFO:  test-node-wasm.js test: model load -2022-07-29 09:23:22 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-07-29 09:23:22 INFO:  test-node-wasm.js test: warmup -2022-07-29 09:23:22 STATE: test-node-wasm.js passed: create human -2022-07-29 09:23:22 INFO:  test-node-wasm.js human version: 2.9.1 -2022-07-29 09:23:22 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.15.0 -2022-07-29 09:23:22 INFO:  test-node-wasm.js tfjs version: 3.19.0 -2022-07-29 09:23:22 STATE: test-node-wasm.js passed: set backend: wasm -2022-07-29 09:23:22 STATE: test-node-wasm.js tensors 1921 -2022-07-29 09:23:22 STATE: test-node-wasm.js passed: load models -2022-07-29 09:23:22 STATE: test-node-wasm.js result: defined models: 22 loaded models: 12 -2022-07-29 09:23:22 STATE: test-node-wasm.js passed: warmup: none default -2022-07-29 09:23:22 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-07-29 09:23:22 DATA:  test-node-wasm.js result: performance: load: null total: null -2022-07-29 09:23:22 STATE: test-node-wasm.js passed: warmup none result match -2022-07-29 09:23:22 STATE: test-node-wasm.js event: image -2022-07-29 09:23:22 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:22 STATE: test-node-wasm.js event: warmup -2022-07-29 09:23:22 STATE: test-node-wasm.js passed: warmup: face default -2022-07-29 09:23:22 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-07-29 09:23:22 DATA:  test-node-wasm.js result: performance: load: null total: 525 -2022-07-29 09:23:22 STATE: test-node-wasm.js passed: warmup face result match -2022-07-29 09:23:23 STATE: test-node-wasm.js event: image -2022-07-29 09:23:23 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:23 STATE: test-node-wasm.js event: warmup -2022-07-29 09:23:23 STATE: test-node-wasm.js passed: warmup: body default -2022-07-29 09:23:23 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-07-29 09:23:23 DATA:  test-node-wasm.js result: performance: load: null total: 395 -2022-07-29 09:23:23 STATE: test-node-wasm.js passed: warmup body result match -2022-07-29 09:23:23 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-07-29 09:23:23 INFO:  test-node-wasm.js test: details verification -2022-07-29 09:23:23 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:23 STATE: test-node-wasm.js event: image -2022-07-29 09:23:24 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:24 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-07-29 09:23:24 DATA:  test-node-wasm.js result: performance: load: null total: 365 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details face length 1 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details face score 1 0.93 1 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details face liveness 0.83 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details body length 1 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details body 0.92 17 6 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details hand length 1 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details gesture length 7 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details object length 1 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: details object 0.72 person -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2022-07-29 09:23:24 STATE: test-node-wasm.js event: image -2022-07-29 09:23:24 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-07-29 09:23:24 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2022-07-29 09:23:24 STATE: test-node-wasm.js event: image -2022-07-29 09:23:25 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:25 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-07-29 09:23:25 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:25 STATE: test-node-wasm.js event: image -2022-07-29 09:23:25 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:25 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-07-29 09:23:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:26 STATE: test-node-wasm.js event: image -2022-07-29 09:23:26 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:26 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-07-29 09:23:26 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-07-29 09:23:26 STATE: test-node-wasm.js event: image -2022-07-29 09:23:27 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:27 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-07-29 09:23:27 INFO:  test-node-wasm.js test default -2022-07-29 09:23:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:27 STATE: test-node-wasm.js event: image -2022-07-29 09:23:27 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:27 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:27 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-07-29 09:23:27 DATA:  test-node-wasm.js result: performance: load: null total: 376 -2022-07-29 09:23:27 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 -2022-07-29 09:23:27 INFO:  test-node-wasm.js test sync -2022-07-29 09:23:27 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:27 STATE: test-node-wasm.js event: image -2022-07-29 09:23:28 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:28 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-07-29 09:23:28 DATA:  test-node-wasm.js result: performance: load: null total: 423 -2022-07-29 09:23:28 STATE: test-node-wasm.js passed: default sync 1 female 0.97 -2022-07-29 09:23:28 INFO:  test-node-wasm.js test: image process -2022-07-29 09:23:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-29 09:23:28 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2022-07-29 09:23:28 INFO:  test-node-wasm.js test: image null -2022-07-29 09:23:28 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor -2022-07-29 09:23:28 INFO:  test-node-wasm.js test face similarity -2022-07-29 09:23:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-29 09:23:28 STATE: test-node-wasm.js event: image -2022-07-29 09:23:28 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:28 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23:28 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-07-29 09:23:28 DATA:  test-node-wasm.js result: performance: load: null total: 383 -2022-07-29 09:23:28 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:28 STATE: test-node-wasm.js event: image -2022-07-29 09:23:29 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:29 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-07-29 09:23:29 DATA:  test-node-wasm.js result: performance: load: null total: 382 -2022-07-29 09:23:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-29 09:23:29 STATE: test-node-wasm.js event: image -2022-07-29 09:23:29 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:29 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23:29 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-07-29 09:23:29 DATA:  test-node-wasm.js result: performance: load: null total: 337 -2022-07-29 09:23:29 STATE: test-node-wasm.js passed: face descriptor -2022-07-29 09:23:29 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} -2022-07-29 09:23:29 INFO:  test-node-wasm.js test face matching -2022-07-29 09:23:29 STATE: test-node-wasm.js passed: face database 40 -2022-07-29 09:23:29 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-07-29 09:23:29 INFO:  test-node-wasm.js test object -2022-07-29 09:23:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:30 STATE: test-node-wasm.js event: image -2022-07-29 09:23:30 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:30 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:30 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-07-29 09:23:30 DATA:  test-node-wasm.js result: performance: load: null total: 372 -2022-07-29 09:23:30 STATE: test-node-wasm.js passed: object result match -2022-07-29 09:23:30 INFO:  test-node-wasm.js test sensitive -2022-07-29 09:23:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:30 STATE: test-node-wasm.js event: image -2022-07-29 09:23:31 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:31 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-07-29 09:23:31 DATA:  test-node-wasm.js result: performance: load: null total: 396 -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: sensitive result match -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: sensitive face result match -2022-07-29 09:23:31 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-07-29 09:23:31 STATE: test-node-wasm.js passed: sensitive body result match -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: sensitive hand result match -2022-07-29 09:23:31 INFO:  test-node-wasm.js test detectors -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:31 STATE: test-node-wasm.js event: image -2022-07-29 09:23:31 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:31 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-07-29 09:23:31 DATA:  test-node-wasm.js result: performance: load: null total: 258 -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: detector result face match -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: detector result hand match -2022-07-29 09:23:31 INFO:  test-node-wasm.js test: multi-instance -2022-07-29 09:23:31 STATE: test-node-wasm.js event: image -2022-07-29 09:23:31 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: detect: random default -2022-07-29 09:23:31 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2022-07-29 09:23:31 DATA:  test-node-wasm.js result: performance: load: null total: 239 -2022-07-29 09:23:31 INFO:  test-node-wasm.js test: first instance -2022-07-29 09:23:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-29 09:23:32 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:32 DATA:  test-node-wasm.js result: performance: load: null total: 252 -2022-07-29 09:23:32 INFO:  test-node-wasm.js test: second instance -2022-07-29 09:23:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-29 09:23:32 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23: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-07-29 09:23:32 DATA:  test-node-wasm.js result: performance: load: null total: 251 -2022-07-29 09:23:32 INFO:  test-node-wasm.js test: concurrent -2022-07-29 09:23:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-29 09:23:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-29 09:23:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-29 09:23:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-29 09:23:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-29 09:23:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-29 09:23:33 STATE: test-node-wasm.js event: image -2022-07-29 09:23:33 STATE: test-node-wasm.js event: image -2022-07-29 09:23:33 STATE: test-node-wasm.js event: image -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2186 -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2186 -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2430 -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2430 -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2430 -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2430 -2022-07-29 09:23:35 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2107 -2022-07-29 09:23:35 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:35 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2108 -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-29 09:23:35 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-07-29 09:23:35 DATA:  test-node-wasm.js result: performance: load: null total: 2108 -2022-07-29 09:23:35 INFO:  test-node-wasm.js test: monkey-patch -2022-07-29 09:23:35 STATE: test-node-wasm.js event: image -2022-07-29 09:23:35 STATE: test-node-wasm.js event: detect -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: monkey patch -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: segmentation [65536] -2022-07-29 09:23:35 STATE: test-node-wasm.js passeed: equal usage -2022-07-29 09:23:35 INFO:  test-node-wasm.js test: input compare -2022-07-29 09:23:35 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-29 09:23:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-29 09:23:36 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 -2022-07-29 09:23:36 INFO:  test-node-wasm.js events: {"image":21,"detect":21,"warmup":2} -2022-07-29 09:23:36 INFO:  test-node-wasm.js tensors 1929 -2022-07-29 09:23:36 INFO:  test-node-wasm.js test complete: 15934 ms -2022-07-29 09:23:36 INFO:  all tests complete -2022-07-29 09:23:36 INFO:  failed: {"count":0,"messages":[]} -2022-07-29 09:23:36 INFO:  status: {"test":"test-node.js","passed":101,"failed":0} -2022-07-29 09:23:36 INFO:  status: {"test":"test-node-gpu.js","passed":101,"failed":0} -2022-07-29 09:23:36 INFO:  status: {"test":"test-node-wasm.js","passed":102,"failed":0} +2022-08-04 09:13:03 INFO:  @vladmandic/human version 2.9.1 +2022-08-04 09:13:03 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.15.0 +2022-08-04 09:13:03 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2022-08-04 09:13:03 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-08-04 09:13:03 INFO:  +2022-08-04 09:13:03 INFO:  test-node.js start +2022-08-04 09:13:03 INFO:  test-node.js test: configuration validation +2022-08-04 09:13:03 STATE: test-node.js passed: configuration default validation [] +2022-08-04 09:13:03 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-04 09:13:03 INFO:  test-node.js test: model load +2022-08-04 09:13:04 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-08-04 09:13:04 INFO:  test-node.js test: warmup +2022-08-04 09:13:04 STATE: test-node.js passed: create human +2022-08-04 09:13:04 INFO:  test-node.js human version: 2.9.1 +2022-08-04 09:13:04 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.15.0 +2022-08-04 09:13:04 INFO:  test-node.js tfjs version: 3.19.0 +2022-08-04 09:13:04 INFO:  test-node.js tensorflow binding version: 2.7.3-dev20220521 +2022-08-04 09:13:04 STATE: test-node.js passed: set backend: tensorflow +2022-08-04 09:13:04 STATE: test-node.js tensors 1921 +2022-08-04 09:13:04 STATE: test-node.js passed: load models +2022-08-04 09:13:04 STATE: test-node.js result: defined models: 22 loaded models: 12 +2022-08-04 09:13:04 STATE: test-node.js passed: warmup: none default +2022-08-04 09:13:04 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-04 09:13:04 DATA:  test-node.js result: performance: load: null total: null +2022-08-04 09:13:04 STATE: test-node.js passed: warmup none result match +2022-08-04 09:13:04 STATE: test-node.js event: image +2022-08-04 09:13:04 STATE: test-node.js event: detect +2022-08-04 09:13:04 STATE: test-node.js event: warmup +2022-08-04 09:13:04 STATE: test-node.js passed: warmup: face default +2022-08-04 09:13:04 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-08-04 09:13:04 DATA:  test-node.js result: performance: load: null total: 354 +2022-08-04 09:13:04 STATE: test-node.js passed: warmup face result match +2022-08-04 09:13:04 STATE: test-node.js event: image +2022-08-04 09:13:04 STATE: test-node.js event: detect +2022-08-04 09:13:04 STATE: test-node.js event: warmup +2022-08-04 09:13:04 STATE: test-node.js passed: warmup: body default +2022-08-04 09:13:04 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-08-04 09:13:04 DATA:  test-node.js result: performance: load: null total: 270 +2022-08-04 09:13:04 STATE: test-node.js passed: warmup body result match +2022-08-04 09:13:04 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-08-04 09:13:04 INFO:  test-node.js test: details verification +2022-08-04 09:13:04 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:04 STATE: test-node.js event: image +2022-08-04 09:13:05 STATE: test-node.js event: detect +2022-08-04 09:13:05 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:05 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-08-04 09:13:05 DATA:  test-node.js result: performance: load: null total: 248 +2022-08-04 09:13:05 STATE: test-node.js passed: details face length 1 +2022-08-04 09:13:05 STATE: test-node.js passed: details face score 1 0.93 1 +2022-08-04 09:13:05 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-04 09:13:05 STATE: test-node.js passed: details face arrays 4 478 1024 +2022-08-04 09:13:05 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-04 09:13:05 STATE: test-node.js passed: details face anti-spoofing 0.79 +2022-08-04 09:13:05 STATE: test-node.js passed: details face liveness 0.83 +2022-08-04 09:13:05 STATE: test-node.js passed: details body length 1 +2022-08-04 09:13:05 STATE: test-node.js passed: details body 0.92 17 6 +2022-08-04 09:13:05 STATE: test-node.js passed: details hand length 1 +2022-08-04 09:13:05 STATE: test-node.js passed: details hand 0.51 0.73 point +2022-08-04 09:13:05 STATE: test-node.js passed: details hand arrays 21 5 7 +2022-08-04 09:13:05 STATE: test-node.js passed: details gesture length 7 +2022-08-04 09:13:05 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-04 09:13:05 STATE: test-node.js passed: details object length 1 +2022-08-04 09:13:05 STATE: test-node.js passed: details object 0.72 person +2022-08-04 09:13:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-08-04 09:13:05 STATE: test-node.js event: image +2022-08-04 09:13:05 STATE: test-node.js event: detect +2022-08-04 09:13:05 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-04 09:13:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-08-04 09:13:05 STATE: test-node.js event: image +2022-08-04 09:13:06 STATE: test-node.js event: detect +2022-08-04 09:13:06 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-04 09:13:06 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:06 STATE: test-node.js event: image +2022-08-04 09:13:06 STATE: test-node.js event: detect +2022-08-04 09:13:06 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-04 09:13:06 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:06 STATE: test-node.js event: image +2022-08-04 09:13:06 STATE: test-node.js event: detect +2022-08-04 09:13:06 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-04 09:13:07 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-04 09:13:07 STATE: test-node.js event: image +2022-08-04 09:13:07 STATE: test-node.js event: detect +2022-08-04 09:13:07 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-04 09:13:07 INFO:  test-node.js test default +2022-08-04 09:13:07 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:07 STATE: test-node.js event: image +2022-08-04 09:13:07 STATE: test-node.js event: detect +2022-08-04 09:13:07 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:07 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-08-04 09:13:07 DATA:  test-node.js result: performance: load: null total: 212 +2022-08-04 09:13:07 STATE: test-node.js passed: default result face match 1 female 0.97 +2022-08-04 09:13:07 INFO:  test-node.js test sync +2022-08-04 09:13:08 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:08 STATE: test-node.js event: image +2022-08-04 09:13:08 STATE: test-node.js event: detect +2022-08-04 09:13:08 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:08 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-08-04 09:13:08 DATA:  test-node.js result: performance: load: null total: 207 +2022-08-04 09:13:08 STATE: test-node.js passed: default sync 1 female 0.97 +2022-08-04 09:13:08 INFO:  test-node.js test: image process +2022-08-04 09:13:08 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:08 STATE: test-node.js passed: image input null [1,256,256,3] +2022-08-04 09:13:08 INFO:  test-node.js test: image null +2022-08-04 09:13:08 STATE: test-node.js passed: invalid input could not convert input to tensor +2022-08-04 09:13:08 INFO:  test-node.js test face similarity +2022-08-04 09:13:08 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:08 STATE: test-node.js event: image +2022-08-04 09:13:08 STATE: test-node.js event: detect +2022-08-04 09:13:08 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:08 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-08-04 09:13:08 DATA:  test-node.js result: performance: load: null total: 210 +2022-08-04 09:13:08 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:08 STATE: test-node.js event: image +2022-08-04 09:13:08 STATE: test-node.js event: detect +2022-08-04 09:13:08 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:08 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-08-04 09:13:08 DATA:  test-node.js result: performance: load: null total: 219 +2022-08-04 09:13:09 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-04 09:13:09 STATE: test-node.js event: image +2022-08-04 09:13:09 STATE: test-node.js event: detect +2022-08-04 09:13:09 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:09 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-08-04 09:13:09 DATA:  test-node.js result: performance: load: null total: 199 +2022-08-04 09:13:09 STATE: test-node.js passed: face descriptor +2022-08-04 09:13:09 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} +2022-08-04 09:13:09 INFO:  test-node.js test face matching +2022-08-04 09:13:09 STATE: test-node.js passed: face database 40 +2022-08-04 09:13:09 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-08-04 09:13:09 INFO:  test-node.js test object +2022-08-04 09:13:09 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:09 STATE: test-node.js event: image +2022-08-04 09:13:09 STATE: test-node.js event: detect +2022-08-04 09:13:09 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:09 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-08-04 09:13:09 DATA:  test-node.js result: performance: load: null total: 207 +2022-08-04 09:13:09 STATE: test-node.js passed: object result match +2022-08-04 09:13:09 INFO:  test-node.js test sensitive +2022-08-04 09:13:09 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:09 STATE: test-node.js event: image +2022-08-04 09:13:10 STATE: test-node.js event: detect +2022-08-04 09:13:10 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:10 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-08-04 09:13:10 DATA:  test-node.js result: performance: load: null total: 229 +2022-08-04 09:13:10 STATE: test-node.js passed: sensitive result match +2022-08-04 09:13:10 STATE: test-node.js passed: sensitive face result match +2022-08-04 09:13:10 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-08-04 09:13:10 STATE: test-node.js passed: sensitive body result match +2022-08-04 09:13:10 STATE: test-node.js passed: sensitive hand result match +2022-08-04 09:13:10 INFO:  test-node.js test detectors +2022-08-04 09:13:10 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:10 STATE: test-node.js event: image +2022-08-04 09:13:10 STATE: test-node.js event: detect +2022-08-04 09:13:10 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:10 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-08-04 09:13:10 DATA:  test-node.js result: performance: load: null total: 141 +2022-08-04 09:13:10 STATE: test-node.js passed: detector result face match +2022-08-04 09:13:10 STATE: test-node.js passed: detector result hand match +2022-08-04 09:13:10 INFO:  test-node.js test: multi-instance +2022-08-04 09:13:10 STATE: test-node.js event: image +2022-08-04 09:13:10 STATE: test-node.js event: detect +2022-08-04 09:13:10 STATE: test-node.js passed: detect: random default +2022-08-04 09:13:10 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} +2022-08-04 09:13:10 DATA:  test-node.js result: performance: load: null total: 140 +2022-08-04 09:13:10 INFO:  test-node.js test: first instance +2022-08-04 09:13:10 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-04 09:13:10 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:10 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-08-04 09:13:10 DATA:  test-node.js result: performance: load: null total: 146 +2022-08-04 09:13:10 INFO:  test-node.js test: second instance +2022-08-04 09:13:10 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-04 09:13:11 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:11 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-08-04 09:13:11 DATA:  test-node.js result: performance: load: null total: 135 +2022-08-04 09:13:11 INFO:  test-node.js test: concurrent +2022-08-04 09:13:11 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:11 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:11 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:11 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:11 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-04 09:13:11 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-04 09:13:11 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:11 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:12 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-08-04 09:13:12 STATE: test-node.js event: image +2022-08-04 09:13:12 STATE: test-node.js event: image +2022-08-04 09:13:12 STATE: test-node.js event: image +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1440 +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1440 +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1581 +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1581 +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1581 +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1581 +2022-08-04 09:13:13 STATE: test-node.js event: detect +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1278 +2022-08-04 09:13:13 STATE: test-node.js event: detect +2022-08-04 09:13:13 STATE: test-node.js event: detect +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1278 +2022-08-04 09:13:13 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:13 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-08-04 09:13:13 DATA:  test-node.js result: performance: load: null total: 1278 +2022-08-04 09:13:13 INFO:  test-node.js test: monkey-patch +2022-08-04 09:13:13 STATE: test-node.js event: image +2022-08-04 09:13:13 STATE: test-node.js event: detect +2022-08-04 09:13:13 STATE: test-node.js passed: monkey patch +2022-08-04 09:13:13 STATE: test-node.js passed: segmentation [65536] +2022-08-04 09:13:13 STATE: test-node.js passeed: equal usage +2022-08-04 09:13:13 INFO:  test-node.js test: input compare +2022-08-04 09:13:13 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:13 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-08-04 09:13:13 STATE: test-node.js passed: image compare 0 23.275441687091504 +2022-08-04 09:13:13 INFO:  test-node.js events: {"image":21,"detect":21,"warmup":2} +2022-08-04 09:13:13 INFO:  test-node.js tensors 1927 +2022-08-04 09:13:13 INFO:  test-node.js test complete: 9854 ms +2022-08-04 09:13:13 INFO:  +2022-08-04 09:13:13 INFO:  test-node-gpu.js start +2022-08-04 09:13:14 INFO:  test-node-gpu.js test: configuration validation +2022-08-04 09:13:14 STATE: test-node-gpu.js passed: configuration default validation [] +2022-08-04 09:13:14 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-04 09:13:14 INFO:  test-node-gpu.js test: model load +2022-08-04 09:13:14 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-08-04 09:13:14 INFO:  test-node-gpu.js test: warmup +2022-08-04 09:13:14 STATE: test-node-gpu.js passed: create human +2022-08-04 09:13:14 INFO:  test-node-gpu.js human version: 2.9.1 +2022-08-04 09:13:14 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.15.0 +2022-08-04 09:13:14 INFO:  test-node-gpu.js tfjs version: 3.19.0 +2022-08-04 09:13:14 INFO:  test-node-gpu.js tensorflow binding version: 2.7.3-dev20220521 +2022-08-04 09:13:14 STATE: test-node-gpu.js passed: set backend: tensorflow +2022-08-04 09:13:14 STATE: test-node-gpu.js tensors 1921 +2022-08-04 09:13:14 STATE: test-node-gpu.js passed: load models +2022-08-04 09:13:14 STATE: test-node-gpu.js result: defined models: 22 loaded models: 12 +2022-08-04 09:13:14 STATE: test-node-gpu.js passed: warmup: none default +2022-08-04 09:13:14 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-04 09:13:14 DATA:  test-node-gpu.js result: performance: load: null total: null +2022-08-04 09:13:14 STATE: test-node-gpu.js passed: warmup none result match +2022-08-04 09:13:15 STATE: test-node-gpu.js event: image +2022-08-04 09:13:19 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:19 STATE: test-node-gpu.js event: warmup +2022-08-04 09:13:19 STATE: test-node-gpu.js passed: warmup: face default +2022-08-04 09:13:19 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-08-04 09:13:19 DATA:  test-node-gpu.js result: performance: load: null total: 3847 +2022-08-04 09:13:19 STATE: test-node-gpu.js passed: warmup face result match +2022-08-04 09:13:19 STATE: test-node-gpu.js event: image +2022-08-04 09:13:19 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:19 STATE: test-node-gpu.js event: warmup +2022-08-04 09:13:19 STATE: test-node-gpu.js passed: warmup: body default +2022-08-04 09:13:19 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-08-04 09:13:19 DATA:  test-node-gpu.js result: performance: load: null total: 240 +2022-08-04 09:13:19 STATE: test-node-gpu.js passed: warmup body result match +2022-08-04 09:13:19 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-08-04 09:13:19 INFO:  test-node-gpu.js test: details verification +2022-08-04 09:13:19 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:19 STATE: test-node-gpu.js event: image +2022-08-04 09:13:20 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:20 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-08-04 09:13:20 DATA:  test-node-gpu.js result: performance: load: null total: 224 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details face length 1 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details face score 1 0.93 1 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details face liveness 0.83 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details body length 1 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details body 0.92 17 6 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details hand length 1 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details gesture length 7 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details object length 1 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: details object 0.72 person +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-08-04 09:13:20 STATE: test-node-gpu.js event: image +2022-08-04 09:13:20 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-08-04 09:13:20 STATE: test-node-gpu.js event: image +2022-08-04 09:13:20 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:20 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-04 09:13:21 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:21 STATE: test-node-gpu.js event: image +2022-08-04 09:13:21 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:21 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-04 09:13:21 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:21 STATE: test-node-gpu.js event: image +2022-08-04 09:13:21 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:21 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-04 09:13:22 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-04 09:13:22 STATE: test-node-gpu.js event: image +2022-08-04 09:13:22 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:22 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-04 09:13:22 INFO:  test-node-gpu.js test default +2022-08-04 09:13:22 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:22 STATE: test-node-gpu.js event: image +2022-08-04 09:13:22 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:22 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:22 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-08-04 09:13:22 DATA:  test-node-gpu.js result: performance: load: null total: 238 +2022-08-04 09:13:22 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 +2022-08-04 09:13:22 INFO:  test-node-gpu.js test sync +2022-08-04 09:13:22 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:22 STATE: test-node-gpu.js event: image +2022-08-04 09:13:23 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:23 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-08-04 09:13:23 DATA:  test-node-gpu.js result: performance: load: null total: 188 +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: default sync 1 female 0.97 +2022-08-04 09:13:23 INFO:  test-node-gpu.js test: image process +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2022-08-04 09:13:23 INFO:  test-node-gpu.js test: image null +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor +2022-08-04 09:13:23 INFO:  test-node-gpu.js test face similarity +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:23 STATE: test-node-gpu.js event: image +2022-08-04 09:13:23 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:23 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-08-04 09:13:23 DATA:  test-node-gpu.js result: performance: load: null total: 164 +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:23 STATE: test-node-gpu.js event: image +2022-08-04 09:13:23 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:23 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-08-04 09:13:23 DATA:  test-node-gpu.js result: performance: load: null total: 196 +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-04 09:13:23 STATE: test-node-gpu.js event: image +2022-08-04 09:13:23 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:23 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-08-04 09:13:23 DATA:  test-node-gpu.js result: performance: load: null total: 171 +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: face descriptor +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} +2022-08-04 09:13:23 INFO:  test-node-gpu.js test face matching +2022-08-04 09:13:23 STATE: test-node-gpu.js passed: face database 40 +2022-08-04 09:13:23 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-08-04 09:13:23 INFO:  test-node-gpu.js test object +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:24 STATE: test-node-gpu.js event: image +2022-08-04 09:13:24 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:24 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-08-04 09:13:24 DATA:  test-node-gpu.js result: performance: load: null total: 194 +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: object result match +2022-08-04 09:13:24 INFO:  test-node-gpu.js test sensitive +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:24 STATE: test-node-gpu.js event: image +2022-08-04 09:13:24 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:24 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-08-04 09:13:24 DATA:  test-node-gpu.js result: performance: load: null total: 196 +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: sensitive result match +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: sensitive face result match +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: sensitive body result match +2022-08-04 09:13:24 STATE: test-node-gpu.js passed: sensitive hand result match +2022-08-04 09:13:24 INFO:  test-node-gpu.js test detectors +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:25 STATE: test-node-gpu.js event: image +2022-08-04 09:13:25 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:25 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-08-04 09:13:25 DATA:  test-node-gpu.js result: performance: load: null total: 116 +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: detector result face match +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: detector result hand match +2022-08-04 09:13:25 INFO:  test-node-gpu.js test: multi-instance +2022-08-04 09:13:25 STATE: test-node-gpu.js event: image +2022-08-04 09:13:25 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: detect: random default +2022-08-04 09:13:25 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} +2022-08-04 09:13:25 DATA:  test-node-gpu.js result: performance: load: null total: 110 +2022-08-04 09:13:25 INFO:  test-node-gpu.js test: first instance +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:25 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-08-04 09:13:25 DATA:  test-node-gpu.js result: performance: load: null total: 108 +2022-08-04 09:13:25 INFO:  test-node-gpu.js test: second instance +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:25 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-08-04 09:13:25 DATA:  test-node-gpu.js result: performance: load: null total: 105 +2022-08-04 09:13:25 INFO:  test-node-gpu.js test: concurrent +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:25 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-04 09:13:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-04 09:13:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-08-04 09:13:26 STATE: test-node-gpu.js event: image +2022-08-04 09:13:26 STATE: test-node-gpu.js event: image +2022-08-04 09:13:26 STATE: test-node-gpu.js event: image +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 1079 +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 1079 +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 1151 +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 1151 +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 1151 +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 1151 +2022-08-04 09:13:27 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 831 +2022-08-04 09:13:27 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:27 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 831 +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:27 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-08-04 09:13:27 DATA:  test-node-gpu.js result: performance: load: null total: 831 +2022-08-04 09:13:27 INFO:  test-node-gpu.js test: monkey-patch +2022-08-04 09:13:27 STATE: test-node-gpu.js event: image +2022-08-04 09:13:27 STATE: test-node-gpu.js event: detect +2022-08-04 09:13:27 STATE: test-node-gpu.js passed: monkey patch +2022-08-04 09:13:28 STATE: test-node-gpu.js passed: segmentation [65536] +2022-08-04 09:13:28 STATE: test-node-gpu.js passeed: equal usage +2022-08-04 09:13:28 INFO:  test-node-gpu.js test: input compare +2022-08-04 09:13:28 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-08-04 09:13:28 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-08-04 09:13:28 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 +2022-08-04 09:13:28 INFO:  test-node-gpu.js events: {"image":21,"detect":21,"warmup":2} +2022-08-04 09:13:28 INFO:  test-node-gpu.js tensors 1927 +2022-08-04 09:13:28 INFO:  test-node-gpu.js test complete: 13503 ms +2022-08-04 09:13:29 INFO:  +2022-08-04 09:13:29 INFO:  test-node-wasm.js start +2022-08-04 09:13:29 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2022-08-04 09:13:29 INFO:  test-node-wasm.js test: configuration validation +2022-08-04 09:13:29 STATE: test-node-wasm.js passed: configuration default validation [] +2022-08-04 09:13:29 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-08-04 09:13:29 INFO:  test-node-wasm.js test: model load +2022-08-04 09:13:31 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-08-04 09:13:31 INFO:  test-node-wasm.js test: warmup +2022-08-04 09:13:31 STATE: test-node-wasm.js passed: create human +2022-08-04 09:13:31 INFO:  test-node-wasm.js human version: 2.9.1 +2022-08-04 09:13:31 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.15.0 +2022-08-04 09:13:31 INFO:  test-node-wasm.js tfjs version: 3.19.0 +2022-08-04 09:13:31 STATE: test-node-wasm.js passed: set backend: wasm +2022-08-04 09:13:31 STATE: test-node-wasm.js tensors 1921 +2022-08-04 09:13:31 STATE: test-node-wasm.js passed: load models +2022-08-04 09:13:31 STATE: test-node-wasm.js result: defined models: 22 loaded models: 12 +2022-08-04 09:13:31 STATE: test-node-wasm.js passed: warmup: none default +2022-08-04 09:13:31 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-08-04 09:13:31 DATA:  test-node-wasm.js result: performance: load: null total: null +2022-08-04 09:13:31 STATE: test-node-wasm.js passed: warmup none result match +2022-08-04 09:13:31 STATE: test-node-wasm.js event: image +2022-08-04 09:13:31 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:31 STATE: test-node-wasm.js event: warmup +2022-08-04 09:13:31 STATE: test-node-wasm.js passed: warmup: face default +2022-08-04 09:13:31 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-08-04 09:13:31 DATA:  test-node-wasm.js result: performance: load: null total: 595 +2022-08-04 09:13:31 STATE: test-node-wasm.js passed: warmup face result match +2022-08-04 09:13:32 STATE: test-node-wasm.js event: image +2022-08-04 09:13:32 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:32 STATE: test-node-wasm.js event: warmup +2022-08-04 09:13:32 STATE: test-node-wasm.js passed: warmup: body default +2022-08-04 09:13:32 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-08-04 09:13:32 DATA:  test-node-wasm.js result: performance: load: null total: 421 +2022-08-04 09:13:32 STATE: test-node-wasm.js passed: warmup body result match +2022-08-04 09:13:32 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-08-04 09:13:32 INFO:  test-node-wasm.js test: details verification +2022-08-04 09:13:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:32 STATE: test-node-wasm.js event: image +2022-08-04 09:13:33 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:33 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-08-04 09:13:33 DATA:  test-node-wasm.js result: performance: load: null total: 399 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details face length 1 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details face score 1 0.93 1 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details face liveness 0.83 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details body length 1 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details body 0.92 17 6 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details hand length 1 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details gesture length 7 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details object length 1 +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: details object 0.72 person +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2022-08-04 09:13:33 STATE: test-node-wasm.js event: image +2022-08-04 09:13:33 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:33 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-08-04 09:13:34 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2022-08-04 09:13:34 STATE: test-node-wasm.js event: image +2022-08-04 09:13:34 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:34 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-08-04 09:13:34 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:34 STATE: test-node-wasm.js event: image +2022-08-04 09:13:35 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:35 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-08-04 09:13:35 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:35 STATE: test-node-wasm.js event: image +2022-08-04 09:13:36 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:36 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-08-04 09:13:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-08-04 09:13:36 STATE: test-node-wasm.js event: image +2022-08-04 09:13:36 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:36 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-08-04 09:13:36 INFO:  test-node-wasm.js test default +2022-08-04 09:13:37 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:37 STATE: test-node-wasm.js event: image +2022-08-04 09:13:37 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:37 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:37 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-08-04 09:13:37 DATA:  test-node-wasm.js result: performance: load: null total: 471 +2022-08-04 09:13:37 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 +2022-08-04 09:13:37 INFO:  test-node-wasm.js test sync +2022-08-04 09:13:37 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:37 STATE: test-node-wasm.js event: image +2022-08-04 09:13:38 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:38 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:38 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-08-04 09:13:38 DATA:  test-node-wasm.js result: performance: load: null total: 394 +2022-08-04 09:13:38 STATE: test-node-wasm.js passed: default sync 1 female 0.97 +2022-08-04 09:13:38 INFO:  test-node-wasm.js test: image process +2022-08-04 09:13:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-04 09:13:38 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2022-08-04 09:13:38 INFO:  test-node-wasm.js test: image null +2022-08-04 09:13:38 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor +2022-08-04 09:13:38 INFO:  test-node-wasm.js test face similarity +2022-08-04 09:13:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-04 09:13:38 STATE: test-node-wasm.js event: image +2022-08-04 09:13:38 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:38 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:38 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-08-04 09:13:38 DATA:  test-node-wasm.js result: performance: load: null total: 372 +2022-08-04 09:13:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:38 STATE: test-node-wasm.js event: image +2022-08-04 09:13:39 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:39 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:39 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-08-04 09:13:39 DATA:  test-node-wasm.js result: performance: load: null total: 472 +2022-08-04 09:13:39 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-04 09:13:39 STATE: test-node-wasm.js event: image +2022-08-04 09:13:39 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:39 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:39 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-08-04 09:13:39 DATA:  test-node-wasm.js result: performance: load: null total: 386 +2022-08-04 09:13:39 STATE: test-node-wasm.js passed: face descriptor +2022-08-04 09:13:39 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} +2022-08-04 09:13:39 INFO:  test-node-wasm.js test face matching +2022-08-04 09:13:39 STATE: test-node-wasm.js passed: face database 40 +2022-08-04 09:13:39 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-08-04 09:13:39 INFO:  test-node-wasm.js test object +2022-08-04 09:13:40 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:40 STATE: test-node-wasm.js event: image +2022-08-04 09:13:40 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:40 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-08-04 09:13:40 DATA:  test-node-wasm.js result: performance: load: null total: 431 +2022-08-04 09:13:40 STATE: test-node-wasm.js passed: object result match +2022-08-04 09:13:40 INFO:  test-node-wasm.js test sensitive +2022-08-04 09:13:40 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:40 STATE: test-node-wasm.js event: image +2022-08-04 09:13:41 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:41 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:41 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-08-04 09:13:41 DATA:  test-node-wasm.js result: performance: load: null total: 442 +2022-08-04 09:13:41 STATE: test-node-wasm.js passed: sensitive result match +2022-08-04 09:13:41 STATE: test-node-wasm.js passed: sensitive face result match +2022-08-04 09:13:41 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-08-04 09:13:41 STATE: test-node-wasm.js passed: sensitive body result match +2022-08-04 09:13:41 STATE: test-node-wasm.js passed: sensitive hand result match +2022-08-04 09:13:41 INFO:  test-node-wasm.js test detectors +2022-08-04 09:13:41 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:41 STATE: test-node-wasm.js event: image +2022-08-04 09:13:41 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:41 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:41 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-08-04 09:13:41 DATA:  test-node-wasm.js result: performance: load: null total: 269 +2022-08-04 09:13:41 STATE: test-node-wasm.js passed: detector result face match +2022-08-04 09:13:41 STATE: test-node-wasm.js passed: detector result hand match +2022-08-04 09:13:41 INFO:  test-node-wasm.js test: multi-instance +2022-08-04 09:13:41 STATE: test-node-wasm.js event: image +2022-08-04 09:13:42 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:42 STATE: test-node-wasm.js passed: detect: random default +2022-08-04 09:13:42 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} +2022-08-04 09:13:42 DATA:  test-node-wasm.js result: performance: load: null total: 239 +2022-08-04 09:13:42 INFO:  test-node-wasm.js test: first instance +2022-08-04 09:13:42 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-04 09:13:42 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:42 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-08-04 09:13:42 DATA:  test-node-wasm.js result: performance: load: null total: 280 +2022-08-04 09:13:42 INFO:  test-node-wasm.js test: second instance +2022-08-04 09:13:42 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-04 09:13:42 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:42 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-08-04 09:13:42 DATA:  test-node-wasm.js result: performance: load: null total: 255 +2022-08-04 09:13:42 INFO:  test-node-wasm.js test: concurrent +2022-08-04 09:13:42 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-04 09:13:42 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-04 09:13:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-04 09:13:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-04 09:13:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-04 09:13:44 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:44 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-08-04 09:13:44 STATE: test-node-wasm.js event: image +2022-08-04 09:13:44 STATE: test-node-wasm.js event: image +2022-08-04 09:13:44 STATE: test-node-wasm.js event: image +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2455 +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2455 +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2721 +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2721 +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2721 +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2721 +2022-08-04 09:13:46 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2334 +2022-08-04 09:13:46 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:46 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2334 +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-08-04 09:13:46 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-08-04 09:13:46 DATA:  test-node-wasm.js result: performance: load: null total: 2334 +2022-08-04 09:13:46 INFO:  test-node-wasm.js test: monkey-patch +2022-08-04 09:13:46 STATE: test-node-wasm.js event: image +2022-08-04 09:13:46 STATE: test-node-wasm.js event: detect +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: monkey patch +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: segmentation [65536] +2022-08-04 09:13:46 STATE: test-node-wasm.js passeed: equal usage +2022-08-04 09:13:46 INFO:  test-node-wasm.js test: input compare +2022-08-04 09:13:46 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-08-04 09:13:47 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-08-04 09:13:47 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 +2022-08-04 09:13:47 INFO:  test-node-wasm.js events: {"image":21,"detect":21,"warmup":2} +2022-08-04 09:13:47 INFO:  test-node-wasm.js tensors 1929 +2022-08-04 09:13:47 INFO:  test-node-wasm.js test complete: 17201 ms +2022-08-04 09:13:47 INFO:  all tests complete +2022-08-04 09:13:47 INFO:  failed: {"count":0,"messages":[]} +2022-08-04 09:13:47 INFO:  status: {"test":"test-node.js","passed":101,"failed":0} +2022-08-04 09:13:47 INFO:  status: {"test":"test-node-gpu.js","passed":101,"failed":0} +2022-08-04 09:13:47 INFO:  status: {"test":"test-node-wasm.js","passed":102,"failed":0}