mirror of https://github.com/vladmandic/human
added configuration validation
parent
6b03eb4287
commit
b07d0e823a
|
@ -9,8 +9,9 @@
|
|||
|
||||
## Changelog
|
||||
|
||||
### **HEAD -> main** 2021/09/17 mandic00@live.com
|
||||
### **HEAD -> main** 2021/09/18 mandic00@live.com
|
||||
|
||||
- prevent validation failed on some model combinations
|
||||
- webgl exception handling
|
||||
|
||||
### **2.2.2** 2021/09/17 mandic00@live.com
|
||||
|
|
14
TODO.md
14
TODO.md
|
@ -30,6 +30,15 @@ Feature is automatically disabled in NodeJS without user impact
|
|||
|
||||
<br>
|
||||
|
||||
### Face Emotion Detection
|
||||
|
||||
Face Emotion detection using WASM backend has reduced precision due to math errors in backend
|
||||
|
||||
- Backend WASM incorrect handling of `int32` tensors
|
||||
<https://github.com/tensorflow/tfjs/issues/5641>
|
||||
|
||||
<br>
|
||||
|
||||
### Hand Detection
|
||||
|
||||
Enhanced rotation correction for hand detection is not working in NodeJS due to missing kernel op in TFJS
|
||||
|
@ -38,7 +47,10 @@ Feature is automatically disabled in NodeJS without user impact
|
|||
- Backend NodeJS missing kernel op `RotateWithOffset`
|
||||
<https://github.com/tensorflow/tfjs/issues/5473>
|
||||
|
||||
Hand detection using WASM backend has reduced precision due to math rounding errors in backend
|
||||
Hand detection using WASM backend has reduced precision due to math errors in backend
|
||||
|
||||
- Backend WASM incorrect handling of `int32` tensors
|
||||
<https://github.com/tensorflow/tfjs/issues/5641>
|
||||
|
||||
<br>
|
||||
|
||||
|
|
|
@ -69,6 +69,23 @@ var now = () => {
|
|||
return performance.now();
|
||||
return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString());
|
||||
};
|
||||
function validate(defaults, config3, parent = "config", msgs = []) {
|
||||
for (const key of Object.keys(config3)) {
|
||||
if (typeof config3[key] === "object") {
|
||||
validate(defaults[key], config3[key], key, msgs);
|
||||
} else {
|
||||
const defined = typeof defaults[key] !== "undefined";
|
||||
if (!defined)
|
||||
msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` });
|
||||
const same = typeof defaults[key] === typeof config3[key];
|
||||
if (defined && !same)
|
||||
msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] });
|
||||
}
|
||||
}
|
||||
if (config3.debug && parent === "config" && msgs.length > 0)
|
||||
log("invalid configuration", msgs);
|
||||
return msgs;
|
||||
}
|
||||
function mergeDeep(...objects) {
|
||||
const isObject = (obj) => obj && typeof obj === "object";
|
||||
return objects.reduce((prev, obj) => {
|
||||
|
@ -4550,7 +4567,7 @@ function process2(input, config3) {
|
|||
let pixels;
|
||||
if (outCanvas.data) {
|
||||
const shape = [outCanvas.height, outCanvas.width, 3];
|
||||
pixels = tfjs_esm_exports.tensor3d(outCanvas.data, shape, "int32");
|
||||
pixels = tfjs_esm_exports.tensor3d(outCanvas.data, shape, "float32");
|
||||
} else if (typeof ImageData !== "undefined" && outCanvas instanceof ImageData) {
|
||||
pixels = tfjs_esm_exports.browser ? tfjs_esm_exports.browser.fromPixels(outCanvas) : null;
|
||||
} else if (config3.backend === "webgl" || config3.backend === "humangl") {
|
||||
|
@ -8619,7 +8636,7 @@ var HandDetector = class {
|
|||
const scores = await t.scores.data();
|
||||
t.boxes = tfjs_esm_exports.slice(t.predictions, [0, 1], [-1, 4]);
|
||||
t.norm = this.normalizeBoxes(t.boxes);
|
||||
t.nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(t.norm, t.scores, 10 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
t.nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
|
@ -8732,7 +8749,7 @@ var HandPipeline = class {
|
|||
__publicField(this, "detectedHands");
|
||||
this.handDetector = handDetector;
|
||||
this.handPoseModel = handPoseModel2;
|
||||
this.inputSize = this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.inputSize = this.handPoseModel && this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.storedBoxes = [];
|
||||
this.skipped = 0;
|
||||
this.detectedHands = 0;
|
||||
|
@ -8848,6 +8865,8 @@ var HandPipeline = class {
|
|||
}
|
||||
this.storedBoxes = this.storedBoxes.filter((a) => a !== null);
|
||||
this.detectedHands = hands.length;
|
||||
if (hands.length > config3.hand.maxDetected)
|
||||
hands.length = config3.hand.maxDetected;
|
||||
return hands;
|
||||
}
|
||||
};
|
||||
|
@ -8909,6 +8928,8 @@ function calculateSlope(point1x, point1y, point2x, point2y) {
|
|||
return slope;
|
||||
}
|
||||
function getSlopes(point1, point2) {
|
||||
if (!point1 || !point2)
|
||||
return [0, 0];
|
||||
const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);
|
||||
if (point1.length === 2)
|
||||
return slopeXY;
|
||||
|
@ -9207,6 +9228,8 @@ var gestures_default = [ThumbsUp, Victory];
|
|||
// src/fingerpose/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
function analyze(keypoints3) {
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return null;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const landmarks = {};
|
||||
for (const fingerIdx of Finger.all) {
|
||||
|
@ -9218,8 +9241,10 @@ function analyze(keypoints3) {
|
|||
return landmarks;
|
||||
}
|
||||
function match2(keypoints3) {
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const poses2 = [];
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return poses2;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
for (const gesture3 of gestures_default) {
|
||||
const confidence = gesture3.matchAgainst(estimatorRes.curls, estimatorRes.directions);
|
||||
if (confidence >= minConfidence)
|
||||
|
@ -10172,7 +10197,7 @@ async function load13(instance) {
|
|||
instance.models.segmentation = await load12(instance.config);
|
||||
}
|
||||
}
|
||||
async function validate(instance) {
|
||||
async function validate2(instance) {
|
||||
const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"];
|
||||
for (const defined of Object.keys(instance.models)) {
|
||||
if (instance.models[defined]) {
|
||||
|
@ -10500,7 +10525,7 @@ var hand = (res) => {
|
|||
for (let i = 0; i < res.length; i++) {
|
||||
const fingers = [];
|
||||
for (const [finger, pos] of Object.entries(res[i]["annotations"])) {
|
||||
if (finger !== "palmBase" && Array.isArray(pos))
|
||||
if (finger !== "palmBase" && Array.isArray(pos) && pos[0])
|
||||
fingers.push({ name: finger.toLowerCase(), position: pos[0] });
|
||||
}
|
||||
if (fingers && fingers.length > 0) {
|
||||
|
@ -12212,6 +12237,8 @@ var Human = class {
|
|||
}
|
||||
return null;
|
||||
});
|
||||
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
|
||||
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
|
||||
__publicField(this, "image", (input) => process2(input, this.config));
|
||||
__publicField(this, "emit", (event) => {
|
||||
var _a;
|
||||
|
@ -12224,7 +12251,11 @@ var Human = class {
|
|||
config.backend = this.env.browser ? "humangl" : "tensorflow";
|
||||
this.version = version10;
|
||||
Object.defineProperty(this, "version", { value: version10 });
|
||||
this.config = mergeDeep(config, userConfig || {});
|
||||
this.config = JSON.parse(JSON.stringify(config));
|
||||
Object.seal(this.config);
|
||||
if (userConfig)
|
||||
this.config = mergeDeep(this.config, userConfig);
|
||||
validate(config, this.config);
|
||||
this.tf = tfjs_esm_exports;
|
||||
this.state = "idle";
|
||||
__privateSet(this, _numTensors, 0);
|
||||
|
@ -12308,7 +12339,7 @@ var Human = class {
|
|||
env.initial = false;
|
||||
const loaded = Object.values(this.models).filter((model10) => model10).length;
|
||||
if (loaded !== count2) {
|
||||
await validate(this);
|
||||
await validate2(this);
|
||||
this.emit("load");
|
||||
}
|
||||
const current = Math.trunc(now() - timeStamp);
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -58,6 +58,23 @@ var now = () => {
|
|||
return performance.now();
|
||||
return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString());
|
||||
};
|
||||
function validate(defaults, config3, parent = "config", msgs = []) {
|
||||
for (const key of Object.keys(config3)) {
|
||||
if (typeof config3[key] === "object") {
|
||||
validate(defaults[key], config3[key], key, msgs);
|
||||
} else {
|
||||
const defined = typeof defaults[key] !== "undefined";
|
||||
if (!defined)
|
||||
msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` });
|
||||
const same = typeof defaults[key] === typeof config3[key];
|
||||
if (defined && !same)
|
||||
msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] });
|
||||
}
|
||||
}
|
||||
if (config3.debug && parent === "config" && msgs.length > 0)
|
||||
log("invalid configuration", msgs);
|
||||
return msgs;
|
||||
}
|
||||
function mergeDeep(...objects) {
|
||||
const isObject = (obj) => obj && typeof obj === "object";
|
||||
return objects.reduce((prev, obj) => {
|
||||
|
@ -64607,7 +64624,7 @@ function process2(input2, config3) {
|
|||
let pixels;
|
||||
if (outCanvas.data) {
|
||||
const shape = [outCanvas.height, outCanvas.width, 3];
|
||||
pixels = tensor3d(outCanvas.data, shape, "int32");
|
||||
pixels = tensor3d(outCanvas.data, shape, "float32");
|
||||
} else if (typeof ImageData !== "undefined" && outCanvas instanceof ImageData) {
|
||||
pixels = browser_exports ? browser_exports.fromPixels(outCanvas) : null;
|
||||
} else if (config3.backend === "webgl" || config3.backend === "humangl") {
|
||||
|
@ -68676,7 +68693,7 @@ var HandDetector = class {
|
|||
const scores = await t.scores.data();
|
||||
t.boxes = slice(t.predictions, [0, 1], [-1, 4]);
|
||||
t.norm = this.normalizeBoxes(t.boxes);
|
||||
t.nms = await image.nonMaxSuppressionAsync(t.norm, t.scores, 10 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
t.nms = await image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
|
@ -68789,7 +68806,7 @@ var HandPipeline = class {
|
|||
__publicField(this, "detectedHands");
|
||||
this.handDetector = handDetector;
|
||||
this.handPoseModel = handPoseModel2;
|
||||
this.inputSize = this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.inputSize = this.handPoseModel && this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.storedBoxes = [];
|
||||
this.skipped = 0;
|
||||
this.detectedHands = 0;
|
||||
|
@ -68905,6 +68922,8 @@ var HandPipeline = class {
|
|||
}
|
||||
this.storedBoxes = this.storedBoxes.filter((a) => a !== null);
|
||||
this.detectedHands = hands.length;
|
||||
if (hands.length > config3.hand.maxDetected)
|
||||
hands.length = config3.hand.maxDetected;
|
||||
return hands;
|
||||
}
|
||||
};
|
||||
|
@ -68966,6 +68985,8 @@ function calculateSlope(point1x, point1y, point2x, point2y) {
|
|||
return slope;
|
||||
}
|
||||
function getSlopes(point1, point2) {
|
||||
if (!point1 || !point2)
|
||||
return [0, 0];
|
||||
const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);
|
||||
if (point1.length === 2)
|
||||
return slopeXY;
|
||||
|
@ -69264,6 +69285,8 @@ var gestures_default = [ThumbsUp, Victory];
|
|||
// src/fingerpose/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
function analyze(keypoints3) {
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return null;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const landmarks = {};
|
||||
for (const fingerIdx of Finger.all) {
|
||||
|
@ -69275,8 +69298,10 @@ function analyze(keypoints3) {
|
|||
return landmarks;
|
||||
}
|
||||
function match2(keypoints3) {
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const poses2 = [];
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return poses2;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
for (const gesture3 of gestures_default) {
|
||||
const confidence = gesture3.matchAgainst(estimatorRes.curls, estimatorRes.directions);
|
||||
if (confidence >= minConfidence)
|
||||
|
@ -70229,7 +70254,7 @@ async function load13(instance) {
|
|||
instance.models.segmentation = await load12(instance.config);
|
||||
}
|
||||
}
|
||||
async function validate(instance) {
|
||||
async function validate2(instance) {
|
||||
const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"];
|
||||
for (const defined of Object.keys(instance.models)) {
|
||||
if (instance.models[defined]) {
|
||||
|
@ -70557,7 +70582,7 @@ var hand = (res) => {
|
|||
for (let i = 0; i < res.length; i++) {
|
||||
const fingers = [];
|
||||
for (const [finger, pos] of Object.entries(res[i]["annotations"])) {
|
||||
if (finger !== "palmBase" && Array.isArray(pos))
|
||||
if (finger !== "palmBase" && Array.isArray(pos) && pos[0])
|
||||
fingers.push({ name: finger.toLowerCase(), position: pos[0] });
|
||||
}
|
||||
if (fingers && fingers.length > 0) {
|
||||
|
@ -72269,6 +72294,8 @@ var Human = class {
|
|||
}
|
||||
return null;
|
||||
});
|
||||
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
|
||||
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
|
||||
__publicField(this, "image", (input2) => process2(input2, this.config));
|
||||
__publicField(this, "emit", (event) => {
|
||||
var _a;
|
||||
|
@ -72281,7 +72308,11 @@ var Human = class {
|
|||
config.backend = this.env.browser ? "humangl" : "tensorflow";
|
||||
this.version = version6;
|
||||
Object.defineProperty(this, "version", { value: version6 });
|
||||
this.config = mergeDeep(config, userConfig || {});
|
||||
this.config = JSON.parse(JSON.stringify(config));
|
||||
Object.seal(this.config);
|
||||
if (userConfig)
|
||||
this.config = mergeDeep(this.config, userConfig);
|
||||
validate(config, this.config);
|
||||
this.tf = tfjs_esm_exports;
|
||||
this.state = "idle";
|
||||
__privateSet(this, _numTensors, 0);
|
||||
|
@ -72365,7 +72396,7 @@ var Human = class {
|
|||
env2.initial = false;
|
||||
const loaded = Object.values(this.models).filter((model11) => model11).length;
|
||||
if (loaded !== count3) {
|
||||
await validate(this);
|
||||
await validate2(this);
|
||||
this.emit("load");
|
||||
}
|
||||
const current = Math.trunc(now() - timeStamp);
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -114,6 +114,23 @@ var now = () => {
|
|||
return performance.now();
|
||||
return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString());
|
||||
};
|
||||
function validate(defaults, config3, parent = "config", msgs = []) {
|
||||
for (const key of Object.keys(config3)) {
|
||||
if (typeof config3[key] === "object") {
|
||||
validate(defaults[key], config3[key], key, msgs);
|
||||
} else {
|
||||
const defined = typeof defaults[key] !== "undefined";
|
||||
if (!defined)
|
||||
msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` });
|
||||
const same = typeof defaults[key] === typeof config3[key];
|
||||
if (defined && !same)
|
||||
msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] });
|
||||
}
|
||||
}
|
||||
if (config3.debug && parent === "config" && msgs.length > 0)
|
||||
log("invalid configuration", msgs);
|
||||
return msgs;
|
||||
}
|
||||
function mergeDeep(...objects) {
|
||||
const isObject = (obj) => obj && typeof obj === "object";
|
||||
return objects.reduce((prev, obj) => {
|
||||
|
@ -4584,7 +4601,7 @@ function process2(input, config3) {
|
|||
let pixels;
|
||||
if (outCanvas.data) {
|
||||
const shape = [outCanvas.height, outCanvas.width, 3];
|
||||
pixels = tf3.tensor3d(outCanvas.data, shape, "int32");
|
||||
pixels = tf3.tensor3d(outCanvas.data, shape, "float32");
|
||||
} else if (typeof ImageData !== "undefined" && outCanvas instanceof ImageData) {
|
||||
pixels = tf3.browser ? tf3.browser.fromPixels(outCanvas) : null;
|
||||
} else if (config3.backend === "webgl" || config3.backend === "humangl") {
|
||||
|
@ -8665,7 +8682,7 @@ var HandDetector = class {
|
|||
const scores = await t.scores.data();
|
||||
t.boxes = tf11.slice(t.predictions, [0, 1], [-1, 4]);
|
||||
t.norm = this.normalizeBoxes(t.boxes);
|
||||
t.nms = await tf11.image.nonMaxSuppressionAsync(t.norm, t.scores, 10 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
t.nms = await tf11.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
|
@ -8781,7 +8798,7 @@ var HandPipeline = class {
|
|||
__publicField(this, "detectedHands");
|
||||
this.handDetector = handDetector;
|
||||
this.handPoseModel = handPoseModel2;
|
||||
this.inputSize = this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.inputSize = this.handPoseModel && this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.storedBoxes = [];
|
||||
this.skipped = 0;
|
||||
this.detectedHands = 0;
|
||||
|
@ -8897,6 +8914,8 @@ var HandPipeline = class {
|
|||
}
|
||||
this.storedBoxes = this.storedBoxes.filter((a) => a !== null);
|
||||
this.detectedHands = hands.length;
|
||||
if (hands.length > config3.hand.maxDetected)
|
||||
hands.length = config3.hand.maxDetected;
|
||||
return hands;
|
||||
}
|
||||
};
|
||||
|
@ -8958,6 +8977,8 @@ function calculateSlope(point1x, point1y, point2x, point2y) {
|
|||
return slope;
|
||||
}
|
||||
function getSlopes(point1, point2) {
|
||||
if (!point1 || !point2)
|
||||
return [0, 0];
|
||||
const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);
|
||||
if (point1.length === 2)
|
||||
return slopeXY;
|
||||
|
@ -9256,6 +9277,8 @@ var gestures_default = [ThumbsUp, Victory];
|
|||
// src/fingerpose/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
function analyze(keypoints3) {
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return null;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const landmarks = {};
|
||||
for (const fingerIdx of Finger.all) {
|
||||
|
@ -9267,8 +9290,10 @@ function analyze(keypoints3) {
|
|||
return landmarks;
|
||||
}
|
||||
function match2(keypoints3) {
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const poses2 = [];
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return poses2;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
for (const gesture3 of gestures_default) {
|
||||
const confidence = gesture3.matchAgainst(estimatorRes.curls, estimatorRes.directions);
|
||||
if (confidence >= minConfidence)
|
||||
|
@ -10231,7 +10256,7 @@ async function load13(instance) {
|
|||
instance.models.segmentation = await load12(instance.config);
|
||||
}
|
||||
}
|
||||
async function validate(instance) {
|
||||
async function validate2(instance) {
|
||||
const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"];
|
||||
for (const defined of Object.keys(instance.models)) {
|
||||
if (instance.models[defined]) {
|
||||
|
@ -10560,7 +10585,7 @@ var hand = (res) => {
|
|||
for (let i = 0; i < res.length; i++) {
|
||||
const fingers = [];
|
||||
for (const [finger, pos] of Object.entries(res[i]["annotations"])) {
|
||||
if (finger !== "palmBase" && Array.isArray(pos))
|
||||
if (finger !== "palmBase" && Array.isArray(pos) && pos[0])
|
||||
fingers.push({ name: finger.toLowerCase(), position: pos[0] });
|
||||
}
|
||||
if (fingers && fingers.length > 0) {
|
||||
|
@ -12275,6 +12300,8 @@ var Human = class {
|
|||
}
|
||||
return null;
|
||||
});
|
||||
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
|
||||
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
|
||||
__publicField(this, "image", (input) => process2(input, this.config));
|
||||
__publicField(this, "emit", (event) => {
|
||||
var _a;
|
||||
|
@ -12287,7 +12314,11 @@ var Human = class {
|
|||
config.backend = this.env.browser ? "humangl" : "tensorflow";
|
||||
this.version = version;
|
||||
Object.defineProperty(this, "version", { value: version });
|
||||
this.config = mergeDeep(config, userConfig || {});
|
||||
this.config = JSON.parse(JSON.stringify(config));
|
||||
Object.seal(this.config);
|
||||
if (userConfig)
|
||||
this.config = mergeDeep(this.config, userConfig);
|
||||
validate(config, this.config);
|
||||
this.tf = tf24;
|
||||
this.state = "idle";
|
||||
__privateSet(this, _numTensors, 0);
|
||||
|
@ -12371,7 +12402,7 @@ var Human = class {
|
|||
env.initial = false;
|
||||
const loaded = Object.values(this.models).filter((model10) => model10).length;
|
||||
if (loaded !== count2) {
|
||||
await validate(this);
|
||||
await validate2(this);
|
||||
this.emit("load");
|
||||
}
|
||||
const current = Math.trunc(now() - timeStamp);
|
||||
|
|
|
@ -115,6 +115,23 @@ var now = () => {
|
|||
return performance.now();
|
||||
return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString());
|
||||
};
|
||||
function validate(defaults, config3, parent = "config", msgs = []) {
|
||||
for (const key of Object.keys(config3)) {
|
||||
if (typeof config3[key] === "object") {
|
||||
validate(defaults[key], config3[key], key, msgs);
|
||||
} else {
|
||||
const defined = typeof defaults[key] !== "undefined";
|
||||
if (!defined)
|
||||
msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` });
|
||||
const same = typeof defaults[key] === typeof config3[key];
|
||||
if (defined && !same)
|
||||
msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] });
|
||||
}
|
||||
}
|
||||
if (config3.debug && parent === "config" && msgs.length > 0)
|
||||
log("invalid configuration", msgs);
|
||||
return msgs;
|
||||
}
|
||||
function mergeDeep(...objects) {
|
||||
const isObject = (obj) => obj && typeof obj === "object";
|
||||
return objects.reduce((prev, obj) => {
|
||||
|
@ -4585,7 +4602,7 @@ function process2(input, config3) {
|
|||
let pixels;
|
||||
if (outCanvas.data) {
|
||||
const shape = [outCanvas.height, outCanvas.width, 3];
|
||||
pixels = tf3.tensor3d(outCanvas.data, shape, "int32");
|
||||
pixels = tf3.tensor3d(outCanvas.data, shape, "float32");
|
||||
} else if (typeof ImageData !== "undefined" && outCanvas instanceof ImageData) {
|
||||
pixels = tf3.browser ? tf3.browser.fromPixels(outCanvas) : null;
|
||||
} else if (config3.backend === "webgl" || config3.backend === "humangl") {
|
||||
|
@ -8666,7 +8683,7 @@ var HandDetector = class {
|
|||
const scores = await t.scores.data();
|
||||
t.boxes = tf11.slice(t.predictions, [0, 1], [-1, 4]);
|
||||
t.norm = this.normalizeBoxes(t.boxes);
|
||||
t.nms = await tf11.image.nonMaxSuppressionAsync(t.norm, t.scores, 10 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
t.nms = await tf11.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
|
@ -8782,7 +8799,7 @@ var HandPipeline = class {
|
|||
__publicField(this, "detectedHands");
|
||||
this.handDetector = handDetector;
|
||||
this.handPoseModel = handPoseModel2;
|
||||
this.inputSize = this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.inputSize = this.handPoseModel && this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.storedBoxes = [];
|
||||
this.skipped = 0;
|
||||
this.detectedHands = 0;
|
||||
|
@ -8898,6 +8915,8 @@ var HandPipeline = class {
|
|||
}
|
||||
this.storedBoxes = this.storedBoxes.filter((a) => a !== null);
|
||||
this.detectedHands = hands.length;
|
||||
if (hands.length > config3.hand.maxDetected)
|
||||
hands.length = config3.hand.maxDetected;
|
||||
return hands;
|
||||
}
|
||||
};
|
||||
|
@ -8959,6 +8978,8 @@ function calculateSlope(point1x, point1y, point2x, point2y) {
|
|||
return slope;
|
||||
}
|
||||
function getSlopes(point1, point2) {
|
||||
if (!point1 || !point2)
|
||||
return [0, 0];
|
||||
const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);
|
||||
if (point1.length === 2)
|
||||
return slopeXY;
|
||||
|
@ -9257,6 +9278,8 @@ var gestures_default = [ThumbsUp, Victory];
|
|||
// src/fingerpose/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
function analyze(keypoints3) {
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return null;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const landmarks = {};
|
||||
for (const fingerIdx of Finger.all) {
|
||||
|
@ -9268,8 +9291,10 @@ function analyze(keypoints3) {
|
|||
return landmarks;
|
||||
}
|
||||
function match2(keypoints3) {
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const poses2 = [];
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return poses2;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
for (const gesture3 of gestures_default) {
|
||||
const confidence = gesture3.matchAgainst(estimatorRes.curls, estimatorRes.directions);
|
||||
if (confidence >= minConfidence)
|
||||
|
@ -10232,7 +10257,7 @@ async function load13(instance) {
|
|||
instance.models.segmentation = await load12(instance.config);
|
||||
}
|
||||
}
|
||||
async function validate(instance) {
|
||||
async function validate2(instance) {
|
||||
const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"];
|
||||
for (const defined of Object.keys(instance.models)) {
|
||||
if (instance.models[defined]) {
|
||||
|
@ -10561,7 +10586,7 @@ var hand = (res) => {
|
|||
for (let i = 0; i < res.length; i++) {
|
||||
const fingers = [];
|
||||
for (const [finger, pos] of Object.entries(res[i]["annotations"])) {
|
||||
if (finger !== "palmBase" && Array.isArray(pos))
|
||||
if (finger !== "palmBase" && Array.isArray(pos) && pos[0])
|
||||
fingers.push({ name: finger.toLowerCase(), position: pos[0] });
|
||||
}
|
||||
if (fingers && fingers.length > 0) {
|
||||
|
@ -12276,6 +12301,8 @@ var Human = class {
|
|||
}
|
||||
return null;
|
||||
});
|
||||
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
|
||||
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
|
||||
__publicField(this, "image", (input) => process2(input, this.config));
|
||||
__publicField(this, "emit", (event) => {
|
||||
var _a;
|
||||
|
@ -12288,7 +12315,11 @@ var Human = class {
|
|||
config.backend = this.env.browser ? "humangl" : "tensorflow";
|
||||
this.version = version;
|
||||
Object.defineProperty(this, "version", { value: version });
|
||||
this.config = mergeDeep(config, userConfig || {});
|
||||
this.config = JSON.parse(JSON.stringify(config));
|
||||
Object.seal(this.config);
|
||||
if (userConfig)
|
||||
this.config = mergeDeep(this.config, userConfig);
|
||||
validate(config, this.config);
|
||||
this.tf = tf24;
|
||||
this.state = "idle";
|
||||
__privateSet(this, _numTensors, 0);
|
||||
|
@ -12372,7 +12403,7 @@ var Human = class {
|
|||
env.initial = false;
|
||||
const loaded = Object.values(this.models).filter((model10) => model10).length;
|
||||
if (loaded !== count2) {
|
||||
await validate(this);
|
||||
await validate2(this);
|
||||
this.emit("load");
|
||||
}
|
||||
const current = Math.trunc(now() - timeStamp);
|
||||
|
|
|
@ -114,6 +114,23 @@ var now = () => {
|
|||
return performance.now();
|
||||
return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString());
|
||||
};
|
||||
function validate(defaults, config3, parent = "config", msgs = []) {
|
||||
for (const key of Object.keys(config3)) {
|
||||
if (typeof config3[key] === "object") {
|
||||
validate(defaults[key], config3[key], key, msgs);
|
||||
} else {
|
||||
const defined = typeof defaults[key] !== "undefined";
|
||||
if (!defined)
|
||||
msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` });
|
||||
const same = typeof defaults[key] === typeof config3[key];
|
||||
if (defined && !same)
|
||||
msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] });
|
||||
}
|
||||
}
|
||||
if (config3.debug && parent === "config" && msgs.length > 0)
|
||||
log("invalid configuration", msgs);
|
||||
return msgs;
|
||||
}
|
||||
function mergeDeep(...objects) {
|
||||
const isObject = (obj) => obj && typeof obj === "object";
|
||||
return objects.reduce((prev, obj) => {
|
||||
|
@ -4584,7 +4601,7 @@ function process2(input, config3) {
|
|||
let pixels;
|
||||
if (outCanvas.data) {
|
||||
const shape = [outCanvas.height, outCanvas.width, 3];
|
||||
pixels = tf3.tensor3d(outCanvas.data, shape, "int32");
|
||||
pixels = tf3.tensor3d(outCanvas.data, shape, "float32");
|
||||
} else if (typeof ImageData !== "undefined" && outCanvas instanceof ImageData) {
|
||||
pixels = tf3.browser ? tf3.browser.fromPixels(outCanvas) : null;
|
||||
} else if (config3.backend === "webgl" || config3.backend === "humangl") {
|
||||
|
@ -8665,7 +8682,7 @@ var HandDetector = class {
|
|||
const scores = await t.scores.data();
|
||||
t.boxes = tf11.slice(t.predictions, [0, 1], [-1, 4]);
|
||||
t.norm = this.normalizeBoxes(t.boxes);
|
||||
t.nms = await tf11.image.nonMaxSuppressionAsync(t.norm, t.scores, 10 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
t.nms = await tf11.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
|
@ -8781,7 +8798,7 @@ var HandPipeline = class {
|
|||
__publicField(this, "detectedHands");
|
||||
this.handDetector = handDetector;
|
||||
this.handPoseModel = handPoseModel2;
|
||||
this.inputSize = this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.inputSize = this.handPoseModel && this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.storedBoxes = [];
|
||||
this.skipped = 0;
|
||||
this.detectedHands = 0;
|
||||
|
@ -8897,6 +8914,8 @@ var HandPipeline = class {
|
|||
}
|
||||
this.storedBoxes = this.storedBoxes.filter((a) => a !== null);
|
||||
this.detectedHands = hands.length;
|
||||
if (hands.length > config3.hand.maxDetected)
|
||||
hands.length = config3.hand.maxDetected;
|
||||
return hands;
|
||||
}
|
||||
};
|
||||
|
@ -8958,6 +8977,8 @@ function calculateSlope(point1x, point1y, point2x, point2y) {
|
|||
return slope;
|
||||
}
|
||||
function getSlopes(point1, point2) {
|
||||
if (!point1 || !point2)
|
||||
return [0, 0];
|
||||
const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);
|
||||
if (point1.length === 2)
|
||||
return slopeXY;
|
||||
|
@ -9256,6 +9277,8 @@ var gestures_default = [ThumbsUp, Victory];
|
|||
// src/fingerpose/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
function analyze(keypoints3) {
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return null;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const landmarks = {};
|
||||
for (const fingerIdx of Finger.all) {
|
||||
|
@ -9267,8 +9290,10 @@ function analyze(keypoints3) {
|
|||
return landmarks;
|
||||
}
|
||||
function match2(keypoints3) {
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
const poses2 = [];
|
||||
if (!keypoints3 || keypoints3.length === 0)
|
||||
return poses2;
|
||||
const estimatorRes = estimate(keypoints3);
|
||||
for (const gesture3 of gestures_default) {
|
||||
const confidence = gesture3.matchAgainst(estimatorRes.curls, estimatorRes.directions);
|
||||
if (confidence >= minConfidence)
|
||||
|
@ -10231,7 +10256,7 @@ async function load13(instance) {
|
|||
instance.models.segmentation = await load12(instance.config);
|
||||
}
|
||||
}
|
||||
async function validate(instance) {
|
||||
async function validate2(instance) {
|
||||
const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"];
|
||||
for (const defined of Object.keys(instance.models)) {
|
||||
if (instance.models[defined]) {
|
||||
|
@ -10560,7 +10585,7 @@ var hand = (res) => {
|
|||
for (let i = 0; i < res.length; i++) {
|
||||
const fingers = [];
|
||||
for (const [finger, pos] of Object.entries(res[i]["annotations"])) {
|
||||
if (finger !== "palmBase" && Array.isArray(pos))
|
||||
if (finger !== "palmBase" && Array.isArray(pos) && pos[0])
|
||||
fingers.push({ name: finger.toLowerCase(), position: pos[0] });
|
||||
}
|
||||
if (fingers && fingers.length > 0) {
|
||||
|
@ -12275,6 +12300,8 @@ var Human = class {
|
|||
}
|
||||
return null;
|
||||
});
|
||||
__publicField(this, "reset", () => this.config = JSON.parse(JSON.stringify(config)));
|
||||
__publicField(this, "validate", (userConfig) => validate(config, userConfig || this.config));
|
||||
__publicField(this, "image", (input) => process2(input, this.config));
|
||||
__publicField(this, "emit", (event) => {
|
||||
var _a;
|
||||
|
@ -12287,7 +12314,11 @@ var Human = class {
|
|||
config.backend = this.env.browser ? "humangl" : "tensorflow";
|
||||
this.version = version;
|
||||
Object.defineProperty(this, "version", { value: version });
|
||||
this.config = mergeDeep(config, userConfig || {});
|
||||
this.config = JSON.parse(JSON.stringify(config));
|
||||
Object.seal(this.config);
|
||||
if (userConfig)
|
||||
this.config = mergeDeep(this.config, userConfig);
|
||||
validate(config, this.config);
|
||||
this.tf = tf24;
|
||||
this.state = "idle";
|
||||
__privateSet(this, _numTensors, 0);
|
||||
|
@ -12371,7 +12402,7 @@ var Human = class {
|
|||
env.initial = false;
|
||||
const loaded = Object.values(this.models).filter((model10) => model10).length;
|
||||
if (loaded !== count2) {
|
||||
await validate(this);
|
||||
await validate2(this);
|
||||
this.emit("load");
|
||||
}
|
||||
const current = Math.trunc(now() - timeStamp);
|
||||
|
|
|
@ -66,11 +66,11 @@
|
|||
"@tensorflow/tfjs-layers": "^3.9.0",
|
||||
"@tensorflow/tfjs-node": "^3.9.0",
|
||||
"@tensorflow/tfjs-node-gpu": "^3.9.0",
|
||||
"@types/node": "^16.9.2",
|
||||
"@types/node": "^16.9.3",
|
||||
"@typescript-eslint/eslint-plugin": "^4.31.1",
|
||||
"@typescript-eslint/parser": "^4.31.1",
|
||||
"@vladmandic/build": "^0.5.1",
|
||||
"@vladmandic/pilogger": "^0.3.2",
|
||||
"@vladmandic/build": "^0.5.2",
|
||||
"@vladmandic/pilogger": "^0.3.3",
|
||||
"canvas": "^2.8.0",
|
||||
"dayjs": "^1.10.7",
|
||||
"esbuild": "^0.12.28",
|
||||
|
|
|
@ -21,6 +21,7 @@ function calculateSlope(point1x, point1y, point2x, point2y) {
|
|||
// point1, point2 are 2d or 3d point arrays (xy[z])
|
||||
// returns either a single scalar (2d) or array of two slopes (3d)
|
||||
function getSlopes(point1, point2) {
|
||||
if (!point1 || !point2) return [0, 0];
|
||||
const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);
|
||||
if (point1.length === 2) return slopeXY;
|
||||
const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]);
|
||||
|
|
|
@ -7,6 +7,7 @@ import Gestures from './gestures';
|
|||
const minConfidence = 0.7;
|
||||
|
||||
export function analyze(keypoints) { // get estimations of curl / direction for each finger
|
||||
if (!keypoints || keypoints.length === 0) return null;
|
||||
const estimatorRes = estimator.estimate(keypoints);
|
||||
const landmarks = {};
|
||||
for (const fingerIdx of Finger.all) {
|
||||
|
@ -20,8 +21,9 @@ export function analyze(keypoints) { // get estimations of curl / direction for
|
|||
}
|
||||
|
||||
export function match(keypoints) { // compare gesture description to each known gesture
|
||||
const estimatorRes = estimator.estimate(keypoints);
|
||||
const poses: Array<{ name: string, confidence: number }> = [];
|
||||
if (!keypoints || keypoints.length === 0) return poses;
|
||||
const estimatorRes = estimator.estimate(keypoints);
|
||||
for (const gesture of Gestures) {
|
||||
const confidence = gesture.matchAgainst(estimatorRes.curls, estimatorRes.directions);
|
||||
if (confidence >= minConfidence) poses.push({ name: gesture.name, confidence });
|
||||
|
|
|
@ -124,7 +124,7 @@ export const hand = (res): GestureResult[] => {
|
|||
for (let i = 0; i < res.length; i++) {
|
||||
const fingers: Array<{ name: string, position: number }> = [];
|
||||
for (const [finger, pos] of Object.entries(res[i]['annotations'])) {
|
||||
if (finger !== 'palmBase' && Array.isArray(pos)) fingers.push({ name: finger.toLowerCase(), position: pos[0] }); // get tip of each finger
|
||||
if (finger !== 'palmBase' && Array.isArray(pos) && pos[0]) fingers.push({ name: finger.toLowerCase(), position: pos[0] }); // get tip of each finger
|
||||
}
|
||||
if (fingers && fingers.length > 0) {
|
||||
const closest = fingers.reduce((best, a) => (best.position[2] < a.position[2] ? best : a));
|
||||
|
|
|
@ -47,7 +47,8 @@ export class HandDetector {
|
|||
const scores = await t.scores.data();
|
||||
t.boxes = tf.slice(t.predictions, [0, 1], [-1, 4]);
|
||||
t.norm = this.normalizeBoxes(t.boxes);
|
||||
t.nms = await tf.image.nonMaxSuppressionAsync(t.norm, t.scores, 10 * config.hand.maxDetected, config.hand.iouThreshold, config.hand.minConfidence);
|
||||
// box detection is flaky so we look for 3x boxes than we need results
|
||||
t.nms = await tf.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config.hand.maxDetected, config.hand.iouThreshold, config.hand.minConfidence);
|
||||
const nms = await t.nms.array() as Array<number>;
|
||||
const hands: Array<{ box: Tensor, palmLandmarks: Tensor, confidence: number }> = [];
|
||||
for (const index of nms) {
|
||||
|
|
|
@ -22,7 +22,7 @@ export class HandPipeline {
|
|||
constructor(handDetector, handPoseModel) {
|
||||
this.handDetector = handDetector;
|
||||
this.handPoseModel = handPoseModel;
|
||||
this.inputSize = this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.inputSize = this.handPoseModel && this.handPoseModel.inputs[0].shape ? this.handPoseModel.inputs[0].shape[2] : 0;
|
||||
this.storedBoxes = [];
|
||||
this.skipped = 0;
|
||||
this.detectedHands = 0;
|
||||
|
@ -152,6 +152,7 @@ export class HandPipeline {
|
|||
}
|
||||
this.storedBoxes = this.storedBoxes.filter((a) => a !== null);
|
||||
this.detectedHands = hands.length;
|
||||
if (hands.length > config.hand.maxDetected) hands.length = config.hand.maxDetected;
|
||||
return hands;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,23 @@ export const now = () => {
|
|||
return parseInt((Number(process.hrtime.bigint()) / 1000 / 1000).toString());
|
||||
};
|
||||
|
||||
// helper function: checks current config validity
|
||||
export function validate(defaults, config, parent = 'config', msgs: Array<{ reason: string, where: string, expected?: string }> = []) {
|
||||
for (const key of Object.keys(config)) {
|
||||
if (typeof config[key] === 'object') {
|
||||
validate(defaults[key], config[key], key, msgs);
|
||||
} else {
|
||||
const defined = (typeof defaults[key] !== 'undefined');
|
||||
if (!defined) msgs.push({ reason: 'unknown property', where: `${parent}.${key} = ${config[key]}` });
|
||||
const same = typeof defaults[key] === typeof config[key];
|
||||
if (defined && !same) msgs.push({ reason: 'property type mismatch', where: `${parent}.${key} = ${config[key]}`, expected: typeof defaults[key] });
|
||||
}
|
||||
// ok = ok && defined && same;
|
||||
}
|
||||
if (config.debug && parent === 'config' && msgs.length > 0) log('invalid configuration', msgs);
|
||||
return msgs;
|
||||
}
|
||||
|
||||
// helper function: perform deep merge of multiple objects so it allows full inheriance with overrides
|
||||
export function mergeDeep(...objects) {
|
||||
const isObject = (obj) => obj && typeof obj === 'object';
|
||||
|
|
13
src/human.ts
13
src/human.ts
|
@ -2,7 +2,7 @@
|
|||
* Human main module
|
||||
*/
|
||||
|
||||
import { log, now, mergeDeep } from './helpers';
|
||||
import { log, now, mergeDeep, validate } from './helpers';
|
||||
import { Config, defaults } from './config';
|
||||
import type { Result, FaceResult, HandResult, BodyResult, ObjectResult, GestureResult, PersonResult } from './result';
|
||||
import * as tf from '../dist/tfjs.esm.js';
|
||||
|
@ -173,7 +173,10 @@ export class Human {
|
|||
defaults.backend = this.env.browser ? 'humangl' : 'tensorflow';
|
||||
this.version = app.version; // expose version property on instance of class
|
||||
Object.defineProperty(this, 'version', { value: app.version }); // expose version property directly on class itself
|
||||
this.config = mergeDeep(defaults, userConfig || {});
|
||||
this.config = JSON.parse(JSON.stringify(defaults));
|
||||
Object.seal(this.config);
|
||||
if (userConfig) this.config = mergeDeep(this.config, userConfig);
|
||||
validate(defaults, this.config);
|
||||
this.tf = tf;
|
||||
this.state = 'idle';
|
||||
this.#numTensors = 0;
|
||||
|
@ -248,6 +251,12 @@ export class Human {
|
|||
return null;
|
||||
}
|
||||
|
||||
/** Reset configuration to default values */
|
||||
reset = () => this.config = JSON.parse(JSON.stringify(defaults));
|
||||
|
||||
/** Validate current configuration schema */
|
||||
validate = (userConfig?: Partial<Config>) => validate(defaults, userConfig || this.config);
|
||||
|
||||
/** Process input as return canvas and tensor
|
||||
*
|
||||
* @param input: {@link Input}
|
||||
|
|
|
@ -166,7 +166,7 @@ export function process(input: Input, config: Config): { tensor: Tensor | null,
|
|||
let pixels;
|
||||
if (outCanvas.data) { // if we have data, just convert to tensor
|
||||
const shape = [outCanvas.height, outCanvas.width, 3];
|
||||
pixels = tf.tensor3d(outCanvas.data, shape, 'int32');
|
||||
pixels = tf.tensor3d(outCanvas.data, shape, 'float32');
|
||||
} else if ((typeof ImageData !== 'undefined') && (outCanvas instanceof ImageData)) { // if input is imagedata, just use it
|
||||
pixels = tf.browser ? tf.browser.fromPixels(outCanvas) : null;
|
||||
} else if (config.backend === 'webgl' || config.backend === 'humangl') { // tf kernel-optimized method to get imagedata
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
2021-09-18 19:04:52 [36mINFO: [39m @vladmandic/human version 2.2.2
|
||||
2021-09-18 19:04:52 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.5.0
|
||||
2021-09-18 19:04:52 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.2.2"}
|
||||
2021-09-18 19:04:52 [36mINFO: [39m Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2021-09-18 19:04:52 [36mINFO: [39m Toolchain: {"build":"0.5.1","esbuild":"0.12.28","typescript":"4.4.3","typedoc":"0.22.4","eslint":"7.32.0"}
|
||||
2021-09-18 19:04:52 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2021-09-18 19:04:52 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2021-09-18 19:04:52 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
|
||||
2021-09-18 19:04:52 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":50,"inputBytes":480126,"outputBytes":407414}
|
||||
2021-09-18 19:04:52 [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":110,"outputBytes":1424}
|
||||
2021-09-18 19:04:52 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":50,"inputBytes":480134,"outputBytes":407418}
|
||||
2021-09-18 19:04:52 [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":149,"outputBytes":1491}
|
||||
2021-09-18 19:04:52 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":50,"inputBytes":480201,"outputBytes":407490}
|
||||
2021-09-18 19:04:52 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||
2021-09-18 19:04:52 [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":3088,"outputBytes":793}
|
||||
2021-09-18 19:04:52 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":50,"inputBytes":479503,"outputBytes":408707}
|
||||
2021-09-18 19:04:53 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2376809}
|
||||
2021-09-18 19:04:53 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":50,"inputBytes":2855519,"outputBytes":1408621}
|
||||
2021-09-18 19:04:54 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":50,"inputBytes":2855519,"outputBytes":2612626}
|
||||
2021-09-18 19:05:10 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":94}
|
||||
2021-09-18 19:05:16 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":29,"generated":true}
|
||||
2021-09-18 19:05:41 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":83,"errors":0,"warnings":0}
|
||||
2021-09-18 19:05:41 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2021-09-18 19:05:41 [36mINFO: [39m Done...
|
||||
2021-09-19 13:55:00 [36mINFO: [39m @vladmandic/human version 2.2.2
|
||||
2021-09-19 13:55:00 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.5.0
|
||||
2021-09-19 13:55:00 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.2.2"}
|
||||
2021-09-19 13:55:00 [36mINFO: [39m Environment: {"profile":"production","config":"build.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2021-09-19 13:55:00 [36mINFO: [39m Toolchain: {"build":"0.5.2","esbuild":"0.12.28","typescript":"4.4.3","typedoc":"0.22.4","eslint":"7.32.0"}
|
||||
2021-09-19 13:55:00 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2021-09-19 13:55:00 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2021-09-19 13:55:00 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1416}
|
||||
2021-09-19 13:55:01 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":50,"inputBytes":481770,"outputBytes":408805}
|
||||
2021-09-19 13:55:01 [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":110,"outputBytes":1424}
|
||||
2021-09-19 13:55:01 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":50,"inputBytes":481778,"outputBytes":408809}
|
||||
2021-09-19 13:55:01 [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":149,"outputBytes":1491}
|
||||
2021-09-19 13:55:01 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":50,"inputBytes":481845,"outputBytes":408881}
|
||||
2021-09-19 13:55:01 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1631}
|
||||
2021-09-19 13:55:01 [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":3088,"outputBytes":793}
|
||||
2021-09-19 13:55:01 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":50,"inputBytes":481147,"outputBytes":410098}
|
||||
2021-09-19 13:55:01 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":8,"inputBytes":3088,"outputBytes":2376809}
|
||||
2021-09-19 13:55:01 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":50,"inputBytes":2857163,"outputBytes":1409412}
|
||||
2021-09-19 13:55:02 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":50,"inputBytes":2857163,"outputBytes":2614017}
|
||||
2021-09-19 13:55:18 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":94}
|
||||
2021-09-19 13:55:23 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":29,"generated":true}
|
||||
2021-09-19 13:55:51 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":83,"errors":0,"warnings":0}
|
||||
2021-09-19 13:55:52 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2021-09-19 13:55:52 [36mINFO: [39m Done...
|
||||
|
|
|
@ -40,14 +40,16 @@ async function getImage(human, input) {
|
|||
ctx.drawImage(img, 0, 0, img.width, img.height);
|
||||
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||
const res = human.tf.tidy(() => {
|
||||
const tensor = human.tf.tensor(Array.from(imageData.data), [canvas.height, canvas.width, 4], 'int32'); // create rgba image tensor from flat array
|
||||
const tensor = human.tf.tensor(Array.from(imageData.data), [canvas.height, canvas.width, 4], 'float32'); // create rgba image tensor from flat array
|
||||
const channels = human.tf.split(tensor, 4, 2); // split rgba to channels
|
||||
const rgb = human.tf.stack([channels[0], channels[1], channels[2]], 2); // stack channels back to rgb
|
||||
const reshape = human.tf.reshape(rgb, [1, canvas.height, canvas.width, 3]); // move extra dim from the end of tensor and use it as batch number instead
|
||||
return reshape;
|
||||
});
|
||||
if (res && res.shape[0] === 1 && res.shape[3] === 3) log('state', 'passed: load image:', input, res.shape);
|
||||
const sum = human.tf.sum(res);
|
||||
if (res && res.shape[0] === 1 && res.shape[3] === 3) log('state', 'passed: load image:', input, res.shape, { checksum: sum.dataSync()[0] });
|
||||
else log('error', 'failed: load image:', input, res);
|
||||
human.tf.dispose(sum);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -98,10 +100,10 @@ async function testWarmup(human, title) {
|
|||
// const count = human.tf.engine().state.numTensors;
|
||||
// if (count - tensors > 0) log('warn', 'failed: memory', config.warmup, title, 'tensors:', count - tensors);
|
||||
printResults(warmup);
|
||||
return true;
|
||||
} else {
|
||||
log('error', 'failed: warmup:', config.warmup, title);
|
||||
}
|
||||
log('error', 'failed: warmup:', config.warmup, title);
|
||||
return false;
|
||||
return warmup;
|
||||
}
|
||||
|
||||
async function testDetect(human, input, title) {
|
||||
|
@ -124,10 +126,10 @@ async function testDetect(human, input, title) {
|
|||
// const count = human.tf.engine().state.numTensors;
|
||||
// if (count - tensors > 0) log('warn', 'failed: memory', config.warmup, title, 'tensors:', count - tensors);
|
||||
printResults(detect);
|
||||
return true;
|
||||
} else {
|
||||
log('error', 'failed: detect', input || 'random', title);
|
||||
}
|
||||
log('error', 'failed: detect', input || 'random', title);
|
||||
return false;
|
||||
return detect;
|
||||
}
|
||||
const evt = { image: 0, detect: 0, warmup: 0 };
|
||||
async function events(event) {
|
||||
|
@ -144,33 +146,94 @@ async function test(Human, inputConfig) {
|
|||
return;
|
||||
}
|
||||
const t0 = process.hrtime.bigint();
|
||||
let human;
|
||||
let res;
|
||||
|
||||
// test event emitter
|
||||
human = new Human(config);
|
||||
const human = new Human(config);
|
||||
|
||||
human.events.addEventListener('warmup', () => events('warmup'));
|
||||
human.events.addEventListener('image', () => events('image'));
|
||||
human.events.addEventListener('detect', () => events('detect'));
|
||||
|
||||
// test configuration validation
|
||||
let invalid = human.validate();
|
||||
if (invalid.length === 0) log('state', 'passed: configuration default validation', invalid);
|
||||
else log('error', 'failed: configuration default validation', invalid);
|
||||
config.invalid = true;
|
||||
invalid = human.validate(config);
|
||||
if (invalid.length === 1) log('state', 'passed: configuration invalid validation', invalid);
|
||||
else log('error', 'failed: configuration default validation', invalid);
|
||||
delete config.invalid;
|
||||
|
||||
// test warmup sequences
|
||||
await testInstance(human);
|
||||
config.warmup = 'none';
|
||||
await testWarmup(human, 'default');
|
||||
res = await testWarmup(human, 'default');
|
||||
if (res.error !== 'null') log('error', 'failed: warmup none result mismatch');
|
||||
else log('state', 'passed: warmup none result match');
|
||||
config.warmup = 'face';
|
||||
await testWarmup(human, 'default');
|
||||
res = await testWarmup(human, 'default');
|
||||
if (!res || res?.face?.length !== 1 || res?.body?.length !== 1 || res?.hand?.length !== 0 || res?.gesture?.length !== 3) log('error', 'failed: warmup face result mismatch', res?.face?.length, res?.body?.length, res?.hand?.length, res?.gesture?.length);
|
||||
else log('state', 'passed: warmup face result match');
|
||||
|
||||
config.warmup = 'body';
|
||||
await testWarmup(human, 'default');
|
||||
res = await testWarmup(human, 'default');
|
||||
if (!res || res?.face?.length !== 1 || res?.body?.length !== 1 || res?.hand?.length !== 0 || res?.gesture?.length !== 3) log('error', 'failed: warmup body result mismatch', res?.face?.length, res?.body?.length, res?.hand?.length, res?.gesture?.length);
|
||||
else log('state', 'passed: warmup body result match');
|
||||
|
||||
// test default config
|
||||
log('info', 'test default');
|
||||
human = new Human(config);
|
||||
await testDetect(human, 'samples/ai-body.jpg', 'default');
|
||||
human.reset();
|
||||
config.cacheSensitivity = 0;
|
||||
res = await testDetect(human, 'samples/ai-body.jpg', 'default');
|
||||
if (!res || res?.face?.length !== 1 || res?.face[0].gender !== 'female') log('error', 'failed: default result face mismatch', res?.face?.length, res?.body?.length, res?.hand?.length, res?.gesture?.length);
|
||||
else log('state', 'passed: default result face match');
|
||||
|
||||
// test default config
|
||||
log('info', 'test object');
|
||||
human.reset();
|
||||
config.object = { enabled: true };
|
||||
res = await testDetect(human, 'samples/ai-body.jpg', 'default');
|
||||
if (!res || res?.object?.length !== 1 || res?.object[0]?.label !== 'person') log('error', 'failed: object result mismatch', res?.object?.length);
|
||||
else log('state', 'passed: object result match');
|
||||
|
||||
// test sensitive config
|
||||
log('info', 'test sensitive');
|
||||
human.reset();
|
||||
config.cacheSensitivity = 0;
|
||||
config.face = { detector: { minConfidence: 0.0001, maxDetected: 1 } };
|
||||
config.body = { minConfidence: 0.0001, maxDetected: 1 };
|
||||
config.hand = { minConfidence: 0.0001, maxDetected: 3 };
|
||||
res = await testDetect(human, 'samples/ai-body.jpg', 'default');
|
||||
if (!res || res?.face?.length !== 1 || res?.body?.length !== 1 || res?.hand?.length !== 3 || res?.gesture?.length !== 9) log('error', 'failed: sensitive result mismatch', res?.face?.length, res?.body?.length, res?.hand?.length, res?.gesture?.length);
|
||||
else log('state', 'passed: sensitive result match');
|
||||
|
||||
// test sensitive details face
|
||||
const face = res && res.face ? res.face[0] : null;
|
||||
if (!face || face?.box?.length !== 4 || face?.mesh?.length !== 478 || face?.emotion?.length !== 4 || face?.embedding?.length !== 1024 || face?.rotation?.matrix?.length !== 9) {
|
||||
log('error', 'failed: sensitive face result mismatch', res?.face?.length, face?.box?.length, face?.mesh?.length, face?.emotion?.length, face?.embedding?.length, face?.rotation?.matrix?.length);
|
||||
} else log('state', 'passed: sensitive face result match');
|
||||
|
||||
// test sensitive details body
|
||||
const body = res && res.body ? res.body[0] : null;
|
||||
if (!body || body?.box?.length !== 4 || body?.keypoints?.length !== 17) log('error', 'failed: sensitive body result mismatch', body);
|
||||
else log('state', 'passed: sensitive body result match');
|
||||
|
||||
// test sensitive details hand
|
||||
const hand = res && res.hand ? res.hand[0] : null;
|
||||
if (!hand || hand?.box?.length !== 4 || hand?.keypoints?.length !== 21) log('error', 'failed: sensitive hand result mismatch', hand?.keypoints?.length);
|
||||
else log('state', 'passed: sensitive hand result match');
|
||||
|
||||
// test detectors only
|
||||
log('info', 'test detectors');
|
||||
config.face = { mesh: { enabled: false }, iris: { enabled: false }, hand: { landmarks: false } };
|
||||
human = new Human(config);
|
||||
await testDetect(human, 'samples/ai-body.jpg', 'default');
|
||||
human.reset();
|
||||
config.face = { mesh: { enabled: false }, iris: { enabled: false }, description: { enabled: false }, emotion: { enabled: false } };
|
||||
config.hand = { landmarks: false };
|
||||
res = await testDetect(human, 'samples/ai-body.jpg', 'default');
|
||||
if (!res || res?.face?.length !== 1 || res?.face[0]?.gender || res?.face[0]?.age || res?.face[0]?.embedding) log('error', 'failed: detectors result face mismatch', res?.face);
|
||||
else log('state', 'passed: detector result face match');
|
||||
if (!res || res?.hand?.length !== 1 || res?.hand[0]?.landmarks) log('error', 'failed: detectors result hand mismatch', res?.hand?.length);
|
||||
else log('state', 'passed: detector result hand match');
|
||||
|
||||
// test posenet and movenet
|
||||
log('info', 'test body variants');
|
||||
|
|
|
@ -8,7 +8,7 @@ const config = {
|
|||
async: true,
|
||||
face: {
|
||||
enabled: true,
|
||||
detector: { enabled: true, rotation: true },
|
||||
detector: { rotation: true },
|
||||
mesh: { enabled: true },
|
||||
iris: { enabled: true },
|
||||
description: { enabled: true },
|
||||
|
|
|
@ -19,7 +19,7 @@ const config = {
|
|||
async: false,
|
||||
face: {
|
||||
enabled: true,
|
||||
detector: { enabled: true, rotation: false },
|
||||
detector: { rotation: false },
|
||||
mesh: { enabled: true },
|
||||
iris: { enabled: true },
|
||||
description: { enabled: true },
|
||||
|
|
|
@ -5,19 +5,19 @@ const config = {
|
|||
modelBasePath: 'file://models/',
|
||||
backend: 'tensorflow',
|
||||
debug: false,
|
||||
async: false,
|
||||
async: true,
|
||||
face: {
|
||||
enabled: true,
|
||||
detector: { enabled: true, rotation: true },
|
||||
detector: { rotation: true },
|
||||
mesh: { enabled: true },
|
||||
iris: { enabled: true },
|
||||
description: { enabled: true },
|
||||
emotion: { enabled: true },
|
||||
},
|
||||
hand: { enabled: false, rotation: true },
|
||||
body: { enabled: false },
|
||||
object: { enabled: false },
|
||||
segmentation: { enabled: false },
|
||||
hand: { enabled: true },
|
||||
body: { enabled: true },
|
||||
object: { enabled: true },
|
||||
segmentation: { enabled: true },
|
||||
filter: { enabled: false },
|
||||
};
|
||||
|
||||
|
|
17
test/test.js
17
test/test.js
|
@ -23,15 +23,18 @@ const ignoreMessages = [
|
|||
'ExperimentalWarning',
|
||||
];
|
||||
|
||||
const status = {
|
||||
passed: 0,
|
||||
failed: 0,
|
||||
};
|
||||
const status = {};
|
||||
|
||||
function logMessage(test, data) {
|
||||
log[data[0]](test, ...data[1]);
|
||||
if (data[1][0].startsWith('passed')) status.passed++;
|
||||
if (data[1][0].startsWith('failed')) status.failed++;
|
||||
if (!status[test]) status[test] = { passed: 0, failed: 0 };
|
||||
if (log[data[0]]) {
|
||||
log[data[0]](test, ...data[1]);
|
||||
} else {
|
||||
log.error('unknown facility', test, ...data[1]);
|
||||
status[test].failed++;
|
||||
}
|
||||
if (data[1][0].startsWith('passed')) status[test].passed++;
|
||||
if (data[1][0].startsWith('failed')) status[test].failed++;
|
||||
}
|
||||
|
||||
function logStdIO(ok, test, buffer) {
|
||||
|
|
723
test/test.log
723
test/test.log
|
@ -1,297 +1,426 @@
|
|||
2021-09-18 19:06:19 [36mINFO: [39m @vladmandic/human version 2.2.2
|
||||
2021-09-18 19:06:19 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.5.0
|
||||
2021-09-18 19:06:19 [36mINFO: [39m tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"]
|
||||
2021-09-18 19:06:19 [36mINFO: [39m
|
||||
2021-09-18 19:06:19 [36mINFO: [39m test-node.js start
|
||||
2021-09-18 19:06:20 [35mSTATE:[39m test-node.js passed: create human
|
||||
2021-09-18 19:06:20 [36mINFO: [39m test-node.js human version: 2.2.2
|
||||
2021-09-18 19:06:20 [36mINFO: [39m test-node.js platform: linux x64 agent: NodeJS v16.5.0
|
||||
2021-09-18 19:06:20 [36mINFO: [39m test-node.js tfjs version: 3.9.0
|
||||
2021-09-18 19:06:20 [35mSTATE:[39m test-node.js passed: set backend: tensorflow
|
||||
2021-09-18 19:06:20 [35mSTATE:[39m test-node.js tensors 573
|
||||
2021-09-18 19:06:20 [35mSTATE:[39m test-node.js passed: load models
|
||||
2021-09-18 19:06:20 [35mSTATE:[39m test-node.js result: defined models: 14 loaded models: 3
|
||||
2021-09-18 19:06:20 [35mSTATE:[39m test-node.js passed: warmup: none default
|
||||
2021-09-18 19:06:20 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-18 19:06:21 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-18 19:06:21 [35mSTATE:[39m test-node.js event: warmup
|
||||
2021-09-18 19:06:21 [35mSTATE:[39m test-node.js passed: warmup: face default
|
||||
2021-09-18 19:06:21 [32mDATA: [39m test-node.js result: face: 1 body: 0 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {}
|
||||
2021-09-18 19:06:21 [32mDATA: [39m test-node.js result: performance: load: 121 total: 577
|
||||
2021-09-18 19:06:21 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-18 19:06:21 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-18 19:06:21 [35mSTATE:[39m test-node.js event: warmup
|
||||
2021-09-18 19:06:21 [35mSTATE:[39m test-node.js passed: warmup: body default
|
||||
2021-09-18 19:06:21 [32mDATA: [39m test-node.js result: face: 1 body: 0 hand: 0 gesture: 2 object: 0 person: 1 {"score":1,"age":29.5,"gender":"female"} {} {}
|
||||
2021-09-18 19:06:21 [32mDATA: [39m test-node.js result: performance: load: 121 total: 320
|
||||
2021-09-18 19:06:21 [36mINFO: [39m test-node.js test default
|
||||
2021-09-18 19:06:22 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:22 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:22 [32mDATA: [39m test-node.js result: face: 1 body: 0 hand: 0 gesture: 2 object: 0 person: 1 {"score":1,"age":29.5,"gender":"female"} {} {}
|
||||
2021-09-18 19:06:22 [32mDATA: [39m test-node.js result: performance: load: 0 total: 264
|
||||
2021-09-18 19:06:22 [36mINFO: [39m test-node.js test detectors
|
||||
2021-09-18 19:06:23 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:23 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:23 [32mDATA: [39m test-node.js result: face: 1 body: 0 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.93,"age":29.5,"gender":"female"} {} {}
|
||||
2021-09-18 19:06:23 [32mDATA: [39m test-node.js result: performance: load: 1 total: 85
|
||||
2021-09-18 19:06:23 [36mINFO: [39m test-node.js test body variants
|
||||
2021-09-18 19:06:24 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:24 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg posenet
|
||||
2021-09-18 19:06:24 [32mDATA: [39m test-node.js result: face: 1 body: 0 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.93,"age":29.5,"gender":"female"} {} {}
|
||||
2021-09-18 19:06:24 [32mDATA: [39m test-node.js result: performance: load: 1 total: 102
|
||||
2021-09-18 19:06:25 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:25 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg movenet
|
||||
2021-09-18 19:06:25 [32mDATA: [39m test-node.js result: face: 1 body: 0 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.93,"age":29.5,"gender":"female"} {} {}
|
||||
2021-09-18 19:06:25 [32mDATA: [39m test-node.js result: performance: load: 1 total: 90
|
||||
2021-09-18 19:06:25 [35mSTATE:[39m test-node.js passed: detect: random default
|
||||
2021-09-18 19:06:25 [32mDATA: [39m test-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {}
|
||||
2021-09-18 19:06:25 [32mDATA: [39m test-node.js result: performance: load: 1 total: 77
|
||||
2021-09-18 19:06:25 [36mINFO: [39m test-node.js test: first instance
|
||||
2021-09-18 19:06:25 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:26 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:26 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96,"age":29.5,"gender":"female"} {} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:26 [32mDATA: [39m test-node.js result: performance: load: 44 total: 286
|
||||
2021-09-18 19:06:26 [36mINFO: [39m test-node.js test: second instance
|
||||
2021-09-18 19:06:26 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:26 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:26 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.96,"age":29.5,"gender":"female"} {} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:26 [32mDATA: [39m test-node.js result: performance: load: 0 total: 73
|
||||
2021-09-18 19:06:26 [36mINFO: [39m test-node.js test: concurrent
|
||||
2021-09-18 19:06:26 [35mSTATE:[39m test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:06:26 [35mSTATE:[39m test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:06:26 [35mSTATE:[39m test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:06:27 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:28 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:29 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:29 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:29 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:30 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:31 [35mSTATE:[39m test-node.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:06:31 [32mDATA: [39m test-node.js result: face: 1 body: 0 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.91,"age":23.6,"gender":"female"} {} {}
|
||||
2021-09-18 19:06:31 [32mDATA: [39m test-node.js result: performance: load: 1 total: 1598
|
||||
2021-09-18 19:06:32 [35mSTATE:[39m test-node.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:06:32 [32mDATA: [39m test-node.js result: face: 2 body: 1 hand: 0 gesture: 0 object: 0 person: 2 {"score":0.91,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":4}
|
||||
2021-09-18 19:06:32 [32mDATA: [39m test-node.js result: performance: load: 44 total: 2782
|
||||
2021-09-18 19:06:32 [35mSTATE:[39m test-node.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:06:32 [32mDATA: [39m test-node.js result: face: 3 body: 1 hand: 0 gesture: 0 object: 0 person: 3 {"score":0.91,"age":29.2,"gender":"male"} {} {"score":0.47,"keypoints":4}
|
||||
2021-09-18 19:06:32 [32mDATA: [39m test-node.js result: performance: load: 0 total: 2839
|
||||
2021-09-18 19:06:33 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:33 [32mDATA: [39m test-node.js result: face: 4 body: 0 hand: 0 gesture: 0 object: 0 person: 4 {"score":0.91,"age":29.2,"gender":"male"} {} {}
|
||||
2021-09-18 19:06:33 [32mDATA: [39m test-node.js result: performance: load: 1 total: 3302
|
||||
2021-09-18 19:06:34 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 0 person: 5 {"score":0.91,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: performance: load: 44 total: 4027
|
||||
2021-09-18 19:06:34 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: face: 6 body: 1 hand: 0 gesture: 1 object: 0 person: 6 {"score":0.91,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: performance: load: 0 total: 4066
|
||||
2021-09-18 19:06:34 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: face: 7 body: 0 hand: 0 gesture: 0 object: 0 person: 7 {"score":0.91,"age":29.2,"gender":"male"} {} {}
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: performance: load: 1 total: 4331
|
||||
2021-09-18 19:06:34 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: face: 8 body: 1 hand: 0 gesture: 1 object: 0 person: 8 {"score":0.91,"age":29.2,"gender":"male"} {} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: performance: load: 44 total: 4601
|
||||
2021-09-18 19:06:34 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: face: 9 body: 1 hand: 0 gesture: 1 object: 0 person: 9 {"score":0.91,"age":29.2,"gender":"male"} {} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:34 [32mDATA: [39m test-node.js result: performance: load: 0 total: 4601
|
||||
2021-09-18 19:06:34 [35mSTATE:[39m test-node.js passeed: no memory leak
|
||||
2021-09-18 19:06:34 [35mSTATE:[39m test-node.js passeed: equal usage
|
||||
2021-09-18 19:06:34 [36mINFO: [39m test-node.js events: {"image":2,"detect":2,"warmup":2}
|
||||
2021-09-18 19:06:34 [36mINFO: [39m test-node.js test complete: 14111 ms
|
||||
2021-09-18 19:06:34 [36mINFO: [39m
|
||||
2021-09-18 19:06:34 [36mINFO: [39m test-node-gpu.js start
|
||||
2021-09-18 19:06:35 [33mWARN: [39m test-node-gpu.js stderr: 2021-09-18 19:06:35.339859: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 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-09-18 19:06:35 [33mWARN: [39m test-node-gpu.js stderr: 2021-09-18 19:06:35.517226: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
|
||||
2021-09-18 19:06:35 [33mWARN: [39m test-node-gpu.js stderr: 2021-09-18 19:06:35.517278: 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-09-18 19:06:35 [35mSTATE:[39m test-node-gpu.js passed: create human
|
||||
2021-09-18 19:06:35 [36mINFO: [39m test-node-gpu.js human version: 2.2.2
|
||||
2021-09-18 19:06:35 [36mINFO: [39m test-node-gpu.js platform: linux x64 agent: NodeJS v16.5.0
|
||||
2021-09-18 19:06:35 [36mINFO: [39m test-node-gpu.js tfjs version: 3.9.0
|
||||
2021-09-18 19:06:35 [35mSTATE:[39m test-node-gpu.js passed: set backend: tensorflow
|
||||
2021-09-18 19:06:35 [35mSTATE:[39m test-node-gpu.js tensors 1456
|
||||
2021-09-18 19:06:35 [35mSTATE:[39m test-node-gpu.js passed: load models
|
||||
2021-09-18 19:06:35 [35mSTATE:[39m test-node-gpu.js result: defined models: 14 loaded models: 7
|
||||
2021-09-18 19:06:35 [35mSTATE:[39m test-node-gpu.js passed: warmup: none default
|
||||
2021-09-18 19:06:35 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-18 19:06:37 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-18 19:06:37 [35mSTATE:[39m test-node-gpu.js event: warmup
|
||||
2021-09-18 19:06:37 [35mSTATE:[39m test-node-gpu.js passed: warmup: face default
|
||||
2021-09-18 19:06:37 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
|
||||
2021-09-18 19:06:37 [32mDATA: [39m test-node-gpu.js result: performance: load: 289 total: 1125
|
||||
2021-09-18 19:06:37 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-18 19:06:38 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-18 19:06:38 [35mSTATE:[39m test-node-gpu.js event: warmup
|
||||
2021-09-18 19:06:38 [35mSTATE:[39m test-node-gpu.js passed: warmup: body default
|
||||
2021-09-18 19:06:38 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:06:38 [32mDATA: [39m test-node-gpu.js result: performance: load: 289 total: 1084
|
||||
2021-09-18 19:06:38 [36mINFO: [39m test-node-gpu.js test default
|
||||
2021-09-18 19:06:39 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:39 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:39 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:06:39 [32mDATA: [39m test-node-gpu.js result: performance: load: 6 total: 591
|
||||
2021-09-18 19:06:39 [36mINFO: [39m test-node-gpu.js test detectors
|
||||
2021-09-18 19:06:40 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:41 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:41 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.93,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:06:41 [32mDATA: [39m test-node-gpu.js result: performance: load: 2 total: 592
|
||||
2021-09-18 19:06:41 [36mINFO: [39m test-node-gpu.js test body variants
|
||||
2021-09-18 19:06:41 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:42 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg posenet
|
||||
2021-09-18 19:06:42 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.93,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.96,"keypoints":16}
|
||||
2021-09-18 19:06:42 [32mDATA: [39m test-node-gpu.js result: performance: load: 35 total: 185
|
||||
2021-09-18 19:06:42 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:43 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg movenet
|
||||
2021-09-18 19:06:43 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.93,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:06:43 [32mDATA: [39m test-node-gpu.js result: performance: load: 35 total: 75
|
||||
2021-09-18 19:06:43 [35mSTATE:[39m test-node-gpu.js passed: detect: random default
|
||||
2021-09-18 19:06:43 [32mDATA: [39m 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-09-18 19:06:43 [32mDATA: [39m test-node-gpu.js result: performance: load: 35 total: 155
|
||||
2021-09-18 19:06:43 [36mINFO: [39m test-node-gpu.js test: first instance
|
||||
2021-09-18 19:06:43 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:43 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:43 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:43 [32mDATA: [39m test-node-gpu.js result: performance: load: 4 total: 340
|
||||
2021-09-18 19:06:43 [36mINFO: [39m test-node-gpu.js test: second instance
|
||||
2021-09-18 19:06:44 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:44 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:44 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:44 [32mDATA: [39m test-node-gpu.js result: performance: load: 3 total: 230
|
||||
2021-09-18 19:06:44 [36mINFO: [39m test-node-gpu.js test: concurrent
|
||||
2021-09-18 19:06:44 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:06:44 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:06:44 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:06:45 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:46 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:47 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:06:47 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:47 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:48 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:06:52 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:06:52 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.91,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
|
||||
2021-09-18 19:06:52 [32mDATA: [39m test-node-gpu.js result: performance: load: 35 total: 3949
|
||||
2021-09-18 19:06:52 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:06:52 [32mDATA: [39m test-node-gpu.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.91,"age":23.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:52 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 4514
|
||||
2021-09-18 19:06:53 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:06:53 [32mDATA: [39m test-node-gpu.js result: face: 3 body: 1 hand: 0 gesture: 1 object: 1 person: 3 {"score":0.91,"age":29.2,"gender":"male"} {"score":0.72,"class":"person"} {"score":0.47,"keypoints":10}
|
||||
2021-09-18 19:06:53 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 4975
|
||||
2021-09-18 19:06:53 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:53 [32mDATA: [39m test-node-gpu.js result: face: 4 body: 1 hand: 0 gesture: 1 object: 1 person: 4 {"score":0.91,"age":29.2,"gender":"male"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
|
||||
2021-09-18 19:06:53 [32mDATA: [39m test-node-gpu.js result: performance: load: 35 total: 5373
|
||||
2021-09-18 19:06:53 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:53 [32mDATA: [39m test-node-gpu.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 1 person: 5 {"score":0.91,"age":29.2,"gender":"male"} {"score":0.72,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:53 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 5730
|
||||
2021-09-18 19:06:54 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:06:54 [32mDATA: [39m test-node-gpu.js result: face: 6 body: 1 hand: 0 gesture: 1 object: 1 person: 6 {"score":0.91,"age":29.2,"gender":"male"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
|
||||
2021-09-18 19:06:54 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 5956
|
||||
2021-09-18 19:06:54 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:54 [32mDATA: [39m test-node-gpu.js result: face: 7 body: 1 hand: 0 gesture: 1 object: 1 person: 7 {"score":0.91,"age":29.2,"gender":"male"} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:54 [32mDATA: [39m test-node-gpu.js result: performance: load: 35 total: 6115
|
||||
2021-09-18 19:06:54 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:54 [32mDATA: [39m test-node-gpu.js result: face: 8 body: 1 hand: 0 gesture: 1 object: 1 person: 8 {"score":0.91,"age":29.2,"gender":"male"} {"score":0.72,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:54 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 6200
|
||||
2021-09-18 19:06:54 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:06:54 [32mDATA: [39m test-node-gpu.js result: face: 9 body: 1 hand: 0 gesture: 1 object: 1 person: 9 {"score":0.91,"age":29.2,"gender":"male"} {"score":0.72,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-18 19:06:54 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 6201
|
||||
2021-09-18 19:06:54 [35mSTATE:[39m test-node-gpu.js passeed: no memory leak
|
||||
2021-09-18 19:06:54 [35mSTATE:[39m test-node-gpu.js passeed: equal usage
|
||||
2021-09-18 19:06:54 [36mINFO: [39m test-node-gpu.js events: {"image":2,"detect":2,"warmup":2}
|
||||
2021-09-18 19:06:54 [36mINFO: [39m test-node-gpu.js test complete: 18686 ms
|
||||
2021-09-18 19:06:54 [36mINFO: [39m
|
||||
2021-09-18 19:06:54 [36mINFO: [39m test-node-wasm.js start
|
||||
2021-09-18 19:06:54 [35mSTATE:[39m test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/
|
||||
2021-09-18 19:06:54 [35mSTATE:[39m test-node-wasm.js passed: create human
|
||||
2021-09-18 19:06:54 [36mINFO: [39m test-node-wasm.js human version: 2.2.2
|
||||
2021-09-18 19:06:54 [36mINFO: [39m test-node-wasm.js platform: linux x64 agent: NodeJS v16.5.0
|
||||
2021-09-18 19:06:54 [36mINFO: [39m test-node-wasm.js tfjs version: 3.9.0
|
||||
2021-09-18 19:06:56 [35mSTATE:[39m test-node-wasm.js passed: set backend: wasm
|
||||
2021-09-18 19:06:56 [35mSTATE:[39m test-node-wasm.js tensors 1189
|
||||
2021-09-18 19:06:56 [35mSTATE:[39m test-node-wasm.js passed: load models
|
||||
2021-09-18 19:06:56 [35mSTATE:[39m test-node-wasm.js result: defined models: 14 loaded models: 6
|
||||
2021-09-18 19:06:56 [35mSTATE:[39m test-node-wasm.js passed: warmup: none default
|
||||
2021-09-18 19:06:57 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-18 19:06:57 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-18 19:06:57 [35mSTATE:[39m test-node-wasm.js event: warmup
|
||||
2021-09-18 19:06:57 [35mSTATE:[39m test-node-wasm.js passed: warmup: face default
|
||||
2021-09-18 19:06:57 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":4}
|
||||
2021-09-18 19:06:57 [32mDATA: [39m test-node-wasm.js result: performance: load: 1917 total: 1032
|
||||
2021-09-18 19:07:01 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-18 19:07:02 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-18 19:07:02 [35mSTATE:[39m test-node-wasm.js event: warmup
|
||||
2021-09-18 19:07:02 [35mSTATE:[39m test-node-wasm.js passed: warmup: body default
|
||||
2021-09-18 19:07:02 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:02 [32mDATA: [39m test-node-wasm.js result: performance: load: 1917 total: 2626
|
||||
2021-09-18 19:07:02 [36mINFO: [39m test-node-wasm.js test default
|
||||
2021-09-18 19:07:03 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:07:06 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:07:06 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:06 [32mDATA: [39m test-node-wasm.js result: performance: load: 4 total: 2293
|
||||
2021-09-18 19:07:06 [36mINFO: [39m test-node-wasm.js test detectors
|
||||
2021-09-18 19:07:07 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:07:09 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:07:09 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.93,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:09 [32mDATA: [39m test-node-wasm.js result: performance: load: 15 total: 2300
|
||||
2021-09-18 19:07:09 [36mINFO: [39m test-node-wasm.js test body variants
|
||||
2021-09-18 19:07:11 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:07:13 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg posenet
|
||||
2021-09-18 19:07:13 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.93,"age":28.5,"gender":"female"} {} {"score":0.96,"keypoints":16}
|
||||
2021-09-18 19:07:13 [32mDATA: [39m test-node-wasm.js result: performance: load: 316 total: 1938
|
||||
2021-09-18 19:07:15 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:07:16 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg movenet
|
||||
2021-09-18 19:07:16 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.93,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:16 [32mDATA: [39m test-node-wasm.js result: performance: load: 316 total: 1751
|
||||
2021-09-18 19:07:18 [35mSTATE:[39m test-node-wasm.js passed: detect: random default
|
||||
2021-09-18 19:07:18 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.93,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:18 [32mDATA: [39m test-node-wasm.js result: performance: load: 316 total: 1734
|
||||
2021-09-18 19:07:18 [36mINFO: [39m test-node-wasm.js test: first instance
|
||||
2021-09-18 19:07:19 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:07:21 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:07:21 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.93,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:21 [32mDATA: [39m test-node-wasm.js result: performance: load: 6 total: 2225
|
||||
2021-09-18 19:07:21 [36mINFO: [39m test-node-wasm.js test: second instance
|
||||
2021-09-18 19:07:22 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:07:24 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:07:24 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.93,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:24 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 2260
|
||||
2021-09-18 19:07:24 [36mINFO: [39m test-node-wasm.js test: concurrent
|
||||
2021-09-18 19:07:24 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:07:24 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:07:24 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3]
|
||||
2021-09-18 19:07:26 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:07:27 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:07:29 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3]
|
||||
2021-09-18 19:07:30 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:07:30 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:07:31 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3]
|
||||
2021-09-18 19:07:47 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:07:47 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 0 person: 1 {"score":0.93,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:47 [32mDATA: [39m test-node-wasm.js result: performance: load: 316 total: 15299
|
||||
2021-09-18 19:07:50 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:07:50 [32mDATA: [39m test-node-wasm.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 0 person: 2 {"score":0.93,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:50 [32mDATA: [39m test-node-wasm.js result: performance: load: 6 total: 19352
|
||||
2021-09-18 19:07:50 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-18 19:07:50 [32mDATA: [39m test-node-wasm.js result: face: 3 body: 1 hand: 0 gesture: 1 object: 0 person: 3 {"score":0.93,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:50 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 19421
|
||||
2021-09-18 19:07:52 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:07:52 [32mDATA: [39m test-node-wasm.js result: face: 4 body: 1 hand: 0 gesture: 1 object: 0 person: 4 {"score":0.93,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:52 [32mDATA: [39m test-node-wasm.js result: performance: load: 316 total: 21349
|
||||
2021-09-18 19:07:52 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:07:52 [32mDATA: [39m test-node-wasm.js result: face: 5 body: 1 hand: 0 gesture: 1 object: 0 person: 5 {"score":0.93,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:52 [32mDATA: [39m test-node-wasm.js result: performance: load: 6 total: 21394
|
||||
2021-09-18 19:07:53 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-18 19:07:53 [32mDATA: [39m test-node-wasm.js result: face: 6 body: 1 hand: 0 gesture: 1 object: 0 person: 6 {"score":0.93,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:53 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 22600
|
||||
2021-09-18 19:07:53 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:07:53 [32mDATA: [39m test-node-wasm.js result: face: 7 body: 1 hand: 0 gesture: 1 object: 0 person: 7 {"score":0.93,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:53 [32mDATA: [39m test-node-wasm.js result: performance: load: 316 total: 22621
|
||||
2021-09-18 19:07:54 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:07:54 [32mDATA: [39m test-node-wasm.js result: face: 8 body: 1 hand: 0 gesture: 1 object: 0 person: 8 {"score":0.93,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:54 [32mDATA: [39m test-node-wasm.js result: performance: load: 6 total: 23178
|
||||
2021-09-18 19:07:54 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-18 19:07:54 [32mDATA: [39m test-node-wasm.js result: face: 9 body: 1 hand: 0 gesture: 1 object: 0 person: 9 {"score":0.93,"age":29.2,"gender":"male"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-18 19:07:54 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 23179
|
||||
2021-09-18 19:07:54 [35mSTATE:[39m test-node-wasm.js passeed: no memory leak
|
||||
2021-09-18 19:07:54 [35mSTATE:[39m test-node-wasm.js passeed: equal usage
|
||||
2021-09-18 19:07:54 [36mINFO: [39m test-node-wasm.js events: {"image":2,"detect":2,"warmup":2}
|
||||
2021-09-18 19:07:54 [36mINFO: [39m test-node-wasm.js test complete: 59343 ms
|
||||
2021-09-18 19:07:54 [36mINFO: [39m
|
||||
2021-09-18 19:07:54 [36mINFO: [39m status: {"passed":112,"failed":0}
|
||||
2021-09-19 14:04:35 [36mINFO: [39m @vladmandic/human version 2.2.2
|
||||
2021-09-19 14:04:35 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v16.5.0
|
||||
2021-09-19 14:04:35 [36mINFO: [39m tests: ["test-node.js","test-node-gpu.js","test-node-wasm.js"]
|
||||
2021-09-19 14:04:35 [36mINFO: [39m
|
||||
2021-09-19 14:04:35 [36mINFO: [39m test-node.js start
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js passed: configuration default validation []
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js passed: create human
|
||||
2021-09-19 14:04:36 [36mINFO: [39m test-node.js human version: 2.2.2
|
||||
2021-09-19 14:04:36 [36mINFO: [39m test-node.js platform: linux x64 agent: NodeJS v16.5.0
|
||||
2021-09-19 14:04:36 [36mINFO: [39m test-node.js tfjs version: 3.9.0
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js passed: set backend: tensorflow
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js tensors 1456
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js passed: load models
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js result: defined models: 14 loaded models: 7
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js passed: warmup: none default
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js passed: warmup none result match
|
||||
2021-09-19 14:04:36 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:37 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:37 [35mSTATE:[39m test-node.js event: warmup
|
||||
2021-09-19 14:04:37 [35mSTATE:[39m test-node.js passed: warmup: face default
|
||||
2021-09-19 14:04:37 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
|
||||
2021-09-19 14:04:37 [32mDATA: [39m test-node.js result: performance: load: 278 total: 994
|
||||
2021-09-19 14:04:37 [35mSTATE:[39m test-node.js passed: warmup face result match
|
||||
2021-09-19 14:04:37 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:38 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:38 [35mSTATE:[39m test-node.js event: warmup
|
||||
2021-09-19 14:04:38 [35mSTATE:[39m test-node.js passed: warmup: body default
|
||||
2021-09-19 14:04:38 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:04:38 [32mDATA: [39m test-node.js result: performance: load: 278 total: 1097
|
||||
2021-09-19 14:04:38 [35mSTATE:[39m test-node.js passed: warmup body result match
|
||||
2021-09-19 14:04:38 [36mINFO: [39m test-node.js test default
|
||||
2021-09-19 14:04:39 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:39 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:40 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:40 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:04:40 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:04:40 [32mDATA: [39m test-node.js result: performance: load: 278 total: 1050
|
||||
2021-09-19 14:04:40 [35mSTATE:[39m test-node.js passed: default result face match
|
||||
2021-09-19 14:04:40 [36mINFO: [39m test-node.js test object
|
||||
2021-09-19 14:04:41 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:41 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:42 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:42 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:04:42 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:04:42 [32mDATA: [39m test-node.js result: performance: load: 278 total: 1064
|
||||
2021-09-19 14:04:42 [35mSTATE:[39m test-node.js passed: object result match
|
||||
2021-09-19 14:04:42 [36mINFO: [39m test-node.js test sensitive
|
||||
2021-09-19 14:04:43 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:43 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:45 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:45 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:04:45 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 3 gesture: 9 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:04:45 [32mDATA: [39m test-node.js result: performance: load: 278 total: 1706
|
||||
2021-09-19 14:04:45 [35mSTATE:[39m test-node.js passed: sensitive result match
|
||||
2021-09-19 14:04:45 [35mSTATE:[39m test-node.js passed: sensitive face result match
|
||||
2021-09-19 14:04:45 [35mSTATE:[39m test-node.js passed: sensitive body result match
|
||||
2021-09-19 14:04:45 [35mSTATE:[39m test-node.js passed: sensitive hand result match
|
||||
2021-09-19 14:04:45 [36mINFO: [39m test-node.js test detectors
|
||||
2021-09-19 14:04:45 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:45 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:46 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:46 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:04:46 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:04:46 [32mDATA: [39m test-node.js result: performance: load: 278 total: 554
|
||||
2021-09-19 14:04:46 [35mSTATE:[39m test-node.js passed: detector result face match
|
||||
2021-09-19 14:04:46 [35mSTATE:[39m test-node.js passed: detector result hand match
|
||||
2021-09-19 14:04:46 [36mINFO: [39m test-node.js test body variants
|
||||
2021-09-19 14:04:47 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:47 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:48 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:48 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg posenet
|
||||
2021-09-19 14:04:48 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17}
|
||||
2021-09-19 14:04:48 [32mDATA: [39m test-node.js result: performance: load: 278 total: 728
|
||||
2021-09-19 14:04:48 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:48 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:49 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:49 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg movenet
|
||||
2021-09-19 14:04:49 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:04:49 [32mDATA: [39m test-node.js result: performance: load: 278 total: 648
|
||||
2021-09-19 14:04:49 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:50 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:04:50 [35mSTATE:[39m test-node.js passed: detect: random default
|
||||
2021-09-19 14:04:50 [32mDATA: [39m test-node.js result: face: 0 body: 1 hand: 1 gesture: 1 object: 0 person: 0 {} {} {"score":0.08,"keypoints":17}
|
||||
2021-09-19 14:04:50 [32mDATA: [39m test-node.js result: performance: load: 278 total: 564
|
||||
2021-09-19 14:04:50 [36mINFO: [39m test-node.js test: first instance
|
||||
2021-09-19 14:04:50 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:04:51 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:04:51 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:04:51 [32mDATA: [39m test-node.js result: performance: load: 2 total: 684
|
||||
2021-09-19 14:04:51 [36mINFO: [39m test-node.js test: second instance
|
||||
2021-09-19 14:04:51 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:04:52 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:04:52 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:04:52 [32mDATA: [39m test-node.js result: performance: load: 4 total: 685
|
||||
2021-09-19 14:04:52 [36mINFO: [39m test-node.js test: concurrent
|
||||
2021-09-19 14:04:52 [35mSTATE:[39m test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
|
||||
2021-09-19 14:04:52 [35mSTATE:[39m test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
|
||||
2021-09-19 14:04:52 [35mSTATE:[39m test-node.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
|
||||
2021-09-19 14:04:53 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:54 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:54 [35mSTATE:[39m test-node.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:04:55 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:04:55 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:04:55 [35mSTATE:[39m test-node.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:04:55 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:55 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:04:55 [35mSTATE:[39m test-node.js event: image
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 278 total: 5047
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 8 total: 5049
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 3 body: 1 hand: 0 gesture: 1 object: 1 person: 3 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 8 total: 5050
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 278 total: 5044
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 5 body: 1 hand: 1 gesture: 1 object: 1 person: 5 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 8 total: 5044
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 6 body: 1 hand: 1 gesture: 1 object: 1 person: 6 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 8 total: 5045
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js event: detect
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 7 body: 1 hand: 0 gesture: 1 object: 1 person: 7 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 278 total: 5045
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 8 body: 1 hand: 0 gesture: 1 object: 1 person: 8 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 8 total: 5046
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: face: 9 body: 1 hand: 0 gesture: 1 object: 1 person: 9 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:05:00 [32mDATA: [39m test-node.js result: performance: load: 8 total: 5046
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passeed: no memory leak
|
||||
2021-09-19 14:05:00 [35mSTATE:[39m test-node.js passeed: equal usage
|
||||
2021-09-19 14:05:00 [36mINFO: [39m test-node.js events: {"image":12,"detect":12,"warmup":2}
|
||||
2021-09-19 14:05:00 [36mINFO: [39m test-node.js test complete: 24579 ms
|
||||
2021-09-19 14:05:00 [36mINFO: [39m
|
||||
2021-09-19 14:05:00 [36mINFO: [39m test-node-gpu.js start
|
||||
2021-09-19 14:05:01 [33mWARN: [39m test-node-gpu.js stderr: 2021-09-19 14:05:01.311010: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 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-09-19 14:05:01 [33mWARN: [39m test-node-gpu.js stderr: 2021-09-19 14:05:01.358349: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
|
||||
2021-09-19 14:05:01 [33mWARN: [39m test-node-gpu.js stderr: 2021-09-19 14:05:01.358430: 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-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js passed: configuration default validation []
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js passed: create human
|
||||
2021-09-19 14:05:01 [36mINFO: [39m test-node-gpu.js human version: 2.2.2
|
||||
2021-09-19 14:05:01 [36mINFO: [39m test-node-gpu.js platform: linux x64 agent: NodeJS v16.5.0
|
||||
2021-09-19 14:05:01 [36mINFO: [39m test-node-gpu.js tfjs version: 3.9.0
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js passed: set backend: tensorflow
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js tensors 1456
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js passed: load models
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js result: defined models: 14 loaded models: 7
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js passed: warmup: none default
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js passed: warmup none result match
|
||||
2021-09-19 14:05:01 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:02 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:02 [35mSTATE:[39m test-node-gpu.js event: warmup
|
||||
2021-09-19 14:05:02 [35mSTATE:[39m test-node-gpu.js passed: warmup: face default
|
||||
2021-09-19 14:05:02 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":23.6,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4}
|
||||
2021-09-19 14:05:02 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 992
|
||||
2021-09-19 14:05:02 [35mSTATE:[39m test-node-gpu.js passed: warmup face result match
|
||||
2021-09-19 14:05:02 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:03 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:03 [35mSTATE:[39m test-node-gpu.js event: warmup
|
||||
2021-09-19 14:05:03 [35mSTATE:[39m test-node-gpu.js passed: warmup: body default
|
||||
2021-09-19 14:05:03 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":29.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:03 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 1081
|
||||
2021-09-19 14:05:03 [35mSTATE:[39m test-node-gpu.js passed: warmup body result match
|
||||
2021-09-19 14:05:03 [36mINFO: [39m test-node-gpu.js test default
|
||||
2021-09-19 14:05:04 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:04 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:05 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:05 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:05 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:05 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 1060
|
||||
2021-09-19 14:05:05 [35mSTATE:[39m test-node-gpu.js passed: default result face match
|
||||
2021-09-19 14:05:05 [36mINFO: [39m test-node-gpu.js test object
|
||||
2021-09-19 14:05:06 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:06 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:07 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:07 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:07 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:07 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 1122
|
||||
2021-09-19 14:05:07 [35mSTATE:[39m test-node-gpu.js passed: object result match
|
||||
2021-09-19 14:05:07 [36mINFO: [39m test-node-gpu.js test sensitive
|
||||
2021-09-19 14:05:08 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:08 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:10 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:10 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:10 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 3 gesture: 9 object: 1 person: 1 {"score":1,"age":28.5,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:10 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 1754
|
||||
2021-09-19 14:05:10 [35mSTATE:[39m test-node-gpu.js passed: sensitive result match
|
||||
2021-09-19 14:05:10 [35mSTATE:[39m test-node-gpu.js passed: sensitive face result match
|
||||
2021-09-19 14:05:10 [35mSTATE:[39m test-node-gpu.js passed: sensitive body result match
|
||||
2021-09-19 14:05:10 [35mSTATE:[39m test-node-gpu.js passed: sensitive hand result match
|
||||
2021-09-19 14:05:10 [36mINFO: [39m test-node-gpu.js test detectors
|
||||
2021-09-19 14:05:11 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:11 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:11 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:11 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:11 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:11 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 560
|
||||
2021-09-19 14:05:11 [35mSTATE:[39m test-node-gpu.js passed: detector result face match
|
||||
2021-09-19 14:05:11 [35mSTATE:[39m test-node-gpu.js passed: detector result hand match
|
||||
2021-09-19 14:05:11 [36mINFO: [39m test-node-gpu.js test body variants
|
||||
2021-09-19 14:05:12 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:12 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:13 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:13 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg posenet
|
||||
2021-09-19 14:05:13 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.91,"keypoints":17}
|
||||
2021-09-19 14:05:13 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 725
|
||||
2021-09-19 14:05:14 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:14 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:14 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:14 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg movenet
|
||||
2021-09-19 14:05:14 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 1 person: 1 {"score":0.93} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:14 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 636
|
||||
2021-09-19 14:05:15 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:15 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:15 [35mSTATE:[39m test-node-gpu.js passed: detect: random default
|
||||
2021-09-19 14:05:15 [32mDATA: [39m test-node-gpu.js result: face: 0 body: 1 hand: 1 gesture: 1 object: 0 person: 0 {} {} {"score":0.07,"keypoints":17}
|
||||
2021-09-19 14:05:15 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 600
|
||||
2021-09-19 14:05:15 [36mINFO: [39m test-node-gpu.js test: first instance
|
||||
2021-09-19 14:05:15 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:05:16 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:05:16 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:05:16 [32mDATA: [39m test-node-gpu.js result: performance: load: 4 total: 679
|
||||
2021-09-19 14:05:16 [36mINFO: [39m test-node-gpu.js test: second instance
|
||||
2021-09-19 14:05:16 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:05:17 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:05:17 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.96} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:05:17 [32mDATA: [39m test-node-gpu.js result: performance: load: 2 total: 616
|
||||
2021-09-19 14:05:17 [36mINFO: [39m test-node-gpu.js test: concurrent
|
||||
2021-09-19 14:05:17 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
|
||||
2021-09-19 14:05:17 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
|
||||
2021-09-19 14:05:17 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34696120}
|
||||
2021-09-19 14:05:18 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:19 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:20 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864}
|
||||
2021-09-19 14:05:20 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:05:20 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:05:21 [35mSTATE:[39m test-node-gpu.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151289040}
|
||||
2021-09-19 14:05:21 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:21 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:21 [35mSTATE:[39m test-node-gpu.js event: image
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 1 object: 1 person: 1 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 5479
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 2 body: 1 hand: 0 gesture: 1 object: 1 person: 2 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 5480
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 3 body: 1 hand: 0 gesture: 1 object: 1 person: 3 {"score":0.91} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 5480
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 1 person: 4 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 5473
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 5 body: 1 hand: 1 gesture: 1 object: 1 person: 5 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 5474
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 6 body: 1 hand: 1 gesture: 1 object: 1 person: 6 {"score":0.91} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 5474
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js event: detect
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 7 body: 1 hand: 0 gesture: 1 object: 1 person: 7 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 282 total: 5474
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 8 body: 1 hand: 0 gesture: 1 object: 1 person: 8 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 5475
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: face: 9 body: 1 hand: 0 gesture: 1 object: 1 person: 9 {"score":0.91} {"score":0.71,"class":"person"} {"score":0.69,"keypoints":10}
|
||||
2021-09-19 14:05:26 [32mDATA: [39m test-node-gpu.js result: performance: load: 7 total: 5475
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passeed: no memory leak
|
||||
2021-09-19 14:05:26 [35mSTATE:[39m test-node-gpu.js passeed: equal usage
|
||||
2021-09-19 14:05:26 [36mINFO: [39m test-node-gpu.js events: {"image":12,"detect":12,"warmup":2}
|
||||
2021-09-19 14:05:26 [36mINFO: [39m test-node-gpu.js test complete: 25122 ms
|
||||
2021-09-19 14:05:26 [36mINFO: [39m
|
||||
2021-09-19 14:05:26 [36mINFO: [39m test-node-wasm.js start
|
||||
2021-09-19 14:05:27 [35mSTATE:[39m test-node-wasm.js passed: model server: https://vladmandic.github.io/human/models/
|
||||
2021-09-19 14:05:27 [35mSTATE:[39m test-node-wasm.js passed: configuration default validation []
|
||||
2021-09-19 14:05:27 [35mSTATE:[39m test-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}]
|
||||
2021-09-19 14:05:27 [35mSTATE:[39m test-node-wasm.js passed: create human
|
||||
2021-09-19 14:05:27 [36mINFO: [39m test-node-wasm.js human version: 2.2.2
|
||||
2021-09-19 14:05:27 [36mINFO: [39m test-node-wasm.js platform: linux x64 agent: NodeJS v16.5.0
|
||||
2021-09-19 14:05:27 [36mINFO: [39m test-node-wasm.js tfjs version: 3.9.0
|
||||
2021-09-19 14:05:29 [35mSTATE:[39m test-node-wasm.js passed: set backend: wasm
|
||||
2021-09-19 14:05:29 [35mSTATE:[39m test-node-wasm.js tensors 1189
|
||||
2021-09-19 14:05:29 [35mSTATE:[39m test-node-wasm.js passed: load models
|
||||
2021-09-19 14:05:29 [35mSTATE:[39m test-node-wasm.js result: defined models: 14 loaded models: 6
|
||||
2021-09-19 14:05:29 [35mSTATE:[39m test-node-wasm.js passed: warmup: none default
|
||||
2021-09-19 14:05:29 [35mSTATE:[39m test-node-wasm.js passed: warmup none result match
|
||||
2021-09-19 14:05:29 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:05:30 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:05:30 [35mSTATE:[39m test-node-wasm.js event: warmup
|
||||
2021-09-19 14:05:30 [35mSTATE:[39m test-node-wasm.js passed: warmup: face default
|
||||
2021-09-19 14:05:30 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":23.6,"gender":"female"} {} {"score":0.47,"keypoints":4}
|
||||
2021-09-19 14:05:30 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 1075
|
||||
2021-09-19 14:05:30 [35mSTATE:[39m test-node-wasm.js passed: warmup face result match
|
||||
2021-09-19 14:05:33 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:05:34 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:05:34 [35mSTATE:[39m test-node-wasm.js event: warmup
|
||||
2021-09-19 14:05:34 [35mSTATE:[39m test-node-wasm.js passed: warmup: body default
|
||||
2021-09-19 14:05:34 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:34 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 2678
|
||||
2021-09-19 14:05:34 [35mSTATE:[39m test-node-wasm.js passed: warmup body result match
|
||||
2021-09-19 14:05:34 [36mINFO: [39m test-node-wasm.js test default
|
||||
2021-09-19 14:05:36 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:05:38 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:05:38 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:05:38 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:38 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:38 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 2566
|
||||
2021-09-19 14:05:38 [35mSTATE:[39m test-node-wasm.js passed: default result face match
|
||||
2021-09-19 14:05:38 [36mINFO: [39m test-node-wasm.js test object
|
||||
2021-09-19 14:05:40 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:05:42 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:05:43 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:05:43 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:43 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 3 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:43 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 2619
|
||||
2021-09-19 14:05:43 [31mERROR:[39m test-node-wasm.js failed: object result mismatch 0
|
||||
2021-09-19 14:05:43 [36mINFO: [39m test-node-wasm.js test sensitive
|
||||
2021-09-19 14:05:45 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:05:46 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:05:49 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:05:49 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:49 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 3 gesture: 9 object: 0 person: 1 {"score":1,"age":28.5,"gender":"female"} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:49 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 4006
|
||||
2021-09-19 14:05:49 [35mSTATE:[39m test-node-wasm.js passed: sensitive result match
|
||||
2021-09-19 14:05:49 [31mERROR:[39m test-node-wasm.js failed: sensitive face result mismatch 1 4 478 3 1024 9
|
||||
2021-09-19 14:05:49 [35mSTATE:[39m test-node-wasm.js passed: sensitive body result match
|
||||
2021-09-19 14:05:49 [35mSTATE:[39m test-node-wasm.js passed: sensitive hand result match
|
||||
2021-09-19 14:05:49 [36mINFO: [39m test-node-wasm.js test detectors
|
||||
2021-09-19 14:05:50 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:05:52 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:05:52 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:05:52 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:05:52 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:05:52 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 1967
|
||||
2021-09-19 14:05:52 [35mSTATE:[39m test-node-wasm.js passed: detector result face match
|
||||
2021-09-19 14:05:52 [35mSTATE:[39m test-node-wasm.js passed: detector result hand match
|
||||
2021-09-19 14:05:52 [36mINFO: [39m test-node-wasm.js test body variants
|
||||
2021-09-19 14:05:54 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:05:56 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:05:56 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:05:56 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg posenet
|
||||
2021-09-19 14:05:56 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.91,"keypoints":17}
|
||||
2021-09-19 14:05:56 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 2238
|
||||
2021-09-19 14:05:58 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:05:59 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:06:00 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:06:00 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg movenet
|
||||
2021-09-19 14:06:00 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:00 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 2018
|
||||
2021-09-19 14:06:02 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:06:02 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:06:02 [35mSTATE:[39m test-node-wasm.js passed: detect: random default
|
||||
2021-09-19 14:06:02 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:02 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 2009
|
||||
2021-09-19 14:06:02 [36mINFO: [39m test-node-wasm.js test: first instance
|
||||
2021-09-19 14:06:03 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
|
||||
2021-09-19 14:06:05 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:06:05 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:05 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 1988
|
||||
2021-09-19 14:06:05 [36mINFO: [39m test-node-wasm.js test: second instance
|
||||
2021-09-19 14:06:05 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
|
||||
2021-09-19 14:06:07 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:06:07 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:07 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 1912
|
||||
2021-09-19 14:06:07 [36mINFO: [39m test-node-wasm.js test: concurrent
|
||||
2021-09-19 14:06:07 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34697856}
|
||||
2021-09-19 14:06:07 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34697856}
|
||||
2021-09-19 14:06:07 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-face.jpg [1,256,256,3] {"checksum":34697856}
|
||||
2021-09-19 14:06:09 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:06:10 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:06:12 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856}
|
||||
2021-09-19 14:06:13 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
|
||||
2021-09-19 14:06:13 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
|
||||
2021-09-19 14:06:14 [35mSTATE:[39m test-node-wasm.js passed: load image: samples/ai-upper.jpg [1,720,688,3] {"checksum":151155104}
|
||||
2021-09-19 14:06:16 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:06:20 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:06:25 [35mSTATE:[39m test-node-wasm.js event: image
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js event: detect
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 1 object: 0 person: 1 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 2 body: 1 hand: 1 gesture: 1 object: 0 person: 2 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-face.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 3 body: 1 hand: 1 gesture: 1 object: 0 person: 3 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 4 body: 1 hand: 1 gesture: 1 object: 0 person: 4 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 5 body: 1 hand: 1 gesture: 1 object: 0 person: 5 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-body.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 6 body: 1 hand: 1 gesture: 1 object: 0 person: 6 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 7 body: 1 hand: 1 gesture: 1 object: 0 person: 7 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 1911 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 8 body: 1 hand: 1 gesture: 1 object: 0 person: 8 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passed: detect: samples/ai-upper.jpg default
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: face: 9 body: 1 hand: 1 gesture: 1 object: 0 person: 9 {"score":0.93} {} {"score":0.92,"keypoints":17}
|
||||
2021-09-19 14:06:31 [32mDATA: [39m test-node-wasm.js result: performance: load: 3 total: 17833
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passeed: no memory leak
|
||||
2021-09-19 14:06:31 [35mSTATE:[39m test-node-wasm.js passeed: equal usage
|
||||
2021-09-19 14:06:31 [36mINFO: [39m test-node-wasm.js events: {"image":12,"detect":12,"warmup":2}
|
||||
2021-09-19 14:06:31 [36mINFO: [39m test-node-wasm.js test complete: 64517 ms
|
||||
2021-09-19 14:06:31 [36mINFO: [39m
|
||||
2021-09-19 14:06:31 [36mINFO: [39m status: {"test-node.js":{"passed":54,"failed":0},"test-node-gpu.js":{"passed":54,"failed":0},"test-node-wasm.js":{"passed":53,"failed":2}}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -8,7 +8,7 @@
|
|||
</ul>
|
||||
</div><dl class="tsd-comment-tags"><dt>param userConfig:</dt><dd><p><a href="../interfaces/Config.html">Config</a></p>
|
||||
</dd><dt>returns</dt><dd><p>instance</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Human</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Constructors</h3><ul class="tsd-index-list"><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="Human.html#constructor" class="tsd-kind-icon">constructor</a></li></ul></section><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#config" class="tsd-kind-icon">config</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#draw" class="tsd-kind-icon">draw</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#env" class="tsd-kind-icon">env</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#events" class="tsd-kind-icon">events</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceTriangulation" class="tsd-kind-icon">face<wbr/>Triangulation</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceUVMap" class="tsd-kind-icon">faceUVMap</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#gl" class="tsd-kind-icon">gl</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#process" class="tsd-kind-icon">process</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#result" class="tsd-kind-icon">result</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#state" class="tsd-kind-icon">state</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#version" class="tsd-kind-icon">version</a></li></ul></section><section class="tsd-index-section "><h3>Methods</h3><ul class="tsd-index-list"><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#detect" class="tsd-kind-icon">detect</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#enhance" class="tsd-kind-icon">enhance</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#image" class="tsd-kind-icon">image</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#init" class="tsd-kind-icon">init</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#load" class="tsd-kind-icon">load</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#match" class="tsd-kind-icon">match</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#next" class="tsd-kind-icon">next</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#segmentation" class="tsd-kind-icon">segmentation</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#similarity" class="tsd-kind-icon">similarity</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#warmup" class="tsd-kind-icon">warmup</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Constructors</h2><section class="tsd-panel tsd-member tsd-kind-constructor tsd-parent-kind-class"><a name="constructor" class="tsd-anchor"></a><h3>constructor</h3><ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">new <wbr/>Human<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Human.html" class="tsd-signature-type" data-tsd-kind="Class">Human</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L168">human.ts:168</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Human</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Constructors</h3><ul class="tsd-index-list"><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="Human.html#constructor" class="tsd-kind-icon">constructor</a></li></ul></section><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#config" class="tsd-kind-icon">config</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#draw" class="tsd-kind-icon">draw</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#env" class="tsd-kind-icon">env</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#events" class="tsd-kind-icon">events</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceTriangulation" class="tsd-kind-icon">face<wbr/>Triangulation</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceUVMap" class="tsd-kind-icon">faceUVMap</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#gl" class="tsd-kind-icon">gl</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#process" class="tsd-kind-icon">process</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#result" class="tsd-kind-icon">result</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#state" class="tsd-kind-icon">state</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#version" class="tsd-kind-icon">version</a></li></ul></section><section class="tsd-index-section "><h3>Methods</h3><ul class="tsd-index-list"><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#detect" class="tsd-kind-icon">detect</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#enhance" class="tsd-kind-icon">enhance</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#image" class="tsd-kind-icon">image</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#init" class="tsd-kind-icon">init</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#load" class="tsd-kind-icon">load</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#match" class="tsd-kind-icon">match</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#next" class="tsd-kind-icon">next</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#reset" class="tsd-kind-icon">reset</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#segmentation" class="tsd-kind-icon">segmentation</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#similarity" class="tsd-kind-icon">similarity</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#validate" class="tsd-kind-icon">validate</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#warmup" class="tsd-kind-icon">warmup</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Constructors</h2><section class="tsd-panel tsd-member tsd-kind-constructor tsd-parent-kind-class"><a name="constructor" class="tsd-anchor"></a><h3>constructor</h3><ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">new <wbr/>Human<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Human.html" class="tsd-signature-type" data-tsd-kind="Class">Human</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L168">human.ts:168</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Constructor for <strong>Human</strong> library that is futher used for all operations</p>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><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></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="Human.html" class="tsd-signature-type" data-tsd-kind="Class">Human</a></h4><div><p>instance</p>
|
||||
</div></li></ul></section></section><section class="tsd-panel-group tsd-member-group "><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="config" class="tsd-anchor"></a><h3>config</h3><div class="tsd-signature tsd-kind-icon">config<span class="tsd-signature-symbol">:</span> <a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L83">human.ts:83</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
|
@ -62,7 +62,7 @@
|
|||
</ul>
|
||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="version" class="tsd-anchor"></a><h3>version</h3><div class="tsd-signature tsd-kind-icon">version<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L78">human.ts:78</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Current version of Human library in <em>semver</em> format</p>
|
||||
</div></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Methods</h2><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><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><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a>, userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</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">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L387">human.ts:387</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Methods</h2><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><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><a href="../index.html#Input" class="tsd-signature-type" data-tsd-kind="Type alias">Input</a>, userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</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">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L396">human.ts:396</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Main detection method</p>
|
||||
<ul>
|
||||
<li>Analyze configuration: <a href="../interfaces/Config.html">Config</a></li>
|
||||
|
@ -71,12 +71,12 @@
|
|||
<li>Process and return result: <a href="../interfaces/Result.html">Result</a></li>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><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: <span class="tsd-signature-type">Partial</span><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></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</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">></span></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><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">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></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"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L289">human.ts:289</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><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">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></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"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L298">human.ts:298</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Enhance method performs additional enhacements to face image previously detected for futher processing</p>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul><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"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h4><div><p>Tensor</p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="image" class="tsd-anchor"></a><h3>image</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">image<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><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>canvas<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"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L256">human.ts:256</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="image" class="tsd-anchor"></a><h3>image</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">image<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><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>canvas<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"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L265">human.ts:265</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Process input as return canvas and tensor</p>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <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-symbol">{ </span>canvas<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"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></h4><div></div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>canvas<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">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="init" class="tsd-anchor"></a><h3>init</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">init<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L312">human.ts:312</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>input: <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-symbol">{ </span>canvas<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"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> }</span></h4><div></div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>canvas<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">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">></span></h5></li></ul></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="init" class="tsd-anchor"></a><h3>init</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">init<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L321">human.ts:321</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Explicit backend initialization</p>
|
||||
<ul>
|
||||
<li>Normally done implicitly during initial load phase</li>
|
||||
|
@ -84,38 +84,42 @@
|
|||
<li>Used in webworker environments where there can be multiple instances of Human and not all initialized</li>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div><p>Promise<void></p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="load" class="tsd-anchor"></a><h3>load</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">load<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L322">human.ts:322</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="load" class="tsd-anchor"></a><h3>load</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">load<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L331">human.ts:331</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Load method preloads all configured models on-demand</p>
|
||||
<ul>
|
||||
<li>Not explicitly required as any required model is load implicitly on it's first run</li>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><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></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div><p>Promise<void></p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="match" class="tsd-anchor"></a><h3>match</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">match<span class="tsd-signature-symbol">(</span>faceEmbedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span>, db<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">; </span>name<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span>, threshold<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">; </span>name<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L301">human.ts:301</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="match" class="tsd-anchor"></a><h3>match</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">match<span class="tsd-signature-symbol">(</span>faceEmbedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span>, db<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">; </span>name<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span>, threshold<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">; </span>name<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L310">human.ts:310</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Math method find best match between provided face descriptor and predefined database of known descriptors</p>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>faceEmbedding: <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></h5></li><li><h5>db: <span class="tsd-signature-symbol">{ </span>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">; </span>name<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span></h5></li><li><h5>threshold: <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> = 0</span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">; </span>name<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></h4><div><p>best match</p>
|
||||
</div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></h5></li><li class="tsd-parameter"><h5>name<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li><li class="tsd-parameter"><h5>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li><li class="tsd-parameter"><h5>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li></ul></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="next" class="tsd-anchor"></a><h3>next</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">next<span class="tsd-signature-symbol">(</span>result<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">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L363">human.ts:363</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>embedding<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></h5></li><li class="tsd-parameter"><h5>name<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li><li class="tsd-parameter"><h5>similarity<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5></li><li class="tsd-parameter"><h5>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li></ul></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="next" class="tsd-anchor"></a><h3>next</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">next<span class="tsd-signature-symbol">(</span>result<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">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L372">human.ts:372</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Runs interpolation using last known result and returns smoothened result
|
||||
Interpolation is based on time since last known result so can be called independently</p>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>result: <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a><span class="tsd-signature-symbol"> = ...</span></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="../interfaces/Result.html" class="tsd-signature-type" data-tsd-kind="Interface">Result</a></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="segmentation" 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><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"><</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></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L279">human.ts:279</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="reset" class="tsd-anchor"></a><h3>reset</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">reset<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L255">human.ts:255</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Reset configuration to default values</p>
|
||||
</div></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="segmentation" 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><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"><</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></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L288">human.ts:288</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Segmentation method takes any input and returns this.processed canvas with body segmentation</p>
|
||||
<ul>
|
||||
<li>Optional parameter background is used to fill the background with specific input</li>
|
||||
<li>Segmentation is not triggered as part of detect this.process</li>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><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: <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"><</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></h4><div><p>Canvas</p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="similarity" class="tsd-anchor"></a><h3>similarity</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">similarity<span class="tsd-signature-symbol">(</span>embedding1<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span>, embedding2<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L267">human.ts:267</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="similarity" class="tsd-anchor"></a><h3>similarity</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">similarity<span class="tsd-signature-symbol">(</span>embedding1<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span>, embedding2<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L276">human.ts:276</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Simmilarity method calculates simmilarity between two provided face descriptors (face embeddings)</p>
|
||||
<ul>
|
||||
<li>Calculation is based on normalized Minkowski distance between two descriptors</li>
|
||||
<li>Default is Euclidean distance which is Minkowski distance of 2nd order</li>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5>embedding1: <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></h5></li><li><h5>embedding2: <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">number</span></h4><div><p>similarity: number</p>
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="warmup" class="tsd-anchor"></a><h3>warmup</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">warmup<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><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"> | </span><span class="tsd-signature-symbol">{ </span>error<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></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L373">human.ts:373</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="validate" class="tsd-anchor"></a><h3>validate</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">validate<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>expected<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>where<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L258">human.ts:258</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Validate current configuration schema</p>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><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></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>expected<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>where<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span></h4></li></ul></section><section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a name="warmup" class="tsd-anchor"></a><h3>warmup</h3><ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">warmup<span class="tsd-signature-symbol">(</span>userConfig<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><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-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><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"> | </span><span class="tsd-signature-symbol">{ </span>error<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></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L382">human.ts:382</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Warmup method pre-initializes all configured models for faster inference</p>
|
||||
<ul>
|
||||
<li>can take significant time on startup</li>
|
||||
<li>only used for <code>webgl</code> and <code>humangl</code> backends</li>
|
||||
</ul>
|
||||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><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></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><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"> | </span><span class="tsd-signature-symbol">{ </span>error<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></h4><div><p>result: <a href="../interfaces/Result.html">Result</a></p>
|
||||
</div></li></ul></section></section></div><div class="col-4 col-menu menu-sticky-wrap menu-highlight"><nav class="tsd-navigation primary"><ul><li class=""><a href="../index.html">Exports</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="current tsd-kind-class"><a href="Human.html" class="tsd-kind-icon">Human</a><ul><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="Human.html#constructor" class="tsd-kind-icon">constructor</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#config" class="tsd-kind-icon">config</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#draw" class="tsd-kind-icon">draw</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#env" class="tsd-kind-icon">env</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#events" class="tsd-kind-icon">events</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceTriangulation" class="tsd-kind-icon">face<wbr/>Triangulation</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceUVMap" class="tsd-kind-icon">faceUVMap</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#gl" class="tsd-kind-icon">gl</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#process" class="tsd-kind-icon">process</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#result" class="tsd-kind-icon">result</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#state" class="tsd-kind-icon">state</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#version" class="tsd-kind-icon">version</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#detect" class="tsd-kind-icon">detect</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#enhance" class="tsd-kind-icon">enhance</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#image" class="tsd-kind-icon">image</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#init" class="tsd-kind-icon">init</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#load" class="tsd-kind-icon">load</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#match" class="tsd-kind-icon">match</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#next" class="tsd-kind-icon">next</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#segmentation" class="tsd-kind-icon">segmentation</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#similarity" class="tsd-kind-icon">similarity</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#warmup" class="tsd-kind-icon">warmup</a></li></ul></li></ul></nav></div></div></div><footer class=""><div class="container"><h2>Legend</h2><div class="tsd-legend-group"><ul class="tsd-legend"><li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li><li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li><li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li></ul></div><h2>Settings</h2><p>Theme <select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></p></div></footer><div class="overlay"></div><script src="../assets/main.js"></script></body></html>
|
||||
</div></li></ul></section></section></div><div class="col-4 col-menu menu-sticky-wrap menu-highlight"><nav class="tsd-navigation primary"><ul><li class=""><a href="../index.html">Exports</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="current tsd-kind-class"><a href="Human.html" class="tsd-kind-icon">Human</a><ul><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="Human.html#constructor" class="tsd-kind-icon">constructor</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#config" class="tsd-kind-icon">config</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#draw" class="tsd-kind-icon">draw</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#env" class="tsd-kind-icon">env</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#events" class="tsd-kind-icon">events</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceTriangulation" class="tsd-kind-icon">face<wbr/>Triangulation</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#faceUVMap" class="tsd-kind-icon">faceUVMap</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#gl" class="tsd-kind-icon">gl</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#process" class="tsd-kind-icon">process</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#result" class="tsd-kind-icon">result</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#state" class="tsd-kind-icon">state</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Human.html#version" class="tsd-kind-icon">version</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#detect" class="tsd-kind-icon">detect</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#enhance" class="tsd-kind-icon">enhance</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#image" class="tsd-kind-icon">image</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#init" class="tsd-kind-icon">init</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#load" class="tsd-kind-icon">load</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#match" class="tsd-kind-icon">match</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#next" class="tsd-kind-icon">next</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#reset" class="tsd-kind-icon">reset</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#segmentation" class="tsd-kind-icon">segmentation</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#similarity" class="tsd-kind-icon">similarity</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#validate" class="tsd-kind-icon">validate</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Human.html#warmup" class="tsd-kind-icon">warmup</a></li></ul></li></ul></nav></div></div></div><footer class=""><div class="container"><h2>Legend</h2><div class="tsd-legend-group"><ul class="tsd-legend"><li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li><li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li><li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li></ul></div><h2>Settings</h2><p>Theme <select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></p></div></footer><div class="overlay"></div><script src="../assets/main.js"></script></body></html>
|
|
@ -29,7 +29,7 @@
|
|||
<li>values 0..1 where 0.01 means reset cache if input changed more than 1%</li>
|
||||
<li>set to 0 to disable caching</li>
|
||||
</ul>
|
||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="warmup" class="tsd-anchor"></a><h3>warmup</h3><div class="tsd-signature tsd-kind-icon">warmup<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"none"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"face"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"full"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"body"</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L205">config.ts:205</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="warmup" class="tsd-anchor"></a><h3>warmup</h3><div class="tsd-signature tsd-kind-icon">warmup<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"face"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"body"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"none"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"full"</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L205">config.ts:205</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>What to use for <code>human.warmup()</code></p>
|
||||
<ul>
|
||||
<li>warmup pre-initializes all models for faster inference but can take significant time on startup</li>
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"estimator.d.ts","sourceRoot":"","sources":["../../../src/fingerpose/estimator.ts"],"names":[],"mappings":"AAqKA,wBAAgB,QAAQ,CAAC,SAAS,KAAA;;;EA0CjC"}
|
||||
{"version":3,"file":"estimator.d.ts","sourceRoot":"","sources":["../../../src/fingerpose/estimator.ts"],"names":[],"mappings":"AAsKA,wBAAgB,QAAQ,CAAC,SAAS,KAAA;;;EA0CjC"}
|
|
@ -1,4 +1,4 @@
|
|||
export declare function analyze(keypoints: any): {};
|
||||
export declare function analyze(keypoints: any): {} | null;
|
||||
export declare function match(keypoints: any): {
|
||||
name: string;
|
||||
confidence: number;
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"fingerpose.d.ts","sourceRoot":"","sources":["../../../src/fingerpose/fingerpose.ts"],"names":[],"mappings":"AAQA,wBAAgB,OAAO,CAAC,SAAS,KAAA,MAWhC;AAED,wBAAgB,KAAK,CAAC,SAAS,KAAA;UAEF,MAAM;gBAAc,MAAM;IAOtD"}
|
||||
{"version":3,"file":"fingerpose.d.ts","sourceRoot":"","sources":["../../../src/fingerpose/fingerpose.ts"],"names":[],"mappings":"AAQA,wBAAgB,OAAO,CAAC,SAAS,KAAA,aAYhC;AAED,wBAAgB,KAAK,CAAC,SAAS,KAAA;UACF,MAAM;gBAAc,MAAM;IAStD"}
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"handdetector.d.ts","sourceRoot":"","sources":["../../../src/handpose/handdetector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAExD,qBAAa,YAAY;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;gBAElB,KAAK,KAAA;IASjB,cAAc,CAAC,KAAK,KAAA;IAYpB,kBAAkB,CAAC,gBAAgB,KAAA,EAAE,KAAK,KAAA;IAOpC,QAAQ,CAAC,KAAK,KAAA,EAAE,MAAM,KAAA;aAUA,MAAM;uBAAiB,MAAM;oBAAc,MAAM;;IAWvE,kBAAkB,CAAC,KAAK,KAAA,EAAE,MAAM,KAAA,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAmB9I"}
|
||||
{"version":3,"file":"handdetector.d.ts","sourceRoot":"","sources":["../../../src/handpose/handdetector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAExD,qBAAa,YAAY;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;gBAElB,KAAK,KAAA;IASjB,cAAc,CAAC,KAAK,KAAA;IAYpB,kBAAkB,CAAC,gBAAgB,KAAA,EAAE,KAAK,KAAA;IAOpC,QAAQ,CAAC,KAAK,KAAA,EAAE,MAAM,KAAA;aAWA,MAAM;uBAAiB,MAAM;oBAAc,MAAM;;IAWvE,kBAAkB,CAAC,KAAK,KAAA,EAAE,MAAM,KAAA,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAmB9I"}
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"handpipeline.d.ts","sourceRoot":"","sources":["../../../src/handpose/handpipeline.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,eAAe,CAAC;AASxD,qBAAa,YAAY;IACvB,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;IACpC,aAAa,EAAE,UAAU,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACrH,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;gBAEV,YAAY,KAAA,EAAE,aAAa,KAAA;IAUvC,6BAA6B,CAAC,SAAS,KAAA;;;;IAQvC,sBAAsB,CAAC,aAAa,KAAA,EAAE,cAAc,KAAA;;;;;IAMpD,sBAAsB,CAAC,SAAS,KAAA;;;;;IAUhC,kBAAkB,CAAC,SAAS,KAAA,EAAE,IAAI,KAAA,EAAE,KAAK,KAAA,EAAE,cAAc,KAAA;IA0BnD,aAAa,CAAC,KAAK,KAAA,EAAE,MAAM,KAAA;mBAoBC,MAAM,EAAE;oBAAc,MAAM;aAAO;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAAC,WAAW,EAAE,MAAM,EAAE,CAAA;SAAE;;CAuDlH"}
|
||||
{"version":3,"file":"handpipeline.d.ts","sourceRoot":"","sources":["../../../src/handpose/handpipeline.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,eAAe,CAAC;AASxD,qBAAa,YAAY;IACvB,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;IACpC,aAAa,EAAE,UAAU,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACrH,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;gBAEV,YAAY,KAAA,EAAE,aAAa,KAAA;IAUvC,6BAA6B,CAAC,SAAS,KAAA;;;;IAQvC,sBAAsB,CAAC,aAAa,KAAA,EAAE,cAAc,KAAA;;;;;IAMpD,sBAAsB,CAAC,SAAS,KAAA;;;;;IAUhC,kBAAkB,CAAC,SAAS,KAAA,EAAE,IAAI,KAAA,EAAE,KAAK,KAAA,EAAE,cAAc,KAAA;IA0BnD,aAAa,CAAC,KAAK,KAAA,EAAE,MAAM,KAAA;mBAoBC,MAAM,EAAE;oBAAc,MAAM;aAAO;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAAC,WAAW,EAAE,MAAM,EAAE,CAAA;SAAE;;CAwDlH"}
|
|
@ -4,6 +4,15 @@
|
|||
export declare function join(folder: string, file: string): string;
|
||||
export declare function log(...msg: any[]): void;
|
||||
export declare const now: () => number;
|
||||
export declare function validate(defaults: any, config: any, parent?: string, msgs?: Array<{
|
||||
reason: string;
|
||||
where: string;
|
||||
expected?: string;
|
||||
}>): {
|
||||
reason: string;
|
||||
where: string;
|
||||
expected?: string;
|
||||
}[];
|
||||
export declare function mergeDeep(...objects: any[]): any;
|
||||
export declare const minmax: (data: Array<number>) => number[];
|
||||
//# sourceMappingURL=helpers.d.ts.map
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAGD,wBAAgB,GAAG,CAAC,GAAG,GAAG,OAAA,GAAG,IAAI,CAKhC;AAGD,eAAO,MAAM,GAAG,cAGf,CAAC;AAGF,wBAAgB,SAAS,CAAC,GAAG,OAAO,OAAA,OAYnC;AAGD,eAAO,MAAM,MAAM,SAAU,MAAM,MAAM,CAAC,aAIpC,CAAC"}
|
||||
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAGD,wBAAgB,GAAG,CAAC,GAAG,GAAG,OAAA,GAAG,IAAI,CAKhC;AAGD,eAAO,MAAM,GAAG,cAGf,CAAC;AAGF,wBAAgB,QAAQ,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,EAAE,MAAM,SAAW,EAAE,IAAI,GAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAM;YAAhD,MAAM;WAAS,MAAM;eAAa,MAAM;IAc3H;AAGD,wBAAgB,SAAS,CAAC,GAAG,OAAO,OAAA,OAYnC;AAGD,eAAO,MAAM,MAAM,SAAU,MAAM,MAAM,CAAC,aAIpC,CAAC"}
|
|
@ -141,6 +141,14 @@ export declare class Human {
|
|||
constructor(userConfig?: Partial<Config>);
|
||||
/** @hidden */
|
||||
analyze: (...msg: string[]) => void;
|
||||
/** Reset configuration to default values */
|
||||
reset: () => any;
|
||||
/** Validate current configuration schema */
|
||||
validate: (userConfig?: Partial<Config> | undefined) => {
|
||||
reason: string;
|
||||
where: string;
|
||||
expected?: string;
|
||||
}[];
|
||||
/** Process input as return canvas and tensor
|
||||
*
|
||||
* @param input: {@link Input}
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/human.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAiF,MAAM,UAAU,CAAC;AACtH,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAG1C,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAejD,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAK7B,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG1C,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B;;GAEG;AACH,oBAAY,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAEpJ;;;;;;;GAOG;AACH,oBAAY,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjF;;GAEG;AACH,oBAAY,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;GAEG;AACH,oBAAY,UAAU,GAAG,OAAO,EAAE,CAAC;AAEnC;;;;;;;;;;GAUG;AACH,qBAAa,KAAK;;IAChB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd,iDAAiD;IACjD,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAA;KAAE,CAAC;IAEvF;;;OAGG;IACH,EAAE,EAAE,UAAU,CAAC;IAEf,qEAAqE;IACrE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IAEb;;;;;;;OAOG;IACH,IAAI,EAAE;QAAE,MAAM,MAAC;QAAC,IAAI,MAAC;QAAC,IAAI,MAAC;QAAC,IAAI,MAAC;QAAC,OAAO,MAAC;QAAC,MAAM,MAAC;QAAC,MAAM,MAAC;QAAC,GAAG,MAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IAEvF;;MAEE;IACF,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAC7D,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,UAAU,GAAG,IAAI,CAAC;QACjC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,QAAQ,EAAE,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACxD,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QACvB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;QAC1B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;KACjC,CAAC;IAEF;;;;;;;;;OASG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB,oGAAoG;IACpG,iBAAiB,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC;IACjD,0EAA0E;IAC1E,SAAS,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACjC,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIpC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAG5B;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IA2DxC,cAAc;IACd,OAAO,WAAY,MAAM,EAAE,UAO1B;IAgBD;;;;OAIG;IACH,KAAK,UAAW,KAAK;;;MAAuC;IAE5D;;;;;;;MAOE;IAEF,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM;IAIxE;;;;;;;OAOG;IACG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK;IAInD;;;;OAIG;IAEH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrC;;;;;;OAMG;IAEH,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,EAAE,SAAS,SAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE;IAI/L;;;;;;OAMG;IACH,IAAI;IAIJ;;;;;MAKE;IACI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAgCvC,cAAc;IACd,IAAI,UAAW,MAAM,aAAkD;IAEvE;;;;;OAKG;IACH,IAAI,CAAC,MAAM,GAAE,MAAoB;IAIjC;;;;;MAKE;IACI,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG;QAAE,KAAK,MAAA;KAAE,CAAC;IAIvE;;;;;;;;;MASE;IACI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;CAwKlF;AAED,oCAAoC;AACpC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,CAAC"}
|
||||
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/human.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAiF,MAAM,UAAU,CAAC;AACtH,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAG1C,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAejD,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAK7B,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG1C,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B;;GAEG;AACH,oBAAY,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAEpJ;;;;;;;GAOG;AACH,oBAAY,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjF;;GAEG;AACH,oBAAY,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;GAEG;AACH,oBAAY,UAAU,GAAG,OAAO,EAAE,CAAC;AAEnC;;;;;;;;;;GAUG;AACH,qBAAa,KAAK;;IAChB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd,iDAAiD;IACjD,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAA;KAAE,CAAC;IAEvF;;;OAGG;IACH,EAAE,EAAE,UAAU,CAAC;IAEf,qEAAqE;IACrE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IAEb;;;;;;;OAOG;IACH,IAAI,EAAE;QAAE,MAAM,MAAC;QAAC,IAAI,MAAC;QAAC,IAAI,MAAC;QAAC,IAAI,MAAC;QAAC,OAAO,MAAC;QAAC,MAAM,MAAC;QAAC,MAAM,MAAC;QAAC,GAAG,MAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IAEvF;;MAEE;IACF,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAC7D,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,UAAU,GAAG,IAAI,CAAC;QACjC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,QAAQ,EAAE,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACxD,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QACvB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;QAC1B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;KACjC,CAAC;IAEF;;;;;;;;;OASG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB,oGAAoG;IACpG,iBAAiB,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC;IACjD,0EAA0E;IAC1E,SAAS,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACjC,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIpC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAG5B;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IA8DxC,cAAc;IACd,OAAO,WAAY,MAAM,EAAE,UAO1B;IAgBD,4CAA4C;IAC5C,KAAK,YAA4D;IAEjE,4CAA4C;IAC5C,QAAQ;;;;QAAmF;IAE3F;;;;OAIG;IACH,KAAK,UAAW,KAAK;;;MAAuC;IAE5D;;;;;;;MAOE;IAEF,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM;IAIxE;;;;;;;OAOG;IACG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK;IAInD;;;;OAIG;IAEH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrC;;;;;;OAMG;IAEH,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,EAAE,SAAS,SAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE;IAI/L;;;;;;OAMG;IACH,IAAI;IAIJ;;;;;MAKE;IACI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAgCvC,cAAc;IACd,IAAI,UAAW,MAAM,aAAkD;IAEvE;;;;;OAKG;IACH,IAAI,CAAC,MAAM,GAAE,MAAoB;IAIjC;;;;;MAKE;IACI,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG;QAAE,KAAK,MAAA;KAAE,CAAC;IAIvE;;;;;;;;;MASE;IACI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;CAwKlF;AAED,oCAAoC;AACpC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,CAAC"}
|
2
wiki
2
wiki
|
@ -1 +1 @@
|
|||
Subproject commit 740fcd1b5b2cc92bde0111b630e872cbf7670c81
|
||||
Subproject commit b24eafa265bda331788e0d36cf5c854a494e33d6
|
Loading…
Reference in New Issue