mirror of https://github.com/vladmandic/human
minor bug fixes and increased test coverage
parent
da3ad3033f
commit
94207aad4f
|
@ -11,9 +11,8 @@
|
||||||
|
|
||||||
### **HEAD -> main** 2022/08/30 mandic00@live.com
|
### **HEAD -> main** 2022/08/30 mandic00@live.com
|
||||||
|
|
||||||
|
- add model load exception handling
|
||||||
### **origin/main** 2022/08/28 mandic00@live.com
|
- add softwarekernels config option
|
||||||
|
|
||||||
- expand type safety
|
- expand type safety
|
||||||
- full eslint rule rewrite
|
- full eslint rule rewrite
|
||||||
|
|
||||||
|
|
1
TODO.md
1
TODO.md
|
@ -60,6 +60,7 @@ Enable via `about:config` -> `gfx.offscreencanvas.enabled`
|
||||||
Example: `console.log(human.env.tensorflow)`
|
Example: `console.log(human.env.tensorflow)`
|
||||||
- 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
|
||||||
- Host models in <human-models>
|
- Host models in <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: `modelPath: 'https://vladmandic.github.io/human-models/models/facemesh.json'`
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -68,7 +68,7 @@
|
||||||
"@tensorflow/tfjs-backend-cpu": "^3.20.0",
|
"@tensorflow/tfjs-backend-cpu": "^3.20.0",
|
||||||
"@tensorflow/tfjs-backend-wasm": "^3.20.0",
|
"@tensorflow/tfjs-backend-wasm": "^3.20.0",
|
||||||
"@tensorflow/tfjs-backend-webgl": "^3.20.0",
|
"@tensorflow/tfjs-backend-webgl": "^3.20.0",
|
||||||
"@tensorflow/tfjs-backend-webgpu": "0.0.1-alpha.12",
|
"@tensorflow/tfjs-backend-webgpu": "0.0.1-alpha.13",
|
||||||
"@tensorflow/tfjs-converter": "^3.20.0",
|
"@tensorflow/tfjs-converter": "^3.20.0",
|
||||||
"@tensorflow/tfjs-core": "^3.20.0",
|
"@tensorflow/tfjs-core": "^3.20.0",
|
||||||
"@tensorflow/tfjs-data": "^3.20.0",
|
"@tensorflow/tfjs-data": "^3.20.0",
|
||||||
|
@ -78,8 +78,8 @@
|
||||||
"@tensorflow/tfjs-tflite": "0.0.1-alpha.8",
|
"@tensorflow/tfjs-tflite": "0.0.1-alpha.8",
|
||||||
"@types/node": "^18.7.14",
|
"@types/node": "^18.7.14",
|
||||||
"@types/offscreencanvas": "^2019.7.0",
|
"@types/offscreencanvas": "^2019.7.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.36.0",
|
"@typescript-eslint/eslint-plugin": "^5.36.1",
|
||||||
"@typescript-eslint/parser": "^5.36.0",
|
"@typescript-eslint/parser": "^5.36.1",
|
||||||
"@vladmandic/build": "^0.7.11",
|
"@vladmandic/build": "^0.7.11",
|
||||||
"@vladmandic/pilogger": "^0.4.6",
|
"@vladmandic/pilogger": "^0.4.6",
|
||||||
"@vladmandic/tfjs": "github:vladmandic/tfjs",
|
"@vladmandic/tfjs": "github:vladmandic/tfjs",
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"seedrandom": "^3.0.5",
|
"seedrandom": "^3.0.5",
|
||||||
"tslib": "^2.4.0",
|
"tslib": "^2.4.0",
|
||||||
"typedoc": "0.23.11",
|
"typedoc": "0.23.12",
|
||||||
"typescript": "4.8.2"
|
"typescript": "4.8.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,15 @@ export async function augment(rawCoords, results: Tensor[]) {
|
||||||
const t: Record<string, Float32Array> = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords
|
const t: Record<string, Float32Array> = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords
|
||||||
// mesh: results[0], // already have it in rawCoords // output_mesh_identity
|
// mesh: results[0], // already have it in rawCoords // output_mesh_identity
|
||||||
// flag: results[1], // already processed in parent // conv_faceflag
|
// flag: results[1], // already processed in parent // conv_faceflag
|
||||||
lips: await results.filter((r) => r.size === 160)[0].data() as Float32Array, // 80 x 2d = 160 // output_lips
|
lips: await results.filter((r) => r.size === 160)?.[0]?.data() as Float32Array, // 80 x 2d = 160 // output_lips
|
||||||
irisL: await results.filter((r) => r.size === 10)[0].data() as Float32Array, // 5 x 2d = 10 // output_right_iris
|
irisL: await results.filter((r) => r.size === 10)?.[0]?.data() as Float32Array, // 5 x 2d = 10 // output_right_iris
|
||||||
eyeL: await results.filter((r) => r.size === 142)[0].data() as Float32Array, // 71 x 2d = 142 // output_right_eye
|
eyeL: await results.filter((r) => r.size === 142)?.[0]?.data() as Float32Array, // 71 x 2d = 142 // output_right_eye
|
||||||
irisR: await results.filter((r) => r.size === 10)[1].data() as Float32Array, // 5 x 2d = 10 // output_left_iris
|
irisR: await results.filter((r) => r.size === 10)?.[1]?.data() as Float32Array, // 5 x 2d = 10 // output_left_iris
|
||||||
eyeR: await results.filter((r) => r.size === 142)[1].data() as Float32Array, // 71 x 2d = 142// output_left_eye
|
eyeR: await results.filter((r) => r.size === 142)?.[1]?.data() as Float32Array, // 71 x 2d = 142// output_left_eye
|
||||||
};
|
};
|
||||||
|
for (const val of Object.values(t)) {
|
||||||
|
if (!val) return rawCoords; // could not find tensor
|
||||||
|
}
|
||||||
|
|
||||||
// augment iris: adds additional 5 keypoints per eye
|
// augment iris: adds additional 5 keypoints per eye
|
||||||
const irisLDepth = constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; // get average z-coord for iris
|
const irisLDepth = constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; // get average z-coord for iris
|
||||||
|
|
|
@ -90,6 +90,7 @@ export async function predict(input: Tensor, config: Config): Promise<FaceResult
|
||||||
if (config.debug) log('face mesh detection requested, but model is not loaded');
|
if (config.debug) log('face mesh detection requested, but model is not loaded');
|
||||||
} else { // mesh enabled
|
} else { // mesh enabled
|
||||||
if (config.face.attention?.enabled && !env.kernels.includes('atan2')) {
|
if (config.face.attention?.enabled && !env.kernels.includes('atan2')) {
|
||||||
|
config.face.attention.enabled = false;
|
||||||
tf.dispose(face.tensor);
|
tf.dispose(face.tensor);
|
||||||
return faces;
|
return faces;
|
||||||
}
|
}
|
||||||
|
@ -97,7 +98,6 @@ export async function predict(input: Tensor, config: Config): Promise<FaceResult
|
||||||
const confidenceT = results.find((t) => t.shape[t.shape.length - 1] === 1) as Tensor;
|
const confidenceT = results.find((t) => t.shape[t.shape.length - 1] === 1) as Tensor;
|
||||||
const faceConfidence = await confidenceT.data();
|
const faceConfidence = await confidenceT.data();
|
||||||
face.faceScore = Math.round(100 * faceConfidence[0]) / 100;
|
face.faceScore = Math.round(100 * faceConfidence[0]) / 100;
|
||||||
|
|
||||||
if (face.faceScore < (config.face.detector?.minConfidence || 1)) { // low confidence in detected mesh
|
if (face.faceScore < (config.face.detector?.minConfidence || 1)) { // low confidence in detected mesh
|
||||||
box.confidence = face.faceScore; // reset confidence of cached box
|
box.confidence = face.faceScore; // reset confidence of cached box
|
||||||
if (config.face.mesh.keepInvalid) {
|
if (config.face.mesh.keepInvalid) {
|
||||||
|
|
|
@ -204,11 +204,15 @@ export class Human {
|
||||||
const currentBackend = this.config.backend; // save backend;
|
const currentBackend = this.config.backend; // save backend;
|
||||||
this.config = JSON.parse(JSON.stringify(defaults));
|
this.config = JSON.parse(JSON.stringify(defaults));
|
||||||
this.config.backend = currentBackend;
|
this.config.backend = currentBackend;
|
||||||
|
image.reset();
|
||||||
|
env.initial = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Validate current configuration schema */
|
/** Validate current configuration schema */
|
||||||
validate(userConfig?: Partial<Config>) {
|
validate(userConfig?: Partial<Config>) {
|
||||||
return validate(defaults, userConfig || this.config);
|
const msgs = validate(defaults, userConfig || this.config);
|
||||||
|
if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig) as Config;
|
||||||
|
return msgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check model for invalid kernel ops for current backend */
|
/** Check model for invalid kernel ops for current backend */
|
||||||
|
@ -280,6 +284,7 @@ export class Human {
|
||||||
async init(): Promise<void> {
|
async init(): Promise<void> {
|
||||||
await backend.check(this, true);
|
await backend.check(this, true);
|
||||||
await this.tf.ready();
|
await this.tf.ready();
|
||||||
|
image.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Load method preloads all configured models on-demand
|
/** Load method preloads all configured models on-demand
|
||||||
|
|
|
@ -24,6 +24,13 @@ const last: { inputSum: number, cacheDiff: number, sumMethod: number, inputTenso
|
||||||
inputTensor: undefined,
|
inputTensor: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function reset() {
|
||||||
|
last.inputSum = 0;
|
||||||
|
last.cacheDiff = 1;
|
||||||
|
last.sumMethod = 0;
|
||||||
|
last.inputTensor = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
export function canvas(width: number, height: number): AnyCanvas {
|
export function canvas(width: number, height: number): AnyCanvas {
|
||||||
let c: AnyCanvas;
|
let c: AnyCanvas;
|
||||||
if (env.browser) { // browser defines canvas object
|
if (env.browser) { // browser defines canvas object
|
||||||
|
|
|
@ -123,7 +123,7 @@ export async function load(instance: Human): Promise<void> {
|
||||||
if (instance.config.face.enabled && instance.config.face.description?.enabled && !instance.models.faceres) instance.models.faceres = faceres.load(instance.config);
|
if (instance.config.face.enabled && instance.config.face.description?.enabled && !instance.models.faceres) instance.models.faceres = faceres.load(instance.config);
|
||||||
if (instance.config.face.enabled && instance.config.face.emotion?.enabled && !instance.models.emotion) instance.models.emotion = emotion.load(instance.config);
|
if (instance.config.face.enabled && instance.config.face.emotion?.enabled && !instance.models.emotion) instance.models.emotion = emotion.load(instance.config);
|
||||||
if (instance.config.face.enabled && instance.config.face.iris?.enabled && !instance.config.face.attention?.enabled && !instance.models.faceiris) instance.models.faceiris = iris.load(instance.config);
|
if (instance.config.face.enabled && instance.config.face.iris?.enabled && !instance.config.face.attention?.enabled && !instance.models.faceiris) instance.models.faceiris = iris.load(instance.config);
|
||||||
if (instance.config.face.enabled && instance.config.face.mesh?.enabled && !instance.models.facemesh) instance.models.facemesh = facemesh.load(instance.config);
|
if (instance.config.face.enabled && instance.config.face.mesh?.enabled && (!instance.models.facemesh)) instance.models.facemesh = facemesh.load(instance.config);
|
||||||
if (instance.config.face.enabled && instance.config.face['gear']?.enabled && !instance.models.gear) instance.models.gear = gear.load(instance.config);
|
if (instance.config.face.enabled && instance.config.face['gear']?.enabled && !instance.models.gear) instance.models.gear = gear.load(instance.config);
|
||||||
if (instance.config.face.enabled && instance.config.face['ssrnet']?.enabled && !instance.models.ssrnetage) instance.models.ssrnetage = ssrnetAge.load(instance.config);
|
if (instance.config.face.enabled && instance.config.face['ssrnet']?.enabled && !instance.models.ssrnetage) instance.models.ssrnetage = ssrnetAge.load(instance.config);
|
||||||
if (instance.config.face.enabled && instance.config.face['ssrnet']?.enabled && !instance.models.ssrnetgender) instance.models.ssrnetgender = ssrnetGender.load(instance.config);
|
if (instance.config.face.enabled && instance.config.face['ssrnet']?.enabled && !instance.models.ssrnetgender) instance.models.ssrnetgender = ssrnetGender.load(instance.config);
|
||||||
|
|
|
@ -48,6 +48,7 @@ async function process(res: Tensor | null, outputShape: [number, number], config
|
||||||
for (const id of Array.from(nms)) {
|
for (const id of Array.from(nms)) {
|
||||||
const score = Math.trunc(100 * detections[0][id][4]) / 100;
|
const score = Math.trunc(100 * detections[0][id][4]) / 100;
|
||||||
const classVal = detections[0][id][5];
|
const classVal = detections[0][id][5];
|
||||||
|
if (Number.isNaN(classVal)) continue;
|
||||||
const label = labels[classVal].label as ObjectType;
|
const label = labels[classVal].label as ObjectType;
|
||||||
const [x, y] = [
|
const [x, y] = [
|
||||||
detections[0][id][0] / inputSize,
|
detections[0][id][0] / inputSize,
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
<style>
|
<style>
|
||||||
@font-face { font-family: 'Lato'; font-display: swap; font-style: normal; font-weight: 100; src: local('Lato'), url('../../assets/lato-light.woff2') }
|
@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; }
|
html { font-family: 'Lato', 'Segoe UI'; font-size: 14px; font-variant: small-caps; }
|
||||||
body { margin: 0; background: black; color: white; width: 100vw; overflow-x: hidden; }
|
body { margin: 0; background: black; color: white; width: 100vw; }
|
||||||
.canvas { position: fixed; bottom: 10px; right: 10px; width: 256px; height: 256px; z-index: 99; }
|
.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; }
|
.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; }
|
.state { position: fixed; top: 60px; right: 10px; width: 12rem; height: 1.25rem; background-color: grey; padding: 8px; z-index: 99; }
|
||||||
.pre { line-height: 150%; white-space: break-spaces; }
|
.pre { line-height: 150%; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
146
test/browser.js
146
test/browser.js
|
@ -1,12 +1,6 @@
|
||||||
import { Human } from '../dist/human.esm.js';
|
import { Human } from '../dist/human.esm.js';
|
||||||
|
|
||||||
const config = {
|
let human;
|
||||||
async: true,
|
|
||||||
warmup: 'none',
|
|
||||||
debug: true,
|
|
||||||
cacheSensitivity: 0,
|
|
||||||
object: { enabled: true },
|
|
||||||
};
|
|
||||||
|
|
||||||
const backends = ['wasm', 'humangl', 'webgl', 'webgpu'];
|
const backends = ['wasm', 'humangl', 'webgl', 'webgpu'];
|
||||||
|
|
||||||
|
@ -68,10 +62,72 @@ async function events(event) {
|
||||||
document.getElementById('events').innerText = `${Math.round(performance.now() - start)}ms Event: ${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]) {
|
||||||
|
// if (human.models[model].dispose) human.models[model].dispose();
|
||||||
|
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 });
|
||||||
|
// log(' memory', human.tf.memory());
|
||||||
|
// log(' performance', human.performance);
|
||||||
|
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 runBenchmark() {
|
||||||
|
const img = await image('../../samples/in/ai-face.jpg');
|
||||||
|
human.reset();
|
||||||
|
const s0 = human.now();
|
||||||
|
await human.load();
|
||||||
|
await human.warmup();
|
||||||
|
const s1 = human.now();
|
||||||
|
for (const val of [0, 0.25, 0.5, 0.75, 10]) {
|
||||||
|
human.performance = {};
|
||||||
|
const t0 = performance.now();
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
const res = await human.detect(img, { cacheSensitivity: val, filter: { pixelate: 5 * i }, object: { enabled: true } }); // run detect with increased pixelization on each iteration
|
||||||
|
draw(res.canvas);
|
||||||
|
}
|
||||||
|
const t1 = performance.now();
|
||||||
|
log(' benchmark', { time: Math.round((t1 - t0) / 10), backend: human.tf.getBackend(), cacheSensitivity: val, performance: human.performance });
|
||||||
|
await wait(1);
|
||||||
|
}
|
||||||
|
const s2 = human.now();
|
||||||
|
log(' total', human.tf.getBackend(), { detect: Math.round(s2 - s1), init: Math.round(s1 - s0) });
|
||||||
|
draw();
|
||||||
|
}
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
log('human tests');
|
log('human tests');
|
||||||
let res;
|
|
||||||
const human = new Human(config);
|
// create instance
|
||||||
|
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'));
|
||||||
|
@ -83,60 +139,36 @@ 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);
|
||||||
|
|
||||||
detailed('config', human.config);
|
|
||||||
await human.load();
|
|
||||||
const models = Object.keys(human.models).map((model) => ({ name: model, loaded: (human.models[model] !== null) }));
|
|
||||||
log('models', models);
|
|
||||||
for (const backend of backends) {
|
for (const backend of backends) {
|
||||||
log();
|
human.config.backend = backend;
|
||||||
log('test start:', 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 });
|
||||||
|
await testDefault('sync', { debug: true, async: false });
|
||||||
|
await testDefault('none', { debug: true, async: true, face: { enabled: false }, body: { enabled: false }, hand: { enabled: false }, gesture: { enabled: false }, segmentation: { enabled: false }, object: { enabled: false } });
|
||||||
|
await testDefault('object', { debug: true, async: true, face: { enabled: false }, body: { enabled: false }, hand: { enabled: false }, gesture: { enabled: false }, segmentation: { enabled: false }, object: { enabled: true } });
|
||||||
|
// TBD detectors only
|
||||||
|
// TBD segmentation
|
||||||
|
// TBD face match
|
||||||
|
// TBD non-default models
|
||||||
|
// TBD web workers
|
||||||
|
// TBD multiple instances
|
||||||
|
}
|
||||||
|
log('tests complete');
|
||||||
|
for (const backend of backends) {
|
||||||
|
log('benchmark backend:', backend);
|
||||||
human.config.backend = backend;
|
human.config.backend = backend;
|
||||||
await human.init();
|
await human.init();
|
||||||
log('desired', backend, 'detected', human.tf.getBackend());
|
if (human.tf.getBackend() !== backend) continue; // wrong backend
|
||||||
if (human.tf.getBackend() !== backend) {
|
await runBenchmark();
|
||||||
continue;
|
|
||||||
}
|
|
||||||
log('memory', human.tf.memory());
|
|
||||||
res = await human.validate();
|
|
||||||
log('validate', res);
|
|
||||||
res = await human.warmup({ warmup: 'face' });
|
|
||||||
draw(res.canvas);
|
|
||||||
log('warmup', 'face');
|
|
||||||
let img = await image('../../samples/in/ai-body.jpg');
|
|
||||||
const input = await human.image(img);
|
|
||||||
log('input', input.tensor.shape);
|
|
||||||
draw(res.canvas);
|
|
||||||
res = await human.detect(input.tensor);
|
|
||||||
log('detect');
|
|
||||||
human.next();
|
|
||||||
log('interpolate');
|
|
||||||
const persons = res.persons;
|
|
||||||
log('persons');
|
|
||||||
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('performance', human.performance);
|
|
||||||
human.tf.dispose(input.tensor);
|
|
||||||
draw();
|
|
||||||
|
|
||||||
img = await image('../../samples/in/ai-face.jpg');
|
|
||||||
for (const val of [0, 0.25, 0.5, 0.75, 10]) {
|
|
||||||
human.performance = {};
|
|
||||||
const t0 = performance.now();
|
|
||||||
for (let i = 0; i < 10; i++) {
|
|
||||||
res = await human.detect(img, { cacheSensitivity: val, filter: { pixelate: 5 * i }, object: { enabled: false } });
|
|
||||||
draw(res.canvas);
|
|
||||||
}
|
|
||||||
const t1 = performance.now();
|
|
||||||
log('benchmark', { time: Math.round((t1 - t0) / 10), cacheSensitivity: val, performance: human.performance });
|
|
||||||
await wait(10);
|
|
||||||
}
|
|
||||||
draw();
|
|
||||||
|
|
||||||
log('memory', human.tf.memory());
|
|
||||||
}
|
}
|
||||||
|
log('benchmarks complete');
|
||||||
clearInterval(timer);
|
clearInterval(timer);
|
||||||
log();
|
|
||||||
log('tests complete');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
||||||
|
|
477
test/browser.log
477
test/browser.log
|
@ -1,7 +1,7 @@
|
||||||
10:13:35.412 +00001ms human tests
|
11:05:50.622 +00000ms human tests
|
||||||
10:13:35.517 +00105ms version 2.9.3
|
11:05:50.903 +00281ms version 2.9.4
|
||||||
10:13:35.517 +00000ms tfjs 3.19.0
|
11:05:50.903 +00000ms tfjs 3.20.0
|
||||||
10:13:35.517 +00000ms environment {
|
11:05:50.904 +00001ms environment {
|
||||||
browser: true,
|
browser: true,
|
||||||
node: false,
|
node: false,
|
||||||
worker: false,
|
worker: false,
|
||||||
|
@ -16,10 +16,11 @@
|
||||||
],
|
],
|
||||||
initial: true,
|
initial: true,
|
||||||
tfjs: {
|
tfjs: {
|
||||||
version: 3.19.0
|
version: 3.20.0
|
||||||
},
|
},
|
||||||
offscreen: true,
|
offscreen: true,
|
||||||
perfadd: false,
|
perfadd: false,
|
||||||
|
tensorflow: {},
|
||||||
wasm: {
|
wasm: {
|
||||||
supported: true,
|
supported: true,
|
||||||
backend: true
|
backend: true
|
||||||
|
@ -38,375 +39,99 @@
|
||||||
cpu: {
|
cpu: {
|
||||||
flags: []
|
flags: []
|
||||||
},
|
},
|
||||||
kernels: [
|
kernels: 166
|
||||||
_fusedmatmul,
|
|
||||||
abs,
|
|
||||||
acos,
|
|
||||||
acosh,
|
|
||||||
add,
|
|
||||||
addn,
|
|
||||||
all,
|
|
||||||
any,
|
|
||||||
argmax,
|
|
||||||
argmin,
|
|
||||||
asin,
|
|
||||||
asinh,
|
|
||||||
atan,
|
|
||||||
atan2,
|
|
||||||
atanh,
|
|
||||||
avgpool,
|
|
||||||
avgpool3d,
|
|
||||||
avgpool3dgrad,
|
|
||||||
avgpoolgrad,
|
|
||||||
batchmatmul,
|
|
||||||
fusedbatchnorm,
|
|
||||||
batchtospacend,
|
|
||||||
bincount,
|
|
||||||
broadcastargs,
|
|
||||||
cast,
|
|
||||||
ceil,
|
|
||||||
clipbyvalue,
|
|
||||||
complex,
|
|
||||||
complexabs,
|
|
||||||
concat,
|
|
||||||
conv2d,
|
|
||||||
conv2dbackpropfilter,
|
|
||||||
conv2dbackpropinput,
|
|
||||||
conv3d,
|
|
||||||
conv3dbackpropfilterv2,
|
|
||||||
conv3dbackpropinputv2,
|
|
||||||
cos,
|
|
||||||
cosh,
|
|
||||||
cropandresize,
|
|
||||||
cumprod,
|
|
||||||
cumsum,
|
|
||||||
densebincount,
|
|
||||||
depthtospace,
|
|
||||||
depthwiseconv2dnative,
|
|
||||||
depthwiseconv2dnativebackpropfilter,
|
|
||||||
depthwiseconv2dnativebackpropinput,
|
|
||||||
diag,
|
|
||||||
dilation2d,
|
|
||||||
einsum,
|
|
||||||
elu,
|
|
||||||
elugrad,
|
|
||||||
equal,
|
|
||||||
erf,
|
|
||||||
exp,
|
|
||||||
expanddims,
|
|
||||||
expm1,
|
|
||||||
fft,
|
|
||||||
fill,
|
|
||||||
flipleftright,
|
|
||||||
floor,
|
|
||||||
floordiv,
|
|
||||||
frompixels,
|
|
||||||
fusedconv2d,
|
|
||||||
fuseddepthwiseconv2d,
|
|
||||||
gathernd,
|
|
||||||
gatherv2,
|
|
||||||
greater,
|
|
||||||
greaterequal,
|
|
||||||
identity,
|
|
||||||
ifft,
|
|
||||||
imag,
|
|
||||||
isfinite,
|
|
||||||
isinf,
|
|
||||||
isnan,
|
|
||||||
leakyrelu,
|
|
||||||
less,
|
|
||||||
lessequal,
|
|
||||||
linspace,
|
|
||||||
log,
|
|
||||||
log1p,
|
|
||||||
logicaland,
|
|
||||||
logicalnot,
|
|
||||||
logicalor,
|
|
||||||
lrn,
|
|
||||||
lrngrad,
|
|
||||||
max,
|
|
||||||
maximum,
|
|
||||||
maxpool,
|
|
||||||
maxpool3d,
|
|
||||||
maxpool3dgrad,
|
|
||||||
maxpoolgrad,
|
|
||||||
maxpoolwithargmax,
|
|
||||||
mean,
|
|
||||||
min,
|
|
||||||
minimum,
|
|
||||||
mirrorpad,
|
|
||||||
mod,
|
|
||||||
multinomial,
|
|
||||||
multiply,
|
|
||||||
neg,
|
|
||||||
nonmaxsuppressionv3,
|
|
||||||
nonmaxsuppressionv4,
|
|
||||||
nonmaxsuppressionv5,
|
|
||||||
notequal,
|
|
||||||
onehot,
|
|
||||||
oneslike,
|
|
||||||
pack,
|
|
||||||
padv2,
|
|
||||||
pow,
|
|
||||||
prelu,
|
|
||||||
prod,
|
|
||||||
range,
|
|
||||||
real,
|
|
||||||
realdiv,
|
|
||||||
reciprocal,
|
|
||||||
relu,
|
|
||||||
relu6,
|
|
||||||
reshape,
|
|
||||||
resizebilinear,
|
|
||||||
resizebilineargrad,
|
|
||||||
resizenearestneighbor,
|
|
||||||
resizenearestneighborgrad,
|
|
||||||
reverse,
|
|
||||||
rotatewithoffset,
|
|
||||||
round,
|
|
||||||
rsqrt,
|
|
||||||
scatternd,
|
|
||||||
searchsorted,
|
|
||||||
select,
|
|
||||||
selu,
|
|
||||||
sigmoid,
|
|
||||||
sign,
|
|
||||||
sin,
|
|
||||||
sinh,
|
|
||||||
slice,
|
|
||||||
softmax,
|
|
||||||
softplus,
|
|
||||||
spacetobatchnd,
|
|
||||||
sparsefillemptyrows,
|
|
||||||
sparsereshape,
|
|
||||||
sparsesegmentmean,
|
|
||||||
sparsesegmentsum,
|
|
||||||
sparsetodense,
|
|
||||||
splitv,
|
|
||||||
sqrt,
|
|
||||||
square,
|
|
||||||
squareddifference,
|
|
||||||
step,
|
|
||||||
stridedslice,
|
|
||||||
stringngrams,
|
|
||||||
stringsplit,
|
|
||||||
stringtohashbucketfast,
|
|
||||||
sub,
|
|
||||||
sum,
|
|
||||||
tan,
|
|
||||||
tanh,
|
|
||||||
tile,
|
|
||||||
topk,
|
|
||||||
transform,
|
|
||||||
transpose,
|
|
||||||
unique,
|
|
||||||
unpack,
|
|
||||||
unsortedsegmentsum,
|
|
||||||
zeroslike,
|
|
||||||
floormod
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
10:13:35.527 +00010ms config {
|
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}}
|
||||||
backend: humangl,
|
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}]
|
||||||
modelBasePath: ../models/,
|
11:05:53.092 +01575ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
|
||||||
cacheModels: true,
|
11:05:53.103 +00011ms finished default/wasm {init: 1325, detect: 544}
|
||||||
validateModels: true,
|
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}}
|
||||||
wasmPath: https: //cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@3.19.0/dist/,
|
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}]
|
||||||
wasmPlatformFetch: false,
|
11:05:54.367 +00968ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
|
||||||
debug: true,
|
11:05:54.384 +00017ms finished sync/wasm {init: 1096, detect: 155}
|
||||||
async: true,
|
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}}
|
||||||
warmup: none,
|
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}]
|
||||||
cacheSensitivity: 0,
|
11:05:54.537 +00102ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
|
||||||
skipAllowed: false,
|
11:05:54.569 +00032ms finished none/wasm {init: 133, detect: 3}
|
||||||
deallocate: false,
|
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}}
|
||||||
filter: {
|
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}]
|
||||||
enabled: true,
|
11:05:54.952 +00268ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 1, gesture: 0}
|
||||||
equalization: false,
|
11:05:55.006 +00054ms finished object/wasm {init: 281, detect: 69}
|
||||||
width: 0,
|
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}}
|
||||||
height: 0,
|
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}]
|
||||||
flip: false,
|
11:06:04.652 +09362ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
|
||||||
return: true,
|
11:06:04.732 +00080ms finished default/humangl {init: 8549, detect: 1030}
|
||||||
brightness: 0,
|
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}}
|
||||||
contrast: 0,
|
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}]
|
||||||
sharpness: 0,
|
11:06:11.078 +06001ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
|
||||||
blur: 0,
|
11:06:11.191 +00113ms finished sync/humangl {init: 5726, detect: 535}
|
||||||
saturation: 0,
|
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}}
|
||||||
hue: 0,
|
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}]
|
||||||
negative: false,
|
11:06:11.778 +00323ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
|
||||||
sepia: false,
|
11:06:11.930 +00152ms finished none/humangl {init: 471, detect: 0}
|
||||||
vintage: false,
|
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}}
|
||||||
kodachrome: false,
|
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}]
|
||||||
technicolor: false,
|
11:06:16.046 +03715ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
|
||||||
polaroid: false,
|
11:06:16.234 +00188ms finished object/humangl {init: 3688, detect: 278}
|
||||||
pixelate: 0
|
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}]
|
||||||
gesture: {
|
11:06:26.563 +09755ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
|
||||||
enabled: true
|
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}}
|
||||||
face: {
|
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}]
|
||||||
enabled: true,
|
11:06:34.213 +06694ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
|
||||||
detector: {
|
11:06:34.509 +00296ms finished sync/webgl {init: 6219, detect: 949}
|
||||||
modelPath: blazeface.json,
|
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}}
|
||||||
rotation: true,
|
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}]
|
||||||
maxDetected: 1,
|
11:06:35.728 +00569ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
|
||||||
skipFrames: 99,
|
11:06:36.087 +00359ms finished none/webgl {init: 915, detect: 0}
|
||||||
skipTime: 2500,
|
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}}
|
||||||
minConfidence: 0.2,
|
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}]
|
||||||
iouThreshold: 0.1,
|
11:06:41.462 +04539ms summary {persons: 0, face: 0, body: 0, hand: 0, object: 0, gesture: 0}
|
||||||
mask: false,
|
11:06:41.876 +00414ms finished object/webgl {init: 4709, detect: 309}
|
||||||
return: false
|
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}]
|
||||||
mesh: {
|
11:07:00.511 +17446ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 0, gesture: 8}
|
||||||
enabled: true,
|
11:07:00.994 +00483ms finished default/webgpu {init: 16548, detect: 1527}
|
||||||
modelPath: facemesh.json,
|
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}}
|
||||||
keepInvalid: false
|
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}
|
||||||
attention: {
|
11:07:03.853 +00557ms finished sync/webgpu {init: 1630, detect: 183}
|
||||||
enabled: false,
|
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}}
|
||||||
modelPath: facemesh-attention.json
|
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}
|
||||||
iris: {
|
11:07:06.518 +00648ms finished none/webgpu {init: 1460, detect: 0}
|
||||||
enabled: true,
|
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}}
|
||||||
modelPath: iris.json
|
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}
|
||||||
emotion: {
|
11:07:12.218 +00726ms finished object/webgpu {init: 4218, detect: 132}
|
||||||
enabled: true,
|
11:07:12.949 +00731ms tests complete
|
||||||
minConfidence: 0.1,
|
11:07:13.682 +00733ms benchmark backend: wasm
|
||||||
skipFrames: 99,
|
11:07:16.242 +02560ms benchmark {time: 119, backend: wasm, cacheSensitivity: 0, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 100}}
|
||||||
skipTime: 1500,
|
11:07:18.127 +01885ms benchmark {time: 115, backend: wasm, cacheSensitivity: 0.25, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 100}}
|
||||||
modelPath: emotion.json
|
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}}
|
||||||
description: {
|
11:07:23.068 +01173ms benchmark {time: 42, backend: wasm, cacheSensitivity: 10, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 8, cacheCheck: 0, total: 100}}
|
||||||
enabled: true,
|
11:07:23.812 +00744ms total wasm {detect: 8759, init: 614}
|
||||||
modelPath: faceres.json,
|
11:07:24.570 +00758ms benchmark backend: humangl
|
||||||
skipFrames: 99,
|
11:07:50.315 +25745ms benchmark {time: 1906, backend: humangl, cacheSensitivity: 0, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 1665}}
|
||||||
skipTime: 3000,
|
11:07:59.982 +09667ms benchmark {time: 890, backend: humangl, cacheSensitivity: 0.25, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 2, cacheCheck: 69, total: 2119}}
|
||||||
minConfidence: 0.1
|
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}}
|
||||||
antispoof: {
|
11:08:37.017 +10001ms benchmark {time: 921, backend: humangl, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 10, cacheCheck: 97, total: 902}}
|
||||||
enabled: false,
|
11:08:37.810 +00793ms total humangl {detect: 66559, init: 5882}
|
||||||
skipFrames: 99,
|
11:08:38.601 +00791ms benchmark backend: webgl
|
||||||
skipTime: 4000,
|
11:09:01.515 +22914ms benchmark {time: 1620, backend: webgl, cacheSensitivity: 0, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 1481}}
|
||||||
modelPath: antispoof.json
|
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}}
|
||||||
liveness: {
|
11:09:20.005 +01438ms benchmark {time: 64, backend: webgl, cacheSensitivity: 0.75, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 7, cacheCheck: 5, total: 44}}
|
||||||
enabled: false,
|
11:09:21.384 +01379ms benchmark {time: 56, backend: webgl, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 10, cacheCheck: 5, total: 41}}
|
||||||
skipFrames: 99,
|
11:09:22.195 +00811ms total webgl {detect: 36875, init: 5913}
|
||||||
skipTime: 4000,
|
11:09:23.018 +00823ms benchmark backend: webgpu
|
||||||
modelPath: liveness.json
|
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}}
|
||||||
body: {
|
11:09:29.563 +01362ms benchmark {time: 53, backend: webgpu, cacheSensitivity: 0.75, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 3, total: 38}}
|
||||||
enabled: true,
|
11:09:30.759 +01196ms benchmark {time: 34, backend: webgpu, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 8, cacheCheck: 3, total: 39}}
|
||||||
modelPath: movenet-lightning.json,
|
11:09:31.597 +00838ms total webgpu {detect: 7264, init: 462}
|
||||||
maxDetected: -1,
|
11:09:32.439 +00842ms benchmarks complete
|
||||||
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: 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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
10:13:35.838 +00311ms 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: 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}]
|
|
||||||
10:13:35.871 +00033ms
|
|
||||||
10:13:35.903 +00032ms test start: wasm
|
|
||||||
10:13:36.129 +00226ms desired wasm detected wasm
|
|
||||||
10:13:36.162 +00033ms memory {unreliable: false, numTensors: 1763, numDataBuffers: 1763, numBytes: 60948232}
|
|
||||||
10:13:36.196 +00034ms validate []
|
|
||||||
10:13:37.456 +01260ms warmup face
|
|
||||||
10:13:37.559 +00103ms input [1, 1200, 1200, 3]
|
|
||||||
10:13:38.433 +00874ms detect
|
|
||||||
10:13:38.471 +00038ms interpolate
|
|
||||||
10:13:38.522 +00051ms persons
|
|
||||||
10:13:38.558 +00036ms summary {persons: 1, face: 1, body: 1, hand: 1, object: 1, gesture: 8}
|
|
||||||
10:13:38.595 +00037ms performance {initBackend: 181, loadModels: 285, inputProcess: 1, totalFrames: 2, cachedFrames: 0, cacheCheck: 0, total: 833, warmup: 1227}
|
|
||||||
10:13:39.730 +01135ms benchmark {time: 109, cacheSensitivity: 0, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 50}}
|
|
||||||
10:13:40.410 +00680ms benchmark {time: 65, cacheSensitivity: 0.25, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 51}}
|
|
||||||
10:13:41.083 +00673ms benchmark {time: 64, cacheSensitivity: 0.5, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 49}}
|
|
||||||
10:13:41.758 +00675ms benchmark {time: 64, cacheSensitivity: 0.75, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 48}}
|
|
||||||
10:13:42.121 +00363ms benchmark {time: 33, cacheSensitivity: 10, performance: {inputProcess: 2, totalFrames: 10, cachedFrames: 8, cacheCheck: 0, total: 48}}
|
|
||||||
10:13:42.160 +00039ms memory {unreliable: false, numTensors: 1764, numDataBuffers: 1764, numBytes: 61734664}
|
|
||||||
10:13:42.189 +00029ms
|
|
||||||
10:13:42.219 +00030ms test start: humangl
|
|
||||||
10:13:42.253 +00034ms desired humangl detected humangl
|
|
||||||
10:13:42.281 +00028ms memory {unreliable: false, numBytesInGPU: 0, numBytesInGPUAllocated: 0, numBytesInGPUFree: 0, numTensors: 1770, numDataBuffers: 1770, numBytes: 61734696}
|
|
||||||
10:13:42.311 +00030ms validate []
|
|
||||||
10:13:44.370 +02059ms warmup face
|
|
||||||
10:13:44.433 +00063ms input [1, 1200, 1200, 3]
|
|
||||||
10:13:46.227 +01794ms detect
|
|
||||||
10:13:46.260 +00033ms interpolate
|
|
||||||
10:13:46.301 +00041ms persons
|
|
||||||
10:13:46.329 +00028ms summary {persons: 0, face: 0, body: 1, hand: 0, object: 0, gesture: 0}
|
|
||||||
10:13:46.359 +00030ms performance {inputProcess: 0, totalFrames: 12, cachedFrames: 9, cacheCheck: 0, total: 1762, initBackend: 0, warmup: 2026}
|
|
||||||
10:13:48.486 +02127ms benchmark {time: 209, cacheSensitivity: 0, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 56}}
|
|
||||||
10:13:49.281 +00795ms benchmark {time: 75, cacheSensitivity: 0.25, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 5, total: 57}}
|
|
||||||
10:13:50.135 +00854ms benchmark {time: 81, cacheSensitivity: 0.5, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 4, total: 64}}
|
|
||||||
10:13:51.047 +00912ms benchmark {time: 87, cacheSensitivity: 0.75, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 5, total: 63}}
|
|
||||||
10:13:51.637 +00590ms benchmark {time: 55, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 8, cacheCheck: 5, total: 61}}
|
|
||||||
10:13:51.687 +00050ms memory {unreliable: false, numBytesInGPU: 56099560, numBytesInGPUAllocated: 701598940, numBytesInGPUFree: 645499380, numTensors: 1770, numDataBuffers: 1770, numBytes: 61734696}
|
|
||||||
10:13:51.725 +00038ms
|
|
||||||
10:13:51.758 +00033ms test start: webgl
|
|
||||||
10:13:51.804 +00046ms desired webgl detected webgl
|
|
||||||
10:13:51.845 +00041ms memory {unreliable: false, numBytesInGPU: 0, numBytesInGPUAllocated: 0, numBytesInGPUFree: 0, numTensors: 1776, numDataBuffers: 1776, numBytes: 61734728}
|
|
||||||
10:13:51.893 +00048ms validate []
|
|
||||||
10:13:57.083 +05190ms warmup face
|
|
||||||
10:13:57.160 +00077ms input [1, 1200, 1200, 3]
|
|
||||||
10:13:57.876 +00716ms detect
|
|
||||||
10:13:57.916 +00040ms interpolate
|
|
||||||
10:13:57.960 +00044ms persons
|
|
||||||
10:13:58.003 +00043ms summary {persons: 1, face: 1, body: 1, hand: 0, object: 0, gesture: 1}
|
|
||||||
10:13:58.048 +00045ms performance {inputProcess: 0, totalFrames: 12, cachedFrames: 9, cacheCheck: 0, total: 668, initBackend: 0, warmup: 5146}
|
|
||||||
10:13:59.556 +01508ms benchmark {time: 146, cacheSensitivity: 0, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 122}}
|
|
||||||
10:14:01.012 +01456ms benchmark {time: 140, cacheSensitivity: 0.25, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 6, total: 130}}
|
|
||||||
10:14:02.436 +01424ms benchmark {time: 137, cacheSensitivity: 0.5, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 5, total: 127}}
|
|
||||||
10:14:03.931 +01495ms benchmark {time: 144, cacheSensitivity: 0.75, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 4, total: 137}}
|
|
||||||
10:14:04.695 +00764ms benchmark {time: 70, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 8, cacheCheck: 5, total: 134}}
|
|
||||||
10:14:04.756 +00061ms memory {unreliable: false, numBytesInGPU: 56099560, numBytesInGPUAllocated: 701598940, numBytesInGPUFree: 645499380, numTensors: 1776, numDataBuffers: 1776, numBytes: 61734728}
|
|
||||||
10:14:04.810 +00054ms
|
|
||||||
10:14:04.865 +00055ms test start: webgpu
|
|
||||||
10:14:04.956 +00091ms desired webgpu detected webgpu
|
|
||||||
10:14:05.012 +00056ms memory {numBytesInGPU: 0, numBytesAllocatedInGPU: 0, unreliable: false, numTensors: 1782, numDataBuffers: 1782, numBytes: 61734760}
|
|
||||||
10:14:05.068 +00056ms validate []
|
|
||||||
10:14:18.964 +13896ms warmup face
|
|
||||||
10:14:19.032 +00068ms input [1, 1200, 1200, 3]
|
|
||||||
10:14:20.109 +01077ms detect
|
|
||||||
10:14:20.166 +00057ms interpolate
|
|
||||||
10:14:20.224 +00058ms persons
|
|
||||||
10:14:20.275 +00051ms summary {persons: 1, face: 1, body: 1, hand: 0, object: 0, gesture: 1}
|
|
||||||
10:14:20.329 +00054ms performance {inputProcess: 0, totalFrames: 12, cachedFrames: 9, cacheCheck: 0, total: 1025, initBackend: 33, warmup: 13840}
|
|
||||||
10:14:23.824 +03495ms benchmark {time: 343, cacheSensitivity: 0, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 0, total: 81}}
|
|
||||||
10:14:24.663 +00839ms benchmark {time: 77, cacheSensitivity: 0.25, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 15, total: 82}}
|
|
||||||
10:14:25.583 +00920ms benchmark {time: 85, cacheSensitivity: 0.5, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 10, total: 81}}
|
|
||||||
10:14:26.502 +00919ms benchmark {time: 85, cacheSensitivity: 0.75, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 0, cacheCheck: 12, total: 85}}
|
|
||||||
10:14:27.041 +00539ms benchmark {time: 46, cacheSensitivity: 10, performance: {inputProcess: 0, totalFrames: 10, cachedFrames: 8, cacheCheck: 9, total: 86}}
|
|
||||||
10:14:27.123 +00082ms memory {numBytesInGPU: 53317336, numBytesAllocatedInGPU: 402350412, unreliable: false, numTensors: 1782, numDataBuffers: 41789, numBytes: 61734760}
|
|
||||||
10:14:27.193 +00070ms
|
|
||||||
10:14:27.261 +00068ms tests complete
|
|
||||||
|
|
|
@ -1,39 +1,39 @@
|
||||||
2022-08-30 10:28:42 [32mDATA: [39m Build {"name":"@vladmandic/human","version":"2.9.4"}
|
2022-08-31 11:27:08 [32mDATA: [39m Build {"name":"@vladmandic/human","version":"2.9.4"}
|
||||||
2022-08-30 10:28:42 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.9.4"}
|
2022-08-31 11:27:08 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.9.4"}
|
||||||
2022-08-30 10:28:42 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
2022-08-31 11:27:08 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||||
2022-08-30 10:28:42 [36mINFO: [39m Toolchain: {"build":"0.7.11","esbuild":"0.15.6","typescript":"4.8.2","typedoc":"0.23.11","eslint":"8.23.0"}
|
2022-08-31 11:27:08 [36mINFO: [39m Toolchain: {"build":"0.7.11","esbuild":"0.15.6","typescript":"4.8.2","typedoc":"0.23.12","eslint":"8.23.0"}
|
||||||
2022-08-30 10:28:42 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
2022-08-31 11:27:08 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||||
2022-08-30 10:28:42 [35mSTATE:[39m Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]}
|
2022-08-31 11:27:08 [35mSTATE:[39m Clean: {"locations":["dist/*","types/lib/*","typedoc/*"]}
|
||||||
2022-08-30 10:28:42 [35mSTATE:[39m 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 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":75,"inputBytes":655263,"outputBytes":308144}
|
2022-08-31 11:27:08 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m 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 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":75,"inputBytes":655267,"outputBytes":308148}
|
2022-08-31 11:27:08 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m 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 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":75,"inputBytes":655319,"outputBytes":308198}
|
2022-08-31 11:27:08 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m 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 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m 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:08 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":75,"inputBytes":655238,"outputBytes":307019}
|
2022-08-31 11:27:09 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m 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":2879073}
|
2022-08-31 11:27:09 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":75,"inputBytes":3533728,"outputBytes":1707671}
|
2022-08-31 11:27:09 [35mSTATE:[39m 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-30 10:28:42 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":75,"inputBytes":3533728,"outputBytes":3156709}
|
2022-08-31 11:27:09 [35mSTATE:[39m 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-30 10:28:47 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types/lib","files":30}
|
2022-08-31 11:27:13 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types/lib","files":30}
|
||||||
2022-08-30 10:28:49 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true}
|
2022-08-31 11:27:15 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true}
|
||||||
2022-08-30 10:28:49 [35mSTATE:[39m 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 [35mSTATE:[39m 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-30 10:28:49 [35mSTATE:[39m 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:15 [35mSTATE:[39m 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-30 10:28:59 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":111,"errors":0,"warnings":0}
|
2022-08-31 11:27:25 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":111,"errors":0,"warnings":0}
|
||||||
2022-08-30 10:28:59 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
2022-08-31 11:27:25 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||||
2022-08-30 10:28:59 [35mSTATE:[39m Copy: {"input":"tfjs/tfjs.esm.d.ts"}
|
2022-08-31 11:27:25 [35mSTATE:[39m Copy: {"input":"tfjs/tfjs.esm.d.ts"}
|
||||||
2022-08-30 10:28:59 [36mINFO: [39m Done...
|
2022-08-31 11:27:25 [36mINFO: [39m Done...
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m API-Extractor: {"succeeeded":true,"errors":0,"warnings":198}
|
2022-08-31 11:27:26 [35mSTATE:[39m API-Extractor: {"succeeeded":true,"errors":0,"warnings":198}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Copy: {"input":"types/human.d.ts"}
|
2022-08-31 11:27:26 [35mSTATE:[39m Copy: {"input":"types/human.d.ts"}
|
||||||
2022-08-30 10:29:00 [36mINFO: [39m Analyze models: {"folders":8,"result":"models/models.json"}
|
2022-08-31 11:27:26 [36mINFO: [39m Analyze models: {"folders":8,"result":"models/models.json"}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Models {"folder":"./models","models":13}
|
2022-08-31 11:27:26 [35mSTATE:[39m Models {"folder":"./models","models":13}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Models {"folder":"../human-models/models","models":42}
|
2022-08-31 11:27:26 [35mSTATE:[39m Models {"folder":"../human-models/models","models":42}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Models {"folder":"../blazepose/model/","models":4}
|
2022-08-31 11:27:26 [35mSTATE:[39m Models {"folder":"../blazepose/model/","models":4}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Models {"folder":"../anti-spoofing/model","models":1}
|
2022-08-31 11:27:26 [35mSTATE:[39m Models {"folder":"../anti-spoofing/model","models":1}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Models {"folder":"../efficientpose/models","models":3}
|
2022-08-31 11:27:26 [35mSTATE:[39m Models {"folder":"../efficientpose/models","models":3}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Models {"folder":"../insightface/models","models":5}
|
2022-08-31 11:27:26 [35mSTATE:[39m Models {"folder":"../insightface/models","models":5}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Models {"folder":"../movenet/models","models":3}
|
2022-08-31 11:27:26 [35mSTATE:[39m Models {"folder":"../movenet/models","models":3}
|
||||||
2022-08-30 10:29:00 [35mSTATE:[39m Models {"folder":"../nanodet/models","models":4}
|
2022-08-31 11:27:26 [35mSTATE:[39m Models {"folder":"../nanodet/models","models":4}
|
||||||
2022-08-30 10:29:01 [35mSTATE:[39m Models: {"count":57,"totalSize":383017442}
|
2022-08-31 11:27:27 [35mSTATE:[39m Models: {"count":57,"totalSize":383017442}
|
||||||
2022-08-30 10:29:01 [36mINFO: [39m Human Build complete... {"logFile":"test/build.log"}
|
2022-08-31 11:27:27 [36mINFO: [39m Human Build complete... {"logFile":"test/build.log"}
|
||||||
|
|
1999
test/test.log
1999
test/test.log
File diff suppressed because it is too large
Load Diff
|
@ -1109,6 +1109,7 @@ ul.tsd-type-parameter-list h5 {
|
||||||
background: var(--color-background-secondary);
|
background: var(--color-background-secondary);
|
||||||
border-bottom: 1px var(--color-accent) solid;
|
border-bottom: 1px var(--color-accent) solid;
|
||||||
transition: transform 0.3s ease-in-out;
|
transition: transform 0.3s ease-in-out;
|
||||||
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
.tsd-page-toolbar a {
|
.tsd-page-toolbar a {
|
||||||
color: var(--color-text);
|
color: var(--color-text);
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue