modularize build platform

pull/134/head
Vladimir Mandic 2021-06-06 20:34:29 -04:00
parent 3eb4ae69fa
commit 93f3b159f7
21 changed files with 4738 additions and 239745 deletions

View File

@ -6,3 +6,4 @@ test
wiki
dist/tfjs.esm.js
dist/tfjs.esm.js.map
types/dist/tfjs.esm.d.ts

View File

@ -9,6 +9,9 @@ Repository: **<git+https://github.com/vladmandic/human.git>**
## Changelog
### **HEAD -> main** 2021/06/06 mandic00@live.com
### **update wasm to tfjs 3.7.0** 2021/06/06 mandic00@live.com
- modularize build platform

View File

@ -753,11 +753,19 @@ async function processDataURL(f, action) {
image.onerror = async () => status('image loading error');
image.onload = async () => {
ui.background = image;
document.getElementById('canvas').style.display = 'block';
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const overlaid = await human.segmentation(canvas, ui.background, userConfig);
if (overlaid) ctx.drawImage(overlaid, 0, 0);
if (document.getElementById('canvas').style.display === 'block') { // replace canvas used for video
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const overlaid = await human.segmentation(canvas, ui.background, userConfig);
if (overlaid) ctx.drawImage(overlaid, 0, 0);
} else {
const canvases = document.getElementById('samples-container').children; // replace loaded images
for (const canvas of canvases) {
const ctx = canvas.getContext('2d');
const overlaid = await human.segmentation(canvas, ui.background, userConfig);
if (overlaid) ctx.drawImage(overlaid, 0, 0);
}
}
};
image.src = dataURL;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

80207
dist/human.esm.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

80217
dist/human.js vendored

File diff suppressed because one or more lines are too long

72612
dist/tfjs.esm.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -23,7 +23,7 @@
"scripts": {
"start": "node --trace-warnings --unhandled-rejections=strict --trace-uncaught demo/node.js",
"dev": "node --trace-warnings --unhandled-rejections=strict --trace-uncaught server/serve.js",
"build": "rimraf dist/* typedoc/* types/* && node --trace-warnings --unhandled-rejections=strict --trace-uncaught server/build.js",
"build": "node --trace-warnings --unhandled-rejections=strict --trace-uncaught server/build.js",
"lint": "eslint src server demo test",
"test": "node --trace-warnings --unhandled-rejections=strict --trace-uncaught test/test.js",
"scan": "npx auditjs@latest ossi --dev --quiet"

View File

@ -7,6 +7,7 @@ const fs = require('fs');
const path = require('path');
const log = require('@vladmandic/pilogger');
const esbuild = require('esbuild');
const rimraf = require('rimraf');
const tfjs = require('@tensorflow/tfjs/package.json');
const changelog = require('./changelog.js');
const lint = require('./lint.js');
@ -42,6 +43,7 @@ const config = {
buildLog: 'build.log',
changelog: '../CHANGELOG.md',
lintLocations: ['server/', 'src/', 'tfjs/', 'test/', 'demo/'],
cleanLocations: ['dist/*', 'types/*', 'typedoc/*'],
};
const targets = {
@ -226,8 +228,8 @@ async function build(f, msg, dev = false) {
}
if (!dev) { // only for prod builds, skipped for dev build
await lint.run(config.lintLocations); // run linter
await typings.run(targets.browserBundle.esm.entryPoints); // generate typings
await changelog.update(config.changelog); // generate changelog
await typings.run(targets.browserBundle.esm.entryPoints); // generate typings
await typedoc.run(targets.browserBundle.esm.entryPoints); // generate typedoc
}
if (require.main === module) process.exit(0);
@ -239,12 +241,18 @@ async function build(f, msg, dev = false) {
busy = false;
}
function clean() {
log.info('Clean:', config.cleanLocations);
for (const loc of config.cleanLocations) rimraf.sync(loc);
}
if (require.main === module) {
config.buildLog = path.join(__dirname, config.buildLog);
if (fs.existsSync(config.buildLog)) fs.unlinkSync(config.buildLog);
log.logFile(config.buildLog);
log.header();
log.info(`Toolchain: tfjs: ${tfjs.version} esbuild ${esbuild.version}; typescript ${typings.version}; typedoc: ${typedoc.version} eslint: ${lint.version}`);
clean();
build('all', 'startup');
} else {
exports.build = build;

View File

@ -1,21 +1,22 @@
2021-06-06 18:44:28 INFO:  @vladmandic/human version 2.0.0
2021-06-06 18:44:28 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.0.0
2021-06-06 18:44:28 INFO:  Toolchain: tfjs: 3.7.0 esbuild 0.12.6; typescript 4.2.4; typedoc: 0.20.36 eslint: 7.27.0
2021-06-06 18:44:28 INFO:  Build: file startup all type: production config: {"minifyWhitespace":true,"minifyIdentifiers":true,"minifySyntax":true}
2021-06-06 18:44:28 STATE: target: node type: tfjs: {"imports":1,"importBytes":102,"outputBytes":1303,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 18:44:28 STATE: target: node type: node: {"imports":41,"importBytes":430506,"outputBytes":376423,"outputFiles":"dist/human.node.js"}
2021-06-06 18:44:28 STATE: target: nodeGPU type: tfjs: {"imports":1,"importBytes":110,"outputBytes":1311,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 18:44:29 STATE: target: nodeGPU type: node: {"imports":41,"importBytes":430514,"outputBytes":376427,"outputFiles":"dist/human.node-gpu.js"}
2021-06-06 18:44:29 STATE: target: nodeWASM type: tfjs: {"imports":1,"importBytes":149,"outputBytes":1378,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 18:44:29 STATE: target: nodeWASM type: node: {"imports":41,"importBytes":430581,"outputBytes":376499,"outputFiles":"dist/human.node-wasm.js"}
2021-06-06 18:44:29 STATE: target: browserNoBundle type: tfjs: {"imports":1,"importBytes":2938,"outputBytes":1214,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 18:44:29 STATE: target: browserNoBundle type: esm: {"imports":41,"importBytes":430417,"outputBytes":247743,"outputFiles":"dist/human.esm-nobundle.js"}
2021-06-06 18:44:29 STATE: target: browserBundle type: tfjs: {"modules":1684,"moduleBytes":5720341,"imports":7,"importBytes":2938,"outputBytes":1342379,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 18:44:29 STATE: target: browserBundle type: iife: {"imports":41,"importBytes":1771582,"outputBytes":1586144,"outputFiles":"dist/human.js"}
2021-06-06 18:44:30 STATE: target: browserBundle type: esm: {"imports":41,"importBytes":1771582,"outputBytes":1586136,"outputFiles":"dist/human.esm.js"}
2021-06-06 18:44:30 INFO:  Running Linter: ["server/","demo/","src/","test/"]
2021-06-06 18:44:54 INFO:  Linter complete: files: 67 errors: 0 warnings: 0
2021-06-06 18:44:54 INFO:  Generate Typings: ["src/human.ts"] outDir: ["types"]
2021-06-06 18:45:10 INFO:  Generate ChangeLog: ["/home/vlado/dev/human/CHANGELOG.md"]
2021-06-06 18:45:10 INFO:  Generate TypeDocs: ["src/human.ts"] outDir: ["typedoc"]
2021-06-06 18:45:23 INFO:  Documentation generated at /home/vlado/dev/human/typedoc 1
2021-06-06 20:24:49 INFO:  @vladmandic/human version 2.0.0
2021-06-06 20:24:49 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.0.0
2021-06-06 20:24:49 INFO:  Toolchain: tfjs: 3.7.0 esbuild 0.12.6; typescript 4.2.4; typedoc: 0.20.36 eslint: 7.27.0
2021-06-06 20:24:49 INFO:  Clean: ["dist/*","types/*","typedoc/*"]
2021-06-06 20:24:49 INFO:  Build: file startup all type: production config: {"minifyWhitespace":true,"minifyIdentifiers":true,"minifySyntax":true}
2021-06-06 20:24:49 STATE: target: node type: tfjs: {"imports":1,"importBytes":102,"outputBytes":1303,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 20:24:49 STATE: target: node type: node: {"imports":41,"importBytes":430471,"outputBytes":376423,"outputFiles":"dist/human.node.js"}
2021-06-06 20:24:49 STATE: target: nodeGPU type: tfjs: {"imports":1,"importBytes":110,"outputBytes":1311,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 20:24:50 STATE: target: nodeGPU type: node: {"imports":41,"importBytes":430479,"outputBytes":376427,"outputFiles":"dist/human.node-gpu.js"}
2021-06-06 20:24:50 STATE: target: nodeWASM type: tfjs: {"imports":1,"importBytes":149,"outputBytes":1378,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 20:24:50 STATE: target: nodeWASM type: node: {"imports":41,"importBytes":430546,"outputBytes":376499,"outputFiles":"dist/human.node-wasm.js"}
2021-06-06 20:24:50 STATE: target: browserNoBundle type: tfjs: {"imports":1,"importBytes":2938,"outputBytes":1214,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 20:24:50 STATE: target: browserNoBundle type: esm: {"imports":41,"importBytes":430382,"outputBytes":247743,"outputFiles":"dist/human.esm-nobundle.js"}
2021-06-06 20:24:50 STATE: target: browserBundle type: tfjs: {"modules":1684,"moduleBytes":5720341,"imports":7,"importBytes":2938,"outputBytes":1342379,"outputFiles":"dist/tfjs.esm.js"}
2021-06-06 20:24:51 STATE: target: browserBundle type: iife: {"imports":41,"importBytes":1771547,"outputBytes":1586144,"outputFiles":"dist/human.js"}
2021-06-06 20:24:51 STATE: target: browserBundle type: esm: {"imports":41,"importBytes":1771547,"outputBytes":1586136,"outputFiles":"dist/human.esm.js"}
2021-06-06 20:24:51 INFO:  Running Linter: ["server/","src/","tfjs/","test/","demo/"]
2021-06-06 20:25:16 INFO:  Linter complete: files: 71 errors: 0 warnings: 0
2021-06-06 20:25:16 INFO:  Generate Typings: ["src/human.ts"] outDir: ["types"]
2021-06-06 20:25:31 INFO:  Generate TypeDocs: ["src/human.ts"] outDir: ["typedoc"]
2021-06-06 20:25:45 INFO:  Documentation generated at /home/vlado/dev/human/typedoc 1
2021-06-06 20:25:45 INFO:  Generate ChangeLog: ["/home/vlado/dev/human/CHANGELOG.md"]

View File

@ -1,18 +1,15 @@
const ts = require('typescript');
const log = require('@vladmandic/pilogger');
const tsconfig = require('../tsconfig.json');
const version = ts.version;
async function typings(entryPoint) {
log.info('Generate Typings:', entryPoint, 'outDir:', [tsconfig.compilerOptions.outDir]);
const tsoptions = { ...tsconfig.compilerOptions,
target: ts.ScriptTarget.ES2018,
module: ts.ModuleKind.ES2020,
moduleResolution: ts.ModuleResolutionKind.NodeJs,
};
const compilerHost = ts.createCompilerHost(tsoptions);
const program = ts.createProgram(entryPoint, tsoptions, compilerHost);
const configFileName = ts.findConfigFile('./', ts.sys.fileExists, 'tsconfig.json') || '';
const configFile = ts.readConfigFile(configFileName, ts.sys.readFile);
const compilerOptions = ts.parseJsonConfigFileContent(configFile.config, ts.sys, './');
log.info('Generate Typings:', entryPoint, 'outDir:', [compilerOptions.options.outDir]);
const compilerHost = ts.createCompilerHost(compilerOptions.options);
const program = ts.createProgram(entryPoint, compilerOptions.options, compilerHost);
const emit = program.emit();
const diag = ts
.getPreEmitDiagnostics(program)
@ -29,5 +26,10 @@ async function typings(entryPoint) {
}
}
exports.run = typings;
exports.version = version;
if (require.main === module) {
log.header();
typings(['src/human.ts']); // generate typedoc
} else {
exports.run = typings;
exports.version = version;
}

View File

@ -16,10 +16,11 @@ let skipped = Number.MAX_SAFE_INTEGER;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export async function load(config: Config | any) {
if (!model) {
// @ts-ignore type mismatch on GraphModel
model = await tf.loadGraphModel(join(config.modelBasePath, config.face.age.modelPath));
if (!model || !model.modelUrl) log('load model failed:', config.face.age.modelPath);
else if (config.debug) log('load model:', model.modelUrl);
} else if (config.debug) log('cached model:', model.modelUrl);
if (!model || !model['modelUrl']) log('load model failed:', config.face.age.modelPath);
else if (config.debug) log('load model:', model['modelUrl']);
} else if (config.debug) log('cached model:', model['modelUrl']);
return model;
}
@ -32,6 +33,7 @@ export async function predict(image: Tensor, config: Config | any) {
}
skipped = 0;
return new Promise(async (resolve) => {
if (!model.inputs[0].shape) return;
const resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);
const enhance = tf.mul(resize, [255.0]);
tf.dispose(resize);

View File

@ -19,11 +19,12 @@ const rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export async function load(config: Config | any) {
if (!model) {
// @ts-ignore type mismatch on GraphModel
model = await tf.loadGraphModel(join(config.modelBasePath, config.face.gender.modelPath));
alternative = model.inputs[0].shape[3] === 1;
if (!model || !model.modelUrl) log('load model failed:', config.face.gender.modelPath);
else if (config.debug) log('load model:', model.modelUrl);
} else if (config.debug) log('cached model:', model.modelUrl);
alternative = model.inputs[0].shape ? model.inputs[0]?.shape[3] === 1 : false;
if (!model || !model['modelUrl']) log('load model failed:', config.face.gender.modelPath);
else if (config.debug) log('load model:', model['modelUrl']);
} else if (config.debug) log('cached model:', model['modelUrl']);
return model;
}
@ -36,6 +37,7 @@ export async function predict(image: Tensor, config: Config | any) {
}
skipped = 0;
return new Promise(async (resolve) => {
if (!model.inputs[0].shape) return;
const resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);
let enhance;
if (alternative) {

View File

@ -1,120 +1,169 @@
2021-06-06 18:58:06 INFO:  @vladmandic/human version 2.0.0
2021-06-06 18:58:06 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.0.0
2021-06-06 18:58:06 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"]
2021-06-06 18:58:06 INFO:  test-node.js start
2021-06-06 18:58:07 STATE: test-node.js passed: create human
2021-06-06 18:58:07 INFO:  test-node.js human version: 2.0.0
2021-06-06 18:58:07 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.0.0
2021-06-06 18:58:07 INFO:  test-node.js tfjs version: 3.7.0
2021-06-06 18:58:07 STATE: test-node.js passed: set backend: tensorflow
2021-06-06 18:58:07 STATE: test-node.js passed: load models
2021-06-06 18:58:07 STATE: test-node.js result: defined models: 14 loaded models: 7
2021-06-06 18:58:07 STATE: test-node.js passed: warmup: none default
2021-06-06 18:58:09 STATE: test-node.js passed: warmup: face default
2021-06-06 18:58:09 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":5}
2021-06-06 18:58:09 DATA:  test-node.js result: performance: load: 298 total: 1226
2021-06-06 18:58:10 STATE: test-node.js passed: warmup: body default
2021-06-06 18:58:10 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 18:58:10 DATA:  test-node.js result: performance: load: 298 total: 1153
2021-06-06 18:58:10 INFO:  test-node.js test body variants
2021-06-06 18:58:11 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 18:58:11 STATE: test-node.js passed: detect: samples/ai-body.jpg posenet
2021-06-06 18:58:11 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.96,"keypoints":16}
2021-06-06 18:58:11 DATA:  test-node.js result: performance: load: 298 total: 789
2021-06-06 18:58:12 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 18:58:12 STATE: test-node.js passed: detect: samples/ai-body.jpg movenet
2021-06-06 18:58:12 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 18:58:12 DATA:  test-node.js result: performance: load: 298 total: 229
2021-06-06 18:58:13 STATE: test-node.js passed: detect: random default
2021-06-06 18:58:13 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0}
2021-06-06 18:58:13 DATA:  test-node.js result: performance: load: 298 total: 669
2021-06-06 18:58:13 INFO:  test-node.js test: first instance
2021-06-06 18:58:14 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 18:58:15 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-06-06 18:58:15 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.78,"keypoints":7}
2021-06-06 18:58:15 DATA:  test-node.js result: performance: load: 298 total: 977
2021-06-06 18:58:15 INFO:  test-node.js test: second instance
2021-06-06 18:58:15 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 18:58:16 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-06-06 18:58:16 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.78,"keypoints":7}
2021-06-06 18:58:16 DATA:  test-node.js result: performance: load: 2 total: 923
2021-06-06 18:58:16 INFO:  test-node.js test: concurrent
2021-06-06 18:58:16 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 18:58:16 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 18:58:17 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 18:58:18 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 18:58:22 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-06-06 18:58:22 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":17}
2021-06-06 18:58:22 DATA:  test-node.js result: performance: load: 298 total: 4147
2021-06-06 18:58:22 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-06-06 18:58:22 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":17}
2021-06-06 18:58:22 DATA:  test-node.js result: performance: load: 2 total: 4147
2021-06-06 18:58:22 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-06-06 18:58:22 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 18:58:22 DATA:  test-node.js result: performance: load: 298 total: 4147
2021-06-06 18:58:22 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-06-06 18:58:22 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 18:58:22 DATA:  test-node.js result: performance: load: 2 total: 4147
2021-06-06 18:58:22 INFO:  test-node.js test complete: 14795 ms
2021-06-06 18:58:22 INFO:  test-node-gpu.js start
2021-06-06 18:58:22 WARN:  test-node-gpu.js stderr: 2021-06-06 18:58:22.766663: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2021-06-06 18:58:22 WARN:  test-node-gpu.js stderr: 2021-06-06 18:58:22.810895: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2021-06-06 18:58:22 WARN:  test-node-gpu.js stderr: 2021-06-06 18:58:22.810998: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (wyse): /proc/driver/nvidia/version does not exist
2021-06-06 18:58:22 STATE: test-node-gpu.js passed: create human
2021-06-06 18:58:22 INFO:  test-node-gpu.js human version: 2.0.0
2021-06-06 18:58:22 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.0.0
2021-06-06 18:58:22 INFO:  test-node-gpu.js tfjs version: 3.7.0
2021-06-06 18:58:23 STATE: test-node-gpu.js passed: set backend: tensorflow
2021-06-06 18:58:23 STATE: test-node-gpu.js passed: load models
2021-06-06 18:58:23 STATE: test-node-gpu.js result: defined models: 14 loaded models: 7
2021-06-06 18:58:23 STATE: test-node-gpu.js passed: warmup: none default
2021-06-06 18:58:24 STATE: test-node-gpu.js passed: warmup: face default
2021-06-06 18:58:24 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":5}
2021-06-06 18:58:24 DATA:  test-node-gpu.js result: performance: load: 290 total: 1188
2021-06-06 18:58:25 STATE: test-node-gpu.js passed: warmup: body default
2021-06-06 18:58:25 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 18:58:25 DATA:  test-node-gpu.js result: performance: load: 290 total: 1158
2021-06-06 18:58:25 INFO:  test-node-gpu.js test body variants
2021-06-06 18:58:26 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 18:58:27 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg posenet
2021-06-06 18:58:27 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.96,"keypoints":16}
2021-06-06 18:58:27 DATA:  test-node-gpu.js result: performance: load: 290 total: 797
2021-06-06 18:58:28 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 18:58:28 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg movenet
2021-06-06 18:58:28 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 18:58:28 DATA:  test-node-gpu.js result: performance: load: 290 total: 209
2021-06-06 18:58:28 STATE: test-node-gpu.js passed: detect: random default
2021-06-06 18:58:28 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 1 person: 0 {} {"score":0.72,"class":"person"} {"score":0,"keypoints":0}
2021-06-06 18:58:28 DATA:  test-node-gpu.js result: performance: load: 290 total: 186
2021-06-06 18:58:28 INFO:  test-node-gpu.js test: first instance
2021-06-06 18:58:28 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 18:58:29 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-06-06 18:58:29 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 1 person: 0 {} {"score":0.72,"class":"person"} {"score":0.78,"keypoints":7}
2021-06-06 18:58:29 DATA:  test-node-gpu.js result: performance: load: 290 total: 127
2021-06-06 18:58:29 INFO:  test-node-gpu.js test: second instance
2021-06-06 18:58:29 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 18:58:30 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-06-06 18:58:30 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.78,"keypoints":7}
2021-06-06 18:58:30 DATA:  test-node-gpu.js result: performance: load: 2 total: 1032
2021-06-06 18:58:30 INFO:  test-node-gpu.js test: concurrent
2021-06-06 18:58:30 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 18:58:30 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 18:58:31 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 18:58:32 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 18:58:36 STATE: test-node-gpu.js passed: detect: samples/ai-face.jpg default
2021-06-06 18:58:36 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":17}
2021-06-06 18:58:36 DATA:  test-node-gpu.js result: performance: load: 290 total: 4052
2021-06-06 18:58:36 STATE: test-node-gpu.js passed: detect: samples/ai-face.jpg default
2021-06-06 18:58:36 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":17}
2021-06-06 18:58:36 DATA:  test-node-gpu.js result: performance: load: 2 total: 4052
2021-06-06 18:58:36 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-06-06 18:58:36 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 18:58:36 DATA:  test-node-gpu.js result: performance: load: 290 total: 4052
2021-06-06 18:58:36 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-06-06 18:58:36 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 18:58:36 DATA:  test-node-gpu.js result: performance: load: 2 total: 4052
2021-06-06 18:58:36 INFO:  test-node-gpu.js test complete: 13452 ms
2021-06-06 18:58:36 INFO:  test-node-wasm.js start
2021-06-06 18:58:36 ERROR: test-node-wasm.js failed: model server: request to http://localhost:10030/models/ failed, reason: connect ECONNREFUSED 127.0.0.1:10030
2021-06-06 18:58:36 ERROR: test-node-wasm.js aborting test
2021-06-06 18:58:36 INFO:  status: {"passed":46,"failed":1}
2021-06-06 20:23:38 INFO:  @vladmandic/human version 2.0.0
2021-06-06 20:23:38 INFO:  User: vlado Platform: linux Arch: x64 Node: v16.0.0
2021-06-06 20:23:38 INFO:  tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"]
2021-06-06 20:23:38 INFO:  test-node.js start
2021-06-06 20:23:39 STATE: test-node.js passed: create human
2021-06-06 20:23:39 INFO:  test-node.js human version: 2.0.0
2021-06-06 20:23:39 INFO:  test-node.js platform: linux x64 agent: NodeJS v16.0.0
2021-06-06 20:23:39 INFO:  test-node.js tfjs version: 3.7.0
2021-06-06 20:23:40 STATE: test-node.js passed: set backend: tensorflow
2021-06-06 20:23:40 STATE: test-node.js passed: load models
2021-06-06 20:23:40 STATE: test-node.js result: defined models: 14 loaded models: 7
2021-06-06 20:23:40 STATE: test-node.js passed: warmup: none default
2021-06-06 20:23:41 STATE: test-node.js passed: warmup: face default
2021-06-06 20:23:41 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":5}
2021-06-06 20:23:41 DATA:  test-node.js result: performance: load: 284 total: 1387
2021-06-06 20:23:42 STATE: test-node.js passed: warmup: body default
2021-06-06 20:23:42 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 20:23:42 DATA:  test-node.js result: performance: load: 284 total: 1325
2021-06-06 20:23:42 INFO:  test-node.js test body variants
2021-06-06 20:23:43 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:23:44 STATE: test-node.js passed: detect: samples/ai-body.jpg posenet
2021-06-06 20:23:44 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.96,"keypoints":16}
2021-06-06 20:23:44 DATA:  test-node.js result: performance: load: 284 total: 797
2021-06-06 20:23:45 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:23:45 STATE: test-node.js passed: detect: samples/ai-body.jpg movenet
2021-06-06 20:23:45 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 20:23:45 DATA:  test-node.js result: performance: load: 284 total: 207
2021-06-06 20:23:46 STATE: test-node.js passed: detect: random default
2021-06-06 20:23:46 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 1 person: 0 {} {"score":0.72,"class":"person"} {"score":0,"keypoints":0}
2021-06-06 20:23:46 DATA:  test-node.js result: performance: load: 284 total: 189
2021-06-06 20:23:46 INFO:  test-node.js test: first instance
2021-06-06 20:23:46 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 20:23:46 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-06-06 20:23:46 DATA:  test-node.js result: face: 0 body: 1 hand: 0 gesture: 1 object: 1 person: 0 {} {"score":0.72,"class":"person"} {"score":0.78,"keypoints":7}
2021-06-06 20:23:46 DATA:  test-node.js result: performance: load: 284 total: 120
2021-06-06 20:23:46 INFO:  test-node.js test: second instance
2021-06-06 20:23:46 STATE: test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 20:23:47 STATE: test-node.js passed: detect: samples/ai-upper.jpg default
2021-06-06 20:23:47 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.78,"keypoints":7}
2021-06-06 20:23:47 DATA:  test-node.js result: performance: load: 4 total: 971
2021-06-06 20:23:47 INFO:  test-node.js test: concurrent
2021-06-06 20:23:47 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 20:23:47 STATE: test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 20:23:48 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:23:49 STATE: test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:23:53 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-06-06 20:23:53 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":17}
2021-06-06 20:23:53 DATA:  test-node.js result: performance: load: 284 total: 4150
2021-06-06 20:23:53 STATE: test-node.js passed: detect: samples/ai-face.jpg default
2021-06-06 20:23:53 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":17}
2021-06-06 20:23:53 DATA:  test-node.js result: performance: load: 4 total: 4150
2021-06-06 20:23:53 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-06-06 20:23:53 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 20:23:53 DATA:  test-node.js result: performance: load: 284 total: 4150
2021-06-06 20:23:53 STATE: test-node.js passed: detect: samples/ai-body.jpg default
2021-06-06 20:23:53 DATA:  test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 20:23:53 DATA:  test-node.js result: performance: load: 4 total: 4150
2021-06-06 20:23:53 INFO:  test-node.js test complete: 13854 ms
2021-06-06 20:23:53 INFO:  test-node-gpu.js start
2021-06-06 20:23:54 WARN:  test-node-gpu.js stderr: 2021-06-06 20:23:54.801996: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2021-06-06 20:23:55 WARN:  test-node-gpu.js stderr: 2021-06-06 20:23:55.008859: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2021-06-06 20:23:55 WARN:  test-node-gpu.js stderr: 2021-06-06 20:23:55.008889: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (wyse): /proc/driver/nvidia/version does not exist
2021-06-06 20:23:55 STATE: test-node-gpu.js passed: create human
2021-06-06 20:23:55 INFO:  test-node-gpu.js human version: 2.0.0
2021-06-06 20:23:55 INFO:  test-node-gpu.js platform: linux x64 agent: NodeJS v16.0.0
2021-06-06 20:23:55 INFO:  test-node-gpu.js tfjs version: 3.7.0
2021-06-06 20:23:55 STATE: test-node-gpu.js passed: set backend: tensorflow
2021-06-06 20:23:55 STATE: test-node-gpu.js passed: load models
2021-06-06 20:23:55 STATE: test-node-gpu.js result: defined models: 14 loaded models: 7
2021-06-06 20:23:55 STATE: test-node-gpu.js passed: warmup: none default
2021-06-06 20:23:56 STATE: test-node-gpu.js passed: warmup: face default
2021-06-06 20:23:56 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":5}
2021-06-06 20:23:56 DATA:  test-node-gpu.js result: performance: load: 282 total: 1419
2021-06-06 20:23:58 STATE: test-node-gpu.js passed: warmup: body default
2021-06-06 20:23:58 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 20:23:58 DATA:  test-node-gpu.js result: performance: load: 282 total: 1291
2021-06-06 20:23:58 INFO:  test-node-gpu.js test body variants
2021-06-06 20:23:59 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:23:59 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg posenet
2021-06-06 20:23:59 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.96,"keypoints":16}
2021-06-06 20:23:59 DATA:  test-node-gpu.js result: performance: load: 282 total: 781
2021-06-06 20:24:00 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:24:00 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg movenet
2021-06-06 20:24:00 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 20:24:00 DATA:  test-node-gpu.js result: performance: load: 282 total: 222
2021-06-06 20:24:01 STATE: test-node-gpu.js passed: detect: random default
2021-06-06 20:24:01 DATA:  test-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0}
2021-06-06 20:24:01 DATA:  test-node-gpu.js result: performance: load: 282 total: 629
2021-06-06 20:24:01 INFO:  test-node-gpu.js test: first instance
2021-06-06 20:24:02 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 20:24:03 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-06-06 20:24:03 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.78,"keypoints":7}
2021-06-06 20:24:03 DATA:  test-node-gpu.js result: performance: load: 282 total: 996
2021-06-06 20:24:03 INFO:  test-node-gpu.js test: second instance
2021-06-06 20:24:03 STATE: test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 20:24:04 STATE: test-node-gpu.js passed: detect: samples/ai-upper.jpg default
2021-06-06 20:24:04 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":29.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.78,"keypoints":7}
2021-06-06 20:24:04 DATA:  test-node-gpu.js result: performance: load: 3 total: 970
2021-06-06 20:24:04 INFO:  test-node-gpu.js test: concurrent
2021-06-06 20:24:04 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 20:24:04 STATE: test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 20:24:05 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:24:06 STATE: test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:24:10 STATE: test-node-gpu.js passed: detect: samples/ai-face.jpg default
2021-06-06 20:24:10 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":17}
2021-06-06 20:24:10 DATA:  test-node-gpu.js result: performance: load: 282 total: 4247
2021-06-06 20:24:10 STATE: test-node-gpu.js passed: detect: samples/ai-face.jpg default
2021-06-06 20:24:10 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.73,"keypoints":17}
2021-06-06 20:24:10 DATA:  test-node-gpu.js result: performance: load: 3 total: 4247
2021-06-06 20:24:10 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-06-06 20:24:10 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 20:24:10 DATA:  test-node-gpu.js result: performance: load: 282 total: 4247
2021-06-06 20:24:10 STATE: test-node-gpu.js passed: detect: samples/ai-body.jpg default
2021-06-06 20:24:10 DATA:  test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.93,"keypoints":17}
2021-06-06 20:24:10 DATA:  test-node-gpu.js result: performance: load: 3 total: 4247
2021-06-06 20:24:10 INFO:  test-node-gpu.js test complete: 15308 ms
2021-06-06 20:24:10 INFO:  test-node-wasm.js start
2021-06-06 20:24:10 STATE: test-node-wasm.js passed: model server: http://localhost:10030/models/
2021-06-06 20:24:10 STATE: test-node-wasm.js passed: create human
2021-06-06 20:24:10 INFO:  test-node-wasm.js human version: 2.0.0
2021-06-06 20:24:10 INFO:  test-node-wasm.js platform: linux x64 agent: NodeJS v16.0.0
2021-06-06 20:24:10 INFO:  test-node-wasm.js tfjs version: 3.7.0
2021-06-06 20:24:11 STATE: test-node-wasm.js passed: set backend: wasm
2021-06-06 20:24:11 STATE: test-node-wasm.js passed: load models
2021-06-06 20:24:11 STATE: test-node-wasm.js result: defined models: 14 loaded models: 6
2021-06-06 20:24:11 STATE: test-node-wasm.js passed: warmup: none default
2021-06-06 20:24:11 ERROR: test-node-wasm.js failed: warmup: face default
2021-06-06 20:24:11 ERROR: test-node-wasm.js failed: warmup: body default
2021-06-06 20:24:11 INFO:  test-node-wasm.js test body variants
2021-06-06 20:24:12 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:24:15 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg posenet
2021-06-06 20:24:15 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"age":28.5,"gender":"female"} {} {"score":0.96,"keypoints":16}
2021-06-06 20:24:15 DATA:  test-node-wasm.js result: performance: load: 547 total: 2894
2021-06-06 20:24:17 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:24:19 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg movenet
2021-06-06 20:24:19 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"age":28.5,"gender":"female"} {} {"score":0.93,"keypoints":17}
2021-06-06 20:24:19 DATA:  test-node-wasm.js result: performance: load: 547 total: 1787
2021-06-06 20:24:20 STATE: test-node-wasm.js passed: detect: random default
2021-06-06 20:24:20 DATA:  test-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0}
2021-06-06 20:24:20 DATA:  test-node-wasm.js result: performance: load: 547 total: 1509
2021-06-06 20:24:20 INFO:  test-node-wasm.js test: first instance
2021-06-06 20:24:21 STATE: test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 20:24:23 STATE: test-node-wasm.js passed: detect: samples/ai-upper.jpg default
2021-06-06 20:24:23 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"age":29.5,"gender":"female"} {} {"score":0.78,"keypoints":7}
2021-06-06 20:24:23 DATA:  test-node-wasm.js result: performance: load: 547 total: 2003
2021-06-06 20:24:23 INFO:  test-node-wasm.js test: second instance
2021-06-06 20:24:23 STATE: test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
2021-06-06 20:24:26 STATE: test-node-wasm.js passed: detect: samples/ai-upper.jpg default
2021-06-06 20:24:26 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"age":29.5,"gender":"female"} {} {"score":0.78,"keypoints":7}
2021-06-06 20:24:26 DATA:  test-node-wasm.js result: performance: load: 3 total: 2038
2021-06-06 20:24:26 INFO:  test-node-wasm.js test: concurrent
2021-06-06 20:24:26 STATE: test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 20:24:26 STATE: test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3]
2021-06-06 20:24:27 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:24:29 STATE: test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
2021-06-06 20:24:37 STATE: test-node-wasm.js passed: detect: samples/ai-face.jpg default
2021-06-06 20:24:37 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 0 person: 1 {"age":23.6,"gender":"female"} {} {"score":0.73,"keypoints":17}
2021-06-06 20:24:37 DATA:  test-node-wasm.js result: performance: load: 547 total: 7865
2021-06-06 20:24:37 STATE: test-node-wasm.js passed: detect: samples/ai-face.jpg default
2021-06-06 20:24:37 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 0 person: 1 {"age":23.6,"gender":"female"} {} {"score":0.73,"keypoints":17}
2021-06-06 20:24:37 DATA:  test-node-wasm.js result: performance: load: 3 total: 7865
2021-06-06 20:24:37 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-06-06 20:24:37 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"age":28.5,"gender":"female"} {} {"score":0.93,"keypoints":17}
2021-06-06 20:24:37 DATA:  test-node-wasm.js result: performance: load: 547 total: 7865
2021-06-06 20:24:37 STATE: test-node-wasm.js passed: detect: samples/ai-body.jpg default
2021-06-06 20:24:37 DATA:  test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"age":28.5,"gender":"female"} {} {"score":0.93,"keypoints":17}
2021-06-06 20:24:37 DATA:  test-node-wasm.js result: performance: load: 3 total: 7865
2021-06-06 20:24:37 INFO:  test-node-wasm.js test complete: 26470 ms
2021-06-06 20:24:37 INFO:  status: {"passed":68,"failed":2}

View File

@ -4,7 +4,6 @@
*/
// import from dist
// modules: 1299, moduleBytes: 4230827, imports: 7, importBytes: 2478, outputBytes: 2357435
// get versions of all packages
/*
import * as packageBundle from '@tensorflow/tfjs/package.json';
@ -12,7 +11,7 @@ import * as packageCore from '@tensorflow/tfjs-core/package.json';
import * as packageData from '@tensorflow/tfjs-data/package.json';
import * as packageLayers from '@tensorflow/tfjs-layers/package.json';
import * as packageConverter from '@tensorflow/tfjs-converter/package.json';
// for backends, get version from source so it can register backend during import
// for backends, get version from source to avoid incorrect tree shaking
import { version_cpu } from '@tensorflow/tfjs-backend-cpu/dist/index.js';
import { version_webgl } from '@tensorflow/tfjs-backend-webgl/dist/index.js';
import { version_wasm } from '@tensorflow/tfjs-backend-wasm/dist/index.js';
@ -28,7 +27,6 @@ export * from '@tensorflow/tfjs-backend-wasm/dist/index.js';
*/
// import from src
// modules: 1681, moduleBytes: 5711239, imports: 7, importBytes: 2701, outputBytes: 2107830
// get versions of all packages
import { version as tfjsVersion } from '@tensorflow/tfjs/package.json';
import { version as tfjsCoreVersion } from '@tensorflow/tfjs-core/package.json';
@ -40,6 +38,7 @@ import { version as tfjsBackendWebGLVersion } from '@tensorflow/tfjs-backend-web
import { version as tfjsBackendWASMVersion } from '@tensorflow/tfjs-backend-wasm/package.json';
// export all
// requires treeShaking:ignore-annotations due to tfjs misconfiguration
export * from '@tensorflow/tfjs-core/src/index';
export * from '@tensorflow/tfjs-layers/src/index';
export * from '@tensorflow/tfjs-converter/src/index';

View File

@ -19,12 +19,7 @@
"sourceMap": true,
"allowJs": true,
"baseUrl": "./",
"paths": {
"tslib": ["node_modules/tslib/tslib.d.ts"],
"@tensorflow/tfjs-node/dist/io/file_system": ["node_modules/@tensorflow/tfjs-node/dist/io/file_system.js"],
"@tensorflow/tfjs-core/dist/index": ["node_modules/@tensorflow/tfjs-core/dist/index.js"],
"@tensorflow/tfjs-converter/dist/index": ["node_modules/@tensorflow/tfjs-converter/dist/index.js"]
},
"paths": { "tslib": ["node_modules/tslib/tslib.d.ts"] },
"strictNullChecks": true,
"noImplicitAny": false,
"noUnusedLocals": false,
@ -37,8 +32,8 @@
"allowUnreachableCode": false
},
"formatCodeOptions": { "indentSize": 2, "tabSize": 2 },
"exclude": ["node_modules/", "types/"],
"include": ["src/"],
"exclude": ["node_modules/", "types/", "tfjs/", "dist/"],
"include": ["src"],
"typedocOptions": {
"excludePrivate": true,
"excludeExternals": true,

View File

@ -391,7 +391,7 @@
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class">
<a name="image" class="tsd-anchor"></a>
<h3>image</h3>
<div class="tsd-signature tsd-kind-icon">image<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span></div>
<div class="tsd-signature tsd-kind-icon">image<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
</aside>
<div class="tsd-comment tsd-typography">
@ -408,7 +408,7 @@
<h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span></h5>
</li>
<li class="tsd-parameter">
<h5>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5>
<h5>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></h5>
</li>
</ul>
</div>
@ -576,7 +576,7 @@
<a name="detect" class="tsd-anchor"></a>
<h3>detect</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">detect<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span>, userConfig<span class="tsd-signature-symbol">?: </span><a href="../interfaces/config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../index.html#error" class="tsd-signature-type" data-tsd-kind="Type alias">Error</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-signature tsd-kind-icon">detect<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><a href="../index.html#input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a>, userConfig<span class="tsd-signature-symbol">?: </span><a href="../interfaces/config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../index.html#error" class="tsd-signature-type" data-tsd-kind="Type alias">Error</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
@ -596,7 +596,7 @@
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>input: <span class="tsd-signature-type">any</span></h5>
<h5>input: <a href="../index.html#input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5>
</li>
<li>
<h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <a href="../interfaces/config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></h5>
@ -611,7 +611,7 @@
<a name="enhance" class="tsd-anchor"></a>
<h3>enhance</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">enhance<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></li>
<li class="tsd-signature tsd-kind-icon">enhance<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
@ -625,10 +625,10 @@
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>input: <span class="tsd-signature-type">any</span></h5>
<h5>input: <span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></h5>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span></h4>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></h4>
<p>Tensor</p>
</li>
</ul>
@ -738,7 +738,7 @@
<a name="segmentation-1" class="tsd-anchor"></a>
<h3>segmentation</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">segmentation<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span>, background<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-signature tsd-kind-icon">segmentation<span class="tsd-signature-symbol">(</span>input<span class="tsd-signature-symbol">: </span><a href="../index.html#input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a>, background<span class="tsd-signature-symbol">?: </span><a href="../index.html#input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
@ -754,10 +754,10 @@
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>input: <span class="tsd-signature-type">any</span></h5>
<h5>input: <a href="../index.html#input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5>
</li>
<li>
<h5><span class="tsd-flag ts-flagOptional">Optional</span> background: <span class="tsd-signature-type">any</span></h5>
<h5><span class="tsd-flag ts-flagOptional">Optional</span> background: <a href="../index.html#input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a></h5>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol">&gt;</span></h4>

View File

@ -216,7 +216,7 @@
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="image" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagOptional">Optional</span> image</h3>
<div class="tsd-signature tsd-kind-icon">image<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span></div>
<div class="tsd-signature tsd-kind-icon">image<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></div>
<aside class="tsd-sources">
</aside>
</section>
@ -291,7 +291,7 @@
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="tensor" class="tsd-anchor"></a>
<h3>tensor</h3>
<div class="tsd-signature tsd-kind-icon">tensor<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span></div>
<div class="tsd-signature tsd-kind-icon">tensor<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></div>
<aside class="tsd-sources">
</aside>
</section>