add human.draw.tensor method

Signed-off-by: Vladimir Mandic <mandic00@live.com>
main
Vladimir Mandic 2024-10-24 11:09:45 -04:00
parent 2b0a2fecc2
commit c1dc719a67
26 changed files with 224 additions and 196 deletions

View File

@ -9,12 +9,12 @@
## Changelog
### **HEAD -> main** 2024/10/14 mandic00@live.com
### **3.3.3** 2024/10/14 mandic00@live.com
- add loaded property to model stats and mark models not loaded correctly.
### **origin/main** 2024/09/11 mandic00@live.com
- release build
### **3.3.2** 2024/09/11 mandic00@live.com

View File

@ -94,7 +94,7 @@ function addFace(face, source) {
e.preventDefault();
document.getElementById('description').innerHTML = canvas.title;
};
human.tf.browser.draw(face.tensor, canvas);
human.draw.tensor(face.tensor, canvas);
human.tf.dispose(face.tensor);
return canvas;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -240,7 +240,7 @@ async function detectFace() {
if (!current?.face?.tensor || !current?.face?.embedding) return false;
console.log('face record:', current.face); // eslint-disable-line no-console
log(`detected face: ${current.face.gender} ${current.face.age || 0}y distance ${100 * (current.face.distance || 0)}cm/${Math.round(100 * (current.face.distance || 0) / 2.54)}in`);
await human.tf.browser.draw(current.face.tensor, dom.canvas);
await human.draw.tensor(current.face.tensor, dom.canvas);
if (await indexDb.count() === 0) {
log('face database is empty: nothing to compare face with');
document.body.style.background = 'black';

View File

@ -70,7 +70,7 @@ async function selectFaceCanvas(face) {
if (face.tensor) {
title('Sorting Faces by Similarity');
const c = document.getElementById('orig');
await human.tf.browser.draw(face.tensor, c);
await human.draw.tensor(face.tensor, c);
const arr = db.map((rec) => rec.embedding);
const res = await human.match.find(face.embedding, arr);
log('Match:', db[res.index].name);
@ -97,7 +97,7 @@ async function selectFaceCanvas(face) {
canvas.tag.similarity = similarity;
// get best match
// draw the canvas
await human.tf.browser.draw(current.tensor, canvas);
await human.draw.tensor(current.tensor, canvas);
const ctx = canvas.getContext('2d');
ctx.font = 'small-caps 1rem "Lato"';
ctx.fillStyle = 'rgba(0, 0, 0, 1)';
@ -144,7 +144,7 @@ async function addFaceCanvas(index, res, fileName) {
gender: ${Math.round(100 * res.face[i].genderScore)}% ${res.face[i].gender}
emotion: ${emotion}
`.replace(/ /g, ' ');
await human.tf.browser.draw(res.face[i].tensor, canvas);
await human.draw.tensor(res.face[i].tensor, canvas);
const ctx = canvas.getContext('2d');
if (!ctx) return;
ctx.font = 'small-caps 0.8rem "Lato"';

View File

@ -223,7 +223,7 @@ async function calcSimmilarity(result) {
log('setting face compare baseline:', result.face[0]);
if (result.face[0].tensor) {
const c = document.getElementById('orig');
human.tf.browser.draw(result.face[0].tensor, c);
human.draw.tensor(result.face[0].tensor, c);
} else {
document.getElementById('compare-canvas').getContext('2d').drawImage(compare.original.canvas, 0, 0, 200, 200);
}

View File

@ -85,7 +85,7 @@ async function main() {
return;
}
dom.fps.innerText = `fps: ${Math.round(10000 / (t1 - t0)) / 10}`; // mark performance
human.tf.browser.draw(rgba, dom.output); // draw raw output
human.draw.tensor(rgba, dom.output); // draw raw output
human.tf.dispose(rgba); // dispose tensors
ctxMerge.globalCompositeOperation = 'source-over';
ctxMerge.drawImage(dom.background, 0, 0); // draw original video to first stacked canvas

File diff suppressed because one or more lines are too long

124
dist/human.esm.js vendored
View File

@ -32781,31 +32781,31 @@ async function process2(input, config3, getTensor = true) {
throw new Error("input error: type not recognized");
}
if (input instanceof mt) {
let tensor2 = null;
let tensor3 = null;
if (input["isDisposedInternal"]) throw new Error("input error: attempted to use tensor but it is disposed");
if (!input.shape) throw new Error("input error: attempted to use tensor without a shape");
if (input.shape.length === 3) {
if (input.shape[2] === 3) {
tensor2 = Ms(input, 0);
tensor3 = Ms(input, 0);
} else if (input.shape[2] === 4) {
const rgb3 = B1(input, [0, 0, 0], [-1, -1, 3]);
tensor2 = Ms(rgb3, 0);
tensor3 = Ms(rgb3, 0);
Ot(rgb3);
}
} else if (input.shape.length === 4) {
if (input.shape[3] === 3) {
tensor2 = Ur(input);
tensor3 = Ur(input);
} else if (input.shape[3] === 4) {
tensor2 = z1(input, [0, 0, 0, 0], [-1, -1, -1, 3]);
tensor3 = z1(input, [0, 0, 0, 0], [-1, -1, -1, 3]);
}
}
if (tensor2 == null || tensor2.shape.length !== 4 || tensor2.shape[0] !== 1 || tensor2.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`);
if (tensor2.dtype === "int32") {
const cast = Ue(tensor2, "float32");
Ot(tensor2);
tensor2 = cast;
if (tensor3 == null || tensor3.shape.length !== 4 || tensor3.shape[0] !== 1 || tensor3.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`);
if (tensor3.dtype === "int32") {
const cast = Ue(tensor3, "float32");
Ot(tensor3);
tensor3 = cast;
}
return { tensor: tensor2, canvas: config3.filter.return ? outCanvas : null };
return { tensor: tensor3, canvas: config3.filter.return ? outCanvas : null };
}
if (typeof input["readyState"] !== "undefined" && input.readyState <= 2) {
if (config3.debug) log("input stream is not ready");
@ -32916,15 +32916,15 @@ async function process2(input, config3, getTensor = true) {
}
if (!pixels) throw new Error("input error: cannot create tensor");
const casted = Ue(pixels, "float32");
const tensor = config3.filter.equalization ? await histogramEqualization(casted) : Ms(casted, 0);
const tensor2 = config3.filter.equalization ? await histogramEqualization(casted) : Ms(casted, 0);
Ot([pixels, casted]);
if (config3.filter.autoBrightness) {
const max = Ra(tensor);
const max = Ra(tensor2);
const maxVal = await max.data();
config3.filter.brightness = maxVal[0] > 1 ? 1 - maxVal[0] / 255 : 1 - maxVal[0];
Ot(max);
}
return { tensor, canvas: config3.filter.return ? outCanvas : null };
return { tensor: tensor2, canvas: config3.filter.return ? outCanvas : null };
}
async function skip(config3, input) {
let skipFrame = false;
@ -33877,7 +33877,8 @@ __export(draw_exports, {
init: () => init2,
object: () => object,
options: () => options2,
person: () => person
person: () => person,
tensor: () => tensor
});
// src/draw/primitives.ts
@ -38168,6 +38169,11 @@ function canvas2(input, output) {
if (!ctx) return;
ctx.drawImage(input, 0, 0);
}
async function tensor(input, output) {
if (!input || !output) return;
if (!env.browser) return;
await cT.toPixels(input, output);
}
async function all(inCanvas2, result, drawOptions) {
if (!(result == null ? void 0 : result.performance) || !inCanvas2) return null;
const timeStamp = now();
@ -38386,7 +38392,7 @@ async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) {
const detectedBox = { score, boxRaw, box };
detectedBoxes.push(detectedBox);
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return detectedBoxes;
}
async function detectBoxes(input, config3, outputSize2) {
@ -38397,7 +38403,7 @@ async function detectBoxes(input, config3, outputSize2) {
t10.logits = cc(t10.logitsRaw);
t10.boxes = cc(t10.boxesRaw);
const boxes = await decodeResults(t10.boxes, t10.logits, config3, outputSize2);
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return boxes;
}
@ -38489,7 +38495,7 @@ function prepareImage(input, size2, cropBox) {
} else {
final = je(t10.cropped || input, constants.tf255);
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return final;
}
function rescaleKeypoints(keypoints, outputSize2, cropBox) {
@ -38545,7 +38551,7 @@ async function detectLandmarks(input, config3, outputSize2) {
const poseScore = (await t10.poseflag.data())[0];
const points = await t10.ld.data();
const distances = await t10.world.data();
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
const keypointsRelative = [];
const depth = 5;
for (let i = 0; i < points.length / depth; i++) {
@ -38743,7 +38749,7 @@ async function process3(res, outputShape, config3) {
];
results.push({ id: i++, score, class: classVal, label, box, boxRaw });
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return results;
}
async function predict2(input, config3) {
@ -38838,7 +38844,7 @@ async function predict3(image, config3) {
}
skipped3 = 0;
return new Promise(async (resolve) => {
const tensor = De(() => {
const tensor2 = De(() => {
var _a, _b;
const resize = eX.resizeBilinear(image, [((_a = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a[2]) || 0, ((_b = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b[1]) || 0], false);
const enhance2 = se(resize, constants.tf2);
@ -38846,9 +38852,9 @@ async function predict3(image, config3) {
return norm;
});
let resT;
if (config3.body.enabled) resT = model4 == null ? void 0 : model4.execute(tensor);
if (config3.body.enabled) resT = model4 == null ? void 0 : model4.execute(tensor2);
lastTime3 = now();
Ot(tensor);
Ot(tensor2);
if (resT) {
cache2.keypoints.length = 0;
const squeeze = cc(resT);
@ -39117,7 +39123,7 @@ function decodeBoxes2(boxOutputs) {
t10.startNormalized = se(t10.starts, inputSizeT);
t10.endNormalized = se(t10.ends, inputSizeT);
const boxes = r22([t10.startNormalized, t10.endNormalized], 1);
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return boxes;
}
async function getBoxes(inputImage, config3) {
@ -39187,10 +39193,10 @@ async function getBoxes(inputImage, config3) {
const enlargedBox = enlargeBox(scaledBox, ((_g2 = config3.face.detector) == null ? void 0 : _g2.scale) || 1.4);
const squaredBox = squarifyBox(enlargedBox);
if (squaredBox.size[0] > (((_h2 = config3.face.detector) == null ? void 0 : _h2["minSize"]) || 0) && squaredBox.size[1] > (((_i2 = config3.face.detector) == null ? void 0 : _i2["minSize"]) || 0)) boxes.push(squaredBox);
Object.keys(b).forEach((tensor) => Ot(b[tensor]));
Object.keys(b).forEach((tensor2) => Ot(b[tensor2]));
}
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return boxes;
}
@ -39539,7 +39545,7 @@ async function predict5(image, config3, idx, count2) {
if (data[i] > (config3.face.emotion.minConfidence || 0)) obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] });
}
obj.sort((a, b) => b.score - a.score);
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
}
last3[idx] = obj;
lastCount = count2;
@ -39562,15 +39568,15 @@ async function load7(config3) {
}
function enhance(input, config3) {
var _a, _b;
const tensor = input.image || input.tensor || input;
if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor;
const tensor2 = input.image || input.tensor || input;
if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor2;
let crop;
if (((_a = config3.face.description) == null ? void 0 : _a["crop"]) > 0) {
const cropval = (_b = config3.face.description) == null ? void 0 : _b["crop"];
const box = [[cropval, cropval, 1 - cropval, 1 - cropval]];
crop = eX.cropAndResize(tensor, box, [0], [model9.inputs[0].shape[2], model9.inputs[0].shape[1]]);
crop = eX.cropAndResize(tensor2, box, [0], [model9.inputs[0].shape[2], model9.inputs[0].shape[1]]);
} else {
crop = eX.resizeBilinear(tensor, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false);
crop = eX.resizeBilinear(tensor2, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false);
}
const norm = se(crop, constants.tf255);
Ot(crop);
@ -39778,7 +39784,7 @@ async function predict9(image, config3, idx, count2) {
let age2 = ageSorted[0][0];
for (let i = 1; i < ageSorted.length; i++) age2 += ageSorted[i][1] * (ageSorted[i][0] - age2);
obj.age = Math.round(10 * age2) / 10;
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
last5[idx] = obj;
lastCount5 = count2;
lastTime8 = now();
@ -39826,7 +39832,7 @@ async function predict10(image, config3, idx, count2) {
const data = await t10.age.data();
obj.age = Math.trunc(10 * data[0]) / 10;
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
last6[idx] = obj;
lastCount6 = count2;
lastTime9 = now();
@ -39889,7 +39895,7 @@ async function predict11(image, config3, idx, count2) {
const data = await t10.gender.data();
obj.gender = data[0] > data[1] ? "female" : "male";
obj.genderScore = data[0] > data[1] ? Math.trunc(100 * data[0]) / 100 : Math.trunc(100 * data[1]) / 100;
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
last7[idx] = obj;
lastCount7 = count2;
lastTime10 = now();
@ -39928,7 +39934,7 @@ async function predict12(input, config3, idx, count2) {
t10.data = model15.execute(t10.crop);
const output = await t10.data.data();
data = Array.from(output);
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
}
last8[idx] = data;
lastCount8 = count2;
@ -39967,7 +39973,7 @@ async function predict13(input, config3, idx, count2) {
t10.data = model16.execute(t10.crop);
const output = await t10.data.data();
data = Array.from(output);
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
}
last9[idx] = data;
lastCount9 = count2;
@ -40216,7 +40222,7 @@ var detectFace = async (instance, input) => {
descRes.descriptor = insightfaceRes;
}
const irisSize = ((_v2 = instance.config.face.iris) == null ? void 0 : _v2.enabled) ? calculateCameraDistance(faces[i], input.shape[2]) : 0;
const tensor = ((_w2 = instance.config.face.detector) == null ? void 0 : _w2.return) ? cc(faces[i].tensor) : null;
const tensor2 = ((_w2 = instance.config.face.detector) == null ? void 0 : _w2.return) ? cc(faces[i].tensor) : null;
Ot(faces[i].tensor);
if (faces[i].tensor) delete faces[i].tensor;
const res = {
@ -40233,7 +40239,7 @@ var detectFace = async (instance, input) => {
if (livenessRes) res.live = livenessRes;
if (irisSize > 0) res.distance = irisSize;
if (rotation) res.rotation = rotation;
if (tensor) res.tensor = tensor;
if (tensor2) res.tensor = tensor2;
faceRes.push(res);
instance.analyze("End Face");
}
@ -43811,7 +43817,7 @@ var HandDetector = class {
t10.add = Ce(t10.boxCenterPoints, t10.halfBoxSizes);
t10.endPoints = se(t10.add, this.inputSizeTensor);
const res = r22([t10.startPoints, t10.endPoints], 1);
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return res;
}
normalizeLandmarks(rawPalmLandmarks, index2) {
@ -43820,7 +43826,7 @@ var HandDetector = class {
t10.div = je(t10.reshape, this.inputSizeTensor);
t10.landmarks = Ce(t10.div, this.anchors[index2] ? this.anchors[index2] : 0);
const res = se(t10.landmarks, this.inputSizeTensor);
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return res;
}
async predict(input, config3) {
@ -43853,9 +43859,9 @@ var HandDetector = class {
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] };
const scaled = scaleBoxCoordinates2(hand3, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]);
hands.push(scaled);
Object.keys(p).forEach((tensor) => Ot(p[tensor]));
Object.keys(p).forEach((tensor2) => Ot(p[tensor2]));
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return hands;
}
};
@ -44182,7 +44188,7 @@ async function detectHands(input, config3) {
const hand3 = { id: id2++, score, box: boxFull, boxRaw, label };
hands.push(hand3);
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
hands.sort((a, b) => b.score - a.score);
if (hands.length > (config3.hand.maxDetected || 1)) hands.length = config3.hand.maxDetected || 1;
return hands;
@ -44221,7 +44227,7 @@ async function detectFingers(input, h, config3) {
hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null);
}
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
}
return hand3;
}
@ -44506,7 +44512,7 @@ async function predict16(input, config3) {
default:
rgba = ar(0);
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return rgba;
}
@ -44643,7 +44649,7 @@ function padInput(input, inputSize10) {
t10.pad = Aa(input, cache5.padding);
t10.resize = eX.resizeBilinear(t10.pad, [inputSize10, inputSize10]);
const final = Ue(t10.resize, "int32");
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return final;
}
function rescaleBody(body4, outputSize2) {
@ -44785,7 +44791,7 @@ async function predict17(input, config3) {
rescaleBody(body4, [input.shape[2] || 1, input.shape[1] || 1]);
jitter(body4.keypoints);
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
resolve(cache6.bodies);
});
}
@ -45215,7 +45221,7 @@ async function predict19(input, config3) {
results3d[1] = Ea(results3d[1]);
return results3d;
});
const buffers = await Promise.all(res.map((tensor) => tensor.buffer()));
const buffers = await Promise.all(res.map((tensor2) => tensor2.buffer()));
for (const t10 of res) Ot(t10);
const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence);
if (!model20.inputs[0].shape) return [];
@ -45337,7 +45343,7 @@ async function predict21(input, config3) {
default:
rgba = ar(0);
}
Object.keys(t10).forEach((tensor) => Ot(t10[tensor]));
Object.keys(t10).forEach((tensor2) => Ot(t10[tensor2]));
return rgba;
}
@ -46293,8 +46299,8 @@ async function warmupCanvas(instance) {
} else {
const ctx = canvas3.getContext("2d");
if (ctx) ctx.drawImage(img, 0, 0);
const tensor = await instance.image(canvas3, true);
const res = tensor.tensor ? await instance.detect(tensor.tensor, instance.config) : void 0;
const tensor2 = await instance.image(canvas3, true);
const res = tensor2.tensor ? await instance.detect(tensor2.tensor, instance.config) : void 0;
resolve(res);
}
};
@ -46344,16 +46350,16 @@ async function runCompile(instance) {
for (let dim = 0; dim < shape.length; dim++) {
if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64;
}
const tensor = Gr(shape, dtype);
const tensor2 = Gr(shape, dtype);
try {
const res = model23.execute(tensor);
const res = model23.execute(tensor2);
compiledModels.push(modelName);
if (Array.isArray(res)) res.forEach((t10) => Ot(t10));
else Ot(res);
} catch (e) {
if (instance.config.debug) log("compile fail model:", modelName);
}
Ot(tensor);
Ot(tensor2);
}
const kernels = await webGLBackend["checkCompileCompletionAsync"]();
webGLBackend["getUniformLocations"]();
@ -46556,12 +46562,12 @@ var Human = class {
if (!this.config.segmentation.enabled) return null;
const processed = await process2(input, this.config);
if (!processed.tensor) return null;
let tensor = null;
if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) tensor = await predict20(processed.tensor, this.config);
if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.includes("meet")) tensor = await predict16(processed.tensor, this.config);
if ((_c2 = this.config.segmentation.modelPath) == null ? void 0 : _c2.includes("selfie")) tensor = await predict21(processed.tensor, this.config);
let tensor2 = null;
if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) tensor2 = await predict20(processed.tensor, this.config);
if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.includes("meet")) tensor2 = await predict16(processed.tensor, this.config);
if ((_c2 = this.config.segmentation.modelPath) == null ? void 0 : _c2.includes("selfie")) tensor2 = await predict21(processed.tensor, this.config);
Ot(processed.tensor);
return tensor;
return tensor2;
}
/** Compare two input tensors for pixel similarity
* - use `human.image` to process any valid input and get a tensor that can be used for compare

File diff suppressed because one or more lines are too long

82
dist/human.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

12
dist/human.node.js vendored

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,7 @@
* Module that implements helper draw functions, exposed as human.draw
*/
import * as tf from 'dist/tfjs.esm.js';
import { mergeDeep, now } from '../util/util';
import { env } from '../util/env';
import { getCanvasContext, rect } from './primitives';
@ -14,6 +15,7 @@ import { gesture } from './gesture';
import { defaultLabels } from './labels';
import type { Result, PersonResult } from '../result';
import type { AnyCanvas, DrawOptions } from '../exports';
import type { Tensor2D } from '../tfjs/types';
let drawTime = 0;
@ -60,6 +62,22 @@ export function canvas(input: AnyCanvas | HTMLImageElement | HTMLVideoElement, o
ctx.drawImage(input, 0, 0);
}
/** draw processed canvas */
export async function tensor(input: Tensor2D, output: HTMLCanvasElement) {
if (!input || !output) return;
if (!env.browser) return;
// const backend = tf.getBackend();
// if (backend === 'webgpu') tf.browser.draw(input, output);
// else await tf.browser.toPixels(input, output);
await tf.browser.toPixels(input, output);
// const ctx = getCanvasContext(output) as CanvasRenderingContext2D;
// if (!ctx) return;
// const image = await process(input);
// result.canvas = image.canvas;
// human.tf.dispose(image.tensor);
// ctx.drawImage(image.canvas, 0, 0);
}
/** meta-function that performs draw for: canvas, face, body, hand */
export async function all(inCanvas: AnyCanvas, result: Result, drawOptions?: Partial<DrawOptions>) {
if (!result?.performance || !inCanvas) return null;

View File

@ -1,51 +1,51 @@
2024-10-14 09:05:52 DATA:  Build {"name":"@vladmandic/human","version":"3.3.3"}
2024-10-14 09:05:52 INFO:  Application: {"name":"@vladmandic/human","version":"3.3.3"}
2024-10-14 09:05:52 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2024-10-14 09:05:52 INFO:  Toolchain: {"build":"0.10.1","esbuild":"0.23.1","typescript":"5.5.4","typedoc":"0.26.7","eslint":"8.57.0"}
2024-10-14 09:05:52 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2024-10-14 09:05:52 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]}
2024-10-14 09:05:52 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":358}
2024-10-14 09:05:52 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957}
2024-10-14 09:05:52 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":677631,"outputBytes":321636}
2024-10-14 09:05:52 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965}
2024-10-14 09:05:52 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":677639,"outputBytes":321640}
2024-10-14 09:05:52 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003}
2024-10-14 09:05:52 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":678677,"outputBytes":321751}
2024-10-14 09:05:52 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1403,"outputBytes":690}
2024-10-14 09:05:52 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":677364,"outputBytes":320212}
2024-10-14 09:05:52 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1267270}
2024-10-14 09:05:52 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1943944,"outputBytes":1583214}
2024-10-14 09:05:52 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1943944,"outputBytes":2067035}
2024-10-14 09:05:54 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":78}
2024-10-14 09:05:55 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
2024-10-14 09:05:55 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970}
2024-10-14 09:05:55 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17502,"outputBytes":9401}
2024-10-14 09:05:55 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791}
2024-10-14 09:06:02 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":171,"errors":0,"warnings":0}
2024-10-14 09:06:02 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2024-10-14 09:06:02 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
2024-10-14 09:06:02 INFO:  Done...
2024-10-14 09:06:02 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
2024-10-14 09:06:02 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
2024-10-14 09:06:02 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
2024-10-14 09:06:02 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
2024-10-14 09:06:02 STATE: Filter: {"input":"types/tfjs-core.d.ts"}
2024-10-14 09:06:03 ERROR: API-Extractor: {}
2024-10-14 09:06:03 STATE: Filter: {"input":"types/human.d.ts"}
2024-10-14 09:06:03 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"}
2024-10-14 09:06:03 STATE: Write: {"output":"dist/human.esm.d.ts"}
2024-10-14 09:06:03 STATE: Write: {"output":"dist/human.d.ts"}
2024-10-14 09:06:03 STATE: Write: {"output":"dist/human.node-gpu.d.ts"}
2024-10-14 09:06:03 STATE: Write: {"output":"dist/human.node.d.ts"}
2024-10-14 09:06:03 STATE: Write: {"output":"dist/human.node-wasm.d.ts"}
2024-10-14 09:06:03 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2024-10-14 09:06:03 STATE: Models {"folder":"./models","models":12}
2024-10-14 09:06:03 STATE: Models {"folder":"../human-models/models","models":44}
2024-10-14 09:06:03 STATE: Models {"folder":"../blazepose/model/","models":4}
2024-10-14 09:06:03 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2024-10-14 09:06:03 STATE: Models {"folder":"../efficientpose/models","models":3}
2024-10-14 09:06:03 STATE: Models {"folder":"../insightface/models","models":5}
2024-10-14 09:06:03 STATE: Models {"folder":"../movenet/models","models":3}
2024-10-14 09:06:03 STATE: Models {"folder":"../nanodet/models","models":4}
2024-10-14 09:06:03 STATE: Models: {"count":58,"totalSize":380063249}
2024-10-14 09:06:03 INFO:  Human Build complete... {"logFile":"test/build.log"}
2024-10-24 11:08:06 DATA:  Build {"name":"@vladmandic/human","version":"3.3.3"}
2024-10-24 11:08:06 INFO:  Application: {"name":"@vladmandic/human","version":"3.3.3"}
2024-10-24 11:08:06 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
2024-10-24 11:08:06 INFO:  Toolchain: {"build":"0.10.1","esbuild":"0.23.1","typescript":"5.5.4","typedoc":"0.26.7","eslint":"8.57.0"}
2024-10-24 11:08:06 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
2024-10-24 11:08:06 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]}
2024-10-24 11:08:06 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":358}
2024-10-24 11:08:06 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957}
2024-10-24 11:08:06 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":678330,"outputBytes":321737}
2024-10-24 11:08:06 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965}
2024-10-24 11:08:06 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":678338,"outputBytes":321741}
2024-10-24 11:08:06 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003}
2024-10-24 11:08:06 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":679376,"outputBytes":321852}
2024-10-24 11:08:06 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1403,"outputBytes":690}
2024-10-24 11:08:06 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":678063,"outputBytes":320298}
2024-10-24 11:08:06 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1267270}
2024-10-24 11:08:06 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1944643,"outputBytes":1583296}
2024-10-24 11:08:07 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1944643,"outputBytes":2067279}
2024-10-24 11:08:08 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":78}
2024-10-24 11:08:10 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true}
2024-10-24 11:08:10 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970}
2024-10-24 11:08:10 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17498,"outputBytes":9397}
2024-10-24 11:08:10 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791}
2024-10-24 11:08:16 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":171,"errors":0,"warnings":0}
2024-10-24 11:08:16 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
2024-10-24 11:08:16 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"}
2024-10-24 11:08:16 INFO:  Done...
2024-10-24 11:08:16 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"}
2024-10-24 11:08:16 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"}
2024-10-24 11:08:16 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"}
2024-10-24 11:08:16 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"}
2024-10-24 11:08:16 STATE: Filter: {"input":"types/tfjs-core.d.ts"}
2024-10-24 11:08:17 ERROR: API-Extractor: {}
2024-10-24 11:08:17 STATE: Filter: {"input":"types/human.d.ts"}
2024-10-24 11:08:17 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"}
2024-10-24 11:08:17 STATE: Write: {"output":"dist/human.esm.d.ts"}
2024-10-24 11:08:17 STATE: Write: {"output":"dist/human.d.ts"}
2024-10-24 11:08:17 STATE: Write: {"output":"dist/human.node-gpu.d.ts"}
2024-10-24 11:08:17 STATE: Write: {"output":"dist/human.node.d.ts"}
2024-10-24 11:08:17 STATE: Write: {"output":"dist/human.node-wasm.d.ts"}
2024-10-24 11:08:17 INFO:  Analyze models: {"folders":8,"result":"models/models.json"}
2024-10-24 11:08:17 STATE: Models {"folder":"./models","models":12}
2024-10-24 11:08:17 STATE: Models {"folder":"../human-models/models","models":44}
2024-10-24 11:08:17 STATE: Models {"folder":"../blazepose/model/","models":4}
2024-10-24 11:08:17 STATE: Models {"folder":"../anti-spoofing/model","models":1}
2024-10-24 11:08:17 STATE: Models {"folder":"../efficientpose/models","models":3}
2024-10-24 11:08:17 STATE: Models {"folder":"../insightface/models","models":5}
2024-10-24 11:08:17 STATE: Models {"folder":"../movenet/models","models":3}
2024-10-24 11:08:17 STATE: Models {"folder":"../nanodet/models","models":4}
2024-10-24 11:08:18 STATE: Models: {"count":58,"totalSize":380063249}
2024-10-24 11:08:18 INFO:  Human Build complete... {"logFile":"test/build.log"}

View File

@ -1 +1 @@
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WZT3PbNhDFvwt7dZtIVtLGN/9RFU+s2mNnmkOmB5hcSajIBQcEFaudfvcOCUkACXCXuu577ydgAVEg9P3fxMCbSa6SDFaizk1ykZTCbJKrRGIGb79sTJH/5LStxCy5mk0+zS7fz/67cGktfrhoobI6h+pdU20JLnmRpBuZZxowufp+iqvSSIWVI+yEluL1xDjoXdbl1BuAyHOXXtWYtgGbFnneTX70h/6qsv1gtBGJbCpwJ6rBtJWJ/EqkMJhuRCK7hsrUejh+0AnCRmA2GG9EIitRmsFsIxJZ9fo3pMNpKxP5EnSlcDBv5SD/l0cohEk34X5ty6M27B1UqZalUdpRzL48MZzexU3ff/p18sHfuMvG/9jf/z7Ld3C0TFZGYHxTWdrRQe1KGd8XFtCoRLiShcyFlib6pbII56FXSWWQV5Flauuj1mnZQ6S5qCqHWEZIk+lv3hi+gEbIH8vKfzAa0M2X84Q5mXrL8+Gjv9CN98UIQ6Kci2LtRC4zYaB1R/tsaR0f2euvgJW/mY+9tvVer73cs8CtSwHWRfWuqXUTfkfnuAvXY447ahUWWpSb3mSPUadRhM91ITAMt2Uq1+/LMWjrP0+o7Dd4vRVFmLV1Knmjsv2twpVcR/eKk6lN0ri+wL5UEs0g5mjgQM9Q9U4HHYyVKQgxHX4qd1r8CJ6RHsHTKczvIoVrNPKlVGpFDCjiY7HGADYD4LBdH4dlaOMgxx8jfnSBk0cbSI3SLNe3cdB5oUaMtePikAsQ3BidhYPda1kxMGfhYA9yBwgVB+zaOOgSqg0DdBYORnz1nUxCZG6AbL9noEALQNAyJUgdB41qT8ckynNQqM8CM4LjZA5CNNrJ7BHjHlcqyjipFOKxPXwT0/ENPIiYkm+gQE/tcZ4A+QYKRCD48AusC0AjmAdTaKOg9iBA4HwDBbrG/W3vVdS+QZwE7sXhGvf3hVhDBNDWR+T/lBmoSL6tc/kbkW4BsznWRR/hSSxFZftrRGUXIAB11PNYN7n4B55UFTRowHYefb5ayVQCGv4TOtYxn7Lo3xM46iJ2RRCnPAjMCqG3McxRO4dD9jMwnUM+NegPMBTc953DX6odMOiD5RxqM0uGerDw1LeQ8salDqepfvJQZtM7QBM8fGyVzb4Z0Cjy+AOsq3Ise46L7ndPGkMZ2u++xnIkriG4ILLVcdnbWufxfKOMY9xJDWlsbXsyR1sAZuFsbJXPto3v/wIfEZ7IkZqD0MAKe9IYytd9GUU0dS7f/iTaA0ywY32N5WBZB/1oi2xSy2qgD57EUewwY51wCsd46t4v2PhT5E4hSD53br9t8Dm49A5z/iErdmDo6xzP3uVM7vqcY31cfjqQn47MXw7kL0fmZwP52cj8g9wGq+EUjvFN6KIuY6vhFPby2v7NFP8b6KARfwGBf7HokoC7/jVdN1aU8bvqVggvTf8H2iG1KjMbAAA="
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WZT3PbNhDFvwt7dZpIVtLGN/9RFE+s2mN7mkOmB5hcSajIBQeEFKmdfvcOCUkACXCXuu577ydwAVIg+OPfxMDOJFdJBguxyU1ykZTCrJKrRGIGu19Xpsh/cdpaYpZcTUafJ5cfJv9duLQWP120UNkmh+p9XW0ILnmRpCuZZxowufpxiqvSSIWVI2yFluLtxDjobdbl2BuAyHOXXmwwbQI2LfK8nfzkD/1NZfveaC0S2VTgVlS9aSsT+YVIoTddi0R2CZXZ6P74QScIK4FZb7wWiaxEaXqztUhk1dvfkPanrUzkS9CVwt68lYm8AayU7s1bOcj/5REKYdJVuN6b8qAFfwdVqmVp/GGYfXliOL2NG3/4/Nvoo7/w57X/sXv/+CzfwdEyWRmB8UVpaUcHtaplfF1ZQK0S4UoWMhdamuhNaRHOQ8+SyiCvItPU1AfN07yDSHNRVQ4xj5BG49+9MXwDjZA/lpX/YDWg65v7hDmZOtPz8ZM/0bX3xQhDopyLYm1FLjNhoHFH+2xpLR/Z69fOPXXs9WvkZvKn+1ng2qUAN0X1vq61E35Hp7gN52OKW2oWZlqUq87FHqNOowhfN4XAMNyUqVy3L8egrb8bUdnv8HYrijBr61TyRmX7W4ULuYyuFSdTi6R2fYN9qSSaXszRwIGeoersLloYK1MQ4nL4S7nT4mfwjPQInk5hvogUrtHIl1KpBTGgiI/FGgNYD4DDtn0clqENgxz/jPjRBU4ebSA1SrNc38ZBp4UaMNaWi0POQHBjdBYOdq9lxcCchYM9yC0gVBywbeOgc6hWDNBZOBhx6zuZhMjcANl+z0CBZoCgZUqQWg4a1eyuSZTnoFBfBWYEx8kchGi0k9ktxj0uVJRxUinEY7N5Jy7HN/Ag4pJ8AwV6al4HCJBvoEAEgg+/wLIANIJ5MIU2Cmo3AgTON1Cga9zfdl5l7RvESeBeHK5xf1+IJUQATX1A/k+ZgYrkmzqXvxHpGjCb4qboIjyJpahsf42o7AQEoJZ6HusmF//Ak6qCBvXYzqNPFwuZSkDD/0LLOuRXZt1zBkedxY4Y4pQHgVkh9DqGOWrncMh+BqZzyKcG/QGGgvu+c/hztQUGfbCcQ62vkqEeLDx1F1J2XOqwm+omD2U2vQU0wcPHVtnszoBGkccfYG2VY9l9XHS9e9IQSt969zWWI3EJwQGRrQ7L3m50Hs/XyjDGndSQxua2I3O0GWAWXo2t8tmm8d1/4CPCEzlSvRHqmWFPGkJ53ZdRRF3n8s1fot3ABCvW11gOlpugH02RTWpZ9fTBkziKHWasE07hGE/t8wUbf4qcKQTJ59bpuQ0+B4fmYc7fZMU2DF2d49mznNFdl3OsD8uPe/LjgfnLnvzlwPykJz8ZmH+Q62A2nMIxvgtdbMrYbDiFPby2n6nin5EOGvEJCfyDRZcE3HaP6dqxooyfVTdCeGj6P3bjjJFzGwAA"

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>all | @vladmandic/human - v3.3.3</title><meta name="description" content="Documentation for @vladmandic/human"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@vladmandic/human - v3.3.3</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human</a></li><li><a href="../modules/draw.html">draw</a></li><li><a href="draw.all.html">all</a></li></ul><h1>Function all</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="all" class="tsd-anchor"></a><span class="tsd-kind-call-signature">all</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">inCanvas</span>, <span class="tsd-kind-parameter">result</span>, <span class="tsd-kind-parameter">drawOptions</span><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">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">&gt;</span><a href="#all" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>meta-function that performs draw for: canvas, face, body, hand</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">inCanvas</span>: <a href="../types/AnyCanvas.html" class="tsd-signature-type tsd-kind-type-alias">AnyCanvas</a></span></li><li><span><span class="tsd-kind-parameter">result</span>: <a href="../interfaces/Result.html" class="tsd-signature-type tsd-kind-interface">Result</a></span></li><li><span><code class="tsd-tag">Optional</code><span class="tsd-kind-parameter">drawOptions</span>: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/DrawOptions.html" class="tsd-signature-type tsd-kind-interface">DrawOptions</a><span class="tsd-signature-symbol">&gt;</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L64">src/draw/draw.ts:64</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">inCanvas</span>: <a href="../types/AnyCanvas.html" class="tsd-signature-type tsd-kind-type-alias">AnyCanvas</a></span></li><li><span><span class="tsd-kind-parameter">result</span>: <a href="../interfaces/Result.html" class="tsd-signature-type tsd-kind-interface">Result</a></span></li><li><span><code class="tsd-tag">Optional</code><span class="tsd-kind-parameter">drawOptions</span>: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/DrawOptions.html" class="tsd-signature-type tsd-kind-interface">DrawOptions</a><span class="tsd-signature-symbol">&gt;</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L82">src/draw/draw.ts:82</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>

View File

@ -1,2 +1,2 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>canvas | @vladmandic/human - v3.3.3</title><meta name="description" content="Documentation for @vladmandic/human"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@vladmandic/human - v3.3.3</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human</a></li><li><a href="../modules/draw.html">draw</a></li><li><a href="draw.canvas.html">canvas</a></li></ul><h1>Function canvas</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="canvas" class="tsd-anchor"></a><span class="tsd-kind-call-signature">canvas</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">input</span>, <span class="tsd-kind-parameter">output</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#canvas" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>draw processed canvas</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">input</span>: <a href="../types/AnyCanvas.html" class="tsd-signature-type tsd-kind-type-alias">AnyCanvas</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLImageElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLVideoElement</span></span></li><li><span><span class="tsd-kind-parameter">output</span>: <a href="../types/AnyCanvas.html" class="tsd-signature-type tsd-kind-type-alias">AnyCanvas</a></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L56">src/draw/draw.ts:56</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">input</span>: <a href="../types/AnyCanvas.html" class="tsd-signature-type tsd-kind-type-alias">AnyCanvas</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLImageElement</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLVideoElement</span></span></li><li><span><span class="tsd-kind-parameter">output</span>: <a href="../types/AnyCanvas.html" class="tsd-signature-type tsd-kind-type-alias">AnyCanvas</a></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L58">src/draw/draw.ts:58</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>

View File

@ -1,2 +1,2 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>init | @vladmandic/human - v3.3.3</title><meta name="description" content="Documentation for @vladmandic/human"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@vladmandic/human - v3.3.3</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human</a></li><li><a href="../modules/draw.html">draw</a></li><li><a href="draw.init.html">init</a></li></ul><h1>Function init</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="init" class="tsd-anchor"></a><span class="tsd-kind-call-signature">init</span><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><a href="#init" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>sets default label templates for face/body/hand/object/gestures</p>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L82">src/draw/draw.ts:82</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L100">src/draw/draw.ts:100</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>

View File

@ -1,2 +1,2 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>person | @vladmandic/human - v3.3.3</title><meta name="description" content="Documentation for @vladmandic/human"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@vladmandic/human - v3.3.3</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human</a></li><li><a href="../modules/draw.html">draw</a></li><li><a href="draw.person.html">person</a></li></ul><h1>Function person</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="person" class="tsd-anchor"></a><span class="tsd-kind-call-signature">person</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">inCanvas</span>, <span class="tsd-kind-parameter">result</span>, <span class="tsd-kind-parameter">drawOptions</span><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><a href="#person" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>draw combined person results instead of individual detection result objects</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">inCanvas</span>: <a href="../types/AnyCanvas.html" class="tsd-signature-type tsd-kind-type-alias">AnyCanvas</a></span></li><li><span><span class="tsd-kind-parameter">result</span>: <a href="../interfaces/PersonResult.html" class="tsd-signature-type tsd-kind-interface">PersonResult</a><span class="tsd-signature-symbol">[]</span></span></li><li><span><code class="tsd-tag">Optional</code><span class="tsd-kind-parameter">drawOptions</span>: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/DrawOptions.html" class="tsd-signature-type tsd-kind-interface">DrawOptions</a><span class="tsd-signature-symbol">&gt;</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L28">src/draw/draw.ts:28</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">inCanvas</span>: <a href="../types/AnyCanvas.html" class="tsd-signature-type tsd-kind-type-alias">AnyCanvas</a></span></li><li><span><span class="tsd-kind-parameter">result</span>: <a href="../interfaces/PersonResult.html" class="tsd-signature-type tsd-kind-interface">PersonResult</a><span class="tsd-signature-symbol">[]</span></span></li><li><span><code class="tsd-tag">Optional</code><span class="tsd-kind-parameter">drawOptions</span>: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/DrawOptions.html" class="tsd-signature-type tsd-kind-interface">DrawOptions</a><span class="tsd-signature-symbol">&gt;</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L30">src/draw/draw.ts:30</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>

View File

@ -0,0 +1,2 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>tensor | @vladmandic/human - v3.3.3</title><meta name="description" content="Documentation for @vladmandic/human"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@vladmandic/human - v3.3.3</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human</a></li><li><a href="../modules/draw.html">draw</a></li><li><a href="draw.tensor.html">tensor</a></li></ul><h1>Function tensor</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="tensor" class="tsd-anchor"></a><span class="tsd-kind-call-signature">tensor</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">input</span>, <span class="tsd-kind-parameter">output</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#tensor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>draw processed canvas</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">input</span>: <a href="../types/Tensor2D.html" class="tsd-signature-type tsd-kind-type-alias">Tensor2D</a></span></li><li><span><span class="tsd-kind-parameter">output</span>: <span class="tsd-signature-type">HTMLCanvasElement</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/draw/draw.ts#L66">src/draw/draw.ts:66</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>

View File

@ -9,4 +9,5 @@
<a href="../functions/draw.init.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-64"></use></svg><span>init</span></a>
<a href="../functions/draw.object.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-64"></use></svg><span>object</span></a>
<a href="../functions/draw.person.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-64"></use></svg><span>person</span></a>
<a href="../functions/draw.tensor.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-64"></use></svg><span>tensor</span></a>
</div></section></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@vladmandic/human - v3.3.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>

1
types/human.d.ts vendored
View File

@ -195,6 +195,7 @@ declare namespace draw {
export {
person,
canvas,
tensor,
all,
init,
options,