diff --git a/CHANGELOG.md b/CHANGELOG.md index 73989edb..5d205e01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/human - Version: **2.9.0** + Version: **2.9.1** Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition** Author: **Vladimir Mandic ** @@ -9,8 +9,12 @@ ## Changelog -### **HEAD -> main** 2022/07/21 mandic00@live.com +### **2.9.1** 2022/07/25 mandic00@live.com + +### **origin/main** 2022/07/23 mandic00@live.com + +- full rebuild - release cleanup - tflite experiments - add load monitor test diff --git a/TODO.md b/TODO.md index dc5cb3cc..7bcbcb6d 100644 --- a/TODO.md +++ b/TODO.md @@ -20,6 +20,7 @@ N/A

## Known Issues + ### Face with Attention `FaceMesh-Landmarks` model is supported only with `CPU` and `WebGL` backends due to `TFJS` issues @@ -48,16 +49,3 @@ Feature is automatically disabled in **NodeJS** without user impact ## Pending Release Changes -- install production-only dependencies by default - results in a must faster and smaller `human` installation - to install all dependencies use `npm install @vladmandic/human --production=false` -- switch to production `@tensorflow/tfjs` for browsers - `tfjs` has stabilized in recent versions so its not necessary to run a custom bundle anymore -- add **webview** support -- add `getModelStats` method -- extract model stats in build process -- typedoc fixes -- add face contours to results -- improve face compare in demo app -- update dependencies and `tfjs` -- `gear` model fixes diff --git a/demo/faceid/index.js.map b/demo/faceid/index.js.map index 5a55cff7..a4aeddf4 100644 --- a/demo/faceid/index.js.map +++ b/demo/faceid/index.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["index.ts", "indexdb.ts"], "sourcesContent": ["/**\n * Human demo for browsers\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\nimport { Human, TensorLike, FaceResult } from '../../dist/human.esm.js'; // equivalent of @vladmandic/Human\nimport * as indexDb from './indexdb'; // methods to deal with indexdb\n\nconst humanConfig = { // user configuration for human, used to fine-tune behavior\n modelBasePath: '../../models',\n filter: { equalization: true }, // lets run with histogram equilizer\n face: {\n enabled: true,\n detector: { rotation: true, return: true, cropFactor: 1.6, mask: false }, // return tensor is used to get detected face image\n description: { enabled: true }, // default model for face descriptor extraction is faceres\n mobilefacenet: { enabled: false, modelPath: 'https://vladmandic.github.io/human-models/models/mobilefacenet.json' }, // alternative model\n iris: { enabled: true }, // needed to determine gaze direction\n emotion: { enabled: false }, // not needed\n antispoof: { enabled: true }, // enable optional antispoof module\n liveness: { enabled: true }, // enable optional liveness module\n },\n body: { enabled: false },\n hand: { enabled: false },\n object: { enabled: false },\n gesture: { enabled: true }, // parses face and iris gestures\n};\n\n// const matchOptions = { order: 2, multiplier: 1000, min: 0.0, max: 1.0 }; // for embedding model\nconst matchOptions = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }; // for faceres model\n\nconst options = {\n minConfidence: 0.6, // overal face confidence for box, face, gender, real, live\n minSize: 224, // min input to face descriptor model before degradation\n maxTime: 10000, // max time before giving up\n blinkMin: 10, // minimum duration of a valid blink\n blinkMax: 800, // maximum duration of a valid blink\n threshold: 0.5, // minimum similarity\n mask: humanConfig.face.detector.mask,\n rotation: humanConfig.face.detector.rotation,\n cropFactor: humanConfig.face.detector.cropFactor,\n ...matchOptions,\n};\n\nconst ok = { // must meet all rules\n faceCount: false,\n faceConfidence: false,\n facingCenter: false,\n lookingCenter: false,\n blinkDetected: false,\n faceSize: false,\n antispoofCheck: false,\n livenessCheck: false,\n elapsedMs: 0, // total time while waiting for valid face\n};\nconst allOk = () => ok.faceCount && ok.faceSize && ok.blinkDetected && ok.facingCenter && ok.lookingCenter && ok.faceConfidence && ok.antispoofCheck && ok.livenessCheck;\nconst current: { face: FaceResult | null, record: indexDb.FaceRecord | null } = { face: null, record: null }; // current face record and matched database record\n\nconst blink = { // internal timers for blink start/end/duration\n start: 0,\n end: 0,\n time: 0,\n};\n\n// let db: Array<{ name: string, source: string, embedding: number[] }> = []; // holds loaded face descriptor database\nconst human = new Human(humanConfig); // create instance of human with overrides from user configuration\n\nhuman.env['perfadd'] = false; // is performance data showing instant or total values\nhuman.draw.options.font = 'small-caps 18px \"Lato\"'; // set font used to draw labels when using draw methods\nhuman.draw.options.lineHeight = 20;\n\nconst dom = { // grab instances of dom objects so we dont have to look them up later\n video: document.getElementById('video') as HTMLVideoElement,\n canvas: document.getElementById('canvas') as HTMLCanvasElement,\n log: document.getElementById('log') as HTMLPreElement,\n fps: document.getElementById('fps') as HTMLPreElement,\n match: document.getElementById('match') as HTMLDivElement,\n name: document.getElementById('name') as HTMLInputElement,\n save: document.getElementById('save') as HTMLSpanElement,\n delete: document.getElementById('delete') as HTMLSpanElement,\n retry: document.getElementById('retry') as HTMLDivElement,\n source: document.getElementById('source') as HTMLCanvasElement,\n ok: document.getElementById('ok') as HTMLDivElement,\n};\nconst timestamp = { detect: 0, draw: 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\nlet startTime = 0;\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 printFPS = (msg) => dom.fps.innerText = msg; // print status element\n\nasync function webCam() { // initialize webcam\n printFPS('starting webcam...');\n // @ts-ignore resizeMode is not yet defined in tslib\n const cameraOptions: MediaStreamConstraints = { audio: false, video: { facingMode: 'user', resizeMode: 'none', width: { ideal: document.body.clientWidth } } };\n const stream: MediaStream = await navigator.mediaDevices.getUserMedia(cameraOptions);\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 if (human.env.initial) log('video:', dom.video.videoWidth, dom.video.videoHeight, '|', stream.getVideoTracks()[0].label);\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 (current.face && current.face.tensor) human.tf.dispose(current.face.tensor); // dispose previous tensor\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 now = human.now();\n fps.detect = 1000 / (now - timestamp.detect);\n timestamp.detect = now;\n requestAnimationFrame(detectionLoop); // start new frame immediately\n }\n}\n\nasync function validationLoop(): Promise { // main screen refresh loop\n const interpolated = await human.next(human.result); // smoothen result using last-known results\n await human.draw.canvas(dom.video, dom.canvas); // draw canvas to screen\n await human.draw.all(dom.canvas, interpolated); // draw labels, boxes, lines, etc.\n const now = human.now();\n fps.draw = 1000 / (now - timestamp.draw);\n timestamp.draw = now;\n printFPS(`fps: ${fps.detect.toFixed(1).padStart(5, ' ')} detect | ${fps.draw.toFixed(1).padStart(5, ' ')} draw`); // write status\n ok.faceCount = human.result.face.length === 1; // must be exactly detected face\n if (ok.faceCount) { // skip the rest if no face\n const gestures: string[] = Object.values(human.result.gesture).map((gesture) => gesture.gesture); // flatten all gestures\n if (gestures.includes('blink left eye') || gestures.includes('blink right eye')) blink.start = human.now(); // blink starts when eyes get closed\n if (blink.start > 0 && !gestures.includes('blink left eye') && !gestures.includes('blink right eye')) blink.end = human.now(); // if blink started how long until eyes are back open\n ok.blinkDetected = ok.blinkDetected || (Math.abs(blink.end - blink.start) > options.blinkMin && Math.abs(blink.end - blink.start) < options.blinkMax);\n if (ok.blinkDetected && blink.time === 0) blink.time = Math.trunc(blink.end - blink.start);\n ok.facingCenter = gestures.includes('facing center');\n ok.lookingCenter = gestures.includes('looking center'); // must face camera and look at camera\n ok.faceConfidence = (human.result.face[0].boxScore || 0) > options.minConfidence && (human.result.face[0].faceScore || 0) > options.minConfidence && (human.result.face[0].genderScore || 0) > options.minConfidence;\n ok.antispoofCheck = (human.result.face[0].real || 0) > options.minConfidence;\n ok.livenessCheck = (human.result.face[0].live || 0) > options.minConfidence;\n ok.faceSize = human.result.face[0].box[2] >= options.minSize && human.result.face[0].box[3] >= options.minSize;\n }\n let y = 32;\n for (const [key, val] of Object.entries(ok)) {\n let el = document.getElementById(`ok-${key}`);\n if (!el) {\n el = document.createElement('div');\n el.innerText = key;\n el.className = 'ok';\n el.style.top = `${y}px`;\n dom.ok.appendChild(el);\n }\n if (typeof val === 'boolean') el.style.backgroundColor = val ? 'lightgreen' : 'lightcoral';\n else el.innerText = `${key}:${val}`;\n y += 28;\n }\n if (allOk()) { // all criteria met\n dom.video.pause();\n return human.result.face[0];\n }\n if (ok.elapsedMs > options.maxTime) { // give up\n dom.video.pause();\n return human.result.face[0];\n } else { // run again\n ok.elapsedMs = Math.trunc(human.now() - startTime);\n return new Promise((resolve) => {\n setTimeout(async () => {\n const res = await validationLoop(); // run validation loop until conditions are met\n if (res) resolve(human.result.face[0]); // recursive promise resolve\n }, 30); // use to slow down refresh from max refresh rate to target of 30 fps\n });\n }\n}\n\nasync function saveRecords() {\n if (dom.name.value.length > 0) {\n const image = dom.canvas.getContext('2d')?.getImageData(0, 0, dom.canvas.width, dom.canvas.height) as ImageData;\n const rec = { id: 0, name: dom.name.value, descriptor: current.face?.embedding as number[], image };\n await indexDb.save(rec);\n log('saved face record:', rec.name);\n } else {\n log('invalid name');\n }\n}\n\nasync function deleteRecord() {\n if (current.record && current.record.id > 0) {\n await indexDb.remove(current.record);\n }\n}\n\nasync function detectFace() {\n dom.canvas.getContext('2d')?.clearRect(0, 0, options.minSize, options.minSize);\n if (!current.face || !current.face.tensor || !current.face.embedding) return false;\n // eslint-disable-next-line no-console\n console.log('face record:', current.face);\n human.tf.browser.toPixels(current.face.tensor as unknown as TensorLike, dom.canvas);\n if (await indexDb.count() === 0) {\n log('face database is empty');\n document.body.style.background = 'black';\n dom.delete.style.display = 'none';\n return false;\n }\n const db = await indexDb.load();\n const descriptors = db.map((rec) => rec.descriptor);\n const res = await human.match(current.face.embedding, descriptors, matchOptions);\n current.record = db[res.index] || null;\n if (current.record) {\n log(`best match: ${current.record.name} | id: ${current.record.id} | similarity: ${Math.round(1000 * res.similarity) / 10}%`);\n dom.name.value = current.record.name;\n dom.source.style.display = '';\n dom.source.getContext('2d')?.putImageData(current.record.image, 0, 0);\n }\n document.body.style.background = res.similarity > options.threshold ? 'darkgreen' : 'maroon';\n return res.similarity > options.threshold;\n}\n\nasync function main() { // main entry point\n ok.faceCount = false;\n ok.faceConfidence = false;\n ok.facingCenter = false;\n ok.blinkDetected = false;\n ok.faceSize = false;\n ok.antispoofCheck = false;\n ok.livenessCheck = false;\n ok.elapsedMs = 0;\n dom.match.style.display = 'none';\n dom.retry.style.display = 'none';\n dom.source.style.display = 'none';\n document.body.style.background = 'black';\n await webCam();\n await detectionLoop(); // start detection loop\n startTime = human.now();\n current.face = await validationLoop(); // start validation loop\n dom.canvas.width = current.face?.tensor?.shape[1] || options.minSize;\n dom.canvas.height = current.face?.tensor?.shape[0] || options.minSize;\n dom.source.width = dom.canvas.width;\n dom.source.height = dom.canvas.height;\n dom.canvas.style.width = '';\n dom.match.style.display = 'flex';\n dom.save.style.display = 'flex';\n dom.delete.style.display = 'flex';\n dom.retry.style.display = 'block';\n if (!allOk()) { // is all criteria met?\n log('did not find valid face');\n return false;\n } else {\n return detectFace();\n }\n}\n\nasync function init() {\n log('human version:', human.version, '| tfjs version:', human.tf.version['tfjs-core']);\n log('options:', JSON.stringify(options).replace(/{|}|\"|\\[|\\]/g, '').replace(/,/g, ' '));\n printFPS('loading...');\n log('known face records:', await indexDb.count());\n await webCam(); // start webcam\n await human.load(); // preload all models\n printFPS('initializing...');\n dom.retry.addEventListener('click', main);\n dom.save.addEventListener('click', saveRecords);\n dom.delete.addEventListener('click', deleteRecord);\n await human.warmup(); // warmup function to initialize backend for future faster detection\n await main();\n}\n\nwindow.onload = init;\n", "let db: IDBDatabase; // instance of indexdb\n\nconst database = 'human';\nconst table = 'person';\n\nexport type FaceRecord = { id: number, name: string, descriptor: number[], image: ImageData };\n\n// eslint-disable-next-line no-console\nconst log = (...msg) => console.log('indexdb', ...msg);\n\nexport async function open() {\n if (db) return true;\n return new Promise((resolve) => {\n const request: IDBOpenDBRequest = indexedDB.open(database, 1);\n request.onerror = (evt) => log('error:', evt);\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => { // create if doesnt exist\n log('create:', evt.target);\n db = (evt.target as IDBOpenDBRequest).result;\n db.createObjectStore(table, { keyPath: 'id', autoIncrement: true });\n };\n request.onsuccess = (evt) => { // open\n db = (evt.target as IDBOpenDBRequest).result as IDBDatabase;\n log('open:', db);\n resolve(true);\n };\n });\n}\n\nexport async function load(): Promise {\n const faceDB: Array = [];\n if (!db) await open(); // open or create if not already done\n return new Promise((resolve) => {\n const cursor: IDBRequest = db.transaction([table], 'readwrite').objectStore(table).openCursor(null, 'next');\n cursor.onerror = (evt) => log('load error:', evt);\n cursor.onsuccess = (evt) => {\n if ((evt.target as IDBRequest).result) {\n faceDB.push((evt.target as IDBRequest).result.value);\n (evt.target as IDBRequest).result.continue();\n } else {\n resolve(faceDB);\n }\n };\n });\n}\n\nexport async function count(): Promise {\n if (!db) await open(); // open or create if not already done\n return new Promise((resolve) => {\n const store: IDBRequest = db.transaction([table], 'readwrite').objectStore(table).count();\n store.onerror = (evt) => log('count error:', evt);\n store.onsuccess = () => resolve(store.result);\n });\n}\n\nexport async function save(faceRecord: FaceRecord) {\n if (!db) await open(); // open or create if not already done\n const newRecord = { name: faceRecord.name, descriptor: faceRecord.descriptor, image: faceRecord.image }; // omit id as its autoincrement\n db.transaction([table], 'readwrite').objectStore(table).put(newRecord);\n log('save:', newRecord);\n}\n\nexport async function remove(faceRecord: FaceRecord) {\n if (!db) await open(); // open or create if not already done\n db.transaction([table], 'readwrite').objectStore(table).delete(faceRecord.id); // delete based on id\n log('delete:', faceRecord);\n}\n"], - "mappings": "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", - "names": [] + "mappings": "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", + "names": ["Human", "db", "database", "table", "log", "msg", "open", "resolve", "request", "evt", "load", "faceDB", "cursor", "count", "store", "save", "faceRecord", "newRecord", "remove", "humanConfig", "matchOptions", "options", "ok", "allOk", "current", "blink", "human", "Human", "dom", "timestamp", "fps", "startTime", "log", "msg", "printFPS", "webCam", "cameraOptions", "stream", "ready", "resolve", "detectionLoop", "now", "validationLoop", "interpolated", "gestures", "gesture", "y", "key", "val", "el", "saveRecords", "_a", "_b", "image", "rec", "save", "deleteRecord", "remove", "detectFace", "count", "db", "load", "descriptors", "res", "main", "_c", "_d", "init"] } diff --git a/demo/typescript/index.js.map b/demo/typescript/index.js.map index a84b7ed3..3f5a5d0c 100644 --- a/demo/typescript/index.js.map +++ b/demo/typescript/index.js.map @@ -2,6 +2,6 @@ "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": "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", - "names": [] + "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"] } diff --git a/test/build.log b/test/build.log index 8552dbcf..175b5b22 100644 --- a/test/build.log +++ b/test/build.log @@ -1,24 +1,24 @@ -2022-07-23 14:42:56 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.0"} -2022-07-23 14:42:56 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-07-23 14:42:56 INFO:  Toolchain: {"build":"0.7.7","esbuild":"0.14.49","typescript":"4.7.4","typedoc":"0.23.8","eslint":"8.20.0"} -2022-07-23 14:42:56 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-07-23 14:42:56 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} -2022-07-23 14:42:56 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-23 14:42:56 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":74,"inputBytes":647934,"outputBytes":304014} -2022-07-23 14:42:56 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-23 14:42:56 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":74,"inputBytes":647938,"outputBytes":304018} -2022-07-23 14:42:56 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-23 14:42:56 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":74,"inputBytes":647990,"outputBytes":304068} -2022-07-23 14:42:56 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-23 14:42:56 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-23 14:42:56 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":74,"inputBytes":647909,"outputBytes":302893} -2022-07-23 14:42:56 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":2799051} -2022-07-23 14:42:57 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":74,"inputBytes":3446377,"outputBytes":1678221} -2022-07-23 14:42:57 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":74,"inputBytes":3446377,"outputBytes":3077876} -2022-07-23 14:43:03 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} -2022-07-23 14:43:05 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":76,"generated":true} -2022-07-23 14:43:05 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6414,"outputBytes":3094} -2022-07-23 14:43:05 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15174,"outputBytes":7820} -2022-07-23 14:43:16 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":107,"errors":0,"warnings":0} -2022-07-23 14:43:16 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-07-23 14:43:16 INFO:  Done... +2022-07-25 08:30:42 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.1"} +2022-07-25 08:30:42 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-07-25 08:30:42 INFO:  Toolchain: {"build":"0.7.7","esbuild":"0.14.50","typescript":"4.7.4","typedoc":"0.23.9","eslint":"8.20.0"} +2022-07-25 08:30:42 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-07-25 08:30:42 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} +2022-07-25 08:30:42 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-25 08:30:42 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":74,"inputBytes":647910,"outputBytes":304014} +2022-07-25 08:30:42 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-25 08:30:42 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":74,"inputBytes":647914,"outputBytes":304018} +2022-07-25 08:30:42 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-25 08:30:42 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":74,"inputBytes":647966,"outputBytes":304068} +2022-07-25 08:30:42 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-25 08:30:42 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-25 08:30:42 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":74,"inputBytes":647885,"outputBytes":302893} +2022-07-25 08:30:42 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":2799989} +2022-07-25 08:30:42 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":74,"inputBytes":3447291,"outputBytes":1678221} +2022-07-25 08:30:42 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":74,"inputBytes":3447291,"outputBytes":3078832} +2022-07-25 08:30:48 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} +2022-07-25 08:30:51 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":76,"generated":true} +2022-07-25 08:30:51 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6414,"outputBytes":3094} +2022-07-25 08:30:51 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15174,"outputBytes":7820} +2022-07-25 08:31:01 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":107,"errors":0,"warnings":0} +2022-07-25 08:31:01 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-07-25 08:31:01 INFO:  Done... diff --git a/test/test.log b/test/test.log index 40ea7d93..b5ca062b 100644 --- a/test/test.log +++ b/test/test.log @@ -1,684 +1,684 @@ -2022-07-23 14:43:25 INFO:  @vladmandic/human version 2.9.0 -2022-07-23 14:43:25 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.15.0 -2022-07-23 14:43:25 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2022-07-23 14:43:25 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-23 14:43:25 INFO:  -2022-07-23 14:43:25 INFO:  test-node.js start -2022-07-23 14:43:25 INFO:  test-node.js test: configuration validation -2022-07-23 14:43:25 STATE: test-node.js passed: configuration default validation [] -2022-07-23 14:43:25 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-07-23 14:43:25 INFO:  test-node.js test: model load -2022-07-23 14:43:25 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-23 14:43:25 INFO:  test-node.js test: warmup -2022-07-23 14:43:25 STATE: test-node.js passed: create human -2022-07-23 14:43:25 INFO:  test-node.js human version: 2.9.0 -2022-07-23 14:43:25 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.15.0 -2022-07-23 14:43:25 INFO:  test-node.js tfjs version: 3.19.0 -2022-07-23 14:43:25 INFO:  test-node.js tensorflow binding version: 2.7.3-dev20220521 -2022-07-23 14:43:25 STATE: test-node.js passed: set backend: tensorflow -2022-07-23 14:43:25 STATE: test-node.js tensors 1921 -2022-07-23 14:43:25 STATE: test-node.js passed: load models -2022-07-23 14:43:25 STATE: test-node.js result: defined models: 22 loaded models: 12 -2022-07-23 14:43:25 STATE: test-node.js passed: warmup: none default -2022-07-23 14:43:25 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-07-23 14:43:25 DATA:  test-node.js result: performance: load: null total: null -2022-07-23 14:43:25 STATE: test-node.js passed: warmup none result match -2022-07-23 14:43:25 STATE: test-node.js event: image -2022-07-23 14:43:26 STATE: test-node.js event: detect -2022-07-23 14:43:26 STATE: test-node.js event: warmup -2022-07-23 14:43:26 STATE: test-node.js passed: warmup: face default -2022-07-23 14:43:26 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-23 14:43:26 DATA:  test-node.js result: performance: load: null total: 398 -2022-07-23 14:43:26 STATE: test-node.js passed: warmup face result match -2022-07-23 14:43:26 STATE: test-node.js event: image -2022-07-23 14:43:26 STATE: test-node.js event: detect -2022-07-23 14:43:26 STATE: test-node.js event: warmup -2022-07-23 14:43:26 STATE: test-node.js passed: warmup: body default -2022-07-23 14:43:26 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-23 14:43:26 DATA:  test-node.js result: performance: load: null total: 265 -2022-07-23 14:43:26 STATE: test-node.js passed: warmup body result match -2022-07-23 14:43:26 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-23 14:43:26 INFO:  test-node.js test: details verification -2022-07-23 14:43:26 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:26 STATE: test-node.js event: image -2022-07-23 14:43:27 STATE: test-node.js event: detect -2022-07-23 14:43:27 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:27 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-23 14:43:27 DATA:  test-node.js result: performance: load: null total: 248 -2022-07-23 14:43:27 STATE: test-node.js passed: details face length 1 -2022-07-23 14:43:27 STATE: test-node.js passed: details face score 1 0.93 1 -2022-07-23 14:43:27 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-07-23 14:43:27 STATE: test-node.js passed: details face arrays 4 478 1024 -2022-07-23 14:43:27 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-07-23 14:43:27 STATE: test-node.js passed: details face anti-spoofing 0.79 -2022-07-23 14:43:27 STATE: test-node.js passed: details face liveness 0.83 -2022-07-23 14:43:27 STATE: test-node.js passed: details body length 1 -2022-07-23 14:43:27 STATE: test-node.js passed: details body 0.92 17 6 -2022-07-23 14:43:27 STATE: test-node.js passed: details hand length 1 -2022-07-23 14:43:27 STATE: test-node.js passed: details hand 0.51 0.73 point -2022-07-23 14:43:27 STATE: test-node.js passed: details hand arrays 21 5 7 -2022-07-23 14:43:27 STATE: test-node.js passed: details gesture length 7 -2022-07-23 14:43:27 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-07-23 14:43:27 STATE: test-node.js passed: details object length 1 -2022-07-23 14:43:27 STATE: test-node.js passed: details object 0.72 person -2022-07-23 14:43:27 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-07-23 14:43:27 STATE: test-node.js event: image -2022-07-23 14:43:27 STATE: test-node.js event: detect -2022-07-23 14:43:27 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-07-23 14:43:27 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-07-23 14:43:27 STATE: test-node.js event: image -2022-07-23 14:43:27 STATE: test-node.js event: detect -2022-07-23 14:43:27 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-07-23 14:43:28 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:28 STATE: test-node.js event: image -2022-07-23 14:43:28 STATE: test-node.js event: detect -2022-07-23 14:43:28 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-07-23 14:43:28 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:28 STATE: test-node.js event: image -2022-07-23 14:43:28 STATE: test-node.js event: detect -2022-07-23 14:43:28 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-07-23 14:43:28 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-07-23 14:43:28 STATE: test-node.js event: image -2022-07-23 14:43:29 STATE: test-node.js event: detect -2022-07-23 14:43:29 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-07-23 14:43:29 INFO:  test-node.js test default -2022-07-23 14:43:29 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:29 STATE: test-node.js event: image -2022-07-23 14:43:29 STATE: test-node.js event: detect -2022-07-23 14:43:29 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:29 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-23 14:43:29 DATA:  test-node.js result: performance: load: null total: 221 -2022-07-23 14:43:29 STATE: test-node.js passed: default result face match 1 female 0.97 -2022-07-23 14:43:29 INFO:  test-node.js test sync -2022-07-23 14:43:29 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:29 STATE: test-node.js event: image -2022-07-23 14:43:29 STATE: test-node.js event: detect -2022-07-23 14:43:29 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:29 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-23 14:43:29 DATA:  test-node.js result: performance: load: null total: 214 -2022-07-23 14:43:29 STATE: test-node.js passed: default sync 1 female 0.97 -2022-07-23 14:43:29 INFO:  test-node.js test: image process -2022-07-23 14:43:29 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:29 STATE: test-node.js passed: image input null [1,256,256,3] -2022-07-23 14:43:29 INFO:  test-node.js test: image null -2022-07-23 14:43:29 STATE: test-node.js passed: invalid input could not convert input to tensor -2022-07-23 14:43:29 INFO:  test-node.js test face similarity -2022-07-23 14:43:29 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:29 STATE: test-node.js event: image -2022-07-23 14:43:30 STATE: test-node.js event: detect -2022-07-23 14:43:30 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:30 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-23 14:43:30 DATA:  test-node.js result: performance: load: null total: 208 -2022-07-23 14:43:30 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:30 STATE: test-node.js event: image -2022-07-23 14:43:30 STATE: test-node.js event: detect -2022-07-23 14:43:30 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:30 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-23 14:43:30 DATA:  test-node.js result: performance: load: null total: 222 -2022-07-23 14:43:30 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-23 14:43:30 STATE: test-node.js event: image -2022-07-23 14:43:30 STATE: test-node.js event: detect -2022-07-23 14:43:30 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:30 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-23 14:43:30 DATA:  test-node.js result: performance: load: null total: 200 -2022-07-23 14:43:30 STATE: test-node.js passed: face descriptor -2022-07-23 14:43:30 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} -2022-07-23 14:43:30 INFO:  test-node.js test face matching -2022-07-23 14:43:30 STATE: test-node.js passed: face database 40 -2022-07-23 14:43:30 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-23 14:43:30 INFO:  test-node.js test object -2022-07-23 14:43:30 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:30 STATE: test-node.js event: image -2022-07-23 14:43:31 STATE: test-node.js event: detect -2022-07-23 14:43:31 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:31 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-23 14:43:31 DATA:  test-node.js result: performance: load: null total: 216 -2022-07-23 14:43:31 STATE: test-node.js passed: object result match -2022-07-23 14:43:31 INFO:  test-node.js test sensitive -2022-07-23 14:43:31 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:31 STATE: test-node.js event: image -2022-07-23 14:43:31 STATE: test-node.js event: detect -2022-07-23 14:43:31 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:31 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-23 14:43:31 DATA:  test-node.js result: performance: load: null total: 238 -2022-07-23 14:43:31 STATE: test-node.js passed: sensitive result match -2022-07-23 14:43:31 STATE: test-node.js passed: sensitive face result match -2022-07-23 14:43:31 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-07-23 14:43:31 STATE: test-node.js passed: sensitive body result match -2022-07-23 14:43:31 STATE: test-node.js passed: sensitive hand result match -2022-07-23 14:43:31 INFO:  test-node.js test detectors -2022-07-23 14:43:31 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:31 STATE: test-node.js event: image -2022-07-23 14:43:31 STATE: test-node.js event: detect -2022-07-23 14:43:31 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:31 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-23 14:43:31 DATA:  test-node.js result: performance: load: null total: 147 -2022-07-23 14:43:31 STATE: test-node.js passed: detector result face match -2022-07-23 14:43:31 STATE: test-node.js passed: detector result hand match -2022-07-23 14:43:31 INFO:  test-node.js test: multi-instance -2022-07-23 14:43:31 STATE: test-node.js event: image -2022-07-23 14:43:32 STATE: test-node.js event: detect -2022-07-23 14:43:32 STATE: test-node.js passed: detect: random default -2022-07-23 14:43:32 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.06,"keypoints":15} -2022-07-23 14:43:32 DATA:  test-node.js result: performance: load: null total: 139 -2022-07-23 14:43:32 INFO:  test-node.js test: first instance -2022-07-23 14:43:32 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-23 14:43:32 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:32 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-23 14:43:32 DATA:  test-node.js result: performance: load: null total: 141 -2022-07-23 14:43:32 INFO:  test-node.js test: second instance -2022-07-23 14:43:32 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-23 14:43:32 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:32 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-23 14:43:32 DATA:  test-node.js result: performance: load: null total: 150 -2022-07-23 14:43:32 INFO:  test-node.js test: concurrent -2022-07-23 14:43:32 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:32 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:32 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:32 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:32 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-23 14:43:32 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-23 14:43:33 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:33 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-07-23 14:43:33 STATE: test-node.js event: image -2022-07-23 14:43:33 STATE: test-node.js event: image -2022-07-23 14:43:33 STATE: test-node.js event: image -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1393 -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1393 -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1527 -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1527 -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1527 -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1527 -2022-07-23 14:43:34 STATE: test-node.js event: detect -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1288 -2022-07-23 14:43:34 STATE: test-node.js event: detect -2022-07-23 14:43:34 STATE: test-node.js event: detect -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1288 -2022-07-23 14:43:34 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:34 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-23 14:43:34 DATA:  test-node.js result: performance: load: null total: 1288 -2022-07-23 14:43:34 INFO:  test-node.js test: monkey-patch -2022-07-23 14:43:34 STATE: test-node.js event: image -2022-07-23 14:43:34 STATE: test-node.js event: detect -2022-07-23 14:43:34 STATE: test-node.js passed: monkey patch -2022-07-23 14:43:34 STATE: test-node.js passed: segmentation [65536] -2022-07-23 14:43:34 STATE: test-node.js passeed: equal usage -2022-07-23 14:43:34 INFO:  test-node.js test: input compare -2022-07-23 14:43:34 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-07-23 14:43:34 STATE: test-node.js passed: image compare 0 23.275441687091504 -2022-07-23 14:43:34 INFO:  test-node.js events: {"image":21,"detect":21,"warmup":2} -2022-07-23 14:43:34 INFO:  test-node.js tensors 1927 -2022-07-23 14:43:34 INFO:  test-node.js test complete: 9166 ms -2022-07-23 14:43:34 INFO:  -2022-07-23 14:43:34 INFO:  test-node-gpu.js start -2022-07-23 14:43:36 INFO:  test-node-gpu.js test: configuration validation -2022-07-23 14:43:36 STATE: test-node-gpu.js passed: configuration default validation [] -2022-07-23 14:43:36 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-07-23 14:43:36 INFO:  test-node-gpu.js test: model load -2022-07-23 14:43:36 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-23 14:43:36 INFO:  test-node-gpu.js test: warmup -2022-07-23 14:43:36 STATE: test-node-gpu.js passed: create human -2022-07-23 14:43:36 INFO:  test-node-gpu.js human version: 2.9.0 -2022-07-23 14:43:36 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.15.0 -2022-07-23 14:43:36 INFO:  test-node-gpu.js tfjs version: 3.19.0 -2022-07-23 14:43:36 INFO:  test-node-gpu.js tensorflow binding version: 2.7.3-dev20220521 -2022-07-23 14:43:36 STATE: test-node-gpu.js passed: set backend: tensorflow -2022-07-23 14:43:36 STATE: test-node-gpu.js tensors 1921 -2022-07-23 14:43:36 STATE: test-node-gpu.js passed: load models -2022-07-23 14:43:36 STATE: test-node-gpu.js result: defined models: 22 loaded models: 12 -2022-07-23 14:43:36 STATE: test-node-gpu.js passed: warmup: none default -2022-07-23 14:43:36 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-07-23 14:43:36 DATA:  test-node-gpu.js result: performance: load: null total: null -2022-07-23 14:43:36 STATE: test-node-gpu.js passed: warmup none result match -2022-07-23 14:43:36 STATE: test-node-gpu.js event: image -2022-07-23 14:43:40 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:40 STATE: test-node-gpu.js event: warmup -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: warmup: face default -2022-07-23 14:43:40 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-23 14:43:40 DATA:  test-node-gpu.js result: performance: load: null total: 3557 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: warmup face result match -2022-07-23 14:43:40 STATE: test-node-gpu.js event: image -2022-07-23 14:43:40 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:40 STATE: test-node-gpu.js event: warmup -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: warmup: body default -2022-07-23 14:43:40 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-23 14:43:40 DATA:  test-node-gpu.js result: performance: load: null total: 179 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: warmup body result match -2022-07-23 14:43:40 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-23 14:43:40 INFO:  test-node-gpu.js test: details verification -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:40 STATE: test-node-gpu.js event: image -2022-07-23 14:43:40 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:40 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-23 14:43:40 DATA:  test-node-gpu.js result: performance: load: null total: 168 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details face length 1 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details face score 1 0.93 1 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details face liveness 0.83 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details body length 1 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details body 0.92 17 6 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details hand length 1 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details gesture length 7 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details object length 1 -2022-07-23 14:43:40 STATE: test-node-gpu.js passed: details object 0.72 person -2022-07-23 14:43:41 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-07-23 14:43:41 STATE: test-node-gpu.js event: image -2022-07-23 14:43:41 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:41 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-07-23 14:43:41 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-07-23 14:43:41 STATE: test-node-gpu.js event: image -2022-07-23 14:43:41 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:41 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-07-23 14:43:41 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:41 STATE: test-node-gpu.js event: image -2022-07-23 14:43:41 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:41 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-07-23 14:43:42 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:42 STATE: test-node-gpu.js event: image -2022-07-23 14:43:42 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:42 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-07-23 14:43:42 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-07-23 14:43:42 STATE: test-node-gpu.js event: image -2022-07-23 14:43:42 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:42 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-07-23 14:43:42 INFO:  test-node-gpu.js test default -2022-07-23 14:43:42 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:42 STATE: test-node-gpu.js event: image -2022-07-23 14:43:42 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:42 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:42 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-23 14:43:42 DATA:  test-node-gpu.js result: performance: load: null total: 151 -2022-07-23 14:43:42 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 -2022-07-23 14:43:42 INFO:  test-node-gpu.js test sync -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:43 STATE: test-node-gpu.js event: image -2022-07-23 14:43:43 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:43 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-23 14:43:43 DATA:  test-node-gpu.js result: performance: load: null total: 161 -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: default sync 1 female 0.97 -2022-07-23 14:43:43 INFO:  test-node-gpu.js test: image process -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2022-07-23 14:43:43 INFO:  test-node-gpu.js test: image null -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor -2022-07-23 14:43:43 INFO:  test-node-gpu.js test face similarity -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:43 STATE: test-node-gpu.js event: image -2022-07-23 14:43:43 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:43 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-23 14:43:43 DATA:  test-node-gpu.js result: performance: load: null total: 156 -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:43 STATE: test-node-gpu.js event: image -2022-07-23 14:43:43 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:43 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-23 14:43:43 DATA:  test-node-gpu.js result: performance: load: null total: 163 -2022-07-23 14:43:43 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-23 14:43:43 STATE: test-node-gpu.js event: image -2022-07-23 14:43:44 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:44 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-23 14:43:44 DATA:  test-node-gpu.js result: performance: load: null total: 183 -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: face descriptor -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} -2022-07-23 14:43:44 INFO:  test-node-gpu.js test face matching -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: face database 40 -2022-07-23 14:43:44 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-23 14:43:44 INFO:  test-node-gpu.js test object -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:44 STATE: test-node-gpu.js event: image -2022-07-23 14:43:44 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:44 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-23 14:43:44 DATA:  test-node-gpu.js result: performance: load: null total: 198 -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: object result match -2022-07-23 14:43:44 INFO:  test-node-gpu.js test sensitive -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:44 STATE: test-node-gpu.js event: image -2022-07-23 14:43:44 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:44 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-23 14:43:44 DATA:  test-node-gpu.js result: performance: load: null total: 166 -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: sensitive result match -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: sensitive face result match -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: sensitive body result match -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: sensitive hand result match -2022-07-23 14:43:44 INFO:  test-node-gpu.js test detectors -2022-07-23 14:43:44 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:44 STATE: test-node-gpu.js event: image -2022-07-23 14:43:45 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:45 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-23 14:43:45 DATA:  test-node-gpu.js result: performance: load: null total: 89 -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: detector result face match -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: detector result hand match -2022-07-23 14:43:45 INFO:  test-node-gpu.js test: multi-instance -2022-07-23 14:43:45 STATE: test-node-gpu.js event: image -2022-07-23 14:43:45 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: detect: random default -2022-07-23 14:43:45 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-23 14:43:45 DATA:  test-node-gpu.js result: performance: load: null total: 86 -2022-07-23 14:43:45 INFO:  test-node-gpu.js test: first instance -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:45 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-23 14:43:45 DATA:  test-node-gpu.js result: performance: load: null total: 89 -2022-07-23 14:43:45 INFO:  test-node-gpu.js test: second instance -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:45 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-23 14:43:45 DATA:  test-node-gpu.js result: performance: load: null total: 77 -2022-07-23 14:43:45 INFO:  test-node-gpu.js test: concurrent -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:45 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-23 14:43:46 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-23 14:43:46 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:46 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:46 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-07-23 14:43:46 STATE: test-node-gpu.js event: image -2022-07-23 14:43:46 STATE: test-node-gpu.js event: image -2022-07-23 14:43:46 STATE: test-node-gpu.js event: image -2022-07-23 14:43:46 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:46 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-23 14:43:46 DATA:  test-node-gpu.js result: performance: load: null total: 915 -2022-07-23 14:43:46 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:46 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-23 14:43:46 DATA:  test-node-gpu.js result: performance: load: null total: 915 -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:47 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-23 14:43:47 DATA:  test-node-gpu.js result: performance: load: null total: 984 -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:47 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-23 14:43:47 DATA:  test-node-gpu.js result: performance: load: null total: 984 -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:47 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-23 14:43:47 DATA:  test-node-gpu.js result: performance: load: null total: 984 -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:47 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-23 14:43:47 DATA:  test-node-gpu.js result: performance: load: null total: 984 -2022-07-23 14:43:47 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:47 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-23 14:43:47 DATA:  test-node-gpu.js result: performance: load: null total: 730 -2022-07-23 14:43:47 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:47 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:47 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-23 14:43:47 DATA:  test-node-gpu.js result: performance: load: null total: 731 -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:47 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-23 14:43:47 DATA:  test-node-gpu.js result: performance: load: null total: 731 -2022-07-23 14:43:47 INFO:  test-node-gpu.js test: monkey-patch -2022-07-23 14:43:47 STATE: test-node-gpu.js event: image -2022-07-23 14:43:47 STATE: test-node-gpu.js event: detect -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: monkey patch -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: segmentation [65536] -2022-07-23 14:43:47 STATE: test-node-gpu.js passeed: equal usage -2022-07-23 14:43:47 INFO:  test-node-gpu.js test: input compare -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-07-23 14:43:47 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 -2022-07-23 14:43:47 INFO:  test-node-gpu.js events: {"image":21,"detect":21,"warmup":2} -2022-07-23 14:43:47 INFO:  test-node-gpu.js tensors 1927 -2022-07-23 14:43:47 INFO:  test-node-gpu.js test complete: 11604 ms -2022-07-23 14:43:48 INFO:  -2022-07-23 14:43:48 INFO:  test-node-wasm.js start -2022-07-23 14:43:48 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2022-07-23 14:43:48 INFO:  test-node-wasm.js test: configuration validation -2022-07-23 14:43:48 STATE: test-node-wasm.js passed: configuration default validation [] -2022-07-23 14:43:48 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-07-23 14:43:48 INFO:  test-node-wasm.js test: model load -2022-07-23 14:43:50 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-23 14:43:50 INFO:  test-node-wasm.js test: warmup -2022-07-23 14:43:50 STATE: test-node-wasm.js passed: create human -2022-07-23 14:43:50 INFO:  test-node-wasm.js human version: 2.9.0 -2022-07-23 14:43:50 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.15.0 -2022-07-23 14:43:50 INFO:  test-node-wasm.js tfjs version: 3.19.0 -2022-07-23 14:43:50 STATE: test-node-wasm.js passed: set backend: wasm -2022-07-23 14:43:50 STATE: test-node-wasm.js tensors 1921 -2022-07-23 14:43:50 STATE: test-node-wasm.js passed: load models -2022-07-23 14:43:50 STATE: test-node-wasm.js result: defined models: 22 loaded models: 12 -2022-07-23 14:43:50 STATE: test-node-wasm.js passed: warmup: none default -2022-07-23 14:43:50 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-07-23 14:43:50 DATA:  test-node-wasm.js result: performance: load: null total: null -2022-07-23 14:43:50 STATE: test-node-wasm.js passed: warmup none result match -2022-07-23 14:43:50 STATE: test-node-wasm.js event: image -2022-07-23 14:43:50 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:50 STATE: test-node-wasm.js event: warmup -2022-07-23 14:43:50 STATE: test-node-wasm.js passed: warmup: face default -2022-07-23 14:43:50 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-23 14:43:50 DATA:  test-node-wasm.js result: performance: load: null total: 535 -2022-07-23 14:43:50 STATE: test-node-wasm.js passed: warmup face result match -2022-07-23 14:43:50 STATE: test-node-wasm.js event: image -2022-07-23 14:43:51 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:51 STATE: test-node-wasm.js event: warmup -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: warmup: body default -2022-07-23 14:43:51 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-23 14:43:51 DATA:  test-node-wasm.js result: performance: load: null total: 402 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: warmup body result match -2022-07-23 14:43:51 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-23 14:43:51 INFO:  test-node-wasm.js test: details verification -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:51 STATE: test-node-wasm.js event: image -2022-07-23 14:43:51 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:51 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-23 14:43:51 DATA:  test-node-wasm.js result: performance: load: null total: 358 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details face length 1 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details face score 1 0.93 1 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details face liveness 0.83 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details body length 1 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details body 0.92 17 6 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details hand length 1 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details gesture length 7 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details object length 1 -2022-07-23 14:43:51 STATE: test-node-wasm.js passed: details object 0.72 person -2022-07-23 14:43:52 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2022-07-23 14:43:52 STATE: test-node-wasm.js event: image -2022-07-23 14:43:52 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:52 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-07-23 14:43:52 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2022-07-23 14:43:52 STATE: test-node-wasm.js event: image -2022-07-23 14:43:53 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:53 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-07-23 14:43:53 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:53 STATE: test-node-wasm.js event: image -2022-07-23 14:43:53 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:53 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-07-23 14:43:53 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:53 STATE: test-node-wasm.js event: image -2022-07-23 14:43:54 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:54 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-07-23 14:43:54 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-07-23 14:43:54 STATE: test-node-wasm.js event: image -2022-07-23 14:43:54 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:54 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-07-23 14:43:54 INFO:  test-node-wasm.js test default -2022-07-23 14:43:55 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:55 STATE: test-node-wasm.js event: image -2022-07-23 14:43:55 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:55 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:55 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-23 14:43:55 DATA:  test-node-wasm.js result: performance: load: null total: 357 -2022-07-23 14:43:55 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 -2022-07-23 14:43:55 INFO:  test-node-wasm.js test sync -2022-07-23 14:43:55 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:55 STATE: test-node-wasm.js event: image -2022-07-23 14:43:56 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:56 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-23 14:43:56 DATA:  test-node-wasm.js result: performance: load: null total: 345 -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: default sync 1 female 0.97 -2022-07-23 14:43:56 INFO:  test-node-wasm.js test: image process -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2022-07-23 14:43:56 INFO:  test-node-wasm.js test: image null -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor -2022-07-23 14:43:56 INFO:  test-node-wasm.js test face similarity -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-23 14:43:56 STATE: test-node-wasm.js event: image -2022-07-23 14:43:56 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:43:56 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-23 14:43:56 DATA:  test-node-wasm.js result: performance: load: null total: 322 -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:56 STATE: test-node-wasm.js event: image -2022-07-23 14:43:56 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:56 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:56 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-23 14:43:56 DATA:  test-node-wasm.js result: performance: load: null total: 356 -2022-07-23 14:43:57 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-23 14:43:57 STATE: test-node-wasm.js event: image -2022-07-23 14:43:57 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:57 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:57 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-23 14:43:57 DATA:  test-node-wasm.js result: performance: load: null total: 295 -2022-07-23 14:43:57 STATE: test-node-wasm.js passed: face descriptor -2022-07-23 14:43:57 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} -2022-07-23 14:43:57 INFO:  test-node-wasm.js test face matching -2022-07-23 14:43:57 STATE: test-node-wasm.js passed: face database 40 -2022-07-23 14:43:57 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-23 14:43:57 INFO:  test-node-wasm.js test object -2022-07-23 14:43:57 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:57 STATE: test-node-wasm.js event: image -2022-07-23 14:43:57 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:57 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:57 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-23 14:43:57 DATA:  test-node-wasm.js result: performance: load: null total: 353 -2022-07-23 14:43:57 STATE: test-node-wasm.js passed: object result match -2022-07-23 14:43:57 INFO:  test-node-wasm.js test sensitive -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:58 STATE: test-node-wasm.js event: image -2022-07-23 14:43:58 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:58 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-23 14:43:58 DATA:  test-node-wasm.js result: performance: load: null total: 367 -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: sensitive result match -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: sensitive face result match -2022-07-23 14:43:58 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-23 14:43:58 STATE: test-node-wasm.js passed: sensitive body result match -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: sensitive hand result match -2022-07-23 14:43:58 INFO:  test-node-wasm.js test detectors -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:43:58 STATE: test-node-wasm.js event: image -2022-07-23 14:43:58 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:43:58 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-23 14:43:58 DATA:  test-node-wasm.js result: performance: load: null total: 235 -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: detector result face match -2022-07-23 14:43:58 STATE: test-node-wasm.js passed: detector result hand match -2022-07-23 14:43:58 INFO:  test-node-wasm.js test: multi-instance -2022-07-23 14:43:59 STATE: test-node-wasm.js event: image -2022-07-23 14:43:59 STATE: test-node-wasm.js event: detect -2022-07-23 14:43:59 STATE: test-node-wasm.js passed: detect: random default -2022-07-23 14:43:59 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-23 14:43:59 DATA:  test-node-wasm.js result: performance: load: null total: 210 -2022-07-23 14:43:59 INFO:  test-node-wasm.js test: first instance -2022-07-23 14:43:59 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-23 14:43:59 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:59 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-23 14:43:59 DATA:  test-node-wasm.js result: performance: load: null total: 220 -2022-07-23 14:43:59 INFO:  test-node-wasm.js test: second instance -2022-07-23 14:43:59 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-23 14:43:59 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:43:59 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-23 14:43:59 DATA:  test-node-wasm.js result: performance: load: null total: 243 -2022-07-23 14:43:59 INFO:  test-node-wasm.js test: concurrent -2022-07-23 14:43:59 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-23 14:43:59 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-23 14:44:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:44:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:44:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-23 14:44:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-23 14:44:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-23 14:44:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:44:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-07-23 14:44:00 STATE: test-node-wasm.js event: image -2022-07-23 14:44:00 STATE: test-node-wasm.js event: image -2022-07-23 14:44:00 STATE: test-node-wasm.js event: image -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2121 -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2121 -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2336 -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2336 -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2336 -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2336 -2022-07-23 14:44:02 STATE: test-node-wasm.js event: detect -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2035 -2022-07-23 14:44:02 STATE: test-node-wasm.js event: detect -2022-07-23 14:44:02 STATE: test-node-wasm.js event: detect -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2036 -2022-07-23 14:44:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-07-23 14:44:02 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-23 14:44:02 DATA:  test-node-wasm.js result: performance: load: null total: 2036 -2022-07-23 14:44:02 INFO:  test-node-wasm.js test: monkey-patch -2022-07-23 14:44:02 STATE: test-node-wasm.js event: image -2022-07-23 14:44:03 STATE: test-node-wasm.js event: detect -2022-07-23 14:44:03 STATE: test-node-wasm.js passed: monkey patch -2022-07-23 14:44:03 STATE: test-node-wasm.js passed: segmentation [65536] -2022-07-23 14:44:03 STATE: test-node-wasm.js passeed: equal usage -2022-07-23 14:44:03 INFO:  test-node-wasm.js test: input compare -2022-07-23 14:44:03 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-07-23 14:44:03 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-07-23 14:44:03 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 -2022-07-23 14:44:03 INFO:  test-node-wasm.js events: {"image":21,"detect":21,"warmup":2} -2022-07-23 14:44:03 INFO:  test-node-wasm.js tensors 1929 -2022-07-23 14:44:03 INFO:  test-node-wasm.js test complete: 14636 ms -2022-07-23 14:44:03 INFO:  all tests complete -2022-07-23 14:44:03 INFO:  failed: {"count":0,"messages":[]} -2022-07-23 14:44:03 INFO:  status: {"test":"test-node.js","passed":101,"failed":0} -2022-07-23 14:44:03 INFO:  status: {"test":"test-node-gpu.js","passed":101,"failed":0} -2022-07-23 14:44:03 INFO:  status: {"test":"test-node-wasm.js","passed":102,"failed":0} +2022-07-25 08:31:32 INFO:  @vladmandic/human version 2.9.1 +2022-07-25 08:31:32 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.15.0 +2022-07-25 08:31:32 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2022-07-25 08:31:32 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-25 08:31:32 INFO:  +2022-07-25 08:31:32 INFO:  test-node.js start +2022-07-25 08:31:32 INFO:  test-node.js test: configuration validation +2022-07-25 08:31:32 STATE: test-node.js passed: configuration default validation [] +2022-07-25 08:31:32 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-07-25 08:31:32 INFO:  test-node.js test: model load +2022-07-25 08:31:32 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-25 08:31:32 INFO:  test-node.js test: warmup +2022-07-25 08:31:32 STATE: test-node.js passed: create human +2022-07-25 08:31:32 INFO:  test-node.js human version: 2.9.1 +2022-07-25 08:31:32 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.15.0 +2022-07-25 08:31:32 INFO:  test-node.js tfjs version: 3.19.0 +2022-07-25 08:31:32 INFO:  test-node.js tensorflow binding version: 2.7.3-dev20220521 +2022-07-25 08:31:32 STATE: test-node.js passed: set backend: tensorflow +2022-07-25 08:31:32 STATE: test-node.js tensors 1921 +2022-07-25 08:31:32 STATE: test-node.js passed: load models +2022-07-25 08:31:32 STATE: test-node.js result: defined models: 22 loaded models: 12 +2022-07-25 08:31:32 STATE: test-node.js passed: warmup: none default +2022-07-25 08:31:32 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-07-25 08:31:32 DATA:  test-node.js result: performance: load: null total: null +2022-07-25 08:31:32 STATE: test-node.js passed: warmup none result match +2022-07-25 08:31:32 STATE: test-node.js event: image +2022-07-25 08:31:32 STATE: test-node.js event: detect +2022-07-25 08:31:32 STATE: test-node.js event: warmup +2022-07-25 08:31:32 STATE: test-node.js passed: warmup: face default +2022-07-25 08:31:32 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-25 08:31:32 DATA:  test-node.js result: performance: load: null total: 342 +2022-07-25 08:31:32 STATE: test-node.js passed: warmup face result match +2022-07-25 08:31:32 STATE: test-node.js event: image +2022-07-25 08:31:33 STATE: test-node.js event: detect +2022-07-25 08:31:33 STATE: test-node.js event: warmup +2022-07-25 08:31:33 STATE: test-node.js passed: warmup: body default +2022-07-25 08:31:33 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-25 08:31:33 DATA:  test-node.js result: performance: load: null total: 259 +2022-07-25 08:31:33 STATE: test-node.js passed: warmup body result match +2022-07-25 08:31:33 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-25 08:31:33 INFO:  test-node.js test: details verification +2022-07-25 08:31:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:33 STATE: test-node.js event: image +2022-07-25 08:31:33 STATE: test-node.js event: detect +2022-07-25 08:31:33 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:33 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-25 08:31:33 DATA:  test-node.js result: performance: load: null total: 249 +2022-07-25 08:31:33 STATE: test-node.js passed: details face length 1 +2022-07-25 08:31:33 STATE: test-node.js passed: details face score 1 0.93 1 +2022-07-25 08:31:33 STATE: test-node.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-07-25 08:31:33 STATE: test-node.js passed: details face arrays 4 478 1024 +2022-07-25 08:31:33 STATE: test-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-07-25 08:31:33 STATE: test-node.js passed: details face anti-spoofing 0.79 +2022-07-25 08:31:33 STATE: test-node.js passed: details face liveness 0.83 +2022-07-25 08:31:33 STATE: test-node.js passed: details body length 1 +2022-07-25 08:31:33 STATE: test-node.js passed: details body 0.92 17 6 +2022-07-25 08:31:33 STATE: test-node.js passed: details hand length 1 +2022-07-25 08:31:33 STATE: test-node.js passed: details hand 0.51 0.73 point +2022-07-25 08:31:33 STATE: test-node.js passed: details hand arrays 21 5 7 +2022-07-25 08:31:33 STATE: test-node.js passed: details gesture length 7 +2022-07-25 08:31:33 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-07-25 08:31:33 STATE: test-node.js passed: details object length 1 +2022-07-25 08:31:33 STATE: test-node.js passed: details object 0.72 person +2022-07-25 08:31:33 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-07-25 08:31:33 STATE: test-node.js event: image +2022-07-25 08:31:33 STATE: test-node.js event: detect +2022-07-25 08:31:33 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-07-25 08:31:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-07-25 08:31:34 STATE: test-node.js event: image +2022-07-25 08:31:34 STATE: test-node.js event: detect +2022-07-25 08:31:34 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-07-25 08:31:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:34 STATE: test-node.js event: image +2022-07-25 08:31:34 STATE: test-node.js event: detect +2022-07-25 08:31:34 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-07-25 08:31:34 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:34 STATE: test-node.js event: image +2022-07-25 08:31:35 STATE: test-node.js event: detect +2022-07-25 08:31:35 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-07-25 08:31:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-07-25 08:31:35 STATE: test-node.js event: image +2022-07-25 08:31:35 STATE: test-node.js event: detect +2022-07-25 08:31:35 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-07-25 08:31:35 INFO:  test-node.js test default +2022-07-25 08:31:35 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:35 STATE: test-node.js event: image +2022-07-25 08:31:35 STATE: test-node.js event: detect +2022-07-25 08:31:35 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:35 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-25 08:31:35 DATA:  test-node.js result: performance: load: null total: 217 +2022-07-25 08:31:35 STATE: test-node.js passed: default result face match 1 female 0.97 +2022-07-25 08:31:35 INFO:  test-node.js test sync +2022-07-25 08:31:36 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:36 STATE: test-node.js event: image +2022-07-25 08:31:36 STATE: test-node.js event: detect +2022-07-25 08:31:36 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:36 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-25 08:31:36 DATA:  test-node.js result: performance: load: null total: 214 +2022-07-25 08:31:36 STATE: test-node.js passed: default sync 1 female 0.97 +2022-07-25 08:31:36 INFO:  test-node.js test: image process +2022-07-25 08:31:36 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:36 STATE: test-node.js passed: image input null [1,256,256,3] +2022-07-25 08:31:36 INFO:  test-node.js test: image null +2022-07-25 08:31:36 STATE: test-node.js passed: invalid input could not convert input to tensor +2022-07-25 08:31:36 INFO:  test-node.js test face similarity +2022-07-25 08:31:36 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:36 STATE: test-node.js event: image +2022-07-25 08:31:36 STATE: test-node.js event: detect +2022-07-25 08:31:36 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:31:36 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-25 08:31:36 DATA:  test-node.js result: performance: load: null total: 210 +2022-07-25 08:31:36 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:36 STATE: test-node.js event: image +2022-07-25 08:31:36 STATE: test-node.js event: detect +2022-07-25 08:31:36 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:36 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-25 08:31:36 DATA:  test-node.js result: performance: load: null total: 212 +2022-07-25 08:31:36 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-07-25 08:31:36 STATE: test-node.js event: image +2022-07-25 08:31:37 STATE: test-node.js event: detect +2022-07-25 08:31:37 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:37 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-25 08:31:37 DATA:  test-node.js result: performance: load: null total: 193 +2022-07-25 08:31:37 STATE: test-node.js passed: face descriptor +2022-07-25 08:31:37 STATE: test-node.js passed: face similarity {"similarity":[1,0.44727452329649126,0.5567935850640406],"descriptors":[1024,1024,1024]} +2022-07-25 08:31:37 INFO:  test-node.js test face matching +2022-07-25 08:31:37 STATE: test-node.js passed: face database 40 +2022-07-25 08:31:37 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-25 08:31:37 INFO:  test-node.js test object +2022-07-25 08:31:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:37 STATE: test-node.js event: image +2022-07-25 08:31:37 STATE: test-node.js event: detect +2022-07-25 08:31:37 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:37 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-25 08:31:37 DATA:  test-node.js result: performance: load: null total: 212 +2022-07-25 08:31:37 STATE: test-node.js passed: object result match +2022-07-25 08:31:37 INFO:  test-node.js test sensitive +2022-07-25 08:31:37 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:37 STATE: test-node.js event: image +2022-07-25 08:31:37 STATE: test-node.js event: detect +2022-07-25 08:31:37 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:37 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-25 08:31:37 DATA:  test-node.js result: performance: load: null total: 228 +2022-07-25 08:31:37 STATE: test-node.js passed: sensitive result match +2022-07-25 08:31:37 STATE: test-node.js passed: sensitive face result match +2022-07-25 08:31:37 STATE: test-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-07-25 08:31:37 STATE: test-node.js passed: sensitive body result match +2022-07-25 08:31:37 STATE: test-node.js passed: sensitive hand result match +2022-07-25 08:31:37 INFO:  test-node.js test detectors +2022-07-25 08:31:38 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:38 STATE: test-node.js event: image +2022-07-25 08:31:38 STATE: test-node.js event: detect +2022-07-25 08:31:38 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:38 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-25 08:31:38 DATA:  test-node.js result: performance: load: null total: 147 +2022-07-25 08:31:38 STATE: test-node.js passed: detector result face match +2022-07-25 08:31:38 STATE: test-node.js passed: detector result hand match +2022-07-25 08:31:38 INFO:  test-node.js test: multi-instance +2022-07-25 08:31:38 STATE: test-node.js event: image +2022-07-25 08:31:38 STATE: test-node.js event: detect +2022-07-25 08:31:38 STATE: test-node.js passed: detect: random default +2022-07-25 08:31:38 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} +2022-07-25 08:31:38 DATA:  test-node.js result: performance: load: null total: 139 +2022-07-25 08:31:38 INFO:  test-node.js test: first instance +2022-07-25 08:31:38 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-07-25 08:31:38 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:38 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-25 08:31:38 DATA:  test-node.js result: performance: load: null total: 143 +2022-07-25 08:31:38 INFO:  test-node.js test: second instance +2022-07-25 08:31:38 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-07-25 08:31:38 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:38 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-25 08:31:38 DATA:  test-node.js result: performance: load: null total: 151 +2022-07-25 08:31:38 INFO:  test-node.js test: concurrent +2022-07-25 08:31:38 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:38 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:39 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:39 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:39 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-07-25 08:31:39 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-07-25 08:31:39 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:39 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:39 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-07-25 08:31:39 STATE: test-node.js event: image +2022-07-25 08:31:39 STATE: test-node.js event: image +2022-07-25 08:31:39 STATE: test-node.js event: image +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1414 +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1414 +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1539 +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1539 +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1539 +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1539 +2022-07-25 08:31:40 STATE: test-node.js event: detect +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1279 +2022-07-25 08:31:40 STATE: test-node.js event: detect +2022-07-25 08:31:40 STATE: test-node.js event: detect +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1279 +2022-07-25 08:31:40 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:40 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-25 08:31:40 DATA:  test-node.js result: performance: load: null total: 1279 +2022-07-25 08:31:40 INFO:  test-node.js test: monkey-patch +2022-07-25 08:31:40 STATE: test-node.js event: image +2022-07-25 08:31:41 STATE: test-node.js event: detect +2022-07-25 08:31:41 STATE: test-node.js passed: monkey patch +2022-07-25 08:31:41 STATE: test-node.js passed: segmentation [65536] +2022-07-25 08:31:41 STATE: test-node.js passeed: equal usage +2022-07-25 08:31:41 INFO:  test-node.js test: input compare +2022-07-25 08:31:41 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:41 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-07-25 08:31:41 STATE: test-node.js passed: image compare 0 23.275441687091504 +2022-07-25 08:31:41 INFO:  test-node.js events: {"image":21,"detect":21,"warmup":2} +2022-07-25 08:31:41 INFO:  test-node.js tensors 1927 +2022-07-25 08:31:41 INFO:  test-node.js test complete: 9071 ms +2022-07-25 08:31:41 INFO:  +2022-07-25 08:31:41 INFO:  test-node-gpu.js start +2022-07-25 08:31:42 INFO:  test-node-gpu.js test: configuration validation +2022-07-25 08:31:42 STATE: test-node-gpu.js passed: configuration default validation [] +2022-07-25 08:31:42 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-07-25 08:31:42 INFO:  test-node-gpu.js test: model load +2022-07-25 08:31:42 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-25 08:31:42 INFO:  test-node-gpu.js test: warmup +2022-07-25 08:31:42 STATE: test-node-gpu.js passed: create human +2022-07-25 08:31:42 INFO:  test-node-gpu.js human version: 2.9.1 +2022-07-25 08:31:42 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.15.0 +2022-07-25 08:31:42 INFO:  test-node-gpu.js tfjs version: 3.19.0 +2022-07-25 08:31:42 INFO:  test-node-gpu.js tensorflow binding version: 2.7.3-dev20220521 +2022-07-25 08:31:42 STATE: test-node-gpu.js passed: set backend: tensorflow +2022-07-25 08:31:42 STATE: test-node-gpu.js tensors 1921 +2022-07-25 08:31:42 STATE: test-node-gpu.js passed: load models +2022-07-25 08:31:42 STATE: test-node-gpu.js result: defined models: 22 loaded models: 12 +2022-07-25 08:31:42 STATE: test-node-gpu.js passed: warmup: none default +2022-07-25 08:31:42 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-07-25 08:31:42 DATA:  test-node-gpu.js result: performance: load: null total: null +2022-07-25 08:31:42 STATE: test-node-gpu.js passed: warmup none result match +2022-07-25 08:31:42 STATE: test-node-gpu.js event: image +2022-07-25 08:31:46 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:46 STATE: test-node-gpu.js event: warmup +2022-07-25 08:31:46 STATE: test-node-gpu.js passed: warmup: face default +2022-07-25 08:31:46 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-25 08:31:46 DATA:  test-node-gpu.js result: performance: load: null total: 3629 +2022-07-25 08:31:46 STATE: test-node-gpu.js passed: warmup face result match +2022-07-25 08:31:46 STATE: test-node-gpu.js event: image +2022-07-25 08:31:46 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:46 STATE: test-node-gpu.js event: warmup +2022-07-25 08:31:46 STATE: test-node-gpu.js passed: warmup: body default +2022-07-25 08:31:46 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-25 08:31:46 DATA:  test-node-gpu.js result: performance: load: null total: 219 +2022-07-25 08:31:46 STATE: test-node-gpu.js passed: warmup body result match +2022-07-25 08:31:46 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-25 08:31:46 INFO:  test-node-gpu.js test: details verification +2022-07-25 08:31:46 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:46 STATE: test-node-gpu.js event: image +2022-07-25 08:31:47 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:47 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-25 08:31:47 DATA:  test-node-gpu.js result: performance: load: null total: 200 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details face length 1 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details face score 1 0.93 1 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details face anti-spoofing 0.79 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details face liveness 0.83 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details body length 1 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details body 0.92 17 6 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details hand length 1 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details gesture length 7 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details object length 1 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: details object 0.72 person +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-07-25 08:31:47 STATE: test-node-gpu.js event: image +2022-07-25 08:31:47 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-07-25 08:31:47 STATE: test-node-gpu.js event: image +2022-07-25 08:31:47 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:47 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-07-25 08:31:48 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:48 STATE: test-node-gpu.js event: image +2022-07-25 08:31:48 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:48 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-07-25 08:31:48 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:48 STATE: test-node-gpu.js event: image +2022-07-25 08:31:48 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:48 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-07-25 08:31:48 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-07-25 08:31:48 STATE: test-node-gpu.js event: image +2022-07-25 08:31:49 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-07-25 08:31:49 INFO:  test-node-gpu.js test default +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:49 STATE: test-node-gpu.js event: image +2022-07-25 08:31:49 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:49 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-25 08:31:49 DATA:  test-node-gpu.js result: performance: load: null total: 185 +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: default result face match 1 female 0.97 +2022-07-25 08:31:49 INFO:  test-node-gpu.js test sync +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:49 STATE: test-node-gpu.js event: image +2022-07-25 08:31:49 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:49 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-25 08:31:49 DATA:  test-node-gpu.js result: performance: load: null total: 277 +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: default sync 1 female 0.97 +2022-07-25 08:31:49 INFO:  test-node-gpu.js test: image process +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2022-07-25 08:31:49 INFO:  test-node-gpu.js test: image null +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor +2022-07-25 08:31:49 INFO:  test-node-gpu.js test face similarity +2022-07-25 08:31:49 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:49 STATE: test-node-gpu.js event: image +2022-07-25 08:31:50 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:31:50 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-25 08:31:50 DATA:  test-node-gpu.js result: performance: load: null total: 169 +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:50 STATE: test-node-gpu.js event: image +2022-07-25 08:31:50 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:50 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-25 08:31:50 DATA:  test-node-gpu.js result: performance: load: null total: 191 +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-07-25 08:31:50 STATE: test-node-gpu.js event: image +2022-07-25 08:31:50 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:50 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-25 08:31:50 DATA:  test-node-gpu.js result: performance: load: null total: 138 +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: face descriptor +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.447238756461232,0.556914029877052],"descriptors":[1024,1024,1024]} +2022-07-25 08:31:50 INFO:  test-node-gpu.js test face matching +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: face database 40 +2022-07-25 08:31:50 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-25 08:31:50 INFO:  test-node-gpu.js test object +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:50 STATE: test-node-gpu.js event: image +2022-07-25 08:31:50 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:50 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-25 08:31:50 DATA:  test-node-gpu.js result: performance: load: null total: 149 +2022-07-25 08:31:50 STATE: test-node-gpu.js passed: object result match +2022-07-25 08:31:50 INFO:  test-node-gpu.js test sensitive +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:51 STATE: test-node-gpu.js event: image +2022-07-25 08:31:51 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:51 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-25 08:31:51 DATA:  test-node-gpu.js result: performance: load: null total: 161 +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: sensitive result match +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: sensitive face result match +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: sensitive body result match +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: sensitive hand result match +2022-07-25 08:31:51 INFO:  test-node-gpu.js test detectors +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:51 STATE: test-node-gpu.js event: image +2022-07-25 08:31:51 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:51 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-25 08:31:51 DATA:  test-node-gpu.js result: performance: load: null total: 86 +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: detector result face match +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: detector result hand match +2022-07-25 08:31:51 INFO:  test-node-gpu.js test: multi-instance +2022-07-25 08:31:51 STATE: test-node-gpu.js event: image +2022-07-25 08:31:51 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: detect: random default +2022-07-25 08:31:51 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} +2022-07-25 08:31:51 DATA:  test-node-gpu.js result: performance: load: null total: 104 +2022-07-25 08:31:51 INFO:  test-node-gpu.js test: first instance +2022-07-25 08:31:51 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:52 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-25 08:31:52 DATA:  test-node-gpu.js result: performance: load: null total: 88 +2022-07-25 08:31:52 INFO:  test-node-gpu.js test: second instance +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:52 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-25 08:31:52 DATA:  test-node-gpu.js result: performance: load: null total: 80 +2022-07-25 08:31:52 INFO:  test-node-gpu.js test: concurrent +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-07-25 08:31:52 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-07-25 08:31:53 STATE: test-node-gpu.js event: image +2022-07-25 08:31:53 STATE: test-node-gpu.js event: image +2022-07-25 08:31:53 STATE: test-node-gpu.js event: image +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 986 +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 986 +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 1052 +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 1052 +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 1052 +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 1052 +2022-07-25 08:31:53 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 772 +2022-07-25 08:31:53 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:53 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 772 +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:53 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-25 08:31:53 DATA:  test-node-gpu.js result: performance: load: null total: 772 +2022-07-25 08:31:53 INFO:  test-node-gpu.js test: monkey-patch +2022-07-25 08:31:53 STATE: test-node-gpu.js event: image +2022-07-25 08:31:53 STATE: test-node-gpu.js event: detect +2022-07-25 08:31:53 STATE: test-node-gpu.js passed: monkey patch +2022-07-25 08:31:54 STATE: test-node-gpu.js passed: segmentation [65536] +2022-07-25 08:31:54 STATE: test-node-gpu.js passeed: equal usage +2022-07-25 08:31:54 INFO:  test-node-gpu.js test: input compare +2022-07-25 08:31:54 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-07-25 08:31:54 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-07-25 08:31:54 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 +2022-07-25 08:31:54 INFO:  test-node-gpu.js events: {"image":21,"detect":21,"warmup":2} +2022-07-25 08:31:54 INFO:  test-node-gpu.js tensors 1927 +2022-07-25 08:31:54 INFO:  test-node-gpu.js test complete: 12205 ms +2022-07-25 08:31:55 INFO:  +2022-07-25 08:31:55 INFO:  test-node-wasm.js start +2022-07-25 08:31:55 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2022-07-25 08:31:55 INFO:  test-node-wasm.js test: configuration validation +2022-07-25 08:31:55 STATE: test-node-wasm.js passed: configuration default validation [] +2022-07-25 08:31:55 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-07-25 08:31:55 INFO:  test-node-wasm.js test: model load +2022-07-25 08:31:57 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-25 08:31:57 INFO:  test-node-wasm.js test: warmup +2022-07-25 08:31:57 STATE: test-node-wasm.js passed: create human +2022-07-25 08:31:57 INFO:  test-node-wasm.js human version: 2.9.1 +2022-07-25 08:31:57 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.15.0 +2022-07-25 08:31:57 INFO:  test-node-wasm.js tfjs version: 3.19.0 +2022-07-25 08:31:57 STATE: test-node-wasm.js passed: set backend: wasm +2022-07-25 08:31:57 STATE: test-node-wasm.js tensors 1921 +2022-07-25 08:31:57 STATE: test-node-wasm.js passed: load models +2022-07-25 08:31:57 STATE: test-node-wasm.js result: defined models: 22 loaded models: 12 +2022-07-25 08:31:57 STATE: test-node-wasm.js passed: warmup: none default +2022-07-25 08:31:57 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-07-25 08:31:57 DATA:  test-node-wasm.js result: performance: load: null total: null +2022-07-25 08:31:57 STATE: test-node-wasm.js passed: warmup none result match +2022-07-25 08:31:57 STATE: test-node-wasm.js event: image +2022-07-25 08:31:58 STATE: test-node-wasm.js event: detect +2022-07-25 08:31:58 STATE: test-node-wasm.js event: warmup +2022-07-25 08:31:58 STATE: test-node-wasm.js passed: warmup: face default +2022-07-25 08:31:58 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-25 08:31:58 DATA:  test-node-wasm.js result: performance: load: null total: 572 +2022-07-25 08:31:58 STATE: test-node-wasm.js passed: warmup face result match +2022-07-25 08:31:58 STATE: test-node-wasm.js event: image +2022-07-25 08:31:58 STATE: test-node-wasm.js event: detect +2022-07-25 08:31:58 STATE: test-node-wasm.js event: warmup +2022-07-25 08:31:58 STATE: test-node-wasm.js passed: warmup: body default +2022-07-25 08:31:58 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-25 08:31:58 DATA:  test-node-wasm.js result: performance: load: null total: 418 +2022-07-25 08:31:58 STATE: test-node-wasm.js passed: warmup body result match +2022-07-25 08:31:58 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-25 08:31:58 INFO:  test-node-wasm.js test: details verification +2022-07-25 08:31:58 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:31:58 STATE: test-node-wasm.js event: image +2022-07-25 08:31:59 STATE: test-node-wasm.js event: detect +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:31:59 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-25 08:31:59 DATA:  test-node-wasm.js result: performance: load: null total: 361 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details face length 1 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details face score 1 0.93 1 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details face age/gender 23.7 female 0.97 85.47 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details face anti-spoofing 0.79 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details face liveness 0.83 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details body length 1 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details body 0.92 17 6 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details hand length 1 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details gesture length 7 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details object length 1 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: details object 0.72 person +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2022-07-25 08:31:59 STATE: test-node-wasm.js event: image +2022-07-25 08:31:59 STATE: test-node-wasm.js event: detect +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-07-25 08:31:59 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2022-07-25 08:31:59 STATE: test-node-wasm.js event: image +2022-07-25 08:32:00 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:00 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-07-25 08:32:00 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:00 STATE: test-node-wasm.js event: image +2022-07-25 08:32:00 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:00 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-07-25 08:32:01 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:01 STATE: test-node-wasm.js event: image +2022-07-25 08:32:01 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:01 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-07-25 08:32:01 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-07-25 08:32:01 STATE: test-node-wasm.js event: image +2022-07-25 08:32:02 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:02 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-07-25 08:32:02 INFO:  test-node-wasm.js test default +2022-07-25 08:32:02 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:02 STATE: test-node-wasm.js event: image +2022-07-25 08:32:02 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:02 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:02 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-25 08:32:02 DATA:  test-node-wasm.js result: performance: load: null total: 351 +2022-07-25 08:32:02 STATE: test-node-wasm.js passed: default result face match 1 female 0.97 +2022-07-25 08:32:02 INFO:  test-node-wasm.js test sync +2022-07-25 08:32:02 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:02 STATE: test-node-wasm.js event: image +2022-07-25 08:32:03 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:03 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:03 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-25 08:32:03 DATA:  test-node-wasm.js result: performance: load: null total: 373 +2022-07-25 08:32:03 STATE: test-node-wasm.js passed: default sync 1 female 0.97 +2022-07-25 08:32:03 INFO:  test-node-wasm.js test: image process +2022-07-25 08:32:03 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-07-25 08:32:03 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2022-07-25 08:32:03 INFO:  test-node-wasm.js test: image null +2022-07-25 08:32:03 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor +2022-07-25 08:32:03 INFO:  test-node-wasm.js test face similarity +2022-07-25 08:32:03 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-07-25 08:32:03 STATE: test-node-wasm.js event: image +2022-07-25 08:32:03 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:03 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:32:03 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-25 08:32:03 DATA:  test-node-wasm.js result: performance: load: null total: 300 +2022-07-25 08:32:03 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:03 STATE: test-node-wasm.js event: image +2022-07-25 08:32:04 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:04 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:04 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-25 08:32:04 DATA:  test-node-wasm.js result: performance: load: null total: 335 +2022-07-25 08:32:04 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-07-25 08:32:04 STATE: test-node-wasm.js event: image +2022-07-25 08:32:04 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:04 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:32:04 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-25 08:32:04 DATA:  test-node-wasm.js result: performance: load: null total: 316 +2022-07-25 08:32:04 STATE: test-node-wasm.js passed: face descriptor +2022-07-25 08:32:04 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} +2022-07-25 08:32:04 INFO:  test-node-wasm.js test face matching +2022-07-25 08:32:04 STATE: test-node-wasm.js passed: face database 40 +2022-07-25 08:32:04 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-25 08:32:04 INFO:  test-node-wasm.js test object +2022-07-25 08:32:04 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:04 STATE: test-node-wasm.js event: image +2022-07-25 08:32:05 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:05 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:05 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-25 08:32:05 DATA:  test-node-wasm.js result: performance: load: null total: 326 +2022-07-25 08:32:05 STATE: test-node-wasm.js passed: object result match +2022-07-25 08:32:05 INFO:  test-node-wasm.js test sensitive +2022-07-25 08:32:05 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:05 STATE: test-node-wasm.js event: image +2022-07-25 08:32:05 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:05 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:05 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-25 08:32:05 DATA:  test-node-wasm.js result: performance: load: null total: 358 +2022-07-25 08:32:05 STATE: test-node-wasm.js passed: sensitive result match +2022-07-25 08:32:05 STATE: test-node-wasm.js passed: sensitive face result match +2022-07-25 08:32:05 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-25 08:32:05 STATE: test-node-wasm.js passed: sensitive body result match +2022-07-25 08:32:05 STATE: test-node-wasm.js passed: sensitive hand result match +2022-07-25 08:32:05 INFO:  test-node-wasm.js test detectors +2022-07-25 08:32:06 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:06 STATE: test-node-wasm.js event: image +2022-07-25 08:32:06 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:06 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:06 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-25 08:32:06 DATA:  test-node-wasm.js result: performance: load: null total: 248 +2022-07-25 08:32:06 STATE: test-node-wasm.js passed: detector result face match +2022-07-25 08:32:06 STATE: test-node-wasm.js passed: detector result hand match +2022-07-25 08:32:06 INFO:  test-node-wasm.js test: multi-instance +2022-07-25 08:32:06 STATE: test-node-wasm.js event: image +2022-07-25 08:32:06 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:06 STATE: test-node-wasm.js passed: detect: random default +2022-07-25 08:32:06 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.06,"keypoints":15} +2022-07-25 08:32:06 DATA:  test-node-wasm.js result: performance: load: null total: 247 +2022-07-25 08:32:06 INFO:  test-node-wasm.js test: first instance +2022-07-25 08:32:06 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-07-25 08:32:06 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:32:06 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-25 08:32:06 DATA:  test-node-wasm.js result: performance: load: null total: 230 +2022-07-25 08:32:06 INFO:  test-node-wasm.js test: second instance +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:32:07 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-25 08:32:07 DATA:  test-node-wasm.js result: performance: load: null total: 252 +2022-07-25 08:32:07 INFO:  test-node-wasm.js test: concurrent +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-07-25 08:32:07 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-07-25 08:32:08 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:08 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-07-25 08:32:08 STATE: test-node-wasm.js event: image +2022-07-25 08:32:08 STATE: test-node-wasm.js event: image +2022-07-25 08:32:08 STATE: test-node-wasm.js event: image +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2135 +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2135 +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2393 +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2393 +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2393 +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2393 +2022-07-25 08:32:10 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2080 +2022-07-25 08:32:10 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:10 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2080 +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-07-25 08:32:10 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-25 08:32:10 DATA:  test-node-wasm.js result: performance: load: null total: 2080 +2022-07-25 08:32:10 INFO:  test-node-wasm.js test: monkey-patch +2022-07-25 08:32:10 STATE: test-node-wasm.js event: image +2022-07-25 08:32:10 STATE: test-node-wasm.js event: detect +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: monkey patch +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: segmentation [65536] +2022-07-25 08:32:10 STATE: test-node-wasm.js passeed: equal usage +2022-07-25 08:32:10 INFO:  test-node-wasm.js test: input compare +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-07-25 08:32:10 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 +2022-07-25 08:32:10 INFO:  test-node-wasm.js events: {"image":21,"detect":21,"warmup":2} +2022-07-25 08:32:10 INFO:  test-node-wasm.js tensors 1929 +2022-07-25 08:32:10 INFO:  test-node-wasm.js test complete: 14980 ms +2022-07-25 08:32:10 INFO:  all tests complete +2022-07-25 08:32:10 INFO:  failed: {"count":0,"messages":[]} +2022-07-25 08:32:10 INFO:  status: {"test":"test-node.js","passed":101,"failed":0} +2022-07-25 08:32:10 INFO:  status: {"test":"test-node-gpu.js","passed":101,"failed":0} +2022-07-25 08:32:10 INFO:  status: {"test":"test-node-wasm.js","passed":102,"failed":0}