add browser iife tests

pull/293/head
Vladimir Mandic 2022-08-31 18:30:47 -04:00
parent 94207aad4f
commit 55846ab4e1
10 changed files with 202 additions and 216 deletions

View File

@ -9,8 +9,9 @@
## Changelog ## Changelog
### **HEAD -> main** 2022/08/30 mandic00@live.com ### **HEAD -> main** 2022/08/31 mandic00@live.com
- extend release tests
- add model load exception handling - add model load exception handling
- add softwarekernels config option - add softwarekernels config option
- expand type safety - expand type safety

View File

@ -61,12 +61,12 @@ Enable via `about:config` -> `gfx.offscreencanvas.enabled`
- Treat models that cannot be found & loaded as non-critical error - Treat models that cannot be found & loaded as non-critical error
Instead of creating runtime exception, `human` will now report that model could not be loaded Instead of creating runtime exception, `human` will now report that model could not be loaded
- Improve `human.reset()` method to reset all config values to defaults - Improve `human.reset()` method to reset all config values to defaults
- Host models in <human-models> - Host models in <https://github.com/vladmandic/human-models>
Models can be directly used without downloading to local storage Models can be directly used without downloading to local storage
Example: `modelPath: 'https://vladmandic.github.io/human-models/models/facemesh.json'` Example: `modelBasePath: 'https://vladmandic.github.io/human-models/models/'`
- Allow hosting models in **Google Cloud Bucket** - Allow hosting models in **Google Cloud Bucket**
Hosted models can be directly used without downloading to local storage Hosted models can be directly used without downloading to local storage
Example: `modelPath: 'https://storage.googleapis.com/human-models/facemesh.json'` Example: `modelBasePath: 'https://storage.googleapis.com/human-models/'`
- Stricter linting rules for both **TypeScript** and **JavaScript** - Stricter linting rules for both **TypeScript** and **JavaScript**
See `./eslintrc.json` for details See `./eslintrc.json` for details
- Enhanced type safety across entire library - Enhanced type safety across entire library
@ -76,7 +76,7 @@ Enable via `about:config` -> `gfx.offscreencanvas.enabled`
- Fix **NanoDet** module as alternative object detection - Fix **NanoDet** module as alternative object detection
- Fix `demo/multithread/node-multiprocess.js` demo - Fix `demo/multithread/node-multiprocess.js` demo
- Fix `human.match` when using mixed descriptor lengths - Fix `human.match` when using mixed descriptor lengths
- Fix WASM feature detection issue in TFJS with Edge/Chromium - Fix **WASM** feature detection issue in TFJS with Edge/Chromium
Example: `console.log(human.env.wasm)` Example: `console.log(human.env.wasm)`
- Increased test coverage - Increased test coverage
**NodeJS**: Run using: `npm run test` **NodeJS**: Run using: `npm run test`

View File

@ -1,24 +1,3 @@
# Test Results # Automatic Tests
## Automatic Tests
Not required for normal funcioning of library Not required for normal funcioning of library
### NodeJS using TensorFlow library
- Image filters are disabled due to lack of Canvas and WebGL access
### NodeJS using WASM
- Requires dev http server
See <https://github.com/tensorflow/tfjs/issues/4927>
- Image filters are disabled due to lack of Canvas and WeBGL access
- Only supported input is Tensor due to missing image decoders
<br>
## Browser Tests
- Chrome/Edge: **All Passing**
- Firefox: WebWorkers not supported due to missing support for `OffscreenCanvas`
- Safari: **Limited Testing**

View File

@ -1,137 +0,0 @@
11:05:50.622 +00000ms human tests
11:05:50.903 +00281ms version 2.9.4
11:05:50.903 +00000ms tfjs 3.20.0
11:05:50.904 +00001ms environment {
browser: true,
node: false,
worker: false,
platform: Windows NT 10.0; Win64; x64,
agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/106.0.0.0 Safari/537.36,
backends: [
cpu,
webgl,
wasm,
webgpu,
humangl
],
initial: true,
tfjs: {
version: 3.20.0
},
offscreen: true,
perfadd: false,
tensorflow: {},
wasm: {
supported: true,
backend: true
},
webgl: {
supported: true,
backend: true,
version: WebGL 2.0 (OpenGL ES 3.0 Chromium),
renderer: WebKit WebGL
},
webgpu: {
supported: true,
backend: true,
adapter: Default
},
cpu: {
flags: []
},
kernels: 166
}
11:05:51.221 +00317ms test default/wasm {backend: wasm, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: true}, face: {enabled: true, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: true, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: true, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:05:51.517 +00296ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, 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: false}, {name: movenet, loaded: true}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:05:53.092 +01575ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
11:05:53.103 +00011ms finished default/wasm {init: 1325, detect: 544}
11:05:53.115 +00012ms test sync/wasm {backend: wasm, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: false, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: true}, face: {enabled: true, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: true, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: true, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:05:53.399 +00284ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, 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: false}, {name: movenet, loaded: true}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:05:54.367 +00968ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
11:05:54.384 +00017ms finished sync/wasm {init: 1096, detect: 155}
11:05:54.401 +00017ms test none/wasm {backend: wasm, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: false}, face: {enabled: false, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: false, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: false, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:05:54.435 +00034ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, loaded: false}, {name: emotion, loaded: false}, {name: facedetect, loaded: false}, {name: faceiris, loaded: false}, {name: facemesh, loaded: false}, {name: faceres, loaded: false}, {name: ssrnetgender, loaded: false}, {name: handpose, loaded: false}, {name: handskeleton, loaded: false}, {name: handtrack, loaded: false}, {name: liveness, loaded: false}, {name: movenet, loaded: false}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:05:54.537 +00102ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
11:05:54.569 +00032ms finished none/wasm {init: 133, detect: 3}
11:05:54.602 +00033ms test object/wasm {backend: wasm, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: false}, face: {enabled: false, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: false, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: false, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: true, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:05:54.684 +00082ms models [{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: insightface, loaded: false}, {name: emotion, loaded: false}, {name: facedetect, loaded: false}, {name: faceiris, loaded: false}, {name: facemesh, loaded: false}, {name: faceres, loaded: false}, {name: ssrnetgender, loaded: false}, {name: handpose, loaded: false}, {name: handskeleton, loaded: false}, {name: handtrack, loaded: false}, {name: liveness, loaded: false}, {name: movenet, loaded: false}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:05:54.952 +00268ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 1, gesture: 0}
11:05:55.006 +00054ms finished object/wasm {init: 281, detect: 69}
11:05:55.072 +00066ms test default/humangl {backend: humangl, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: true}, face: {enabled: true, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: true, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: true, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:05:55.290 +00218ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, 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: false}, {name: movenet, loaded: true}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:06:04.652 +09362ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
11:06:04.732 +00080ms finished default/humangl {init: 8549, detect: 1030}
11:06:04.817 +00085ms test sync/humangl {backend: humangl, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: false, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: true}, face: {enabled: true, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: true, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: true, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:06:05.077 +00260ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, 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: false}, {name: movenet, loaded: true}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:06:11.078 +06001ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
11:06:11.191 +00113ms finished sync/humangl {init: 5726, detect: 535}
11:06:11.307 +00116ms test none/humangl {backend: humangl, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: false}, face: {enabled: false, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: false, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: false, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:06:11.455 +00148ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, loaded: false}, {name: emotion, loaded: false}, {name: facedetect, loaded: false}, {name: faceiris, loaded: false}, {name: facemesh, loaded: false}, {name: faceres, loaded: false}, {name: ssrnetgender, loaded: false}, {name: handpose, loaded: false}, {name: handskeleton, loaded: false}, {name: handtrack, loaded: false}, {name: liveness, loaded: false}, {name: movenet, loaded: false}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:06:11.778 +00323ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
11:06:11.930 +00152ms finished none/humangl {init: 471, detect: 0}
11:06:12.080 +00150ms test object/humangl {backend: humangl, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: false}, face: {enabled: false, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: false, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: false, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: true, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:06:12.331 +00251ms models [{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: insightface, loaded: false}, {name: emotion, loaded: false}, {name: facedetect, loaded: false}, {name: faceiris, loaded: false}, {name: facemesh, loaded: false}, {name: faceres, loaded: false}, {name: ssrnetgender, loaded: false}, {name: handpose, loaded: false}, {name: handskeleton, loaded: false}, {name: handtrack, loaded: false}, {name: liveness, loaded: false}, {name: movenet, loaded: false}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:06:16.046 +03715ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
11:06:16.234 +00188ms finished object/humangl {init: 3688, detect: 278}
11:06:16.444 +00210ms test default/webgl {backend: webgl, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: true}, face: {enabled: true, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: true, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: true, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:06:16.808 +00364ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, 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: false}, {name: movenet, loaded: true}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:06:26.563 +09755ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
11:06:26.799 +00236ms finished default/webgl {init: 9005, detect: 1113}
11:06:27.045 +00246ms test sync/webgl {backend: webgl, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: false, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: true}, face: {enabled: true, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: true, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: true, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:06:27.519 +00474ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, 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: false}, {name: movenet, loaded: true}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:06:34.213 +06694ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
11:06:34.509 +00296ms finished sync/webgl {init: 6219, detect: 949}
11:06:34.813 +00304ms test none/webgl {backend: webgl, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: false}, face: {enabled: false, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: false, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: false, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:06:35.159 +00346ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, loaded: false}, {name: emotion, loaded: false}, {name: facedetect, loaded: false}, {name: faceiris, loaded: false}, {name: facemesh, loaded: false}, {name: faceres, loaded: false}, {name: ssrnetgender, loaded: false}, {name: handpose, loaded: false}, {name: handskeleton, loaded: false}, {name: handtrack, loaded: false}, {name: liveness, loaded: false}, {name: movenet, loaded: false}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:06:35.728 +00569ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
11:06:36.087 +00359ms finished none/webgl {init: 915, detect: 0}
11:06:36.444 +00357ms test object/webgl {backend: webgl, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: false}, face: {enabled: false, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: false, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: false, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: true, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:06:36.923 +00479ms models [{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: insightface, loaded: false}, {name: emotion, loaded: false}, {name: facedetect, loaded: false}, {name: faceiris, loaded: false}, {name: facemesh, loaded: false}, {name: faceres, loaded: false}, {name: ssrnetgender, loaded: false}, {name: handpose, loaded: false}, {name: handskeleton, loaded: false}, {name: handtrack, loaded: false}, {name: liveness, loaded: false}, {name: movenet, loaded: false}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:06:41.462 +04539ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
11:06:41.876 +00414ms finished object/webgl {init: 4709, detect: 309}
11:06:42.434 +00558ms test default/webgpu {backend: webgpu, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: true}, face: {enabled: true, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: true, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: true, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:06:43.065 +00631ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, 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: false}, {name: movenet, loaded: true}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:07:00.511 +17446ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
11:07:00.994 +00483ms finished default/webgpu {init: 16548, detect: 1527}
11:07:01.482 +00488ms test sync/webgpu {backend: webgpu, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: false, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: true}, face: {enabled: true, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: true, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: true, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:07:02.226 +00744ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, 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: false}, {name: movenet, loaded: true}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:07:03.296 +01070ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
11:07:03.853 +00557ms finished sync/webgpu {init: 1630, detect: 183}
11:07:04.410 +00557ms test none/webgpu {backend: webgpu, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: false}, face: {enabled: false, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: false, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: false, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: false, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:07:05.103 +00693ms models [{name: ssrnetage, loaded: false}, {name: gear, loaded: false}, {name: blazeposedetect, loaded: false}, {name: blazepose, loaded: false}, {name: centernet, loaded: false}, {name: efficientpose, loaded: false}, {name: mobilefacenet, loaded: false}, {name: insightface, loaded: false}, {name: emotion, loaded: false}, {name: facedetect, loaded: false}, {name: faceiris, loaded: false}, {name: facemesh, loaded: false}, {name: faceres, loaded: false}, {name: ssrnetgender, loaded: false}, {name: handpose, loaded: false}, {name: handskeleton, loaded: false}, {name: handtrack, loaded: false}, {name: liveness, loaded: false}, {name: movenet, loaded: false}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:07:05.870 +00767ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
11:07:06.518 +00648ms finished none/webgpu {init: 1460, detect: 0}
11:07:07.142 +00624ms test object/webgpu {backend: webgpu, modelBasePath: ../models/, cacheModels: true, validateModels: true, wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.20.0/dist/, wasmPlatformFetch: false, debug: true, async: true, warmup: full, cacheSensitivity: 0.7, skipAllowed: false, deallocate: false, softwareKernels: false, filter: {enabled: true, equalization: false, width: 0, height: 0, flip: false, return: true, brightness: 0, contrast: 0, sharpness: 0, blur: 0, saturation: 0, hue: 0, negative: false, sepia: false, vintage: false, kodachrome: false, technicolor: false, polaroid: false, pixelate: 0}, gesture: {enabled: false}, face: {enabled: false, detector: {modelPath: blazeface.json, rotation: true, maxDetected: 1, skipFrames: 99, skipTime: 2500, minConfidence: 0.2, iouThreshold: 0.1, mask: false, return: false}, mesh: {enabled: true, modelPath: facemesh.json, keepInvalid: false}, attention: {enabled: false, modelPath: facemesh-attention.json}, iris: {enabled: true, modelPath: iris.json}, emotion: {enabled: true, minConfidence: 0.1, skipFrames: 99, skipTime: 1500, modelPath: emotion.json}, description: {enabled: true, modelPath: faceres.json, skipFrames: 99, skipTime: 3000, minConfidence: 0.1}, antispoof: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: antispoof.json}, liveness: {enabled: false, skipFrames: 99, skipTime: 4000, modelPath: liveness.json}}, body: {enabled: false, modelPath: movenet-lightning.json, maxDetected: -1, minConfidence: 0.3, skipFrames: 1, skipTime: 200}, hand: {enabled: false, rotation: true, skipFrames: 99, skipTime: 1000, minConfidence: 0.5, iouThreshold: 0.2, maxDetected: -1, landmarks: true, detector: {modelPath: handtrack.json}, skeleton: {modelPath: handlandmark-full.json}}, object: {enabled: true, modelPath: mb3-centernet.json, minConfidence: 0.2, iouThreshold: 0.4, maxDetected: 10, skipFrames: 99, skipTime: 2000}, segmentation: {enabled: false, modelPath: selfie.json, blur: 8}}
11:07:07.899 +00757ms models [{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: insightface, loaded: false}, {name: emotion, loaded: false}, {name: facedetect, loaded: false}, {name: faceiris, loaded: false}, {name: facemesh, loaded: false}, {name: faceres, loaded: false}, {name: ssrnetgender, loaded: false}, {name: handpose, loaded: false}, {name: handskeleton, loaded: false}, {name: handtrack, loaded: false}, {name: liveness, loaded: false}, {name: movenet, loaded: false}, {name: nanodet, loaded: false}, {name: posenet, loaded: false}, {name: segmentation, loaded: false}, {name: antispoof, loaded: false}]
11:07:11.492 +03593ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 1, gesture: 0}
11:07:12.218 +00726ms finished object/webgpu {init: 4218, detect: 132}
11:07:12.949 +00731ms tests complete
11:07:13.682 +00733ms benchmark backend: wasm
11:07:16.242 +02560ms benchmark {time: 119, backend: wasm, cacheSensitivity: 0, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 100}}
11:07:18.127 +01885ms benchmark {time: 115, backend: wasm, cacheSensitivity: 0.25, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 100}}
11:07:20.003 +01876ms benchmark {time: 114, backend: wasm, cacheSensitivity: 0.5, performance: {inputProcess: 3, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 100}}
11:07:21.895 +01892ms benchmark {time: 115, backend: wasm, cacheSensitivity: 0.75, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 97}}
11:07:23.068 +01173ms benchmark {time: 42, backend: wasm, cacheSensitivity: 10, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 8, cacheCheck: 0, total: 100}}
11:07:23.812 +00744ms total wasm {detect: 8759, init: 614}
11:07:24.570 +00758ms benchmark backend: humangl
11:07:50.315 +25745ms benchmark {time: 1906, backend: humangl, cacheSensitivity: 0, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 1665}}
11:07:59.982 +09667ms benchmark {time: 890, backend: humangl, cacheSensitivity: 0.25, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 2, cacheCheck: 69, total: 2119}}
11:08:12.715 +12733ms benchmark {time: 1195, backend: humangl, cacheSensitivity: 0.5, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 4, cacheCheck: 65, total: 815}}
11:08:27.016 +14301ms benchmark {time: 1352, backend: humangl, cacheSensitivity: 0.75, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 7, cacheCheck: 81, total: 783}}
11:08:37.017 +10001ms benchmark {time: 921, backend: humangl, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 10, cacheCheck: 97, total: 902}}
11:08:37.810 +00793ms total humangl {detect: 66559, init: 5882}
11:08:38.601 +00791ms benchmark backend: webgl
11:09:01.515 +22914ms benchmark {time: 1620, backend: webgl, cacheSensitivity: 0, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 1481}}
11:09:16.930 +15415ms benchmark {time: 1461, backend: webgl, cacheSensitivity: 0.25, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 2, cacheCheck: 82, total: 1662}}
11:09:18.567 +01637ms benchmark {time: 84, backend: webgl, cacheSensitivity: 0.5, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 4, cacheCheck: 4, total: 61}}
11:09:20.005 +01438ms benchmark {time: 64, backend: webgl, cacheSensitivity: 0.75, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 7, cacheCheck: 5, total: 44}}
11:09:21.384 +01379ms benchmark {time: 56, backend: webgl, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 10, cacheCheck: 5, total: 41}}
11:09:22.195 +00811ms total webgl {detect: 36875, init: 5913}
11:09:23.018 +00823ms benchmark backend: webgpu
11:09:25.482 +02464ms benchmark {time: 115, backend: webgpu, cacheSensitivity: 0, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 36}}
11:09:26.861 +01379ms benchmark {time: 55, backend: webgpu, cacheSensitivity: 0.25, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 3, total: 36}}
11:09:28.201 +01340ms benchmark {time: 51, backend: webgpu, cacheSensitivity: 0.5, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 4, total: 40}}
11:09:29.563 +01362ms benchmark {time: 53, backend: webgpu, cacheSensitivity: 0.75, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 3, total: 38}}
11:09:30.759 +01196ms benchmark {time: 34, backend: webgpu, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 8, cacheCheck: 3, total: 39}}
11:09:31.597 +00838ms total webgpu {detect: 7264, init: 462}
11:09:32.439 +00842ms benchmarks complete

View File

@ -1,2 +1,7 @@
#!/bin/sh #!/bin/sh
"/mnt/c/Users/mandi/AppData/Local/Google/Chrome SxS/Application/chrome.exe" --enable-unsafe-gpu --allow-insecure-localhost --auto-open-devtools-for-tabs https://localhost:10031/test/browser.html
BROWSER="/mnt/c/Users/mandi/AppData/Local/Google/Chrome SxS/Application/chrome.exe"
PARAMS="--enable-unsafe-gpu --allow-insecure-localhost --auto-open-devtools-for-tabs"
"$BROWSER" $PARAMS https://localhost:10031/test/test-browser-iife.html
"$BROWSER" $PARAMS https://localhost:10031/test/test-browser-esm.html

View File

@ -1,39 +1,39 @@
2022-08-31 11:27:08 DATA:  Build {"name":"@vladmandic/human","version":"2.9.4"} 2022-08-31 18:30:05 DATA:  Build {"name":"@vladmandic/human","version":"2.9.4"}
2022-08-31 11:27:08 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.4"} 2022-08-31 18:30:05 INFO:  Application: {"name":"@vladmandic/human","version":"2.9.4"}
2022-08-31 11:27:08 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} 2022-08-31 18:30:05 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2022-08-31 11:27:08 INFO:  Toolchain: {"build":"0.7.11","esbuild":"0.15.6","typescript":"4.8.2","typedoc":"0.23.12","eslint":"8.23.0"} 2022-08-31 18:30:05 INFO:  Toolchain: {"build":"0.7.11","esbuild":"0.15.6","typescript":"4.8.2","typedoc":"0.23.12","eslint":"8.23.0"}
2022-08-31 11:27:08 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} 2022-08-31 18:30:05 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2022-08-31 11:27:08 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]} 2022-08-31 18:30:05 STATE: Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]}
2022-08-31 11:27:08 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":159,"outputBytes":608} 2022-08-31 18:30:05 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":159,"outputBytes":608}
2022-08-31 11:27:08 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655767,"outputBytes":308629} 2022-08-31 18:30:06 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655767,"outputBytes":308629}
2022-08-31 11:27:08 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":167,"outputBytes":612} 2022-08-31 18:30:06 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":167,"outputBytes":612}
2022-08-31 11:27:08 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655771,"outputBytes":308633} 2022-08-31 18:30:06 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655771,"outputBytes":308633}
2022-08-31 11:27:08 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":206,"outputBytes":664} 2022-08-31 18:30:06 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":206,"outputBytes":664}
2022-08-31 11:27:08 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655823,"outputBytes":308683} 2022-08-31 18:30:06 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655823,"outputBytes":308683}
2022-08-31 11:27:08 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1125,"outputBytes":358} 2022-08-31 18:30:06 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1125,"outputBytes":358}
2022-08-31 11:27:08 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1088,"outputBytes":583} 2022-08-31 18:30:06 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1088,"outputBytes":583}
2022-08-31 11:27:09 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655742,"outputBytes":307503} 2022-08-31 18:30:06 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655742,"outputBytes":307503}
2022-08-31 11:27:09 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1344,"outputBytes":2821914} 2022-08-31 18:30:06 STATE: Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":11,"inputBytes":1344,"outputBytes":2821914}
2022-08-31 11:27:09 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3477073,"outputBytes":1687675} 2022-08-31 18:30:06 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3477073,"outputBytes":1687675}
2022-08-31 11:27:09 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3477073,"outputBytes":3108312} 2022-08-31 18:30:06 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3477073,"outputBytes":3108312}
2022-08-31 11:27:13 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30} 2022-08-31 18:30:10 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":30}
2022-08-31 11:27:15 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} 2022-08-31 18:30:12 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true}
2022-08-31 11:27:15 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6714,"outputBytes":3134} 2022-08-31 18:30:12 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6714,"outputBytes":3134}
2022-08-31 11:27:15 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15488,"outputBytes":7788} 2022-08-31 18:30:12 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":15488,"outputBytes":7788}
2022-08-31 11:27:25 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":111,"errors":0,"warnings":0} 2022-08-31 18:30:23 STATE: Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":112,"errors":0,"warnings":0}
2022-08-31 11:27:25 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} 2022-08-31 18:30:23 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2022-08-31 11:27:25 STATE: Copy: {"input":"tfjs/tfjs.esm.d.ts"} 2022-08-31 18:30:23 STATE: Copy: {"input":"tfjs/tfjs.esm.d.ts"}
2022-08-31 11:27:25 INFO:  Done... 2022-08-31 18:30:23 INFO:  Done...
2022-08-31 11:27:26 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":198} 2022-08-31 18:30:24 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":198}
2022-08-31 11:27:26 STATE: Copy: {"input":"types/human.d.ts"} 2022-08-31 18:30:24 STATE: Copy: {"input":"types/human.d.ts"}
2022-08-31 11:27:26 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} 2022-08-31 18:30:24 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2022-08-31 11:27:26 STATE: Models {"folder":"./models","models":13} 2022-08-31 18:30:24 STATE: Models {"folder":"./models","models":13}
2022-08-31 11:27:26 STATE: Models {"folder":"../human-models/models","models":42} 2022-08-31 18:30:24 STATE: Models {"folder":"../human-models/models","models":42}
2022-08-31 11:27:26 STATE: Models {"folder":"../blazepose/model/","models":4} 2022-08-31 18:30:24 STATE: Models {"folder":"../blazepose/model/","models":4}
2022-08-31 11:27:26 STATE: Models {"folder":"../anti-spoofing/model","models":1} 2022-08-31 18:30:24 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2022-08-31 11:27:26 STATE: Models {"folder":"../efficientpose/models","models":3} 2022-08-31 18:30:24 STATE: Models {"folder":"../efficientpose/models","models":3}
2022-08-31 11:27:26 STATE: Models {"folder":"../insightface/models","models":5} 2022-08-31 18:30:24 STATE: Models {"folder":"../insightface/models","models":5}
2022-08-31 11:27:26 STATE: Models {"folder":"../movenet/models","models":3} 2022-08-31 18:30:24 STATE: Models {"folder":"../movenet/models","models":3}
2022-08-31 11:27:26 STATE: Models {"folder":"../nanodet/models","models":4} 2022-08-31 18:30:24 STATE: Models {"folder":"../nanodet/models","models":4}
2022-08-31 11:27:27 STATE: Models: {"count":57,"totalSize":383017442} 2022-08-31 18:30:24 STATE: Models: {"count":57,"totalSize":383017442}
2022-08-31 11:27:27 INFO:  Human Build complete... {"logFile":"test/build.log"} 2022-08-31 18:30:24 INFO:  Human Build complete... {"logFile":"test/build.log"}

View File

@ -25,6 +25,6 @@
<div id="events" class="events"></div> <div id="events" class="events"></div>
<div id="state" class="state"></div> <div id="state" class="state"></div>
<canvas id="canvas" class="canvas" width="256" height="256"></canvas> <canvas id="canvas" class="canvas" width="256" height="256"></canvas>
<script type="module" src="./browser.js"></script> <script type="module" src="./test-browser-esm.js"></script>
</body> </body>
</html> </html>

View File

@ -66,10 +66,7 @@ async function testDefault(title, testConfig = {}) {
const t0 = human.now(); const t0 = human.now();
let res; let res;
for (const model of Object.keys(human.models)) { // unload models for (const model of Object.keys(human.models)) { // unload models
if (human.models[model]) { if (human.models[model]) human.models[model] = null;
// if (human.models[model].dispose) human.models[model].dispose();
human.models[model] = null;
}
} }
human.reset(); human.reset();
res = human.validate(testConfig); // validate res = human.validate(testConfig); // validate
@ -91,8 +88,6 @@ async function testDefault(title, testConfig = {}) {
human.next(); // run interpolation human.next(); // run interpolation
const persons = res.persons; // run persons getter const persons = res.persons; // run persons getter
log(' summary', { persons: persons.length, face: res.face.length, body: res.body.length, hand: res.hand.length, object: res.object.length, gesture: res.gesture.length }); log(' summary', { persons: persons.length, face: res.face.length, body: res.body.length, hand: res.hand.length, object: res.object.length, gesture: res.gesture.length });
// log(' memory', human.tf.memory());
// log(' performance', human.performance);
human.tf.dispose(input.tensor); human.tf.dispose(input.tensor);
log(` finished ${title}/${human.tf.getBackend()}`, { init: Math.round(t1 - t0), detect: Math.round(t2 - t1) }); log(` finished ${title}/${human.tf.getBackend()}`, { init: Math.round(t1 - t0), detect: Math.round(t2 - t1) });
return res; return res;
@ -123,11 +118,7 @@ async function runBenchmark() {
async function main() { async function main() {
log('human tests'); log('human tests');
// create instance
human = new Human({ debug: true }); human = new Human({ debug: true });
// explicit init
await human.init(); await human.init();
human.events.addEventListener('warmup', () => events('warmup')); human.events.addEventListener('warmup', () => events('warmup'));
human.events.addEventListener('image', () => events('image')); human.events.addEventListener('image', () => events('image'));
@ -139,7 +130,6 @@ async function main() {
const env = JSON.parse(JSON.stringify(human.env)); const env = JSON.parse(JSON.stringify(human.env));
env.kernels = human.env.kernels.length; env.kernels = human.env.kernels.length;
detailed('environment', env); detailed('environment', env);
// detailed('config', human.config);
for (const backend of backends) { for (const backend of backends) {
human.config.backend = backend; human.config.backend = backend;

View File

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Human Browser Tests</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, shrink-to-fit=yes">
<meta name="keywords" content="Human">
<meta name="application-name" content="Human">
<meta name="description" content="Human: 3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction, Emotion Prediction & Gesture Recognition; Author: Vladimir Mandic <https://github.com/vladmandic>">
<meta name="msapplication-tooltip" content="Human: 3D Face Detection, Body Pose, Hand & Finger Tracking, Iris Tracking, Age & Gender Prediction, Emotion Prediction & Gesture Recognition; Author: Vladimir Mandic <https://github.com/vladmandic>">
<link rel="shortcut icon" href="../../favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="../../assets/icon.png">
<style>
@font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 100; src: local('Lato'), url('../../assets/lato-light.woff2') }
html { font-family: 'Lato', 'Segoe UI'; font-size: 14px; font-variant: small-caps; }
body { margin: 0; background: black; color: white; width: 100vw; }
.canvas { position: fixed; bottom: 10px; right: 10px; width: 256px; height: 256px; z-index: 99; }
.events { position: fixed; top: 10px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
.state { position: fixed; top: 60px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
.pre { line-height: 150%; }
</style>
</head>
<body>
<pre id="log" class="pre"></pre>
<div id="events" class="events"></div>
<div id="state" class="state"></div>
<canvas id="canvas" class="canvas" width="256" height="256"></canvas>
<script src="../dist/human.js"></script>
<script src="./test-browser-iife.js"></script>
</body>
</html>

117
test/test-browser-iife.js Normal file
View File

@ -0,0 +1,117 @@
/* global Human */
let human;
const backends = ['wasm', 'humangl', 'webgl', 'webgpu'];
const start = performance.now();
function str(long, ...msg) {
if (!Array.isArray(msg)) return msg;
let line = '';
for (const entry of msg) {
if (typeof entry === 'object') line += ' ' + JSON.stringify(entry, null, long ? 2 : 0).replace(/"/g, '').replace(/,/g, ', ').replace(/:/g, ': ');
else line += ' ' + entry;
}
return line + '\n';
}
let last = new Date();
async function log(...msgs) {
const dt = new Date();
const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;
const elap = (dt - last).toString().padStart(5, '0');
document.getElementById('log').innerHTML += ts + ' +' + elap + 'ms &nbsp' + str(false, ...msgs);
document.documentElement.scrollTop = document.documentElement.scrollHeight;
console.log(ts, elap, ...msgs); // eslint-disable-line no-console
last = dt;
}
async function detailed(...msgs) {
const dt = new Date();
const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;
const elap = (dt - last).toString().padStart(5, '0');
document.getElementById('log').innerHTML += ts + ' +' + elap + 'ms &nbsp' + str(true, ...msgs);
document.documentElement.scrollTop = document.documentElement.scrollHeight;
console.log(ts, elap, ...msgs); // eslint-disable-line no-console
last = dt;
}
async function image(url) {
const el = document.createElement('img');
el.id = 'image';
const loaded = new Promise((resolve) => { el.onload = () => resolve(true); });
el.src = url;
await loaded;
return el;
}
function draw(canvas = null) {
const c = document.getElementById('canvas');
const ctx = c.getContext('2d');
if (canvas) ctx.drawImage(canvas, 0, 0, c.width, c.height);
else ctx.clearRect(0, 0, c.width, c.height);
}
async function events(event) {
document.getElementById('events').innerText = `${Math.round(performance.now() - start)}ms Event: ${event}`;
}
async function testDefault(title, testConfig = {}) {
const t0 = human.now();
let res;
for (const model of Object.keys(human.models)) { // unload models
if (human.models[model]) human.models[model] = null;
}
human.reset();
res = human.validate(testConfig); // validate
if (res && res.length > 0) log(' invalid configuration', res);
log(`test ${title}/${human.tf.getBackend()}`, human.config);
await human.load();
const models = Object.keys(human.models).map((model) => ({ name: model, loaded: (human.models[model] !== null) }));
log(' models', models);
const ops = await human.check();
if (ops && ops.length > 0) log(' missing ops', ops);
const img = await image('../../samples/in/ai-body.jpg');
const input = await human.image(img); // process image
draw(input.canvas);
res = await human.warmup({ warmup: 'face' }); // warmup
draw(res.canvas);
const t1 = human.now();
res = await human.detect(input.tensor, testConfig); // run detect
const t2 = human.now();
human.next(); // run interpolation
const persons = res.persons; // run persons getter
log(' summary', { persons: persons.length, face: res.face.length, body: res.body.length, hand: res.hand.length, object: res.object.length, gesture: res.gesture.length });
human.tf.dispose(input.tensor);
log(` finished ${title}/${human.tf.getBackend()}`, { init: Math.round(t1 - t0), detect: Math.round(t2 - t1) });
return res;
}
async function main() {
log('human tests');
human = new Human.Human({ debug: true });
await human.init();
human.events.addEventListener('warmup', () => events('warmup'));
human.events.addEventListener('image', () => events('image'));
human.events.addEventListener('detect', () => events('detect'));
const timer = setInterval(() => { document.getElementById('state').innerText = `State: ${human.state}`; }, 10);
log('version', human.version);
log('tfjs', human.tf.version.tfjs);
const env = JSON.parse(JSON.stringify(human.env));
env.kernels = human.env.kernels.length;
detailed('environment', env);
for (const backend of backends) {
human.config.backend = backend;
await human.init(); // init
if (human.tf.getBackend() !== backend) {
log('desired', backend, 'detected', human.tf.getBackend());
continue; // wrong backend
}
await testDefault('default', { debug: true });
}
log('tests complete');
clearInterval(timer);
}
main();