diff --git a/CHANGELOG.md b/CHANGELOG.md index 370ab430..9b33cb64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,12 @@ ## Changelog -### **HEAD -> main** 2022/02/14 mandic00@live.com +### **2.6.4** 2022/02/27 mandic00@live.com + +### **origin/main** 2022/02/17 mandic00@live.com + +- refresh - add config option wasmplatformfetch ### **2.6.3** 2022/02/10 mandic00@live.com diff --git a/README.md b/README.md index e060839c..07565486 100644 --- a/README.md +++ b/README.md @@ -344,7 +344,7 @@ For more info, see [**Configuration Details**](https://github.com/vladmandic/hum


-`Human` library is written in `TypeScript` [4.5](https://www.typescriptlang.org/docs/handbook/intro.html) +`Human` library is written in `TypeScript` [4.6](https://www.typescriptlang.org/docs/handbook/intro.html) Conforming to latest `JavaScript` [ECMAScript version 2021](https://262.ecma-international.org/) standard Build target is `JavaScript` [EMCAScript version 2018](https://262.ecma-international.org/11.0/) diff --git a/demo/faceid/index.js.map b/demo/faceid/index.js.map index dc71702c..de684c96 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": ";;;;;;AASA,gDCTA,GAAI,GAEE,EAAW,QACX,EAAQ,SAKR,EAAM,IAAI,IAAQ,QAAQ,IAAI,UAAW,GAAG,GAElD,kBAA6B,CAC3B,MAAI,GAAW,GACR,GAAI,SAAQ,AAAC,GAAY,CAC9B,GAAM,GAA4B,UAAU,KAAK,EAAU,GAC3D,EAAQ,QAAU,AAAC,GAAQ,EAAI,SAAU,GACzC,EAAQ,gBAAkB,AAAC,GAA+B,CACxD,EAAI,UAAW,EAAI,QACnB,EAAM,EAAI,OAA4B,OACtC,EAAG,kBAAkB,EAAO,CAAE,QAAS,KAAM,cAAe,MAE9D,EAAQ,UAAY,AAAC,GAAQ,CAC3B,EAAM,EAAI,OAA4B,OACtC,EAAI,QAAS,GACb,EAAQ,OAKd,kBAAoD,CAClD,GAAM,GAA4B,GAClC,MAAK,IAAI,KAAM,KACR,GAAI,SAAQ,AAAC,GAAY,CAC9B,GAAM,GAAqB,EAAG,YAAY,CAAC,GAAQ,aAAa,YAAY,GAAO,WAAW,KAAM,QACpG,EAAO,QAAU,AAAC,GAAQ,EAAI,cAAe,GAC7C,EAAO,UAAY,AAAC,GAAQ,CAC1B,AAAK,EAAI,OAAsB,OAC7B,GAAO,KAAM,EAAI,OAAsB,OAAO,OAC7C,EAAI,OAAsB,OAAO,YAElC,EAAQ,MAMhB,kBAA+C,CAC7C,MAAK,IAAI,KAAM,KACR,GAAI,SAAQ,AAAC,GAAY,CAC9B,GAAM,GAAoB,EAAG,YAAY,CAAC,GAAQ,aAAa,YAAY,GAAO,QAClF,EAAM,QAAU,AAAC,GAAQ,EAAI,eAAgB,GAC7C,EAAM,UAAY,IAAM,EAAQ,EAAM,UAI1C,iBAA2B,EAAwB,CACjD,AAAK,GAAI,KAAM,KACf,GAAM,GAAY,CAAE,KAAM,EAAW,KAAM,WAAY,EAAW,WAAY,MAAO,EAAW,OAChG,EAAG,YAAY,CAAC,GAAQ,aAAa,YAAY,GAAO,IAAI,GAC5D,EAAI,QAAS,GAGf,iBAA6B,EAAwB,CACnD,AAAK,GAAI,KAAM,KACf,EAAG,YAAY,CAAC,GAAQ,aAAa,YAAY,GAAO,OAAO,EAAW,IAC1E,EAAI,UAAW,GDhEjB,AAYA,GAAM,GAAc,CAClB,cAAe,eACf,OAAQ,CAAE,aAAc,IACxB,KAAM,CACJ,QAAS,GACT,SAAU,CAAE,SAAU,GAAM,OAAQ,GAAM,WAAY,IAAK,KAAM,IACjE,YAAa,CAAE,QAAS,IACxB,cAAe,CAAE,QAAS,GAAO,UAAW,uEAC5C,KAAM,CAAE,QAAS,IACjB,QAAS,CAAE,QAAS,IACpB,UAAW,CAAE,QAAS,IACtB,SAAU,CAAE,QAAS,KAEvB,KAAM,CAAE,QAAS,IACjB,KAAM,CAAE,QAAS,IACjB,OAAQ,CAAE,QAAS,IACnB,QAAS,CAAE,QAAS,KAIhB,EAAe,CAAE,MAAO,EAAG,WAAY,GAAI,IAAK,GAAK,IAAK,IAE1D,EAAU,CACd,cAAe,GACf,QAAS,IACT,QAAS,IACT,SAAU,GACV,SAAU,IACV,UAAW,GACX,KAAM,EAAY,KAAK,SAAS,KAChC,SAAU,EAAY,KAAK,SAAS,SACpC,WAAY,EAAY,KAAK,SAAS,cACnC,GAGC,EAAK,CACT,UAAW,GACX,eAAgB,GAChB,aAAc,GACd,cAAe,GACf,cAAe,GACf,SAAU,GACV,eAAgB,GAChB,cAAe,GACf,UAAW,GAEP,EAAQ,IAAM,EAAG,WAAa,EAAG,UAAY,EAAG,eAAiB,EAAG,cAAgB,EAAG,eAAiB,EAAG,gBAAkB,EAAG,gBAAkB,EAAG,cACrJ,EAA0E,CAAE,KAAM,KAAM,OAAQ,MAEhG,EAAQ,CACZ,MAAO,EACP,IAAK,EACL,KAAM,GAIF,EAAQ,GAAI,GAAM,GAExB,EAAM,IAAI,QAAa,GACvB,EAAM,KAAK,QAAQ,KAAO,yBAC1B,EAAM,KAAK,QAAQ,WAAa,GAEhC,GAAM,GAAM,CACV,MAAO,SAAS,eAAe,SAC/B,OAAQ,SAAS,eAAe,UAChC,IAAK,SAAS,eAAe,OAC7B,IAAK,SAAS,eAAe,OAC7B,MAAO,SAAS,eAAe,SAC/B,KAAM,SAAS,eAAe,QAC9B,KAAM,SAAS,eAAe,QAC9B,OAAQ,SAAS,eAAe,UAChC,MAAO,SAAS,eAAe,SAC/B,OAAQ,SAAS,eAAe,UAChC,GAAI,SAAS,eAAe,OAExB,EAAY,CAAE,OAAQ,EAAG,KAAM,GAC/B,EAAM,CAAE,OAAQ,EAAG,KAAM,GAC3B,EAAY,EAEV,EAAM,IAAI,IAAQ,CACtB,EAAI,IAAI,WAAa,EAAI,KAAK,KAAO;AAAA,EAErC,QAAQ,IAAI,GAAG,IAEX,EAAW,AAAC,GAAQ,EAAI,IAAI,UAAY,EAE9C,kBAAwB,CACtB,EAAS,sBAET,GAAM,GAAwC,CAAE,MAAO,GAAO,MAAO,CAAE,WAAY,OAAQ,WAAY,OAAQ,MAAO,CAAE,MAAO,SAAS,KAAK,eACvI,EAAsB,KAAM,WAAU,aAAa,aAAa,GAChE,EAAQ,GAAI,SAAQ,AAAC,GAAY,CAAE,EAAI,MAAM,aAAe,IAAM,EAAQ,MAChF,EAAI,MAAM,UAAY,EACtB,EAAI,MAAM,OACV,KAAM,GACN,EAAI,OAAO,MAAQ,EAAI,MAAM,WAC7B,EAAI,OAAO,OAAS,EAAI,MAAM,YAC1B,EAAM,IAAI,SAAS,EAAI,SAAU,EAAI,MAAM,WAAY,EAAI,MAAM,YAAa,IAAK,EAAO,iBAAiB,GAAG,OAClH,EAAI,OAAO,QAAU,IAAM,CACzB,AAAI,EAAI,MAAM,OAAQ,EAAI,MAAM,OAC3B,EAAI,MAAM,SAInB,kBAA+B,CAC7B,GAAI,CAAC,EAAI,MAAM,OAAQ,CACrB,AAAI,EAAQ,MAAQ,EAAQ,KAAK,QAAQ,EAAM,GAAG,QAAQ,EAAQ,KAAK,QACvE,KAAM,GAAM,OAAO,EAAI,OACvB,GAAM,GAAM,EAAM,MAClB,EAAI,OAAS,IAAQ,GAAM,EAAU,QACrC,EAAU,OAAS,EACnB,sBAAsB,IAI1B,kBAAqD,CACnD,GAAM,GAAe,KAAM,GAAM,KAAK,EAAM,QAC5C,KAAM,GAAM,KAAK,OAAO,EAAI,MAAO,EAAI,QACvC,KAAM,GAAM,KAAK,IAAI,EAAI,OAAQ,GACjC,GAAM,GAAM,EAAM,MAKlB,GAJA,EAAI,KAAO,IAAQ,GAAM,EAAU,MACnC,EAAU,KAAO,EACjB,EAAS,QAAQ,EAAI,OAAO,QAAQ,GAAG,SAAS,EAAG,iBAAiB,EAAI,KAAK,QAAQ,GAAG,SAAS,EAAG,aACpG,EAAG,UAAY,EAAM,OAAO,KAAK,SAAW,EACxC,EAAG,UAAW,CAChB,GAAM,GAAqB,OAAO,OAAO,EAAM,OAAO,SAAS,IAAI,AAAC,GAAY,EAAQ,SACxF,AAAI,GAAS,SAAS,mBAAqB,EAAS,SAAS,qBAAoB,GAAM,MAAQ,EAAM,OACjG,EAAM,MAAQ,GAAK,CAAC,EAAS,SAAS,mBAAqB,CAAC,EAAS,SAAS,oBAAoB,GAAM,IAAM,EAAM,OACxH,EAAG,cAAgB,EAAG,eAAkB,KAAK,IAAI,EAAM,IAAM,EAAM,OAAS,EAAQ,UAAY,KAAK,IAAI,EAAM,IAAM,EAAM,OAAS,EAAQ,SACxI,EAAG,eAAiB,EAAM,OAAS,GAAG,GAAM,KAAO,KAAK,MAAM,EAAM,IAAM,EAAM,QACpF,EAAG,aAAe,EAAS,SAAS,iBACpC,EAAG,cAAgB,EAAS,SAAS,kBACrC,EAAG,eAAkB,GAAM,OAAO,KAAK,GAAG,UAAY,GAAK,EAAQ,eAAkB,GAAM,OAAO,KAAK,GAAG,WAAa,GAAK,EAAQ,eAAkB,GAAM,OAAO,KAAK,GAAG,aAAe,GAAK,EAAQ,cACvM,EAAG,eAAkB,GAAM,OAAO,KAAK,GAAG,MAAQ,GAAK,EAAQ,cAC/D,EAAG,cAAiB,GAAM,OAAO,KAAK,GAAG,MAAQ,GAAK,EAAQ,cAC9D,EAAG,SAAW,EAAM,OAAO,KAAK,GAAG,IAAI,IAAM,EAAQ,SAAW,EAAM,OAAO,KAAK,GAAG,IAAI,IAAM,EAAQ,QAEzG,GAAI,GAAI,GACR,OAAW,CAAC,EAAK,IAAQ,QAAO,QAAQ,GAAK,CAC3C,GAAI,GAAK,SAAS,eAAe,MAAM,KACvC,AAAK,GACH,GAAK,SAAS,cAAc,OAC5B,EAAG,UAAY,EACf,EAAG,UAAY,KACf,EAAG,MAAM,IAAM,GAAG,MAClB,EAAI,GAAG,YAAY,IAErB,AAAI,MAAO,IAAQ,UAAW,EAAG,MAAM,gBAAkB,EAAM,aAAe,aACzE,EAAG,UAAY,GAAG,KAAO,IAC9B,GAAK,GAMP,MAJI,MAIA,EAAG,UAAY,EAAQ,QACzB,GAAI,MAAM,QACH,EAAM,OAAO,KAAK,IAEzB,GAAG,UAAY,KAAK,MAAM,EAAM,MAAQ,GACjC,GAAI,SAAQ,AAAC,GAAY,CAC9B,WAAW,SAAY,CAErB,AAAI,AADQ,KAAM,MACT,EAAQ,EAAM,OAAO,KAAK,KAClC,OAKT,kBAA6B,CArL7B,QAsLE,GAAI,EAAI,KAAK,MAAM,OAAS,EAAG,CAC7B,GAAM,GAAQ,KAAI,OAAO,WAAW,QAAtB,cAA6B,aAAa,EAAG,EAAG,EAAI,OAAO,MAAO,EAAI,OAAO,QACrF,EAAM,CAAE,GAAI,EAAG,KAAM,EAAI,KAAK,MAAO,WAAY,KAAQ,OAAR,cAAc,UAAuB,SAC5F,KAAM,AAAQ,GAAK,GACnB,EAAI,qBAAsB,EAAI,UAE9B,GAAI,gBAIR,kBAA8B,CAC5B,AAAI,EAAQ,QAAU,EAAQ,OAAO,GAAK,GACxC,KAAM,AAAQ,GAAO,EAAQ,QAIjC,kBAA4B,CAtM5B,QAwME,GADA,KAAI,OAAO,WAAW,QAAtB,QAA6B,UAAU,EAAG,EAAG,EAAQ,QAAS,EAAQ,SAClE,CAAC,EAAQ,MAAQ,CAAC,EAAQ,KAAK,QAAU,CAAC,EAAQ,KAAK,UAAW,MAAO,GAI7E,GAFA,QAAQ,IAAI,eAAgB,EAAQ,MACpC,EAAM,GAAG,QAAQ,SAAS,EAAQ,KAAK,OAAiC,EAAI,QACxE,KAAM,AAAQ,OAAY,EAC5B,SAAI,0BACJ,SAAS,KAAK,MAAM,WAAa,QACjC,EAAI,OAAO,MAAM,QAAU,OACpB,GAET,GAAM,GAAK,KAAM,AAAQ,KACnB,EAAc,EAAG,IAAI,AAAC,GAAQ,EAAI,YAClC,EAAM,KAAM,GAAM,MAAM,EAAQ,KAAK,UAAW,EAAa,GACnE,SAAQ,OAAS,EAAG,EAAI,QAAU,KAC9B,EAAQ,QACV,GAAI,eAAe,EAAQ,OAAO,cAAc,EAAQ,OAAO,oBAAoB,KAAK,MAAM,IAAO,EAAI,YAAc,OACvH,EAAI,KAAK,MAAQ,EAAQ,OAAO,KAChC,EAAI,OAAO,MAAM,QAAU,GAC3B,KAAI,OAAO,WAAW,QAAtB,QAA6B,aAAa,EAAQ,OAAO,MAAO,EAAG,IAErE,SAAS,KAAK,MAAM,WAAa,EAAI,WAAa,EAAQ,UAAY,YAAc,SAC7E,EAAI,WAAa,EAAQ,UAGlC,kBAAsB,CAhOtB,YA0PE,MAzBA,GAAG,UAAY,GACf,EAAG,eAAiB,GACpB,EAAG,aAAe,GAClB,EAAG,cAAgB,GACnB,EAAG,SAAW,GACd,EAAG,eAAiB,GACpB,EAAG,cAAgB,GACnB,EAAG,UAAY,EACf,EAAI,MAAM,MAAM,QAAU,OAC1B,EAAI,MAAM,MAAM,QAAU,OAC1B,EAAI,OAAO,MAAM,QAAU,OAC3B,SAAS,KAAK,MAAM,WAAa,QACjC,KAAM,KACN,KAAM,KACN,EAAY,EAAM,MAClB,EAAQ,KAAO,KAAM,KACrB,EAAI,OAAO,MAAQ,SAAQ,OAAR,cAAc,SAAd,cAAsB,MAAM,KAAM,EAAQ,QAC7D,EAAI,OAAO,OAAS,SAAQ,OAAR,cAAc,SAAd,cAAsB,MAAM,KAAM,EAAQ,QAC9D,EAAI,OAAO,MAAQ,EAAI,OAAO,MAC9B,EAAI,OAAO,OAAS,EAAI,OAAO,OAC/B,EAAI,OAAO,MAAM,MAAQ,GACzB,EAAI,MAAM,MAAM,QAAU,OAC1B,EAAI,KAAK,MAAM,QAAU,OACzB,EAAI,OAAO,MAAM,QAAU,OAC3B,EAAI,MAAM,MAAM,QAAU,QACrB,IAII,IAHP,GAAI,2BACG,IAMX,kBAAsB,CACpB,EAAI,iBAAkB,EAAM,QAAS,kBAAmB,EAAM,GAAG,QAAQ,cACzE,EAAI,WAAY,KAAK,UAAU,GAAS,QAAQ,eAAgB,IAAI,QAAQ,KAAM,MAClF,EAAS,cACT,EAAI,sBAAuB,KAAM,AAAQ,MACzC,KAAM,KACN,KAAM,GAAM,OACZ,EAAS,mBACT,EAAI,MAAM,iBAAiB,QAAS,GACpC,EAAI,KAAK,iBAAiB,QAAS,GACnC,EAAI,OAAO,iBAAiB,QAAS,GACrC,KAAM,GAAM,SACZ,KAAM,KAGR,OAAO,OAAS", + "mappings": "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", "names": [] } diff --git a/demo/typescript/index.js.map b/demo/typescript/index.js.map index a07f857d..d092c8cf 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: 'webgpu' as const,\n // async: true,\n modelBasePath: '../../models',\n filter: { enabled: true, equalization: false },\n face: { enabled: true, detector: { rotation: false }, mesh: { enabled: true }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true } },\n body: { enabled: true },\n hand: { enabled: true },\n object: { enabled: false },\n gesture: { enabled: true },\n};\n\nconst human = new Human(humanConfig); // create instance of human with overrides from user configuration\n\nhuman.env['perfadd'] = false; // is performance data showing instant or total values\nhuman.draw.options.font = 'small-caps 18px \"Lato\"'; // set font used to draw labels when using draw methods\nhuman.draw.options.lineHeight = 20;\n\nconst dom = { // grab instances of dom objects so we dont have to look them up later\n video: document.getElementById('video') as HTMLVideoElement,\n canvas: document.getElementById('canvas') as HTMLCanvasElement,\n log: document.getElementById('log') as HTMLPreElement,\n fps: document.getElementById('status') as HTMLPreElement,\n perf: document.getElementById('performance') as HTMLDivElement,\n};\nconst timestamp = { detect: 0, draw: 0, tensors: 0 }; // holds information used to calculate performance and possible memory leaks\nconst fps = { detect: 0, draw: 0 }; // holds calculated fps information for both detect and screen refresh\n\nconst log = (...msg) => { // helper method to output messages\n dom.log.innerText += msg.join(' ') + '\\n';\n // eslint-disable-next-line no-console\n console.log(...msg);\n};\nconst status = (msg) => dom.fps.innerText = msg; // print status element\nconst perf = (msg) => dom.perf.innerText = 'tensors:' + human.tf.memory().numTensors + ' | performance: ' + JSON.stringify(msg).replace(/\"|{|}/g, '').replace(/,/g, ' | '); // print performance element\n\nasync function webCam() { // initialize webcam\n status('starting webcam...');\n // @ts-ignore resizeMode is not yet defined in tslib\n const options: MediaStreamConstraints = { audio: false, video: { facingMode: 'user', resizeMode: 'none', width: { ideal: document.body.clientWidth } } };\n const stream: MediaStream = await navigator.mediaDevices.getUserMedia(options);\n const ready = new Promise((resolve) => { dom.video.onloadeddata = () => resolve(true); });\n dom.video.srcObject = stream;\n dom.video.play();\n await ready;\n dom.canvas.width = dom.video.videoWidth;\n dom.canvas.height = dom.video.videoHeight;\n const track: MediaStreamTrack = stream.getVideoTracks()[0];\n const capabilities: MediaTrackCapabilities | string = track.getCapabilities ? track.getCapabilities() : '';\n const settings: MediaTrackSettings | string = track.getSettings ? track.getSettings() : '';\n const constraints: MediaTrackConstraints | string = track.getConstraints ? track.getConstraints() : '';\n log('video:', dom.video.videoWidth, dom.video.videoHeight, track.label, { stream, track, settings, constraints, capabilities });\n dom.canvas.onclick = () => { // pause when clicked on screen and resume on next click\n if (dom.video.paused) dom.video.play();\n else dom.video.pause();\n };\n}\n\nasync function detectionLoop() { // main detection loop\n if (!dom.video.paused) {\n // console.log('profiling data:', await human.profile(dom.video));\n await human.detect(dom.video); // actual detection; were not capturing output in a local variable as it can also be reached via human.result\n const tensors = human.tf.memory().numTensors; // check current tensor usage for memory leaks\n if (tensors - timestamp.tensors !== 0) log('allocated tensors:', tensors - timestamp.tensors); // printed on start and each time there is a tensor leak\n timestamp.tensors = tensors;\n }\n const now = human.now();\n fps.detect = 1000 / (now - timestamp.detect);\n timestamp.detect = now;\n requestAnimationFrame(detectionLoop); // start new frame immediately\n}\n\nasync function drawLoop() { // main screen refresh loop\n if (!dom.video.paused) {\n const interpolated = await human.next(human.result); // smoothen result using last-known results\n await human.draw.canvas(dom.video, dom.canvas); // draw canvas to screen\n await human.draw.all(dom.canvas, interpolated); // draw labels, boxes, lines, etc.\n perf(interpolated.performance); // write performance data\n }\n const now = human.now();\n fps.draw = 1000 / (now - timestamp.draw);\n timestamp.draw = now;\n status(dom.video.paused ? 'paused' : `fps: ${fps.detect.toFixed(1).padStart(5, ' ')} detect | ${fps.draw.toFixed(1).padStart(5, ' ')} draw`); // write status\n // requestAnimationFrame(drawLoop); // refresh at screen refresh rate\n setTimeout(drawLoop, 30); // use to slow down refresh from max refresh rate to target of 30 fps\n}\n\nasync function main() { // main entry point\n log('human version:', human.version, '| tfjs version:', human.tf.version['tfjs-core']);\n log('platform:', human.env.platform, '| agent:', human.env.agent);\n status('loading...');\n await human.load(); // preload all models\n log('backend:', human.tf.getBackend(), '| available:', human.env.backends);\n log('loaded models:', Object.values(human.models).filter((model) => model !== null).length);\n status('initializing...');\n await human.warmup(); // warmup function to initialize backend for future faster detection\n await webCam(); // start webcam\n await detectionLoop(); // start detection loop\n await drawLoop(); // start draw loop\n}\n\nwindow.onload = main;\n"], - "mappings": "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", + "mappings": "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", "names": [] } diff --git a/package.json b/package.json index 26614a57..18301ed4 100644 --- a/package.json +++ b/package.json @@ -54,27 +54,27 @@ ], "devDependencies": { "@microsoft/api-extractor": "^7.19.4", - "@tensorflow/tfjs": "^3.13.0", - "@tensorflow/tfjs-backend-cpu": "^3.13.0", - "@tensorflow/tfjs-backend-wasm": "^3.13.0", - "@tensorflow/tfjs-backend-webgl": "^3.13.0", + "@tensorflow/tfjs": "^3.14.0", + "@tensorflow/tfjs-backend-cpu": "^3.14.0", + "@tensorflow/tfjs-backend-wasm": "^3.14.0", + "@tensorflow/tfjs-backend-webgl": "^3.14.0", "@tensorflow/tfjs-backend-webgpu": "^0.0.1-alpha.8", - "@tensorflow/tfjs-converter": "^3.13.0", - "@tensorflow/tfjs-core": "^3.13.0", - "@tensorflow/tfjs-data": "^3.13.0", - "@tensorflow/tfjs-layers": "^3.13.0", - "@tensorflow/tfjs-node": "^3.13.0", - "@tensorflow/tfjs-node-gpu": "^3.13.0", + "@tensorflow/tfjs-converter": "^3.14.0", + "@tensorflow/tfjs-core": "^3.14.0", + "@tensorflow/tfjs-data": "^3.14.0", + "@tensorflow/tfjs-layers": "^3.14.0", + "@tensorflow/tfjs-node": "^3.14.0", + "@tensorflow/tfjs-node-gpu": "^3.14.0", "@types/node": "^17.0.21", "@types/offscreencanvas": "^2019.6.4", - "@typescript-eslint/eslint-plugin": "^5.12.1", - "@typescript-eslint/parser": "^5.12.1", - "@vladmandic/build": "^0.7.0", - "@vladmandic/pilogger": "^0.4.2", + "@typescript-eslint/eslint-plugin": "^5.14.0", + "@typescript-eslint/parser": "^5.14.0", + "@vladmandic/build": "^0.7.1", + "@vladmandic/pilogger": "^0.4.3", "@vladmandic/tfjs": "github:vladmandic/tfjs", "canvas": "^2.9.0", - "dayjs": "^1.10.7", - "esbuild": "^0.14.23", + "dayjs": "^1.10.8", + "esbuild": "^0.14.25", "eslint": "8.10.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-html": "^6.2.0", @@ -82,11 +82,11 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.0.0", - "node-fetch": "^3.2.0", + "node-fetch": "^3.2.2", "rimraf": "^3.0.2", "seedrandom": "^3.0.5", "tslib": "^2.3.1", - "typedoc": "0.22.12", - "typescript": "4.5.5" + "typedoc": "0.22.13", + "typescript": "4.6.2" } } diff --git a/test/build.log b/test/build.log index 253e2dbd..14f897ca 100644 --- a/test/build.log +++ b/test/build.log @@ -1,24 +1,24 @@ -2022-02-17 08:14:40 INFO:  Application: {"name":"@vladmandic/human","version":"2.6.3"} -2022-02-17 08:14:40 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-02-17 08:14:40 INFO:  Toolchain: {"build":"0.7.0","esbuild":"0.14.22","typescript":"4.5.5","typedoc":"0.22.11","eslint":"8.9.0"} -2022-02-17 08:14:40 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-02-17 08:14:40 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} -2022-02-17 08:14:40 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":644} -2022-02-17 08:14:40 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":64,"inputBytes":562644,"outputBytes":293608} -2022-02-17 08:14:40 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":648} -2022-02-17 08:14:40 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":64,"inputBytes":562648,"outputBytes":293612} -2022-02-17 08:14:40 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":685} -2022-02-17 08:14:40 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":64,"inputBytes":562685,"outputBytes":293651} -2022-02-17 08:14:40 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":394} -2022-02-17 08:14:40 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1068,"outputBytes":615} -2022-02-17 08:14:40 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":64,"inputBytes":562615,"outputBytes":292361} -2022-02-17 08:14:40 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1334770} -2022-02-17 08:14:41 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":64,"inputBytes":1896770,"outputBytes":1626294} -2022-02-17 08:14:41 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":64,"inputBytes":1896770,"outputBytes":2101597} -2022-02-17 08:14:46 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":112} -2022-02-17 08:14:48 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":69,"generated":true} -2022-02-17 08:14:48 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":5863,"outputBytes":2915} -2022-02-17 08:14:48 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-02-17 08:14:55 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":95,"errors":0,"warnings":0} -2022-02-17 08:14:56 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-02-17 08:14:56 INFO:  Done... +2022-03-07 13:22:50 INFO:  Application: {"name":"@vladmandic/human","version":"2.6.4"} +2022-03-07 13:22:50 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-03-07 13:22:50 INFO:  Toolchain: {"build":"0.7.1","esbuild":"0.14.25","typescript":"4.6.2","typedoc":"0.22.13","eslint":"8.10.0"} +2022-03-07 13:22:50 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-03-07 13:22:50 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} +2022-03-07 13:22:50 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":644} +2022-03-07 13:22:50 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":64,"inputBytes":562645,"outputBytes":293118} +2022-03-07 13:22:50 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":648} +2022-03-07 13:22:50 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":64,"inputBytes":562649,"outputBytes":293122} +2022-03-07 13:22:50 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":685} +2022-03-07 13:22:50 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":64,"inputBytes":562686,"outputBytes":293161} +2022-03-07 13:22:50 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":394} +2022-03-07 13:22:50 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1068,"outputBytes":615} +2022-03-07 13:22:50 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":64,"inputBytes":562616,"outputBytes":291871} +2022-03-07 13:22:50 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1335248} +2022-03-07 13:22:50 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":64,"inputBytes":1897249,"outputBytes":1626282} +2022-03-07 13:22:50 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":64,"inputBytes":1897249,"outputBytes":2102106} +2022-03-07 13:22:55 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":112} +2022-03-07 13:22:57 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":69,"generated":true} +2022-03-07 13:22:57 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":5863,"outputBytes":2915} +2022-03-07 13:22:57 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-03-07 13:23:05 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":95,"errors":0,"warnings":0} +2022-03-07 13:23:06 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-03-07 13:23:06 INFO:  Done... diff --git a/test/test.log b/test/test.log index e68323a4..be5dafce 100644 --- a/test/test.log +++ b/test/test.log @@ -1,684 +1,684 @@ -2022-02-17 08:15:04 INFO:  @vladmandic/human version 2.6.3 -2022-02-17 08:15:04 INFO:  User: vlado Platform: linux Arch: x64 Node: v17.4.0 -2022-02-17 08:15:04 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] -2022-02-17 08:15:04 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-02-17 08:15:04 INFO:  -2022-02-17 08:15:04 INFO:  test-node.js start -2022-02-17 08:15:04 INFO:  test-node.js test: configuration validation -2022-02-17 08:15:04 STATE: test-node.js passed: configuration default validation [] -2022-02-17 08:15:04 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-02-17 08:15:04 INFO:  test-node.js test: model load -2022-02-17 08:15:04 STATE: test-node.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false},{"name":"gear","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"mobilefacenet","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"ssrnetgender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"liveness","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":true}] -2022-02-17 08:15:04 INFO:  test-node.js test: warmup -2022-02-17 08:15:04 STATE: test-node.js passed: create human -2022-02-17 08:15:04 INFO:  test-node.js human version: 2.6.3 -2022-02-17 08:15:04 INFO:  test-node.js platform: linux x64 agent: NodeJS v17.4.0 -2022-02-17 08:15:04 INFO:  test-node.js tfjs version: 3.13.0 -2022-02-17 08:15:04 INFO:  test-node.js tensorflow binding version: 2.7.0-dev20211101 -2022-02-17 08:15:04 STATE: test-node.js passed: set backend: tensorflow -2022-02-17 08:15:04 STATE: test-node.js tensors 1919 -2022-02-17 08:15:04 STATE: test-node.js passed: load models -2022-02-17 08:15:04 STATE: test-node.js result: defined models: 22 loaded models: 12 -2022-02-17 08:15:04 STATE: test-node.js passed: warmup: none default -2022-02-17 08:15:04 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-02-17 08:15:04 DATA:  test-node.js result: performance: load: null total: null -2022-02-17 08:15:04 STATE: test-node.js passed: warmup none result match -2022-02-17 08:15:04 STATE: test-node.js event: image -2022-02-17 08:15:05 STATE: test-node.js event: detect -2022-02-17 08:15:05 STATE: test-node.js event: warmup -2022-02-17 08:15:05 STATE: test-node.js passed: warmup: face default -2022-02-17 08:15:05 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-02-17 08:15:05 DATA:  test-node.js result: performance: load: null total: 363 -2022-02-17 08:15:05 STATE: test-node.js passed: warmup face result match -2022-02-17 08:15:05 STATE: test-node.js event: image -2022-02-17 08:15:05 STATE: test-node.js event: detect -2022-02-17 08:15:05 STATE: test-node.js event: warmup -2022-02-17 08:15:05 STATE: test-node.js passed: warmup: body default -2022-02-17 08:15:05 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:05 DATA:  test-node.js result: performance: load: null total: 253 -2022-02-17 08:15:05 STATE: test-node.js passed: warmup body result match -2022-02-17 08:15:05 STATE: test-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":29.6,"gender":"female","genderScore":0.89},"emotion":[{"score":0.35,"emotion":"fear"},{"score":0.28,"emotion":"angry"},{"score":0.15,"emotion":"sad"},{"score":0.1,"emotion":"surprise"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-02-17 08:15:05 INFO:  test-node.js test: details verification -2022-02-17 08:15:05 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:05 STATE: test-node.js event: image -2022-02-17 08:15:06 STATE: test-node.js event: detect -2022-02-17 08:15:06 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:06 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:06 DATA:  test-node.js result: performance: load: null total: 246 -2022-02-17 08:15:06 STATE: test-node.js passed: details face length 1 -2022-02-17 08:15:06 STATE: test-node.js passed: details face score 1 0.93 1 -2022-02-17 08:15:06 STATE: test-node.js passed: details face age/gender 29.6 female 0.91 73.26 -2022-02-17 08:15:06 STATE: test-node.js passed: details face arrays 4 478 1024 -2022-02-17 08:15:06 STATE: test-node.js passed: details face emotion 3 {"score":0.34,"emotion":"fear"} -2022-02-17 08:15:06 STATE: test-node.js passed: details face anti-spoofing 0.78 -2022-02-17 08:15:06 STATE: test-node.js passed: details face liveness 0.83 -2022-02-17 08:15:06 STATE: test-node.js passed: details body length 1 -2022-02-17 08:15:06 STATE: test-node.js passed: details body 0.92 17 6 -2022-02-17 08:15:06 STATE: test-node.js passed: details hand length 1 -2022-02-17 08:15:06 STATE: test-node.js passed: details hand 0.51 0.73 point -2022-02-17 08:15:06 STATE: test-node.js passed: details hand arrays 21 5 7 -2022-02-17 08:15:06 STATE: test-node.js passed: details gesture length 6 -2022-02-17 08:15:06 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-02-17 08:15:06 STATE: test-node.js passed: details object length 1 -2022-02-17 08:15:06 STATE: test-node.js passed: details object 0.72 person -2022-02-17 08:15:06 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-02-17 08:15:06 STATE: test-node.js event: image -2022-02-17 08:15:06 STATE: test-node.js event: detect -2022-02-17 08:15:06 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-02-17 08:15:06 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-02-17 08:15:06 STATE: test-node.js event: image -2022-02-17 08:15:06 STATE: test-node.js event: detect -2022-02-17 08:15:06 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-02-17 08:15:07 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:07 STATE: test-node.js event: image -2022-02-17 08:15:07 STATE: test-node.js event: detect -2022-02-17 08:15:07 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-02-17 08:15:07 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:07 STATE: test-node.js event: image -2022-02-17 08:15:07 STATE: test-node.js event: detect -2022-02-17 08:15:07 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-02-17 08:15:07 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-02-17 08:15:07 STATE: test-node.js event: image -2022-02-17 08:15:08 STATE: test-node.js event: detect -2022-02-17 08:15:08 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-02-17 08:15:08 INFO:  test-node.js test default -2022-02-17 08:15:08 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:08 STATE: test-node.js event: image -2022-02-17 08:15:08 STATE: test-node.js event: detect -2022-02-17 08:15:08 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:08 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:08 DATA:  test-node.js result: performance: load: null total: 207 -2022-02-17 08:15:08 STATE: test-node.js passed: default result face match 1 female 0.91 -2022-02-17 08:15:08 INFO:  test-node.js test sync -2022-02-17 08:15:08 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:08 STATE: test-node.js event: image -2022-02-17 08:15:08 STATE: test-node.js event: detect -2022-02-17 08:15:08 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:08 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:08 DATA:  test-node.js result: performance: load: null total: 218 -2022-02-17 08:15:08 STATE: test-node.js passed: default sync 1 female 0.91 -2022-02-17 08:15:08 INFO:  test-node.js test: image process -2022-02-17 08:15:08 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:08 STATE: test-node.js passed: image input null [1,256,256,3] -2022-02-17 08:15:08 INFO:  test-node.js test: image null -2022-02-17 08:15:08 STATE: test-node.js passed: invalid input could not convert input to tensor -2022-02-17 08:15:08 INFO:  test-node.js test face similarity -2022-02-17 08:15:08 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:08 STATE: test-node.js event: image -2022-02-17 08:15:09 STATE: test-node.js event: detect -2022-02-17 08:15:09 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:09 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-02-17 08:15:09 DATA:  test-node.js result: performance: load: null total: 208 -2022-02-17 08:15:09 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:09 STATE: test-node.js event: image -2022-02-17 08:15:09 STATE: test-node.js event: detect -2022-02-17 08:15:09 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:09 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:09 DATA:  test-node.js result: performance: load: null total: 219 -2022-02-17 08:15:09 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-02-17 08:15:09 STATE: test-node.js event: image -2022-02-17 08:15:09 STATE: test-node.js event: detect -2022-02-17 08:15:09 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:09 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-02-17 08:15:09 DATA:  test-node.js result: performance: load: null total: 232 -2022-02-17 08:15:09 STATE: test-node.js passed: face descriptor -2022-02-17 08:15:09 STATE: test-node.js passed: face similarity {"similarity":[1,0.5632803981762933,0.5194114531612539],"descriptors":[1024,1024,1024]} -2022-02-17 08:15:09 INFO:  test-node.js test face matching -2022-02-17 08:15:09 STATE: test-node.js passed: face database 40 -2022-02-17 08:15:09 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.8797924743573865}} {"second":{"index":4,"similarity":0.548081908581344}} {"third":{"index":4,"similarity":0.4999696807961951}} -2022-02-17 08:15:09 INFO:  test-node.js test object -2022-02-17 08:15:09 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:09 STATE: test-node.js event: image -2022-02-17 08:15:10 STATE: test-node.js event: detect -2022-02-17 08:15:10 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:10 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:10 DATA:  test-node.js result: performance: load: null total: 227 -2022-02-17 08:15:10 STATE: test-node.js passed: object result match -2022-02-17 08:15:10 INFO:  test-node.js test sensitive -2022-02-17 08:15:10 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:10 STATE: test-node.js event: image -2022-02-17 08:15:10 STATE: test-node.js event: detect -2022-02-17 08:15:10 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:10 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:10 DATA:  test-node.js result: performance: load: null total: 222 -2022-02-17 08:15:10 STATE: test-node.js passed: sensitive result match -2022-02-17 08:15:10 STATE: test-node.js passed: sensitive face result match -2022-02-17 08:15:10 STATE: test-node.js passed: sensitive face emotion result [{"score":0.34,"emotion":"fear"},{"score":0.29,"emotion":"angry"},{"score":0.15,"emotion":"sad"}] -2022-02-17 08:15:10 STATE: test-node.js passed: sensitive body result match -2022-02-17 08:15:10 STATE: test-node.js passed: sensitive hand result match -2022-02-17 08:15:10 INFO:  test-node.js test detectors -2022-02-17 08:15:10 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:10 STATE: test-node.js event: image -2022-02-17 08:15:10 STATE: test-node.js event: detect -2022-02-17 08:15:10 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:10 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:10 DATA:  test-node.js result: performance: load: null total: 147 -2022-02-17 08:15:10 STATE: test-node.js passed: detector result face match -2022-02-17 08:15:10 STATE: test-node.js passed: detector result hand match -2022-02-17 08:15:10 INFO:  test-node.js test: multi-instance -2022-02-17 08:15:10 STATE: test-node.js event: image -2022-02-17 08:15:11 STATE: test-node.js event: detect -2022-02-17 08:15:11 STATE: test-node.js passed: detect: random default -2022-02-17 08:15:11 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2022-02-17 08:15:11 DATA:  test-node.js result: performance: load: null total: 137 -2022-02-17 08:15:11 INFO:  test-node.js test: first instance -2022-02-17 08:15:11 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-02-17 08:15:11 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:11 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-02-17 08:15:11 DATA:  test-node.js result: performance: load: null total: 138 -2022-02-17 08:15:11 INFO:  test-node.js test: second instance -2022-02-17 08:15:11 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-02-17 08:15:11 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:11 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-02-17 08:15:11 DATA:  test-node.js result: performance: load: null total: 137 -2022-02-17 08:15:11 INFO:  test-node.js test: concurrent -2022-02-17 08:15:11 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:11 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:11 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:11 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:11 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-02-17 08:15:12 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-02-17 08:15:12 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:12 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:12 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-02-17 08:15:12 STATE: test-node.js event: image -2022-02-17 08:15:12 STATE: test-node.js event: image -2022-02-17 08:15:12 STATE: test-node.js event: image -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1379 -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1379 -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1490 -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1489 -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1490 -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1489 -2022-02-17 08:15:13 STATE: test-node.js event: detect -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1193 -2022-02-17 08:15:13 STATE: test-node.js event: detect -2022-02-17 08:15:13 STATE: test-node.js event: detect -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 2 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":17} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1193 -2022-02-17 08:15:13 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:13 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:13 DATA:  test-node.js result: performance: load: null total: 1193 -2022-02-17 08:15:13 INFO:  test-node.js test: monkey-patch -2022-02-17 08:15:13 STATE: test-node.js event: image -2022-02-17 08:15:13 STATE: test-node.js event: detect -2022-02-17 08:15:13 STATE: test-node.js passed: monkey patch -2022-02-17 08:15:13 STATE: test-node.js passed: segmentation [65536] -2022-02-17 08:15:13 STATE: test-node.js passeed: equal usage -2022-02-17 08:15:13 INFO:  test-node.js test: input compare -2022-02-17 08:15:13 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:13 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-02-17 08:15:13 STATE: test-node.js passed: image compare 0 23.275441687091504 -2022-02-17 08:15:13 INFO:  test-node.js events: {"image":21,"detect":21,"warmup":2} -2022-02-17 08:15:13 INFO:  test-node.js tensors 1925 -2022-02-17 08:15:13 INFO:  test-node.js test complete: 9067 ms -2022-02-17 08:15:13 INFO:  -2022-02-17 08:15:13 INFO:  test-node-gpu.js start -2022-02-17 08:15:14 INFO:  test-node-gpu.js test: configuration validation -2022-02-17 08:15:14 STATE: test-node-gpu.js passed: configuration default validation [] -2022-02-17 08:15:14 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-02-17 08:15:14 INFO:  test-node-gpu.js test: model load -2022-02-17 08:15:14 STATE: test-node-gpu.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false},{"name":"gear","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"mobilefacenet","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"ssrnetgender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"liveness","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":true}] -2022-02-17 08:15:14 INFO:  test-node-gpu.js test: warmup -2022-02-17 08:15:14 STATE: test-node-gpu.js passed: create human -2022-02-17 08:15:14 INFO:  test-node-gpu.js human version: 2.6.3 -2022-02-17 08:15:14 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v17.4.0 -2022-02-17 08:15:14 INFO:  test-node-gpu.js tfjs version: 3.13.0 -2022-02-17 08:15:14 INFO:  test-node-gpu.js tensorflow binding version: 2.7.0-dev20211101 -2022-02-17 08:15:14 STATE: test-node-gpu.js passed: set backend: tensorflow -2022-02-17 08:15:14 STATE: test-node-gpu.js tensors 1919 -2022-02-17 08:15:14 STATE: test-node-gpu.js passed: load models -2022-02-17 08:15:14 STATE: test-node-gpu.js result: defined models: 22 loaded models: 12 -2022-02-17 08:15:14 STATE: test-node-gpu.js passed: warmup: none default -2022-02-17 08:15:14 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-02-17 08:15:14 DATA:  test-node-gpu.js result: performance: load: null total: null -2022-02-17 08:15:14 STATE: test-node-gpu.js passed: warmup none result match -2022-02-17 08:15:15 STATE: test-node-gpu.js event: image -2022-02-17 08:15:18 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:18 STATE: test-node-gpu.js event: warmup -2022-02-17 08:15:18 STATE: test-node-gpu.js passed: warmup: face default -2022-02-17 08:15:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-02-17 08:15:18 DATA:  test-node-gpu.js result: performance: load: null total: 3280 -2022-02-17 08:15:18 STATE: test-node-gpu.js passed: warmup face result match -2022-02-17 08:15:18 STATE: test-node-gpu.js event: image -2022-02-17 08:15:18 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:18 STATE: test-node-gpu.js event: warmup -2022-02-17 08:15:18 STATE: test-node-gpu.js passed: warmup: body default -2022-02-17 08:15:18 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:18 DATA:  test-node-gpu.js result: performance: load: null total: 223 -2022-02-17 08:15:18 STATE: test-node-gpu.js passed: warmup body result match -2022-02-17 08:15:18 STATE: test-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":29.6,"gender":"female","genderScore":0.89},"emotion":[{"score":0.35,"emotion":"fear"},{"score":0.28,"emotion":"angry"},{"score":0.15,"emotion":"sad"},{"score":0.1,"emotion":"surprise"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-02-17 08:15:18 INFO:  test-node-gpu.js test: details verification -2022-02-17 08:15:18 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:18 STATE: test-node-gpu.js event: image -2022-02-17 08:15:19 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:19 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:19 DATA:  test-node-gpu.js result: performance: load: null total: 191 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details face length 1 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details face score 1 0.93 1 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details face age/gender 29.6 female 0.91 73.26 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details face emotion 3 {"score":0.34,"emotion":"fear"} -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details face anti-spoofing 0.78 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details face liveness 0.83 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details body length 1 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details body 0.92 17 6 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details hand length 1 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details gesture length 6 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details object length 1 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: details object 0.72 person -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-02-17 08:15:19 STATE: test-node-gpu.js event: image -2022-02-17 08:15:19 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-02-17 08:15:19 STATE: test-node-gpu.js event: image -2022-02-17 08:15:19 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:19 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-02-17 08:15:20 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:20 STATE: test-node-gpu.js event: image -2022-02-17 08:15:20 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:20 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-02-17 08:15:20 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:20 STATE: test-node-gpu.js event: image -2022-02-17 08:15:20 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:20 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-02-17 08:15:20 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-02-17 08:15:20 STATE: test-node-gpu.js event: image -2022-02-17 08:15:21 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-02-17 08:15:21 INFO:  test-node-gpu.js test default -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:21 STATE: test-node-gpu.js event: image -2022-02-17 08:15:21 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:21 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:21 DATA:  test-node-gpu.js result: performance: load: null total: 182 -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: default result face match 1 female 0.91 -2022-02-17 08:15:21 INFO:  test-node-gpu.js test sync -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:21 STATE: test-node-gpu.js event: image -2022-02-17 08:15:21 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:21 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:21 DATA:  test-node-gpu.js result: performance: load: null total: 197 -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: default sync 1 female 0.91 -2022-02-17 08:15:21 INFO:  test-node-gpu.js test: image process -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: image input null [1,256,256,3] -2022-02-17 08:15:21 INFO:  test-node-gpu.js test: image null -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor -2022-02-17 08:15:21 INFO:  test-node-gpu.js test face similarity -2022-02-17 08:15:21 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:21 STATE: test-node-gpu.js event: image -2022-02-17 08:15:22 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:22 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-02-17 08:15:22 DATA:  test-node-gpu.js result: performance: load: null total: 190 -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:22 STATE: test-node-gpu.js event: image -2022-02-17 08:15:22 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:22 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:22 DATA:  test-node-gpu.js result: performance: load: null total: 202 -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-02-17 08:15:22 STATE: test-node-gpu.js event: image -2022-02-17 08:15:22 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:22 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-02-17 08:15:22 DATA:  test-node-gpu.js result: performance: load: null total: 182 -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: face descriptor -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.5630556935525979,0.5193764698386258],"descriptors":[1024,1024,1024]} -2022-02-17 08:15:22 INFO:  test-node-gpu.js test face matching -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: face database 40 -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.8799972012493786}} {"second":{"index":4,"similarity":0.5479612754605243}} {"third":{"index":4,"similarity":0.5000142632384791}} -2022-02-17 08:15:22 INFO:  test-node-gpu.js test object -2022-02-17 08:15:22 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:22 STATE: test-node-gpu.js event: image -2022-02-17 08:15:23 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:23 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:23 DATA:  test-node-gpu.js result: performance: load: null total: 199 -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: object result match -2022-02-17 08:15:23 INFO:  test-node-gpu.js test sensitive -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:23 STATE: test-node-gpu.js event: image -2022-02-17 08:15:23 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:23 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:23 DATA:  test-node-gpu.js result: performance: load: null total: 200 -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: sensitive result match -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: sensitive face result match -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.34,"emotion":"fear"},{"score":0.29,"emotion":"angry"},{"score":0.15,"emotion":"sad"}] -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: sensitive body result match -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: sensitive hand result match -2022-02-17 08:15:23 INFO:  test-node-gpu.js test detectors -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:23 STATE: test-node-gpu.js event: image -2022-02-17 08:15:23 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:23 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-02-17 08:15:23 DATA:  test-node-gpu.js result: performance: load: null total: 111 -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: detector result face match -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: detector result hand match -2022-02-17 08:15:23 INFO:  test-node-gpu.js test: multi-instance -2022-02-17 08:15:23 STATE: test-node-gpu.js event: image -2022-02-17 08:15:23 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: detect: random default -2022-02-17 08:15:23 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2022-02-17 08:15:23 DATA:  test-node-gpu.js result: performance: load: null total: 105 -2022-02-17 08:15:23 INFO:  test-node-gpu.js test: first instance -2022-02-17 08:15:23 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:24 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-02-17 08:15:24 DATA:  test-node-gpu.js result: performance: load: null total: 107 -2022-02-17 08:15:24 INFO:  test-node-gpu.js test: second instance -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:24 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-02-17 08:15:24 DATA:  test-node-gpu.js result: performance: load: null total: 98 -2022-02-17 08:15:24 INFO:  test-node-gpu.js test: concurrent -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:24 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-02-17 08:15:25 STATE: test-node-gpu.js event: image -2022-02-17 08:15:25 STATE: test-node-gpu.js event: image -2022-02-17 08:15:25 STATE: test-node-gpu.js event: image -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 1042 -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 1042 -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:25 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-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 1108 -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:25 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-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 1108 -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 1108 -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 1108 -2022-02-17 08:15:25 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":16} -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-02-17 08:15:25 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:25 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:25 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-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:25 DATA:  test-node-gpu.js result: performance: load: null total: 870 -2022-02-17 08:15:25 INFO:  test-node-gpu.js test: monkey-patch -2022-02-17 08:15:25 STATE: test-node-gpu.js event: image -2022-02-17 08:15:25 STATE: test-node-gpu.js event: detect -2022-02-17 08:15:25 STATE: test-node-gpu.js passed: monkey patch -2022-02-17 08:15:26 STATE: test-node-gpu.js passed: segmentation [65536] -2022-02-17 08:15:26 STATE: test-node-gpu.js passeed: equal usage -2022-02-17 08:15:26 INFO:  test-node-gpu.js test: input compare -2022-02-17 08:15:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-02-17 08:15:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-02-17 08:15:26 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 -2022-02-17 08:15:26 INFO:  test-node-gpu.js events: {"image":21,"detect":21,"warmup":2} -2022-02-17 08:15:26 INFO:  test-node-gpu.js tensors 1925 -2022-02-17 08:15:26 INFO:  test-node-gpu.js test complete: 11706 ms -2022-02-17 08:15:27 INFO:  -2022-02-17 08:15:27 INFO:  test-node-wasm.js start -2022-02-17 08:15:27 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ -2022-02-17 08:15:27 INFO:  test-node-wasm.js test: configuration validation -2022-02-17 08:15:27 STATE: test-node-wasm.js passed: configuration default validation [] -2022-02-17 08:15:27 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-02-17 08:15:27 INFO:  test-node-wasm.js test: model load -2022-02-17 08:15:28 STATE: test-node-wasm.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false},{"name":"gear","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"mobilefacenet","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"ssrnetgender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"liveness","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":true}] -2022-02-17 08:15:28 INFO:  test-node-wasm.js test: warmup -2022-02-17 08:15:28 STATE: test-node-wasm.js passed: create human -2022-02-17 08:15:28 INFO:  test-node-wasm.js human version: 2.6.3 -2022-02-17 08:15:28 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v17.4.0 -2022-02-17 08:15:28 INFO:  test-node-wasm.js tfjs version: 3.13.0 -2022-02-17 08:15:28 STATE: test-node-wasm.js passed: set backend: wasm -2022-02-17 08:15:28 STATE: test-node-wasm.js tensors 1919 -2022-02-17 08:15:28 STATE: test-node-wasm.js passed: load models -2022-02-17 08:15:28 STATE: test-node-wasm.js result: defined models: 22 loaded models: 12 -2022-02-17 08:15:28 STATE: test-node-wasm.js passed: warmup: none default -2022-02-17 08:15:28 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-02-17 08:15:28 DATA:  test-node-wasm.js result: performance: load: null total: null -2022-02-17 08:15:28 STATE: test-node-wasm.js passed: warmup none result match -2022-02-17 08:15:28 STATE: test-node-wasm.js event: image -2022-02-17 08:15:29 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:29 STATE: test-node-wasm.js event: warmup -2022-02-17 08:15:29 STATE: test-node-wasm.js passed: warmup: face default -2022-02-17 08:15:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-02-17 08:15:29 DATA:  test-node-wasm.js result: performance: load: null total: 531 -2022-02-17 08:15:29 STATE: test-node-wasm.js passed: warmup face result match -2022-02-17 08:15:29 STATE: test-node-wasm.js event: image -2022-02-17 08:15:29 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:29 STATE: test-node-wasm.js event: warmup -2022-02-17 08:15:29 STATE: test-node-wasm.js passed: warmup: body default -2022-02-17 08:15:29 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:29 DATA:  test-node-wasm.js result: performance: load: null total: 357 -2022-02-17 08:15:29 STATE: test-node-wasm.js passed: warmup body result match -2022-02-17 08:15:29 STATE: test-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":29.6,"gender":"female","genderScore":0.91},"emotion":[{"score":0.34,"emotion":"fear"},{"score":0.29,"emotion":"angry"},{"score":0.15,"emotion":"sad"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-02-17 08:15:29 INFO:  test-node-wasm.js test: details verification -2022-02-17 08:15:29 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:29 STATE: test-node-wasm.js event: image -2022-02-17 08:15:30 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:30 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:30 DATA:  test-node-wasm.js result: performance: load: null total: 341 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details face length 1 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details face score 1 0.93 1 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details face age/gender 29.6 female 0.91 73.26 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details face emotion 3 {"score":0.34,"emotion":"fear"} -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details face anti-spoofing 0.78 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details face liveness 0.83 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details body length 1 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details body 0.92 17 6 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details hand length 1 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details gesture length 6 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details object length 1 -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: details object 0.72 person -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2022-02-17 08:15:30 STATE: test-node-wasm.js event: image -2022-02-17 08:15:30 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:30 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-02-17 08:15:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2022-02-17 08:15:31 STATE: test-node-wasm.js event: image -2022-02-17 08:15:31 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:31 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-02-17 08:15:31 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:31 STATE: test-node-wasm.js event: image -2022-02-17 08:15:31 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:31 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-02-17 08:15:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:32 STATE: test-node-wasm.js event: image -2022-02-17 08:15:32 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:32 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-02-17 08:15:32 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-02-17 08:15:32 STATE: test-node-wasm.js event: image -2022-02-17 08:15:33 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:33 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-02-17 08:15:33 INFO:  test-node-wasm.js test default -2022-02-17 08:15:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:33 STATE: test-node-wasm.js event: image -2022-02-17 08:15:33 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:33 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:33 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:33 DATA:  test-node-wasm.js result: performance: load: null total: 315 -2022-02-17 08:15:33 STATE: test-node-wasm.js passed: default result face match 1 female 0.93 -2022-02-17 08:15:33 INFO:  test-node-wasm.js test sync -2022-02-17 08:15:33 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:33 STATE: test-node-wasm.js event: image -2022-02-17 08:15:34 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:34 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:34 DATA:  test-node-wasm.js result: performance: load: null total: 319 -2022-02-17 08:15:34 STATE: test-node-wasm.js passed: default sync 1 female 0.93 -2022-02-17 08:15:34 INFO:  test-node-wasm.js test: image process -2022-02-17 08:15:34 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-02-17 08:15:34 STATE: test-node-wasm.js passed: image input null [1,256,256,3] -2022-02-17 08:15:34 INFO:  test-node-wasm.js test: image null -2022-02-17 08:15:34 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor -2022-02-17 08:15:34 INFO:  test-node-wasm.js test face similarity -2022-02-17 08:15:34 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-02-17 08:15:34 STATE: test-node-wasm.js event: image -2022-02-17 08:15:34 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:34 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:34 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-02-17 08:15:34 DATA:  test-node-wasm.js result: performance: load: null total: 339 -2022-02-17 08:15:34 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:34 STATE: test-node-wasm.js event: image -2022-02-17 08:15:35 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:35 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:35 DATA:  test-node-wasm.js result: performance: load: null total: 331 -2022-02-17 08:15:35 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-02-17 08:15:35 STATE: test-node-wasm.js event: image -2022-02-17 08:15:35 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:35 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:35 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-02-17 08:15:35 DATA:  test-node-wasm.js result: performance: load: null total: 282 -2022-02-17 08:15:35 STATE: test-node-wasm.js passed: face descriptor -2022-02-17 08:15:35 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5888036339038205,0.4689331535670693],"descriptors":[1024,1024,1024]} -2022-02-17 08:15:35 INFO:  test-node-wasm.js test face matching -2022-02-17 08:15:35 STATE: test-node-wasm.js passed: face database 40 -2022-02-17 08:15:35 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.8797924799049534}} {"second":{"index":4,"similarity":0.573642308237338}} {"third":{"index":4,"similarity":0.45582039900188964}} -2022-02-17 08:15:35 INFO:  test-node-wasm.js test object -2022-02-17 08:15:35 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:35 STATE: test-node-wasm.js event: image -2022-02-17 08:15:36 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:36 DATA:  test-node-wasm.js result: performance: load: null total: 312 -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: object result match -2022-02-17 08:15:36 INFO:  test-node-wasm.js test sensitive -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:36 STATE: test-node-wasm.js event: image -2022-02-17 08:15:36 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-02-17 08:15:36 DATA:  test-node-wasm.js result: performance: load: null total: 366 -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: sensitive result match -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: sensitive face result match -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: sensitive face emotion result [{"score":0.54,"emotion":"angry"},{"score":0.2,"emotion":"fear"},{"score":0.16,"emotion":"surprise"}] -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: sensitive body result match -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: sensitive hand result match -2022-02-17 08:15:36 INFO:  test-node-wasm.js test detectors -2022-02-17 08:15:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:36 STATE: test-node-wasm.js event: image -2022-02-17 08:15:37 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:37 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:37 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-02-17 08:15:37 DATA:  test-node-wasm.js result: performance: load: null total: 230 -2022-02-17 08:15:37 STATE: test-node-wasm.js passed: detector result face match -2022-02-17 08:15:37 STATE: test-node-wasm.js passed: detector result hand match -2022-02-17 08:15:37 INFO:  test-node-wasm.js test: multi-instance -2022-02-17 08:15:37 STATE: test-node-wasm.js event: image -2022-02-17 08:15:37 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:37 STATE: test-node-wasm.js passed: detect: random default -2022-02-17 08:15:37 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.07,"keypoints":15} -2022-02-17 08:15:37 DATA:  test-node-wasm.js result: performance: load: null total: 206 -2022-02-17 08:15:37 INFO:  test-node-wasm.js test: first instance -2022-02-17 08:15:37 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-02-17 08:15:37 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:37 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-02-17 08:15:37 DATA:  test-node-wasm.js result: performance: load: null total: 209 -2022-02-17 08:15:37 INFO:  test-node-wasm.js test: second instance -2022-02-17 08:15:37 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-02-17 08:15:37 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:37 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-02-17 08:15:37 DATA:  test-node-wasm.js result: performance: load: null total: 222 -2022-02-17 08:15:37 INFO:  test-node-wasm.js test: concurrent -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-02-17 08:15:39 STATE: test-node-wasm.js event: image -2022-02-17 08:15:39 STATE: test-node-wasm.js event: image -2022-02-17 08:15:39 STATE: test-node-wasm.js event: image -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2081 -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2081 -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2302 -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2302 -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2302 -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2302 -2022-02-17 08:15:40 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2009 -2022-02-17 08:15:40 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:40 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2009 -2022-02-17 08:15:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-02-17 08:15:40 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-02-17 08:15:40 DATA:  test-node-wasm.js result: performance: load: null total: 2009 -2022-02-17 08:15:40 INFO:  test-node-wasm.js test: monkey-patch -2022-02-17 08:15:40 STATE: test-node-wasm.js event: image -2022-02-17 08:15:41 STATE: test-node-wasm.js event: detect -2022-02-17 08:15:41 STATE: test-node-wasm.js passed: monkey patch -2022-02-17 08:15:41 STATE: test-node-wasm.js passed: segmentation [65536] -2022-02-17 08:15:41 STATE: test-node-wasm.js passeed: equal usage -2022-02-17 08:15:41 INFO:  test-node-wasm.js test: input compare -2022-02-17 08:15:41 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-02-17 08:15:41 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-02-17 08:15:41 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 -2022-02-17 08:15:41 INFO:  test-node-wasm.js events: {"image":21,"detect":21,"warmup":2} -2022-02-17 08:15:41 INFO:  test-node-wasm.js tensors 1927 -2022-02-17 08:15:41 INFO:  test-node-wasm.js test complete: 13868 ms -2022-02-17 08:15:41 INFO:  all tests complete -2022-02-17 08:15:41 INFO:  failed: {"count":0,"messages":[]} -2022-02-17 08:15:41 INFO:  status: {"test":"test-node.js","passed":101,"failed":0} -2022-02-17 08:15:41 INFO:  status: {"test":"test-node-gpu.js","passed":101,"failed":0} -2022-02-17 08:15:41 INFO:  status: {"test":"test-node-wasm.js","passed":102,"failed":0} +2022-03-07 13:23:11 INFO:  @vladmandic/human version 2.6.4 +2022-03-07 13:23:11 INFO:  User: vlado Platform: linux Arch: x64 Node: v17.4.0 +2022-03-07 13:23:11 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"] +2022-03-07 13:23:11 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-03-07 13:23:11 INFO:  +2022-03-07 13:23:11 INFO:  test-node.js start +2022-03-07 13:23:11 INFO:  test-node.js test: configuration validation +2022-03-07 13:23:11 STATE: test-node.js passed: configuration default validation [] +2022-03-07 13:23:11 STATE: test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-03-07 13:23:11 INFO:  test-node.js test: model load +2022-03-07 13:23:11 STATE: test-node.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false},{"name":"gear","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"mobilefacenet","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"ssrnetgender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"liveness","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":true}] +2022-03-07 13:23:11 INFO:  test-node.js test: warmup +2022-03-07 13:23:11 STATE: test-node.js passed: create human +2022-03-07 13:23:11 INFO:  test-node.js human version: 2.6.4 +2022-03-07 13:23:11 INFO:  test-node.js platform: linux x64 agent: NodeJS v17.4.0 +2022-03-07 13:23:11 INFO:  test-node.js tfjs version: 3.14.0 +2022-03-07 13:23:11 INFO:  test-node.js tensorflow binding version: 2.7.0-dev20211101 +2022-03-07 13:23:11 STATE: test-node.js passed: set backend: tensorflow +2022-03-07 13:23:11 STATE: test-node.js tensors 1919 +2022-03-07 13:23:11 STATE: test-node.js passed: load models +2022-03-07 13:23:11 STATE: test-node.js result: defined models: 22 loaded models: 12 +2022-03-07 13:23:11 STATE: test-node.js passed: warmup: none default +2022-03-07 13:23:11 DATA:  test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-03-07 13:23:11 DATA:  test-node.js result: performance: load: null total: null +2022-03-07 13:23:11 STATE: test-node.js passed: warmup none result match +2022-03-07 13:23:11 STATE: test-node.js event: image +2022-03-07 13:23:11 STATE: test-node.js event: detect +2022-03-07 13:23:11 STATE: test-node.js event: warmup +2022-03-07 13:23:11 STATE: test-node.js passed: warmup: face default +2022-03-07 13:23:11 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-03-07 13:23:11 DATA:  test-node.js result: performance: load: null total: 353 +2022-03-07 13:23:11 STATE: test-node.js passed: warmup face result match +2022-03-07 13:23:11 STATE: test-node.js event: image +2022-03-07 13:23:11 STATE: test-node.js event: detect +2022-03-07 13:23:11 STATE: test-node.js event: warmup +2022-03-07 13:23:11 STATE: test-node.js passed: warmup: body default +2022-03-07 13:23:11 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:11 DATA:  test-node.js result: performance: load: null total: 253 +2022-03-07 13:23:11 STATE: test-node.js passed: warmup body result match +2022-03-07 13:23:11 STATE: test-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":29.6,"gender":"female","genderScore":0.89},"emotion":[{"score":0.35,"emotion":"fear"},{"score":0.28,"emotion":"angry"},{"score":0.15,"emotion":"sad"},{"score":0.1,"emotion":"surprise"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-03-07 13:23:11 INFO:  test-node.js test: details verification +2022-03-07 13:23:12 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:12 STATE: test-node.js event: image +2022-03-07 13:23:12 STATE: test-node.js event: detect +2022-03-07 13:23:12 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:12 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:12 DATA:  test-node.js result: performance: load: null total: 241 +2022-03-07 13:23:12 STATE: test-node.js passed: details face length 1 +2022-03-07 13:23:12 STATE: test-node.js passed: details face score 1 0.93 1 +2022-03-07 13:23:12 STATE: test-node.js passed: details face age/gender 29.6 female 0.91 73.26 +2022-03-07 13:23:12 STATE: test-node.js passed: details face arrays 4 478 1024 +2022-03-07 13:23:12 STATE: test-node.js passed: details face emotion 3 {"score":0.34,"emotion":"fear"} +2022-03-07 13:23:12 STATE: test-node.js passed: details face anti-spoofing 0.78 +2022-03-07 13:23:12 STATE: test-node.js passed: details face liveness 0.83 +2022-03-07 13:23:12 STATE: test-node.js passed: details body length 1 +2022-03-07 13:23:12 STATE: test-node.js passed: details body 0.92 17 6 +2022-03-07 13:23:12 STATE: test-node.js passed: details hand length 1 +2022-03-07 13:23:12 STATE: test-node.js passed: details hand 0.51 0.73 point +2022-03-07 13:23:12 STATE: test-node.js passed: details hand arrays 21 5 7 +2022-03-07 13:23:12 STATE: test-node.js passed: details gesture length 6 +2022-03-07 13:23:12 STATE: test-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-03-07 13:23:12 STATE: test-node.js passed: details object length 1 +2022-03-07 13:23:12 STATE: test-node.js passed: details object 0.72 person +2022-03-07 13:23:12 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-03-07 13:23:12 STATE: test-node.js event: image +2022-03-07 13:23:12 STATE: test-node.js event: detect +2022-03-07 13:23:12 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-03-07 13:23:13 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-03-07 13:23:13 STATE: test-node.js event: image +2022-03-07 13:23:13 STATE: test-node.js event: detect +2022-03-07 13:23:13 STATE: test-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-03-07 13:23:13 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:13 STATE: test-node.js event: image +2022-03-07 13:23:13 STATE: test-node.js event: detect +2022-03-07 13:23:13 STATE: test-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-03-07 13:23:13 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:13 STATE: test-node.js event: image +2022-03-07 13:23:14 STATE: test-node.js event: detect +2022-03-07 13:23:14 STATE: test-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-03-07 13:23:14 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-03-07 13:23:14 STATE: test-node.js event: image +2022-03-07 13:23:14 STATE: test-node.js event: detect +2022-03-07 13:23:14 STATE: test-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-03-07 13:23:14 INFO:  test-node.js test default +2022-03-07 13:23:14 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:14 STATE: test-node.js event: image +2022-03-07 13:23:14 STATE: test-node.js event: detect +2022-03-07 13:23:14 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:14 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:14 DATA:  test-node.js result: performance: load: null total: 220 +2022-03-07 13:23:14 STATE: test-node.js passed: default result face match 1 female 0.91 +2022-03-07 13:23:14 INFO:  test-node.js test sync +2022-03-07 13:23:15 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:15 STATE: test-node.js event: image +2022-03-07 13:23:15 STATE: test-node.js event: detect +2022-03-07 13:23:15 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:15 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:15 DATA:  test-node.js result: performance: load: null total: 214 +2022-03-07 13:23:15 STATE: test-node.js passed: default sync 1 female 0.91 +2022-03-07 13:23:15 INFO:  test-node.js test: image process +2022-03-07 13:23:15 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:15 STATE: test-node.js passed: image input null [1,256,256,3] +2022-03-07 13:23:15 INFO:  test-node.js test: image null +2022-03-07 13:23:15 STATE: test-node.js passed: invalid input could not convert input to tensor +2022-03-07 13:23:15 INFO:  test-node.js test face similarity +2022-03-07 13:23:15 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:15 STATE: test-node.js event: image +2022-03-07 13:23:15 STATE: test-node.js event: detect +2022-03-07 13:23:15 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:15 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-03-07 13:23:15 DATA:  test-node.js result: performance: load: null total: 211 +2022-03-07 13:23:15 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:15 STATE: test-node.js event: image +2022-03-07 13:23:15 STATE: test-node.js event: detect +2022-03-07 13:23:15 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:15 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:15 DATA:  test-node.js result: performance: load: null total: 219 +2022-03-07 13:23:15 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-03-07 13:23:15 STATE: test-node.js event: image +2022-03-07 13:23:16 STATE: test-node.js event: detect +2022-03-07 13:23:16 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:16 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-03-07 13:23:16 DATA:  test-node.js result: performance: load: null total: 188 +2022-03-07 13:23:16 STATE: test-node.js passed: face descriptor +2022-03-07 13:23:16 STATE: test-node.js passed: face similarity {"similarity":[1,0.5632803981762933,0.5194114531612539],"descriptors":[1024,1024,1024]} +2022-03-07 13:23:16 INFO:  test-node.js test face matching +2022-03-07 13:23:16 STATE: test-node.js passed: face database 40 +2022-03-07 13:23:16 STATE: test-node.js passed: face match {"first":{"index":4,"similarity":0.8797924743573865}} {"second":{"index":4,"similarity":0.548081908581344}} {"third":{"index":4,"similarity":0.4999696807961951}} +2022-03-07 13:23:16 INFO:  test-node.js test object +2022-03-07 13:23:16 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:16 STATE: test-node.js event: image +2022-03-07 13:23:16 STATE: test-node.js event: detect +2022-03-07 13:23:16 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:16 DATA:  test-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:16 DATA:  test-node.js result: performance: load: null total: 217 +2022-03-07 13:23:16 STATE: test-node.js passed: object result match +2022-03-07 13:23:16 INFO:  test-node.js test sensitive +2022-03-07 13:23:16 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:16 STATE: test-node.js event: image +2022-03-07 13:23:16 STATE: test-node.js event: detect +2022-03-07 13:23:16 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:16 DATA:  test-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:16 DATA:  test-node.js result: performance: load: null total: 245 +2022-03-07 13:23:16 STATE: test-node.js passed: sensitive result match +2022-03-07 13:23:16 STATE: test-node.js passed: sensitive face result match +2022-03-07 13:23:16 STATE: test-node.js passed: sensitive face emotion result [{"score":0.34,"emotion":"fear"},{"score":0.29,"emotion":"angry"},{"score":0.15,"emotion":"sad"}] +2022-03-07 13:23:16 STATE: test-node.js passed: sensitive body result match +2022-03-07 13:23:16 STATE: test-node.js passed: sensitive hand result match +2022-03-07 13:23:16 INFO:  test-node.js test detectors +2022-03-07 13:23:17 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:17 STATE: test-node.js event: image +2022-03-07 13:23:17 STATE: test-node.js event: detect +2022-03-07 13:23:17 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:17 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-03-07 13:23:17 DATA:  test-node.js result: performance: load: null total: 141 +2022-03-07 13:23:17 STATE: test-node.js passed: detector result face match +2022-03-07 13:23:17 STATE: test-node.js passed: detector result hand match +2022-03-07 13:23:17 INFO:  test-node.js test: multi-instance +2022-03-07 13:23:17 STATE: test-node.js event: image +2022-03-07 13:23:17 STATE: test-node.js event: detect +2022-03-07 13:23:17 STATE: test-node.js passed: detect: random default +2022-03-07 13:23:17 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.05,"keypoints":15} +2022-03-07 13:23:17 DATA:  test-node.js result: performance: load: null total: 150 +2022-03-07 13:23:17 INFO:  test-node.js test: first instance +2022-03-07 13:23:17 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-03-07 13:23:17 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:17 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-03-07 13:23:17 DATA:  test-node.js result: performance: load: null total: 146 +2022-03-07 13:23:17 INFO:  test-node.js test: second instance +2022-03-07 13:23:17 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-03-07 13:23:17 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:17 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-03-07 13:23:17 DATA:  test-node.js result: performance: load: null total: 157 +2022-03-07 13:23:17 INFO:  test-node.js test: concurrent +2022-03-07 13:23:17 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:17 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:18 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:18 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:18 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-03-07 13:23:18 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-03-07 13:23:18 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:18 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:18 STATE: test-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-03-07 13:23:18 STATE: test-node.js event: image +2022-03-07 13:23:18 STATE: test-node.js event: image +2022-03-07 13:23:18 STATE: test-node.js event: image +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1326 +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1326 +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1437 +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1437 +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1437 +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1437 +2022-03-07 13:23:19 STATE: test-node.js event: detect +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1194 +2022-03-07 13:23:19 STATE: test-node.js event: detect +2022-03-07 13:23:19 STATE: test-node.js event: detect +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1194 +2022-03-07 13:23:19 STATE: test-node.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:19 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-03-07 13:23:19 DATA:  test-node.js result: performance: load: null total: 1194 +2022-03-07 13:23:19 INFO:  test-node.js test: monkey-patch +2022-03-07 13:23:19 STATE: test-node.js event: image +2022-03-07 13:23:20 STATE: test-node.js event: detect +2022-03-07 13:23:20 STATE: test-node.js passed: monkey patch +2022-03-07 13:23:20 STATE: test-node.js passed: segmentation [65536] +2022-03-07 13:23:20 STATE: test-node.js passeed: equal usage +2022-03-07 13:23:20 INFO:  test-node.js test: input compare +2022-03-07 13:23:20 STATE: test-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:20 STATE: test-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-03-07 13:23:20 STATE: test-node.js passed: image compare 0 23.275441687091504 +2022-03-07 13:23:20 INFO:  test-node.js events: {"image":21,"detect":21,"warmup":2} +2022-03-07 13:23:20 INFO:  test-node.js tensors 1925 +2022-03-07 13:23:20 INFO:  test-node.js test complete: 9066 ms +2022-03-07 13:23:20 INFO:  +2022-03-07 13:23:20 INFO:  test-node-gpu.js start +2022-03-07 13:23:21 INFO:  test-node-gpu.js test: configuration validation +2022-03-07 13:23:21 STATE: test-node-gpu.js passed: configuration default validation [] +2022-03-07 13:23:21 STATE: test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-03-07 13:23:21 INFO:  test-node-gpu.js test: model load +2022-03-07 13:23:21 STATE: test-node-gpu.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false},{"name":"gear","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"mobilefacenet","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"ssrnetgender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"liveness","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":true}] +2022-03-07 13:23:21 INFO:  test-node-gpu.js test: warmup +2022-03-07 13:23:21 STATE: test-node-gpu.js passed: create human +2022-03-07 13:23:21 INFO:  test-node-gpu.js human version: 2.6.4 +2022-03-07 13:23:21 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v17.4.0 +2022-03-07 13:23:21 INFO:  test-node-gpu.js tfjs version: 3.14.0 +2022-03-07 13:23:21 INFO:  test-node-gpu.js tensorflow binding version: 2.7.0-dev20211101 +2022-03-07 13:23:21 STATE: test-node-gpu.js passed: set backend: tensorflow +2022-03-07 13:23:21 STATE: test-node-gpu.js tensors 1919 +2022-03-07 13:23:21 STATE: test-node-gpu.js passed: load models +2022-03-07 13:23:21 STATE: test-node-gpu.js result: defined models: 22 loaded models: 12 +2022-03-07 13:23:21 STATE: test-node-gpu.js passed: warmup: none default +2022-03-07 13:23:21 DATA:  test-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-03-07 13:23:21 DATA:  test-node-gpu.js result: performance: load: null total: null +2022-03-07 13:23:21 STATE: test-node-gpu.js passed: warmup none result match +2022-03-07 13:23:21 STATE: test-node-gpu.js event: image +2022-03-07 13:23:25 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:25 STATE: test-node-gpu.js event: warmup +2022-03-07 13:23:25 STATE: test-node-gpu.js passed: warmup: face default +2022-03-07 13:23:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-03-07 13:23:25 DATA:  test-node-gpu.js result: performance: load: null total: 3339 +2022-03-07 13:23:25 STATE: test-node-gpu.js passed: warmup face result match +2022-03-07 13:23:25 STATE: test-node-gpu.js event: image +2022-03-07 13:23:25 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:25 STATE: test-node-gpu.js event: warmup +2022-03-07 13:23:25 STATE: test-node-gpu.js passed: warmup: body default +2022-03-07 13:23:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:25 DATA:  test-node-gpu.js result: performance: load: null total: 203 +2022-03-07 13:23:25 STATE: test-node-gpu.js passed: warmup body result match +2022-03-07 13:23:25 STATE: test-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":29.6,"gender":"female","genderScore":0.89},"emotion":[{"score":0.35,"emotion":"fear"},{"score":0.28,"emotion":"angry"},{"score":0.15,"emotion":"sad"},{"score":0.1,"emotion":"surprise"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-03-07 13:23:25 INFO:  test-node-gpu.js test: details verification +2022-03-07 13:23:25 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:25 STATE: test-node-gpu.js event: image +2022-03-07 13:23:26 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:26 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:26 DATA:  test-node-gpu.js result: performance: load: null total: 165 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details face length 1 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details face score 1 0.93 1 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details face age/gender 29.6 female 0.91 73.26 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details face arrays 4 478 1024 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details face emotion 3 {"score":0.34,"emotion":"fear"} +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details face anti-spoofing 0.78 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details face liveness 0.83 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details body length 1 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details body 0.92 17 6 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details hand length 1 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details hand 0.51 0.73 point +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details hand arrays 21 5 7 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details gesture length 6 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details object length 1 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: details object 0.72 person +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-03-07 13:23:26 STATE: test-node-gpu.js event: image +2022-03-07 13:23:26 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-03-07 13:23:26 STATE: test-node-gpu.js event: image +2022-03-07 13:23:26 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:26 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-03-07 13:23:27 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:27 STATE: test-node-gpu.js event: image +2022-03-07 13:23:27 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:27 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-03-07 13:23:27 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:27 STATE: test-node-gpu.js event: image +2022-03-07 13:23:27 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:27 STATE: test-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-03-07 13:23:27 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-03-07 13:23:27 STATE: test-node-gpu.js event: image +2022-03-07 13:23:28 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-03-07 13:23:28 INFO:  test-node-gpu.js test default +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:28 STATE: test-node-gpu.js event: image +2022-03-07 13:23:28 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:28 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:28 DATA:  test-node-gpu.js result: performance: load: null total: 165 +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: default result face match 1 female 0.91 +2022-03-07 13:23:28 INFO:  test-node-gpu.js test sync +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:28 STATE: test-node-gpu.js event: image +2022-03-07 13:23:28 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:28 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:28 DATA:  test-node-gpu.js result: performance: load: null total: 164 +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: default sync 1 female 0.91 +2022-03-07 13:23:28 INFO:  test-node-gpu.js test: image process +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: image input null [1,256,256,3] +2022-03-07 13:23:28 INFO:  test-node-gpu.js test: image null +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: invalid input could not convert input to tensor +2022-03-07 13:23:28 INFO:  test-node-gpu.js test face similarity +2022-03-07 13:23:28 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:28 STATE: test-node-gpu.js event: image +2022-03-07 13:23:29 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:29 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-03-07 13:23:29 DATA:  test-node-gpu.js result: performance: load: null total: 152 +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:29 STATE: test-node-gpu.js event: image +2022-03-07 13:23:29 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:29 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:29 DATA:  test-node-gpu.js result: performance: load: null total: 175 +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-03-07 13:23:29 STATE: test-node-gpu.js event: image +2022-03-07 13:23:29 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:29 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-03-07 13:23:29 DATA:  test-node-gpu.js result: performance: load: null total: 154 +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: face descriptor +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: face similarity {"similarity":[1,0.5630857211196999,0.5193140083083794],"descriptors":[1024,1024,1024]} +2022-03-07 13:23:29 INFO:  test-node-gpu.js test face matching +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: face database 40 +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.8799993617830532}} {"second":{"index":4,"similarity":0.5479640431307572}} {"third":{"index":4,"similarity":0.49994916272803597}} +2022-03-07 13:23:29 INFO:  test-node-gpu.js test object +2022-03-07 13:23:29 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:29 STATE: test-node-gpu.js event: image +2022-03-07 13:23:30 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:30 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:30 DATA:  test-node-gpu.js result: performance: load: null total: 212 +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: object result match +2022-03-07 13:23:30 INFO:  test-node-gpu.js test sensitive +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:30 STATE: test-node-gpu.js event: image +2022-03-07 13:23:30 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:30 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:30 DATA:  test-node-gpu.js result: performance: load: null total: 158 +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: sensitive result match +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: sensitive face result match +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: sensitive face emotion result [{"score":0.34,"emotion":"fear"},{"score":0.29,"emotion":"angry"},{"score":0.15,"emotion":"sad"}] +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: sensitive body result match +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: sensitive hand result match +2022-03-07 13:23:30 INFO:  test-node-gpu.js test detectors +2022-03-07 13:23:30 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:30 STATE: test-node-gpu.js event: image +2022-03-07 13:23:31 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:31 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-03-07 13:23:31 DATA:  test-node-gpu.js result: performance: load: null total: 104 +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: detector result face match +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: detector result hand match +2022-03-07 13:23:31 INFO:  test-node-gpu.js test: multi-instance +2022-03-07 13:23:31 STATE: test-node-gpu.js event: image +2022-03-07 13:23:31 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: detect: random default +2022-03-07 13:23:31 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.06,"keypoints":15} +2022-03-07 13:23:31 DATA:  test-node-gpu.js result: performance: load: null total: 80 +2022-03-07 13:23:31 INFO:  test-node-gpu.js test: first instance +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:31 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-03-07 13:23:31 DATA:  test-node-gpu.js result: performance: load: null total: 76 +2022-03-07 13:23:31 INFO:  test-node-gpu.js test: second instance +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:31 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-03-07 13:23:31 DATA:  test-node-gpu.js result: performance: load: null total: 87 +2022-03-07 13:23:31 INFO:  test-node-gpu.js test: concurrent +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:31 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:32 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-03-07 13:23:32 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-03-07 13:23:32 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:32 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:32 STATE: test-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-03-07 13:23:32 STATE: test-node-gpu.js event: image +2022-03-07 13:23:32 STATE: test-node-gpu.js event: image +2022-03-07 13:23:32 STATE: test-node-gpu.js event: image +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 935 +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 935 +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 1000 +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 1000 +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 1000 +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 1000 +2022-03-07 13:23:33 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 707 +2022-03-07 13:23:33 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:33 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 707 +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:33 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-03-07 13:23:33 DATA:  test-node-gpu.js result: performance: load: null total: 707 +2022-03-07 13:23:33 INFO:  test-node-gpu.js test: monkey-patch +2022-03-07 13:23:33 STATE: test-node-gpu.js event: image +2022-03-07 13:23:33 STATE: test-node-gpu.js event: detect +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: monkey patch +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: segmentation [65536] +2022-03-07 13:23:33 STATE: test-node-gpu.js passeed: equal usage +2022-03-07 13:23:33 INFO:  test-node-gpu.js test: input compare +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-03-07 13:23:33 STATE: test-node-gpu.js passed: image compare 0 23.275441687091504 +2022-03-07 13:23:33 INFO:  test-node-gpu.js events: {"image":21,"detect":21,"warmup":2} +2022-03-07 13:23:33 INFO:  test-node-gpu.js tensors 1925 +2022-03-07 13:23:33 INFO:  test-node-gpu.js test complete: 12660 ms +2022-03-07 13:23:34 INFO:  +2022-03-07 13:23:34 INFO:  test-node-wasm.js start +2022-03-07 13:23:34 STATE: test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/ +2022-03-07 13:23:34 INFO:  test-node-wasm.js test: configuration validation +2022-03-07 13:23:34 STATE: test-node-wasm.js passed: configuration default validation [] +2022-03-07 13:23:34 STATE: test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-03-07 13:23:34 INFO:  test-node-wasm.js test: model load +2022-03-07 13:23:35 STATE: test-node-wasm.js passed: models loaded 22 12 [{"name":"ssrnetage","loaded":false},{"name":"gear","loaded":false},{"name":"blazeposedetect","loaded":false},{"name":"blazepose","loaded":false},{"name":"centernet","loaded":true},{"name":"efficientpose","loaded":false},{"name":"mobilefacenet","loaded":false},{"name":"emotion","loaded":true},{"name":"facedetect","loaded":true},{"name":"faceiris","loaded":true},{"name":"facemesh","loaded":true},{"name":"faceres","loaded":true},{"name":"ssrnetgender","loaded":false},{"name":"handpose","loaded":false},{"name":"handskeleton","loaded":true},{"name":"handtrack","loaded":true},{"name":"liveness","loaded":true},{"name":"movenet","loaded":true},{"name":"nanodet","loaded":false},{"name":"posenet","loaded":false},{"name":"segmentation","loaded":true},{"name":"antispoof","loaded":true}] +2022-03-07 13:23:35 INFO:  test-node-wasm.js test: warmup +2022-03-07 13:23:35 STATE: test-node-wasm.js passed: create human +2022-03-07 13:23:35 INFO:  test-node-wasm.js human version: 2.6.4 +2022-03-07 13:23:35 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v17.4.0 +2022-03-07 13:23:35 INFO:  test-node-wasm.js tfjs version: 3.14.0 +2022-03-07 13:23:35 STATE: test-node-wasm.js passed: set backend: wasm +2022-03-07 13:23:35 STATE: test-node-wasm.js tensors 1919 +2022-03-07 13:23:35 STATE: test-node-wasm.js passed: load models +2022-03-07 13:23:35 STATE: test-node-wasm.js result: defined models: 22 loaded models: 12 +2022-03-07 13:23:35 STATE: test-node-wasm.js passed: warmup: none default +2022-03-07 13:23:35 DATA:  test-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-03-07 13:23:35 DATA:  test-node-wasm.js result: performance: load: null total: null +2022-03-07 13:23:35 STATE: test-node-wasm.js passed: warmup none result match +2022-03-07 13:23:35 STATE: test-node-wasm.js event: image +2022-03-07 13:23:36 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:36 STATE: test-node-wasm.js event: warmup +2022-03-07 13:23:36 STATE: test-node-wasm.js passed: warmup: face default +2022-03-07 13:23:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-03-07 13:23:36 DATA:  test-node-wasm.js result: performance: load: null total: 491 +2022-03-07 13:23:36 STATE: test-node-wasm.js passed: warmup face result match +2022-03-07 13:23:36 STATE: test-node-wasm.js event: image +2022-03-07 13:23:36 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:36 STATE: test-node-wasm.js event: warmup +2022-03-07 13:23:36 STATE: test-node-wasm.js passed: warmup: body default +2022-03-07 13:23:36 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:36 DATA:  test-node-wasm.js result: performance: load: null total: 362 +2022-03-07 13:23:36 STATE: test-node-wasm.js passed: warmup body result match +2022-03-07 13:23:36 STATE: test-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":29.6,"gender":"female","genderScore":0.91},"emotion":[{"score":0.34,"emotion":"fear"},{"score":0.29,"emotion":"angry"},{"score":0.15,"emotion":"sad"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-03-07 13:23:36 INFO:  test-node-wasm.js test: details verification +2022-03-07 13:23:36 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:36 STATE: test-node-wasm.js event: image +2022-03-07 13:23:37 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:37 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:37 DATA:  test-node-wasm.js result: performance: load: null total: 358 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details face length 1 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details face score 1 0.93 1 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details face age/gender 29.6 female 0.91 73.26 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details face arrays 4 478 1024 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details face emotion 3 {"score":0.34,"emotion":"fear"} +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details face anti-spoofing 0.78 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details face liveness 0.83 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details body length 1 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details body 0.92 17 6 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details hand length 1 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details hand 0.51 0.73 point +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details hand arrays 21 5 7 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details gesture length 6 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details object length 1 +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: details object 0.72 person +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2022-03-07 13:23:37 STATE: test-node-wasm.js event: image +2022-03-07 13:23:37 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:37 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-03-07 13:23:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2022-03-07 13:23:38 STATE: test-node-wasm.js event: image +2022-03-07 13:23:38 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:38 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-03-07 13:23:38 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:38 STATE: test-node-wasm.js event: image +2022-03-07 13:23:38 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:38 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-03-07 13:23:39 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:39 STATE: test-node-wasm.js event: image +2022-03-07 13:23:39 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:39 STATE: test-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-03-07 13:23:39 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-03-07 13:23:39 STATE: test-node-wasm.js event: image +2022-03-07 13:23:40 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:40 STATE: test-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-03-07 13:23:40 INFO:  test-node-wasm.js test default +2022-03-07 13:23:40 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:40 STATE: test-node-wasm.js event: image +2022-03-07 13:23:40 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:40 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:40 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:40 DATA:  test-node-wasm.js result: performance: load: null total: 359 +2022-03-07 13:23:40 STATE: test-node-wasm.js passed: default result face match 1 female 0.93 +2022-03-07 13:23:40 INFO:  test-node-wasm.js test sync +2022-03-07 13:23:40 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:40 STATE: test-node-wasm.js event: image +2022-03-07 13:23:41 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:41 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:41 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:41 DATA:  test-node-wasm.js result: performance: load: null total: 331 +2022-03-07 13:23:41 STATE: test-node-wasm.js passed: default sync 1 female 0.93 +2022-03-07 13:23:41 INFO:  test-node-wasm.js test: image process +2022-03-07 13:23:41 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-03-07 13:23:41 STATE: test-node-wasm.js passed: image input null [1,256,256,3] +2022-03-07 13:23:41 INFO:  test-node-wasm.js test: image null +2022-03-07 13:23:41 STATE: test-node-wasm.js passed: invalid input could not convert input to tensor +2022-03-07 13:23:41 INFO:  test-node-wasm.js test face similarity +2022-03-07 13:23:41 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-03-07 13:23:41 STATE: test-node-wasm.js event: image +2022-03-07 13:23:41 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:41 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:41 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-03-07 13:23:41 DATA:  test-node-wasm.js result: performance: load: null total: 309 +2022-03-07 13:23:41 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:41 STATE: test-node-wasm.js event: image +2022-03-07 13:23:42 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:42 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:42 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:42 DATA:  test-node-wasm.js result: performance: load: null total: 319 +2022-03-07 13:23:42 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-03-07 13:23:42 STATE: test-node-wasm.js event: image +2022-03-07 13:23:42 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:42 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:42 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-03-07 13:23:42 DATA:  test-node-wasm.js result: performance: load: null total: 307 +2022-03-07 13:23:42 STATE: test-node-wasm.js passed: face descriptor +2022-03-07 13:23:42 STATE: test-node-wasm.js passed: face similarity {"similarity":[1,0.5888036339038205,0.4689331535670693],"descriptors":[1024,1024,1024]} +2022-03-07 13:23:42 INFO:  test-node-wasm.js test face matching +2022-03-07 13:23:42 STATE: test-node-wasm.js passed: face database 40 +2022-03-07 13:23:42 STATE: test-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.8797924799049534}} {"second":{"index":4,"similarity":0.573642308237338}} {"third":{"index":4,"similarity":0.45582039900188964}} +2022-03-07 13:23:42 INFO:  test-node-wasm.js test object +2022-03-07 13:23:42 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:42 STATE: test-node-wasm.js event: image +2022-03-07 13:23:43 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:43 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:43 DATA:  test-node-wasm.js result: performance: load: null total: 346 +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: object result match +2022-03-07 13:23:43 INFO:  test-node-wasm.js test sensitive +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:43 STATE: test-node-wasm.js event: image +2022-03-07 13:23:43 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:43 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-03-07 13:23:43 DATA:  test-node-wasm.js result: performance: load: null total: 350 +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: sensitive result match +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: sensitive face result match +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: sensitive face emotion result [{"score":0.54,"emotion":"angry"},{"score":0.2,"emotion":"fear"},{"score":0.16,"emotion":"surprise"}] +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: sensitive body result match +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: sensitive hand result match +2022-03-07 13:23:43 INFO:  test-node-wasm.js test detectors +2022-03-07 13:23:43 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:43 STATE: test-node-wasm.js event: image +2022-03-07 13:23:44 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:44 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:44 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-03-07 13:23:44 DATA:  test-node-wasm.js result: performance: load: null total: 234 +2022-03-07 13:23:44 STATE: test-node-wasm.js passed: detector result face match +2022-03-07 13:23:44 STATE: test-node-wasm.js passed: detector result hand match +2022-03-07 13:23:44 INFO:  test-node-wasm.js test: multi-instance +2022-03-07 13:23:44 STATE: test-node-wasm.js event: image +2022-03-07 13:23:44 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:44 STATE: test-node-wasm.js passed: detect: random default +2022-03-07 13:23:44 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0.08,"keypoints":15} +2022-03-07 13:23:44 DATA:  test-node-wasm.js result: performance: load: null total: 211 +2022-03-07 13:23:44 INFO:  test-node-wasm.js test: first instance +2022-03-07 13:23:44 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-03-07 13:23:44 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:44 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-03-07 13:23:44 DATA:  test-node-wasm.js result: performance: load: null total: 224 +2022-03-07 13:23:44 INFO:  test-node-wasm.js test: second instance +2022-03-07 13:23:44 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:45 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-03-07 13:23:45 DATA:  test-node-wasm.js result: performance: load: null total: 220 +2022-03-07 13:23:45 INFO:  test-node-wasm.js test: concurrent +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-03-07 13:23:45 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:46 STATE: test-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-03-07 13:23:46 STATE: test-node-wasm.js event: image +2022-03-07 13:23:46 STATE: test-node-wasm.js event: image +2022-03-07 13:23:46 STATE: test-node-wasm.js event: image +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 2067 +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 2067 +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 2274 +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 2274 +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 2274 +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 2274 +2022-03-07 13:23:47 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-upper.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 1956 +2022-03-07 13:23:47 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:47 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-face.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 1956 +2022-03-07 13:23:47 STATE: test-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-03-07 13:23:47 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-03-07 13:23:47 DATA:  test-node-wasm.js result: performance: load: null total: 1956 +2022-03-07 13:23:47 INFO:  test-node-wasm.js test: monkey-patch +2022-03-07 13:23:47 STATE: test-node-wasm.js event: image +2022-03-07 13:23:48 STATE: test-node-wasm.js event: detect +2022-03-07 13:23:48 STATE: test-node-wasm.js passed: monkey patch +2022-03-07 13:23:48 STATE: test-node-wasm.js passed: segmentation [65536] +2022-03-07 13:23:48 STATE: test-node-wasm.js passeed: equal usage +2022-03-07 13:23:48 INFO:  test-node-wasm.js test: input compare +2022-03-07 13:23:48 STATE: test-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-03-07 13:23:48 STATE: test-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-03-07 13:23:48 STATE: test-node-wasm.js passed: image compare 0 23.280073018790848 +2022-03-07 13:23:48 INFO:  test-node-wasm.js events: {"image":21,"detect":21,"warmup":2} +2022-03-07 13:23:48 INFO:  test-node-wasm.js tensors 1927 +2022-03-07 13:23:48 INFO:  test-node-wasm.js test complete: 13750 ms +2022-03-07 13:23:48 INFO:  all tests complete +2022-03-07 13:23:48 INFO:  failed: {"count":0,"messages":[]} +2022-03-07 13:23:48 INFO:  status: {"test":"test-node.js","passed":101,"failed":0} +2022-03-07 13:23:48 INFO:  status: {"test":"test-node-gpu.js","passed":101,"failed":0} +2022-03-07 13:23:48 INFO:  status: {"test":"test-node-wasm.js","passed":102,"failed":0}