major precision improvements to movenet and handtrack

pull/193/head
Vladimir Mandic 2021-10-10 22:29:20 -04:00
parent 8670880c82
commit 3e7bbf2538
77 changed files with 1430 additions and 18674 deletions

View File

@ -9,11 +9,20 @@
## Changelog ## Changelog
### **HEAD -> main** 2021/10/10 mandic00@live.com
### **origin/main** 2021/10/08 mandic00@live.com
- demo default config cleanup
- improve gaze and face angle visualizations in draw
### **release 2.3.1** 2021/10/06 mandic00@live.com
### **2.3.1** 2021/10/06 mandic00@live.com ### **2.3.1** 2021/10/06 mandic00@live.com
- workaround for chrome offscreencanvas bug
### **origin/main** 2021/10/06 mandic00@live.com
- fix backend conflict in webworker - fix backend conflict in webworker
- add blazepose v2 and add annotations to body results - add blazepose v2 and add annotations to body results
- fix backend order initialization - fix backend order initialization

View File

@ -31,15 +31,6 @@ import jsonView from './helpers/jsonview.js';
let human; let human;
let userConfig = { let userConfig = {
cacheSensitivity: 0,
hand: { enabled: true },
body: { enabled: false },
face: { enabled: false },
/*
hand: { enabled: false, maxDetected: 1, skipFrames: 0 },
body: { enabled: false },
face: { enabled: false },
*/
/* /*
warmup: 'none', warmup: 'none',
backend: 'humangl', backend: 'humangl',
@ -118,6 +109,7 @@ const ui = {
lastFrame: 0, // time of last frame processing lastFrame: 0, // time of last frame processing
viewportSet: false, // internal, has custom viewport been set viewportSet: false, // internal, has custom viewport been set
background: null, // holds instance of segmentation background image background: null, // holds instance of segmentation background image
transferCanvas: null, // canvas used to transfer data to and from worker
// webrtc // webrtc
useWebRTC: false, // use webrtc as camera source instead of local webcam useWebRTC: false, // use webrtc as camera source instead of local webcam
@ -318,7 +310,7 @@ async function drawResults(input) {
const fps = avgDetect > 0 ? `FPS process:${avgDetect} refresh:${avgDraw}` : ''; const fps = avgDetect > 0 ? `FPS process:${avgDetect} refresh:${avgDraw}` : '';
const backend = result.backend || human.tf.getBackend(); const backend = result.backend || human.tf.getBackend();
const gpu = engine.backendInstance ? `gpu: ${(engine.backendInstance.numBytesInGPU ? engine.backendInstance.numBytesInGPU : 0).toLocaleString()} bytes` : ''; const gpu = engine.backendInstance ? `gpu: ${(engine.backendInstance.numBytesInGPU ? engine.backendInstance.numBytesInGPU : 0).toLocaleString()} bytes` : '';
const memory = result.tensors || `system: ${engine.state.numBytes.toLocaleString()} bytes ${gpu} | tensors: ${engine.state.numTensors.toLocaleString()}`; const memory = result.tensors ? `tensors: ${result.tensors.toLocaleString()} in worker` : `system: ${engine.state.numBytes.toLocaleString()} bytes ${gpu} | tensors: ${engine.state.numTensors.toLocaleString()}`;
document.getElementById('log').innerHTML = ` document.getElementById('log').innerHTML = `
video: ${ui.camera.name} | facing: ${ui.camera.facing} | screen: ${window.innerWidth} x ${window.innerHeight} camera: ${ui.camera.width} x ${ui.camera.height} ${processing}<br> video: ${ui.camera.name} | facing: ${ui.camera.facing} | screen: ${window.innerWidth} x ${window.innerHeight} camera: ${ui.camera.width} x ${ui.camera.height} ${processing}<br>
backend: ${backend} | ${memory}<br> backend: ${backend} | ${memory}<br>
@ -469,13 +461,17 @@ function webWorker(input, image, canvas, timestamp) {
if (document.getElementById('gl-bench')) document.getElementById('gl-bench').style.display = ui.bench ? 'block' : 'none'; if (document.getElementById('gl-bench')) document.getElementById('gl-bench').style.display = ui.bench ? 'block' : 'none';
lastDetectedResult = msg.data.result; lastDetectedResult = msg.data.result;
if (msg.data.image) { if (msg.data.image) { // we dont really need canvas since we draw from video
/*
if (!lastDetectedResult.canvas || lastDetectedResult.canvas.width !== msg.data.width || lastDetectedResult.canvas.height !== msg.data.height) {
lastDetectedResult.canvas = (typeof OffscreenCanvas !== 'undefined') ? new OffscreenCanvas(msg.data.width, msg.data.height) : document.createElement('canvas'); lastDetectedResult.canvas = (typeof OffscreenCanvas !== 'undefined') ? new OffscreenCanvas(msg.data.width, msg.data.height) : document.createElement('canvas');
lastDetectedResult.canvas.width = msg.data.width; lastDetectedResult.canvas.width = msg.data.width;
lastDetectedResult.canvas.height = msg.data.height; lastDetectedResult.canvas.height = msg.data.height;
}
const ctx = lastDetectedResult.canvas.getContext('2d'); const ctx = lastDetectedResult.canvas.getContext('2d');
const imageData = new ImageData(new Uint8ClampedArray(msg.data.image), msg.data.width, msg.data.height); const imageData = new ImageData(new Uint8ClampedArray(msg.data.image), msg.data.width, msg.data.height);
ctx.putImageData(imageData, 0, 0); ctx.putImageData(imageData, 0, 0);
*/
} }
ui.framesDetect++; ui.framesDetect++;
@ -508,10 +504,12 @@ function runHumanDetect(input, canvas, timestamp) {
if (ui.hintsThread) clearInterval(ui.hintsThread); if (ui.hintsThread) clearInterval(ui.hintsThread);
if (ui.useWorker && human.env.offscreen) { if (ui.useWorker && human.env.offscreen) {
// get image data from video as we cannot send html objects to webworker // get image data from video as we cannot send html objects to webworker
const offscreen = (typeof OffscreenCanvas !== 'undefined') ? new OffscreenCanvas(canvas.width, canvas.height) : document.createElement('canvas'); if (!ui.transferCanvas || ui.transferCanvas.width !== canvas.width || ui.transferCanvas.height || canvas.height) {
offscreen.width = canvas.width; ui.transferCanvas = document.createElement('canvas');
offscreen.height = canvas.height; ui.transferCanvas.width = canvas.width;
const ctx = offscreen.getContext('2d'); ui.transferCanvas.height = canvas.height;
}
const ctx = ui.transferCanvas.getContext('2d');
ctx.drawImage(input, 0, 0, canvas.width, canvas.height); ctx.drawImage(input, 0, 0, canvas.width, canvas.height);
const data = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = ctx.getImageData(0, 0, canvas.width, canvas.height);
// perform detection in worker // perform detection in worker

View File

@ -178,8 +178,8 @@ var config = {
hand: { hand: {
enabled: true, enabled: true,
rotation: true, rotation: true,
skipFrames: 1, skipFrames: 2,
minConfidence: 0.55, minConfidence: 0.5,
iouThreshold: 0.2, iouThreshold: 0.2,
maxDetected: -1, maxDetected: -1,
landmarks: true, landmarks: true,
@ -238,7 +238,7 @@ var version9 = {
}; };
// package.json // package.json
var version10 = "2.3.1"; var version10 = "2.3.2";
// src/image/imagefx.ts // src/image/imagefx.ts
function GLProgram(gl, vertexSource, fragmentSource) { function GLProgram(gl, vertexSource, fragmentSource) {
@ -1038,6 +1038,7 @@ async function set(obj) {
var maxSize = 2048; var maxSize = 2048;
var inCanvas = null; var inCanvas = null;
var outCanvas = null; var outCanvas = null;
var tmpCanvas = null;
var fx; var fx;
function canvas(width, height) { function canvas(width, height) {
let c; let c;
@ -1075,12 +1076,13 @@ function process2(input, config3, getTensor = true) {
throw new Error("input type is not recognized"); throw new Error("input type is not recognized");
} }
if (input instanceof tfjs_esm_exports.Tensor) { if (input instanceof tfjs_esm_exports.Tensor) {
if (input["isDisposedInternal"]) if (input["isDisposedInternal"]) {
throw new Error("input tensor is disposed"); throw new Error("input tensor is disposed");
else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) } else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) {
throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input.shape}`); throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input["shape"]}`);
else } else {
return { tensor: tfjs_esm_exports.clone(input), canvas: config3.filter.return ? outCanvas : null }; return { tensor: tfjs_esm_exports.clone(input), canvas: config3.filter.return ? outCanvas : null };
}
} else { } else {
if (typeof input["readyState"] !== "undefined" && input["readyState"] <= 2) { if (typeof input["readyState"] !== "undefined" && input["readyState"] <= 2) {
if (config3.debug) if (config3.debug)
@ -1181,22 +1183,24 @@ function process2(input, config3, getTensor = true) {
pixels = tfjs_esm_exports.browser ? tfjs_esm_exports.browser.fromPixels(input) : null; pixels = tfjs_esm_exports.browser ? tfjs_esm_exports.browser.fromPixels(input) : null;
} else { } else {
depth = input["data"].length / input["height"] / input["width"]; depth = input["data"].length / input["height"] / input["width"];
const arr = new Uint8Array(input["data"]["buffer"]); const arr = Uint8Array.from(input["data"]);
pixels = tfjs_esm_exports.tensor(arr, [input["height"], input["width"], depth], "float32"); pixels = tfjs_esm_exports.tensor(arr, [input["height"], input["width"], depth], "float32");
} }
} else { } else {
if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || (outCanvas == null ? void 0 : outCanvas.height) !== (tmpCanvas == null ? void 0 : tmpCanvas.height))
tmpCanvas = canvas(outCanvas.width, outCanvas.height);
if (tfjs_esm_exports.browser && env2.browser) { if (tfjs_esm_exports.browser && env2.browser) {
if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") {
pixels = tfjs_esm_exports.browser.fromPixels(outCanvas); pixels = tfjs_esm_exports.browser.fromPixels(outCanvas);
} else { } else {
const tempCanvas = copy(outCanvas); tmpCanvas = copy(outCanvas);
pixels = tfjs_esm_exports.browser.fromPixels(tempCanvas); pixels = tfjs_esm_exports.browser.fromPixels(tmpCanvas);
} }
} else { } else {
const tempCanvas = copy(outCanvas); const tempCanvas = copy(outCanvas);
const tempCtx = tempCanvas.getContext("2d"); const tempCtx = tempCanvas.getContext("2d");
const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);
depth = input["data"].length / targetWidth / targetHeight; depth = tempData.data.length / targetWidth / targetHeight;
const arr = new Uint8Array(tempData.data.buffer); const arr = new Uint8Array(tempData.data.buffer);
pixels = tfjs_esm_exports.tensor(arr, [targetWidth, targetHeight, depth]); pixels = tfjs_esm_exports.tensor(arr, [targetWidth, targetHeight, depth]);
} }
@ -4637,7 +4641,7 @@ function generateAnchors(inputSize8) {
const anchorY = stride * (gridY + 0.5); const anchorY = stride * (gridY + 0.5);
for (let gridX = 0; gridX < gridCols; gridX++) { for (let gridX = 0; gridX < gridCols; gridX++) {
const anchorX = stride * (gridX + 0.5); const anchorX = stride * (gridX + 0.5);
for (let n2 = 0; n2 < anchorsNum; n2++) for (let n = 0; n < anchorsNum; n++)
anchors4.push([anchorX, anchorY]); anchors4.push([anchorX, anchorY]);
} }
} }
@ -4662,8 +4666,8 @@ function transformRawCoords(rawCoords, box5, angle, rotationMatrix, inputSize8)
]); ]);
} }
function correctFaceRotation(box5, input, inputSize8) { function correctFaceRotation(box5, input, inputSize8) {
const [indexOfMouth, indexOfForehead] = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; const symmetryLine = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
const angle = computeRotation(box5.landmarks[indexOfMouth], box5.landmarks[indexOfForehead]); const angle = computeRotation(box5.landmarks[symmetryLine[0]], box5.landmarks[symmetryLine[1]]);
const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint }); const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint });
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]]; const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
const rotated = tfjs_esm_exports.image.rotateWithOffset(input, angle, 0, faceCenterNormalized); const rotated = tfjs_esm_exports.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
@ -9305,9 +9309,10 @@ var models = [null, null];
var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"];
var inputSize4 = [[0, 0], [0, 0]]; var inputSize4 = [[0, 0], [0, 0]];
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
var faceIndex = 4;
var boxExpandFact = 1.6; var boxExpandFact = 1.6;
var maxDetectorResolution = 512; var maxDetectorResolution = 512;
var detectorExpandFact = 1.2; var detectorExpandFact = 1.4;
var skipped4 = 0; var skipped4 = 0;
var outputSize = [0, 0]; var outputSize = [0, 0];
var cache = { var cache = {
@ -9371,9 +9376,10 @@ async function detectHands(input, config3) {
t.boxes = tfjs_esm_exports.squeeze(t.rawBoxes, [0, 2]); t.boxes = tfjs_esm_exports.squeeze(t.rawBoxes, [0, 2]);
t.scores = tfjs_esm_exports.squeeze(t.rawScores, [0]); t.scores = tfjs_esm_exports.squeeze(t.rawScores, [0]);
const classScores = tfjs_esm_exports.unstack(t.scores, 1); const classScores = tfjs_esm_exports.unstack(t.scores, 1);
classScores.splice(4, 1); tfjs_esm_exports.dispose(classScores[faceIndex]);
classScores.splice(faceIndex, 1);
t.filtered = tfjs_esm_exports.stack(classScores, 1); t.filtered = tfjs_esm_exports.stack(classScores, 1);
tfjs_esm_exports.dispose(...classScores); tfjs_esm_exports.dispose(classScores);
t.max = tfjs_esm_exports.max(t.filtered, 1); t.max = tfjs_esm_exports.max(t.filtered, 1);
t.argmax = tfjs_esm_exports.argMax(t.filtered, 1); t.argmax = tfjs_esm_exports.argMax(t.filtered, 1);
let id = 0; let id = 0;
@ -9383,12 +9389,12 @@ async function detectHands(input, config3) {
const classNum = await t.argmax.data(); const classNum = await t.argmax.data();
for (const nmsIndex of Array.from(nms)) { for (const nmsIndex of Array.from(nms)) {
const boxSlice = tfjs_esm_exports.slice(t.boxes, nmsIndex, 1); const boxSlice = tfjs_esm_exports.slice(t.boxes, nmsIndex, 1);
const boxData = await boxSlice.data(); const boxYX = await boxSlice.data();
tfjs_esm_exports.dispose(boxSlice); tfjs_esm_exports.dispose(boxSlice);
const boxSquareSize = Math.max(boxData[3] - boxData[1], boxData[2] - boxData[0]); const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]];
const boxRaw = scale([boxData[1], boxData[0], boxSquareSize, boxSquareSize], detectorExpandFact); const boxRaw = scale(boxData, detectorExpandFact);
const boxCrop = crop(boxRaw); const boxCrop = crop(boxRaw);
const boxFull = [Math.trunc(boxData[1] * outputSize[0]), Math.trunc(boxData[0] * outputSize[1]), Math.trunc((boxData[3] - boxData[1]) * outputSize[0]), Math.trunc((boxData[2] - boxData[0]) * outputSize[1])]; const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];
const score = scores[nmsIndex]; const score = scores[nmsIndex];
const label = classes[classNum[nmsIndex]]; const label = classes[classNum[nmsIndex]];
const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label }; const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label };
@ -9427,10 +9433,9 @@ async function detectFingers(input, h, config3) {
const coordsData = await t.reshaped.array(); const coordsData = await t.reshaped.array();
const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]); const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]);
const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]);
console.log(outputSize, h.box);
hand3.keypoints = coordsNorm.map((kpt4) => [ hand3.keypoints = coordsNorm.map((kpt4) => [
outputSize[0] * kpt4[0] + h.box[0], outputSize[0] * (kpt4[0] + h.boxRaw[0]),
outputSize[1] * kpt4[1] + h.box[1], outputSize[1] * (kpt4[1] + h.boxRaw[1]),
kpt4[2] || 0 kpt4[2] || 0
]); ]);
hand3.landmarks = analyze(hand3.keypoints); hand3.landmarks = analyze(hand3.keypoints);
@ -9442,28 +9447,21 @@ async function detectFingers(input, h, config3) {
} }
return hand3; return hand3;
} }
var n = 0;
async function predict6(input, config3) { async function predict6(input, config3) {
var _a, _b; var _a, _b;
n++;
if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape)) if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape))
return []; return [];
outputSize = [input.shape[2] || 0, input.shape[1] || 0]; outputSize = [input.shape[2] || 0, input.shape[1] || 0];
skipped4++; skipped4++;
if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) { if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) {
console.log(n, "SKIP", { results: cache.hands.length });
return cache.hands; return cache.hands;
} }
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
console.log(n, "DETECT", { skipped: skipped4, hands: cache.hands.length, boxes: cache.boxes.length }); if (config3.skipFrame && skipped4 < 5 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
if (config3.skipFrame && skipped4 <= 10 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
} else { } else {
cache.boxes = await detectHands(input, config3); cache.boxes = await detectHands(input, config3);
console.log(n, "BOXES", { hands: cache.boxes.length });
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
skipped4 = 0; skipped4 = 0;
} }
const oldCache = [...cache.boxes]; const oldCache = [...cache.boxes];
@ -9478,7 +9476,6 @@ async function predict6(input, config3) {
cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop }); cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop });
} }
} }
console.log(n, "CACHED", { hands: cache.boxes.length });
} }
resolve(cache.hands); resolve(cache.hands);
}); });

File diff suppressed because one or more lines are too long

263
dist/human.esm.js vendored
View File

@ -174,8 +174,8 @@ var config = {
hand: { hand: {
enabled: true, enabled: true,
rotation: true, rotation: true,
skipFrames: 1, skipFrames: 2,
minConfidence: 0.55, minConfidence: 0.5,
iouThreshold: 0.2, iouThreshold: 0.2,
maxDetected: -1, maxDetected: -1,
landmarks: true, landmarks: true,
@ -1606,20 +1606,20 @@ var require_alea = __commonJS({
return prng; return prng;
} }
function Mash() { function Mash() {
var n2 = 4022871197; var n = 4022871197;
var mash = function(data) { var mash = function(data) {
data = data.toString(); data = data.toString();
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
n2 += data.charCodeAt(i); n += data.charCodeAt(i);
var h = 0.02519603282416938 * n2; var h = 0.02519603282416938 * n;
n2 = h >>> 0; n = h >>> 0;
h -= n2; h -= n;
h *= n2; h *= n;
n2 = h >>> 0; n = h >>> 0;
h -= n2; h -= n;
n2 += h * 4294967296; n += h * 4294967296;
} }
return (n2 >>> 0) * 23283064365386963e-26; return (n >>> 0) * 23283064365386963e-26;
}; };
return mash; return mash;
} }
@ -2053,18 +2053,18 @@ var require_seedrandom = __commonJS({
var shortseed = mixkey(flatten4(options3.entropy ? [seed, tostring(pool3)] : seed == null ? autoseed() : seed, 3), key); var shortseed = mixkey(flatten4(options3.entropy ? [seed, tostring(pool3)] : seed == null ? autoseed() : seed, 3), key);
var arc4 = new ARC4(key); var arc4 = new ARC4(key);
var prng = function() { var prng = function() {
var n2 = arc4.g(chunks), d = startdenom, x = 0; var n = arc4.g(chunks), d = startdenom, x = 0;
while (n2 < significance) { while (n < significance) {
n2 = (n2 + x) * width; n = (n + x) * width;
d *= width; d *= width;
x = arc4.g(1); x = arc4.g(1);
} }
while (n2 >= overflow) { while (n >= overflow) {
n2 /= 2; n /= 2;
d /= 2; d /= 2;
x >>>= 1; x >>>= 1;
} }
return (n2 + x) / d; return (n + x) / d;
}; };
prng.int32 = function() { prng.int32 = function() {
return arc4.g(4) | 0; return arc4.g(4) | 0;
@ -2246,20 +2246,20 @@ var require_alea2 = __commonJS({
return prng; return prng;
} }
function Mash() { function Mash() {
var n2 = 4022871197; var n = 4022871197;
var mash = function(data) { var mash = function(data) {
data = String(data); data = String(data);
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
n2 += data.charCodeAt(i); n += data.charCodeAt(i);
var h = 0.02519603282416938 * n2; var h = 0.02519603282416938 * n;
n2 = h >>> 0; n = h >>> 0;
h -= n2; h -= n;
h *= n2; h *= n;
n2 = h >>> 0; n = h >>> 0;
h -= n2; h -= n;
n2 += h * 4294967296; n += h * 4294967296;
} }
return (n2 >>> 0) * 23283064365386963e-26; return (n >>> 0) * 23283064365386963e-26;
}; };
return mash; return mash;
} }
@ -2689,18 +2689,18 @@ var require_seedrandom3 = __commonJS({
var shortseed = mixkey(flatten4(options3.entropy ? [seed, tostring(pool3)] : seed == null ? autoseed() : seed, 3), key); var shortseed = mixkey(flatten4(options3.entropy ? [seed, tostring(pool3)] : seed == null ? autoseed() : seed, 3), key);
var arc4 = new ARC4(key); var arc4 = new ARC4(key);
var prng = function() { var prng = function() {
var n2 = arc4.g(chunks), d = startdenom, x = 0; var n = arc4.g(chunks), d = startdenom, x = 0;
while (n2 < significance) { while (n < significance) {
n2 = (n2 + x) * width; n = (n + x) * width;
d *= width; d *= width;
x = arc4.g(1); x = arc4.g(1);
} }
while (n2 >= overflow) { while (n >= overflow) {
n2 /= 2; n /= 2;
d /= 2; d /= 2;
x >>>= 1; x >>>= 1;
} }
return (n2 + x) / d; return (n + x) / d;
}; };
prng.int32 = function() { prng.int32 = function() {
return arc4.g(4) | 0; return arc4.g(4) | 0;
@ -4200,8 +4200,8 @@ var require_tfjs_backend_wasm_threaded_simd = __commonJS({
function __webgl_enable_WEBGL_draw_buffers(ctx) { function __webgl_enable_WEBGL_draw_buffers(ctx) {
var ext = ctx.getExtension("WEBGL_draw_buffers"); var ext = ctx.getExtension("WEBGL_draw_buffers");
if (ext) { if (ext) {
ctx["drawBuffers"] = function(n2, bufs) { ctx["drawBuffers"] = function(n, bufs) {
ext["drawBuffersWEBGL"](n2, bufs); ext["drawBuffersWEBGL"](n, bufs);
}; };
return 1; return 1;
} }
@ -4294,8 +4294,8 @@ var require_tfjs_backend_wasm_threaded_simd = __commonJS({
utable[name] = [u.size, id]; utable[name] = [u.size, id];
GL.uniforms[id] = loc; GL.uniforms[id] = loc;
for (var j = 1; j < u.size; ++j) { for (var j = 1; j < u.size; ++j) {
var n2 = name + "[" + j + "]"; var n = name + "[" + j + "]";
loc = GLctx.getUniformLocation(p2, n2); loc = GLctx.getUniformLocation(p2, n);
id = GL.getNewId(GL.uniforms); id = GL.getNewId(GL.uniforms);
GL.uniforms[id] = loc; GL.uniforms[id] = loc;
} }
@ -6401,9 +6401,9 @@ function sizeToSquarishShape(size2) {
const width = Math.ceil(Math.sqrt(size2)); const width = Math.ceil(Math.sqrt(size2));
return [width, Math.ceil(size2 / width)]; return [width, Math.ceil(size2 / width)];
} }
function createShuffledIndices(n2) { function createShuffledIndices(n) {
const shuffledIndices = new Uint32Array(n2); const shuffledIndices = new Uint32Array(n);
for (let i = 0; i < n2; ++i) { for (let i = 0; i < n; ++i) {
shuffledIndices[i] = i; shuffledIndices[i] = i;
} }
shuffle(shuffledIndices); shuffle(shuffledIndices);
@ -7559,13 +7559,13 @@ function tensorToString(vals, shape, dtype, verbose) {
return lines2.join("\n"); return lines2.join("\n");
} }
function computeMaxSizePerColumn(vals, shape, dtype, strides) { function computeMaxSizePerColumn(vals, shape, dtype, strides) {
const n2 = sizeFromShape(shape); const n = sizeFromShape(shape);
const numCols = strides[strides.length - 1]; const numCols = strides[strides.length - 1];
const padPerCol = new Array(numCols).fill(0); const padPerCol = new Array(numCols).fill(0);
const rank = shape.length; const rank = shape.length;
const valuesOrTuples = dtype === "complex64" ? createComplexTuples(vals) : vals; const valuesOrTuples = dtype === "complex64" ? createComplexTuples(vals) : vals;
if (rank > 1) { if (rank > 1) {
for (let row = 0; row < n2 / numCols; row++) { for (let row = 0; row < n / numCols; row++) {
const offset = row * numCols; const offset = row * numCols;
for (let j = 0; j < numCols; j++) { for (let j = 0; j < numCols; j++) {
padPerCol[j] = Math.max(padPerCol[j], valToString(valuesOrTuples[offset + j], 0, dtype).length); padPerCol[j] = Math.max(padPerCol[j], valToString(valuesOrTuples[offset + j], 0, dtype).length);
@ -7670,8 +7670,8 @@ var TensorBuffer = class {
this.shape = shape.slice(); this.shape = shape.slice();
this.size = sizeFromShape(shape); this.size = sizeFromShape(shape);
if (values != null) { if (values != null) {
const n2 = values.length; const n = values.length;
assert(n2 === this.size, () => `Length of values '${n2}' does not match the size inferred by the shape '${this.size}'.`); assert(n === this.size, () => `Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`);
} }
if (dtype === "complex64") { if (dtype === "complex64") {
throw new Error(`complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).`); throw new Error(`complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).`);
@ -11895,7 +11895,7 @@ function broadcastTo_(x, shape) {
throw new Error(`broadcastTo(): [${xShape}] cannot be broadcast to [${shape}].`); throw new Error(`broadcastTo(): [${xShape}] cannot be broadcast to [${shape}].`);
} }
} }
const axes = reps.map((n2, i) => n2 > 1 ? i : -1).filter((i) => i >= 0); const axes = reps.map((n, i) => n > 1 ? i : -1).filter((i) => i >= 0);
if (axes.length === 0) { if (axes.length === 0) {
return clone(input2); return clone(input2);
} }
@ -12352,8 +12352,8 @@ function eye_(numRows, numColumns, batchShape, dtype = "float32") {
numColumns = numRows; numColumns = numRows;
} }
const buff = buffer([numRows, numColumns], dtype); const buff = buffer([numRows, numColumns], dtype);
const n2 = numRows <= numColumns ? numRows : numColumns; const n = numRows <= numColumns ? numRows : numColumns;
for (let i = 0; i < n2; ++i) { for (let i = 0; i < n; ++i) {
buff.set(1, i, i); buff.set(1, i, i);
} }
const out = reshape(buff.toTensor(), [numRows, numColumns]); const out = reshape(buff.toTensor(), [numRows, numColumns]);
@ -14952,12 +14952,12 @@ function qr2d(x, fullMatrices = false) {
return ENGINE.tidy(() => { return ENGINE.tidy(() => {
assert(x.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${x.shape.length}D Tensor.`); assert(x.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${x.shape.length}D Tensor.`);
const m = x.shape[0]; const m = x.shape[0];
const n2 = x.shape[1]; const n = x.shape[1];
let q = eye(m); let q = eye(m);
let r = clone(x); let r = clone(x);
const one2D = tensor2d([[1]], [1, 1]); const one2D = tensor2d([[1]], [1, 1]);
let w = clone(one2D); let w = clone(one2D);
const iters = m >= n2 ? n2 : m; const iters = m >= n ? n : m;
for (let j = 0; j < iters; ++j) { for (let j = 0; j < iters; ++j) {
const rTemp = r; const rTemp = r;
const wTemp = w; const wTemp = w;
@ -14978,14 +14978,14 @@ function qr2d(x, fullMatrices = false) {
], 0); ], 0);
} }
const tau = neg(div(matMul(s, u1), normX)); const tau = neg(div(matMul(s, u1), normX));
const rjEndAll = slice(r, [j, 0], [m - j, n2]); const rjEndAll = slice(r, [j, 0], [m - j, n]);
const tauTimesW = mul(tau, w); const tauTimesW = mul(tau, w);
const wT = transpose(w); const wT = transpose(w);
if (j === 0) { if (j === 0) {
r = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll))); r = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll)));
} else { } else {
const rTimesTau = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll))); const rTimesTau = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll)));
r = concat([slice(r, [0, 0], [j, n2]), rTimesTau], 0); r = concat([slice(r, [0, 0], [j, n]), rTimesTau], 0);
} }
const tawTimesWT = transpose(tauTimesW); const tawTimesWT = transpose(tauTimesW);
const qAllJEnd = slice(q, [0, j], [m, q.shape[1] - j]); const qAllJEnd = slice(q, [0, j], [m, q.shape[1] - j]);
@ -14999,9 +14999,9 @@ function qr2d(x, fullMatrices = false) {
}); });
dispose([rTemp, wTemp, qTemp]); dispose([rTemp, wTemp, qTemp]);
} }
if (!fullMatrices && m > n2) { if (!fullMatrices && m > n) {
q = slice(q, [0, 0], [m, n2]); q = slice(q, [0, 0], [m, n]);
r = slice(r, [0, 0], [n2, n2]); r = slice(r, [0, 0], [n, n]);
} }
return [q, r]; return [q, r];
}); });
@ -16320,18 +16320,18 @@ function assignToTypedArray(data, real5, imag5, index) {
data[index * 2] = real5; data[index * 2] = real5;
data[index * 2 + 1] = imag5; data[index * 2 + 1] = imag5;
} }
function exponents(n2, inverse) { function exponents(n, inverse) {
const real5 = new Float32Array(n2 / 2); const real5 = new Float32Array(n / 2);
const imag5 = new Float32Array(n2 / 2); const imag5 = new Float32Array(n / 2);
for (let i = 0; i < Math.ceil(n2 / 2); i++) { for (let i = 0; i < Math.ceil(n / 2); i++) {
const x = (inverse ? 2 : -2) * Math.PI * (i / n2); const x = (inverse ? 2 : -2) * Math.PI * (i / n);
real5[i] = Math.cos(x); real5[i] = Math.cos(x);
imag5[i] = Math.sin(x); imag5[i] = Math.sin(x);
} }
return { real: real5, imag: imag5 }; return { real: real5, imag: imag5 };
} }
function exponent(k, n2, inverse) { function exponent(k, n, inverse) {
const x = (inverse ? 2 : -2) * Math.PI * (k / n2); const x = (inverse ? 2 : -2) * Math.PI * (k / n);
const real5 = Math.cos(x); const real5 = Math.cos(x);
const imag5 = Math.sin(x); const imag5 = Math.sin(x);
return { real: real5, imag: imag5 }; return { real: real5, imag: imag5 };
@ -19222,13 +19222,13 @@ function expandDims2(x, axis = -1) {
outShape.splice(axis, 0, 1); outShape.splice(axis, 0, 1);
return reshape(x, outShape); return reshape(x, outShape);
} }
function repeat(x, n2) { function repeat(x, n) {
return tidy(() => { return tidy(() => {
if (x.shape.length !== 2) { if (x.shape.length !== 2) {
throw new ValueError(`repeat() expects a rank-2 tensor, but received a rank-${x.shape.length} tensor.`); throw new ValueError(`repeat() expects a rank-2 tensor, but received a rank-${x.shape.length} tensor.`);
} }
const y = expandDims2(x, 1); const y = expandDims2(x, 1);
return tile2(y, [1, n2, 1]); return tile2(y, [1, n, 1]);
}); });
} }
function flatten2(x) { function flatten2(x) {
@ -19363,14 +19363,14 @@ function concatAlongFirstAxis(a, b) {
throw new ValueError(`concatAlongFirstAxis() received an unsupported tensor rank: ${a.rank}`); throw new ValueError(`concatAlongFirstAxis() received an unsupported tensor rank: ${a.rank}`);
} }
} }
function tile2(x, n2) { function tile2(x, n) {
if (!Array.isArray(n2)) { if (!Array.isArray(n)) {
n2 = [n2]; n = [n];
} }
if (x.rank !== n2.length) { if (x.rank !== n.length) {
throw new ValueError(`The length of input n (${n2.length}) does not match the number of dimensions in input x (${x.rank})`); throw new ValueError(`The length of input n (${n.length}) does not match the number of dimensions in input x (${x.rank})`);
} }
return tile(x, n2); return tile(x, n);
} }
function randomNormal2(shape, mean5 = 0, stddev = 1, dtype, seed) { function randomNormal2(shape, mean5 = 0, stddev = 1, dtype, seed) {
return randomNormal(shape, mean5, stddev, dtype, seed); return randomNormal(shape, mean5, stddev, dtype, seed);
@ -21055,10 +21055,10 @@ var History = class extends BaseCallback {
} }
} }
const values = await Promise.all(promises); const values = await Promise.all(promises);
for (let n2 = 0; n2 < values.length; ++n2) { for (let n = 0; n < values.length; ++n) {
const tensorToDispose = this.history[keys[n2]][indices[n2]]; const tensorToDispose = this.history[keys[n]][indices[n]];
tensorToDispose.dispose(); tensorToDispose.dispose();
this.history[keys[n2]][indices[n2]] = values[n2][0]; this.history[keys[n]][indices[n]] = values[n][0];
} }
} }
}; };
@ -22906,7 +22906,7 @@ async function fitDataset(model22, dataset, args) {
const outLabels = model22.getDedupedMetricsNames(); const outLabels = model22.getDedupedMetricsNames();
let callbackMetrics; let callbackMetrics;
if (doValidation) { if (doValidation) {
callbackMetrics = outLabels.slice().concat(outLabels.map((n2) => "val_" + n2)); callbackMetrics = outLabels.slice().concat(outLabels.map((n) => "val_" + n));
} else { } else {
callbackMetrics = outLabels.slice(); callbackMetrics = outLabels.slice();
} }
@ -23253,7 +23253,7 @@ async function fitTensors(model22, x, y, args = {}) {
if (doValidation) { if (doValidation) {
model22.makeTestFunction(); model22.makeTestFunction();
valFunction = model22.testFunction; valFunction = model22.testFunction;
callbackMetrics = outLabels.slice().concat(outLabels.map((n2) => "val_" + n2)); callbackMetrics = outLabels.slice().concat(outLabels.map((n) => "val_" + n));
} else { } else {
valFunction = null; valFunction = null;
valIns = []; valIns = [];
@ -24933,17 +24933,17 @@ var Softmax3 = class extends Layer {
}; };
Softmax3.className = "Softmax"; Softmax3.className = "Softmax";
serialization_exports.registerClass(Softmax3); serialization_exports.registerClass(Softmax3);
function normalizeArray(value, n2, name) { function normalizeArray(value, n, name) {
if (typeof value === "number") { if (typeof value === "number") {
return pyListRepeat(value, n2); return pyListRepeat(value, n);
} else { } else {
if (value.length !== n2) { if (value.length !== n) {
throw new ValueError(`The ${name} argument must be an integer or tuple of ${n2} integers. Received: ${value.length} elements.`); throw new ValueError(`The ${name} argument must be an integer or tuple of ${n} integers. Received: ${value.length} elements.`);
} }
for (let i = 0; i < n2; ++i) { for (let i = 0; i < n; ++i) {
const singleValue = value[i]; const singleValue = value[i];
if (!isInteger(singleValue)) { if (!isInteger(singleValue)) {
throw new ValueError(`The ${name} argument must be an integer or tuple of ${n2} integers. Received: ${JSON.stringify(value)} including a non-integer number ${singleValue}`); throw new ValueError(`The ${name} argument must be an integer or tuple of ${n} integers. Received: ${JSON.stringify(value)} including a non-integer number ${singleValue}`);
} }
} }
return value; return value;
@ -34738,10 +34738,10 @@ var executeOp15 = (node2, tensorMap, context) => {
switch (node2.op) { switch (node2.op) {
case "ConcatV2": case "ConcatV2":
case "Concat": { case "Concat": {
const n2 = getParamValue("n", node2, tensorMap, context); const n = getParamValue("n", node2, tensorMap, context);
const axis = getParamValue("axis", node2, tensorMap, context); const axis = getParamValue("axis", node2, tensorMap, context);
let inputs = getParamValue("tensors", node2, tensorMap, context); let inputs = getParamValue("tensors", node2, tensorMap, context);
inputs = inputs.slice(0, n2); inputs = inputs.slice(0, n);
return [concat(inputs, axis)]; return [concat(inputs, axis)];
} }
case "Gather": { case "Gather": {
@ -35306,7 +35306,7 @@ var GraphExecutor = class {
throw new Error(`This execution contains the node '${dynamicNode.name}', which has the dynamic op '${dynamicNode.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${syncInputs}]`); throw new Error(`This execution contains the node '${dynamicNode.name}', which has the dynamic op '${dynamicNode.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${syncInputs}]`);
} }
if (missingInputs.length > 0) { if (missingInputs.length > 0) {
const outNames = outputs.map((n2) => n2.name); const outNames = outputs.map((n) => n.name);
const inNames = Object.keys(inputs); const inNames = Object.keys(inputs);
throw new Error(`Cannot compute the outputs [${outNames}] from the provided inputs [${inNames}]. Missing the following inputs: [${missingInputs}]`); throw new Error(`Cannot compute the outputs [${outNames}] from the provided inputs [${inNames}]. Missing the following inputs: [${missingInputs}]`);
} }
@ -38666,8 +38666,8 @@ var StringNGramsOp = class {
const dataStartIndex = splitIndex + (leftPadding > 0 ? 0 : nGramIndex - padWidth); const dataStartIndex = splitIndex + (leftPadding > 0 ? 0 : nGramIndex - padWidth);
let nGramSize = 0; let nGramSize = 0;
nGramSize += leftPadding * this.leftPad.length; nGramSize += leftPadding * this.leftPad.length;
for (let n2 = 0; n2 < numTokens; ++n2) { for (let n = 0; n < numTokens; ++n) {
nGramSize += data[dataStartIndex + n2].length; nGramSize += data[dataStartIndex + n].length;
} }
nGramSize += rightPadding * this.rightPad.length; nGramSize += rightPadding * this.rightPad.length;
const numSeparators = leftPadding + rightPadding + numTokens - 1; const numSeparators = leftPadding + rightPadding + numTokens - 1;
@ -38676,22 +38676,22 @@ var StringNGramsOp = class {
const nGram = output[outputStartIndex + nGramIndex]; const nGram = output[outputStartIndex + nGramIndex];
let nextNGramIndex = 0; let nextNGramIndex = 0;
const appendToNGram = (str) => str.forEach((value) => nGram[nextNGramIndex++] = value); const appendToNGram = (str) => str.forEach((value) => nGram[nextNGramIndex++] = value);
for (let n2 = 0; n2 < leftPadding; ++n2) { for (let n = 0; n < leftPadding; ++n) {
appendToNGram(this.leftPad); appendToNGram(this.leftPad);
appendToNGram(this.separator); appendToNGram(this.separator);
} }
for (let n2 = 0; n2 < numTokens - 1; ++n2) { for (let n = 0; n < numTokens - 1; ++n) {
appendToNGram(data[dataStartIndex + n2]); appendToNGram(data[dataStartIndex + n]);
appendToNGram(this.separator); appendToNGram(this.separator);
} }
if (numTokens > 0) { if (numTokens > 0) {
appendToNGram(data[dataStartIndex + numTokens - 1]); appendToNGram(data[dataStartIndex + numTokens - 1]);
for (let n2 = 0; n2 < rightPadding; ++n2) { for (let n = 0; n < rightPadding; ++n) {
appendToNGram(this.separator); appendToNGram(this.separator);
appendToNGram(this.rightPad); appendToNGram(this.rightPad);
} }
} else { } else {
for (let n2 = 0; n2 < rightPadding - 1; ++n2) { for (let n = 0; n < rightPadding - 1; ++n) {
appendToNGram(this.rightPad); appendToNGram(this.rightPad);
appendToNGram(this.separator); appendToNGram(this.separator);
} }
@ -38872,13 +38872,13 @@ var comparePair = (a, b) => {
function select(array2, k, left = 0, right = array2.length - 1) { function select(array2, k, left = 0, right = array2.length - 1) {
while (right > left) { while (right > left) {
if (right - left > 600) { if (right - left > 600) {
const n2 = right - left + 1; const n = right - left + 1;
const i2 = k - left + 1; const i2 = k - left + 1;
const z = Math.log(n2); const z = Math.log(n);
const s = 0.5 * Math.exp(2 * z / 3); const s = 0.5 * Math.exp(2 * z / 3);
const sd = 0.5 * Math.sqrt(z * s * (n2 - s) / n2) * Math.sign(i2 - n2 / 2); const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * Math.sign(i2 - n / 2);
const newLeft = Math.max(left, Math.floor(k - i2 * s / n2 + sd)); const newLeft = Math.max(left, Math.floor(k - i2 * s / n + sd));
const newRight = Math.min(right, Math.floor(k + (n2 - i2) * s / n2 + sd)); const newRight = Math.min(right, Math.floor(k + (n - i2) * s / n + sd));
select(array2, k, newLeft, newRight); select(array2, k, newLeft, newRight);
} }
const t = array2[k]; const t = array2[k];
@ -38967,8 +38967,8 @@ function uniqueImpl(values, axis, shape, dtype) {
} else { } else {
const axisValues = []; const axisValues = [];
for (let m = 0; m < newShape[0]; m++) { for (let m = 0; m < newShape[0]; m++) {
for (let n2 = 0; n2 < newShape[2]; n2++) { for (let n = 0; n < newShape[2]; n++) {
axisValues.push(inputBuffer.get(m, i, n2)); axisValues.push(inputBuffer.get(m, i, n));
} }
} }
element = axisValues.join(","); element = axisValues.join(",");
@ -38987,8 +38987,8 @@ function uniqueImpl(values, axis, shape, dtype) {
const outputBuffer = new TensorBuffer(outputTmpShape, dtype); const outputBuffer = new TensorBuffer(outputTmpShape, dtype);
uniqueIndices.forEach((uniqueElementIndex, i) => { uniqueIndices.forEach((uniqueElementIndex, i) => {
for (let m = 0; m < newShape[0]; m++) { for (let m = 0; m < newShape[0]; m++) {
for (let n2 = 0; n2 < newShape[2]; n2++) { for (let n = 0; n < newShape[2]; n++) {
outputBuffer.set(inputBuffer.get(m, uniqueElementIndex, n2), m, i, n2); outputBuffer.set(inputBuffer.get(m, uniqueElementIndex, n), m, i, n);
} }
} }
}); });
@ -44037,8 +44037,8 @@ function getTextureShapeFromLogicalShape(logShape, isPacked = false) {
return util_exports.sizeToSquarishShape(size2); return util_exports.sizeToSquarishShape(size2);
} }
} }
function isEven(n2) { function isEven(n) {
return n2 % 2 === 0; return n % 2 === 0;
} }
function isReshapeFree(shape1, shape2) { function isReshapeFree(shape1, shape2) {
shape1 = shape1.slice(-2); shape1 = shape1.slice(-2);
@ -67727,7 +67727,7 @@ var version92 = {
}; };
// package.json // package.json
var version6 = "2.3.1"; var version6 = "2.3.2";
// src/image/imagefx.ts // src/image/imagefx.ts
function GLProgram(gl, vertexSource, fragmentSource) { function GLProgram(gl, vertexSource, fragmentSource) {
@ -68527,6 +68527,7 @@ async function set(obj) {
var maxSize = 2048; var maxSize = 2048;
var inCanvas = null; var inCanvas = null;
var outCanvas = null; var outCanvas = null;
var tmpCanvas = null;
var fx; var fx;
function canvas(width, height) { function canvas(width, height) {
let c; let c;
@ -68564,12 +68565,13 @@ function process2(input2, config3, getTensor2 = true) {
throw new Error("input type is not recognized"); throw new Error("input type is not recognized");
} }
if (input2 instanceof Tensor) { if (input2 instanceof Tensor) {
if (input2["isDisposedInternal"]) if (input2["isDisposedInternal"]) {
throw new Error("input tensor is disposed"); throw new Error("input tensor is disposed");
else if (!input2.shape || input2.shape.length !== 4 || input2.shape[0] !== 1 || input2.shape[3] !== 3) } else if (!input2.shape || input2.shape.length !== 4 || input2.shape[0] !== 1 || input2.shape[3] !== 3) {
throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input2.shape}`); throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input2["shape"]}`);
else } else {
return { tensor: clone(input2), canvas: config3.filter.return ? outCanvas : null }; return { tensor: clone(input2), canvas: config3.filter.return ? outCanvas : null };
}
} else { } else {
if (typeof input2["readyState"] !== "undefined" && input2["readyState"] <= 2) { if (typeof input2["readyState"] !== "undefined" && input2["readyState"] <= 2) {
if (config3.debug) if (config3.debug)
@ -68670,22 +68672,24 @@ function process2(input2, config3, getTensor2 = true) {
pixels = browser_exports ? browser_exports.fromPixels(input2) : null; pixels = browser_exports ? browser_exports.fromPixels(input2) : null;
} else { } else {
depth = input2["data"].length / input2["height"] / input2["width"]; depth = input2["data"].length / input2["height"] / input2["width"];
const arr = new Uint8Array(input2["data"]["buffer"]); const arr = Uint8Array.from(input2["data"]);
pixels = tensor(arr, [input2["height"], input2["width"], depth], "float32"); pixels = tensor(arr, [input2["height"], input2["width"], depth], "float32");
} }
} else { } else {
if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || (outCanvas == null ? void 0 : outCanvas.height) !== (tmpCanvas == null ? void 0 : tmpCanvas.height))
tmpCanvas = canvas(outCanvas.width, outCanvas.height);
if (browser_exports && env2.browser) { if (browser_exports && env2.browser) {
if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") {
pixels = browser_exports.fromPixels(outCanvas); pixels = browser_exports.fromPixels(outCanvas);
} else { } else {
const tempCanvas = copy(outCanvas); tmpCanvas = copy(outCanvas);
pixels = browser_exports.fromPixels(tempCanvas); pixels = browser_exports.fromPixels(tmpCanvas);
} }
} else { } else {
const tempCanvas = copy(outCanvas); const tempCanvas = copy(outCanvas);
const tempCtx = tempCanvas.getContext("2d"); const tempCtx = tempCanvas.getContext("2d");
const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);
depth = input2["data"].length / targetWidth / targetHeight; depth = tempData.data.length / targetWidth / targetHeight;
const arr = new Uint8Array(tempData.data.buffer); const arr = new Uint8Array(tempData.data.buffer);
pixels = tensor(arr, [targetWidth, targetHeight, depth]); pixels = tensor(arr, [targetWidth, targetHeight, depth]);
} }
@ -72126,7 +72130,7 @@ function generateAnchors(inputSize8) {
const anchorY = stride * (gridY + 0.5); const anchorY = stride * (gridY + 0.5);
for (let gridX = 0; gridX < gridCols; gridX++) { for (let gridX = 0; gridX < gridCols; gridX++) {
const anchorX = stride * (gridX + 0.5); const anchorX = stride * (gridX + 0.5);
for (let n2 = 0; n2 < anchorsNum; n2++) for (let n = 0; n < anchorsNum; n++)
anchors4.push([anchorX, anchorY]); anchors4.push([anchorX, anchorY]);
} }
} }
@ -72151,8 +72155,8 @@ function transformRawCoords(rawCoords, box5, angle, rotationMatrix, inputSize8)
]); ]);
} }
function correctFaceRotation(box5, input2, inputSize8) { function correctFaceRotation(box5, input2, inputSize8) {
const [indexOfMouth, indexOfForehead] = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; const symmetryLine = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
const angle = computeRotation(box5.landmarks[indexOfMouth], box5.landmarks[indexOfForehead]); const angle = computeRotation(box5.landmarks[symmetryLine[0]], box5.landmarks[symmetryLine[1]]);
const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint }); const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint });
const faceCenterNormalized = [faceCenter[0] / input2.shape[2], faceCenter[1] / input2.shape[1]]; const faceCenterNormalized = [faceCenter[0] / input2.shape[2], faceCenter[1] / input2.shape[1]];
const rotated = image.rotateWithOffset(input2, angle, 0, faceCenterNormalized); const rotated = image.rotateWithOffset(input2, angle, 0, faceCenterNormalized);
@ -76794,9 +76798,10 @@ var models = [null, null];
var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"];
var inputSize4 = [[0, 0], [0, 0]]; var inputSize4 = [[0, 0], [0, 0]];
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
var faceIndex = 4;
var boxExpandFact = 1.6; var boxExpandFact = 1.6;
var maxDetectorResolution = 512; var maxDetectorResolution = 512;
var detectorExpandFact = 1.2; var detectorExpandFact = 1.4;
var skipped4 = 0; var skipped4 = 0;
var outputSize = [0, 0]; var outputSize = [0, 0];
var cache = { var cache = {
@ -76860,9 +76865,10 @@ async function detectHands(input2, config3) {
t.boxes = squeeze(t.rawBoxes, [0, 2]); t.boxes = squeeze(t.rawBoxes, [0, 2]);
t.scores = squeeze(t.rawScores, [0]); t.scores = squeeze(t.rawScores, [0]);
const classScores = unstack(t.scores, 1); const classScores = unstack(t.scores, 1);
classScores.splice(4, 1); dispose(classScores[faceIndex]);
classScores.splice(faceIndex, 1);
t.filtered = stack(classScores, 1); t.filtered = stack(classScores, 1);
dispose(...classScores); dispose(classScores);
t.max = max(t.filtered, 1); t.max = max(t.filtered, 1);
t.argmax = argMax(t.filtered, 1); t.argmax = argMax(t.filtered, 1);
let id = 0; let id = 0;
@ -76872,12 +76878,12 @@ async function detectHands(input2, config3) {
const classNum = await t.argmax.data(); const classNum = await t.argmax.data();
for (const nmsIndex of Array.from(nms)) { for (const nmsIndex of Array.from(nms)) {
const boxSlice = slice(t.boxes, nmsIndex, 1); const boxSlice = slice(t.boxes, nmsIndex, 1);
const boxData = await boxSlice.data(); const boxYX = await boxSlice.data();
dispose(boxSlice); dispose(boxSlice);
const boxSquareSize = Math.max(boxData[3] - boxData[1], boxData[2] - boxData[0]); const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]];
const boxRaw = scale2([boxData[1], boxData[0], boxSquareSize, boxSquareSize], detectorExpandFact); const boxRaw = scale2(boxData, detectorExpandFact);
const boxCrop = crop(boxRaw); const boxCrop = crop(boxRaw);
const boxFull = [Math.trunc(boxData[1] * outputSize[0]), Math.trunc(boxData[0] * outputSize[1]), Math.trunc((boxData[3] - boxData[1]) * outputSize[0]), Math.trunc((boxData[2] - boxData[0]) * outputSize[1])]; const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];
const score = scores[nmsIndex]; const score = scores[nmsIndex];
const label = classes[classNum[nmsIndex]]; const label = classes[classNum[nmsIndex]];
const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label }; const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label };
@ -76916,10 +76922,9 @@ async function detectFingers(input2, h, config3) {
const coordsData = await t.reshaped.array(); const coordsData = await t.reshaped.array();
const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]); const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]);
const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]);
console.log(outputSize, h.box);
hand3.keypoints = coordsNorm.map((kpt4) => [ hand3.keypoints = coordsNorm.map((kpt4) => [
outputSize[0] * kpt4[0] + h.box[0], outputSize[0] * (kpt4[0] + h.boxRaw[0]),
outputSize[1] * kpt4[1] + h.box[1], outputSize[1] * (kpt4[1] + h.boxRaw[1]),
kpt4[2] || 0 kpt4[2] || 0
]); ]);
hand3.landmarks = analyze(hand3.keypoints); hand3.landmarks = analyze(hand3.keypoints);
@ -76931,28 +76936,21 @@ async function detectFingers(input2, h, config3) {
} }
return hand3; return hand3;
} }
var n = 0;
async function predict6(input2, config3) { async function predict6(input2, config3) {
var _a, _b; var _a, _b;
n++;
if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape)) if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape))
return []; return [];
outputSize = [input2.shape[2] || 0, input2.shape[1] || 0]; outputSize = [input2.shape[2] || 0, input2.shape[1] || 0];
skipped4++; skipped4++;
if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) { if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) {
console.log(n, "SKIP", { results: cache.hands.length });
return cache.hands; return cache.hands;
} }
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
console.log(n, "DETECT", { skipped: skipped4, hands: cache.hands.length, boxes: cache.boxes.length }); if (config3.skipFrame && skipped4 < 5 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
if (config3.skipFrame && skipped4 <= 10 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input2, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input2, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
} else { } else {
cache.boxes = await detectHands(input2, config3); cache.boxes = await detectHands(input2, config3);
console.log(n, "BOXES", { hands: cache.boxes.length });
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input2, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input2, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
skipped4 = 0; skipped4 = 0;
} }
const oldCache = [...cache.boxes]; const oldCache = [...cache.boxes];
@ -76967,7 +76965,6 @@ async function predict6(input2, config3) {
cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop }); cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop });
} }
} }
console.log(n, "CACHED", { hands: cache.boxes.length });
} }
resolve(cache.hands); resolve(cache.hands);
}); });

File diff suppressed because one or more lines are too long

652
dist/human.js vendored

File diff suppressed because one or more lines are too long

View File

@ -221,8 +221,8 @@ var config = {
hand: { hand: {
enabled: true, enabled: true,
rotation: true, rotation: true,
skipFrames: 1, skipFrames: 2,
minConfidence: 0.55, minConfidence: 0.5,
iouThreshold: 0.2, iouThreshold: 0.2,
maxDetected: -1, maxDetected: -1,
landmarks: true, landmarks: true,
@ -252,7 +252,7 @@ var config = {
var tf26 = __toModule(require_tfjs_esm()); var tf26 = __toModule(require_tfjs_esm());
// package.json // package.json
var version = "2.3.1"; var version = "2.3.2";
// src/tfjs/humangl.ts // src/tfjs/humangl.ts
var tf22 = __toModule(require_tfjs_esm()); var tf22 = __toModule(require_tfjs_esm());
@ -1059,6 +1059,7 @@ async function set(obj) {
var maxSize = 2048; var maxSize = 2048;
var inCanvas = null; var inCanvas = null;
var outCanvas = null; var outCanvas = null;
var tmpCanvas = null;
var fx; var fx;
function canvas(width, height) { function canvas(width, height) {
let c; let c;
@ -1096,12 +1097,13 @@ function process2(input, config3, getTensor = true) {
throw new Error("input type is not recognized"); throw new Error("input type is not recognized");
} }
if (input instanceof tf2.Tensor) { if (input instanceof tf2.Tensor) {
if (input["isDisposedInternal"]) if (input["isDisposedInternal"]) {
throw new Error("input tensor is disposed"); throw new Error("input tensor is disposed");
else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) } else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) {
throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input.shape}`); throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input["shape"]}`);
else } else {
return { tensor: tf2.clone(input), canvas: config3.filter.return ? outCanvas : null }; return { tensor: tf2.clone(input), canvas: config3.filter.return ? outCanvas : null };
}
} else { } else {
if (typeof input["readyState"] !== "undefined" && input["readyState"] <= 2) { if (typeof input["readyState"] !== "undefined" && input["readyState"] <= 2) {
if (config3.debug) if (config3.debug)
@ -1202,22 +1204,24 @@ function process2(input, config3, getTensor = true) {
pixels = tf2.browser ? tf2.browser.fromPixels(input) : null; pixels = tf2.browser ? tf2.browser.fromPixels(input) : null;
} else { } else {
depth = input["data"].length / input["height"] / input["width"]; depth = input["data"].length / input["height"] / input["width"];
const arr = new Uint8Array(input["data"]["buffer"]); const arr = Uint8Array.from(input["data"]);
pixels = tf2.tensor(arr, [input["height"], input["width"], depth], "float32"); pixels = tf2.tensor(arr, [input["height"], input["width"], depth], "float32");
} }
} else { } else {
if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || (outCanvas == null ? void 0 : outCanvas.height) !== (tmpCanvas == null ? void 0 : tmpCanvas.height))
tmpCanvas = canvas(outCanvas.width, outCanvas.height);
if (tf2.browser && env2.browser) { if (tf2.browser && env2.browser) {
if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") {
pixels = tf2.browser.fromPixels(outCanvas); pixels = tf2.browser.fromPixels(outCanvas);
} else { } else {
const tempCanvas = copy(outCanvas); tmpCanvas = copy(outCanvas);
pixels = tf2.browser.fromPixels(tempCanvas); pixels = tf2.browser.fromPixels(tmpCanvas);
} }
} else { } else {
const tempCanvas = copy(outCanvas); const tempCanvas = copy(outCanvas);
const tempCtx = tempCanvas.getContext("2d"); const tempCtx = tempCanvas.getContext("2d");
const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);
depth = input["data"].length / targetWidth / targetHeight; depth = tempData.data.length / targetWidth / targetHeight;
const arr = new Uint8Array(tempData.data.buffer); const arr = new Uint8Array(tempData.data.buffer);
pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]); pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]);
} }
@ -4664,7 +4668,7 @@ function generateAnchors(inputSize8) {
const anchorY = stride * (gridY + 0.5); const anchorY = stride * (gridY + 0.5);
for (let gridX = 0; gridX < gridCols; gridX++) { for (let gridX = 0; gridX < gridCols; gridX++) {
const anchorX = stride * (gridX + 0.5); const anchorX = stride * (gridX + 0.5);
for (let n2 = 0; n2 < anchorsNum; n2++) for (let n = 0; n < anchorsNum; n++)
anchors4.push([anchorX, anchorY]); anchors4.push([anchorX, anchorY]);
} }
} }
@ -4689,8 +4693,8 @@ function transformRawCoords(rawCoords, box5, angle, rotationMatrix, inputSize8)
]); ]);
} }
function correctFaceRotation(box5, input, inputSize8) { function correctFaceRotation(box5, input, inputSize8) {
const [indexOfMouth, indexOfForehead] = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; const symmetryLine = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
const angle = computeRotation(box5.landmarks[indexOfMouth], box5.landmarks[indexOfForehead]); const angle = computeRotation(box5.landmarks[symmetryLine[0]], box5.landmarks[symmetryLine[1]]);
const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint }); const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint });
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]]; const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
const rotated = tf3.image.rotateWithOffset(input, angle, 0, faceCenterNormalized); const rotated = tf3.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
@ -9352,9 +9356,10 @@ var models = [null, null];
var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"];
var inputSize4 = [[0, 0], [0, 0]]; var inputSize4 = [[0, 0], [0, 0]];
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
var faceIndex = 4;
var boxExpandFact = 1.6; var boxExpandFact = 1.6;
var maxDetectorResolution = 512; var maxDetectorResolution = 512;
var detectorExpandFact = 1.2; var detectorExpandFact = 1.4;
var skipped4 = 0; var skipped4 = 0;
var outputSize = [0, 0]; var outputSize = [0, 0];
var cache = { var cache = {
@ -9418,9 +9423,10 @@ async function detectHands(input, config3) {
t.boxes = tf14.squeeze(t.rawBoxes, [0, 2]); t.boxes = tf14.squeeze(t.rawBoxes, [0, 2]);
t.scores = tf14.squeeze(t.rawScores, [0]); t.scores = tf14.squeeze(t.rawScores, [0]);
const classScores = tf14.unstack(t.scores, 1); const classScores = tf14.unstack(t.scores, 1);
classScores.splice(4, 1); tf14.dispose(classScores[faceIndex]);
classScores.splice(faceIndex, 1);
t.filtered = tf14.stack(classScores, 1); t.filtered = tf14.stack(classScores, 1);
tf14.dispose(...classScores); tf14.dispose(classScores);
t.max = tf14.max(t.filtered, 1); t.max = tf14.max(t.filtered, 1);
t.argmax = tf14.argMax(t.filtered, 1); t.argmax = tf14.argMax(t.filtered, 1);
let id = 0; let id = 0;
@ -9430,12 +9436,12 @@ async function detectHands(input, config3) {
const classNum = await t.argmax.data(); const classNum = await t.argmax.data();
for (const nmsIndex of Array.from(nms)) { for (const nmsIndex of Array.from(nms)) {
const boxSlice = tf14.slice(t.boxes, nmsIndex, 1); const boxSlice = tf14.slice(t.boxes, nmsIndex, 1);
const boxData = await boxSlice.data(); const boxYX = await boxSlice.data();
tf14.dispose(boxSlice); tf14.dispose(boxSlice);
const boxSquareSize = Math.max(boxData[3] - boxData[1], boxData[2] - boxData[0]); const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]];
const boxRaw = scale([boxData[1], boxData[0], boxSquareSize, boxSquareSize], detectorExpandFact); const boxRaw = scale(boxData, detectorExpandFact);
const boxCrop = crop(boxRaw); const boxCrop = crop(boxRaw);
const boxFull = [Math.trunc(boxData[1] * outputSize[0]), Math.trunc(boxData[0] * outputSize[1]), Math.trunc((boxData[3] - boxData[1]) * outputSize[0]), Math.trunc((boxData[2] - boxData[0]) * outputSize[1])]; const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];
const score = scores[nmsIndex]; const score = scores[nmsIndex];
const label = classes[classNum[nmsIndex]]; const label = classes[classNum[nmsIndex]];
const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label }; const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label };
@ -9474,10 +9480,9 @@ async function detectFingers(input, h, config3) {
const coordsData = await t.reshaped.array(); const coordsData = await t.reshaped.array();
const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]); const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]);
const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]);
console.log(outputSize, h.box);
hand3.keypoints = coordsNorm.map((kpt4) => [ hand3.keypoints = coordsNorm.map((kpt4) => [
outputSize[0] * kpt4[0] + h.box[0], outputSize[0] * (kpt4[0] + h.boxRaw[0]),
outputSize[1] * kpt4[1] + h.box[1], outputSize[1] * (kpt4[1] + h.boxRaw[1]),
kpt4[2] || 0 kpt4[2] || 0
]); ]);
hand3.landmarks = analyze(hand3.keypoints); hand3.landmarks = analyze(hand3.keypoints);
@ -9489,28 +9494,21 @@ async function detectFingers(input, h, config3) {
} }
return hand3; return hand3;
} }
var n = 0;
async function predict6(input, config3) { async function predict6(input, config3) {
var _a, _b; var _a, _b;
n++;
if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape)) if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape))
return []; return [];
outputSize = [input.shape[2] || 0, input.shape[1] || 0]; outputSize = [input.shape[2] || 0, input.shape[1] || 0];
skipped4++; skipped4++;
if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) { if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) {
console.log(n, "SKIP", { results: cache.hands.length });
return cache.hands; return cache.hands;
} }
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
console.log(n, "DETECT", { skipped: skipped4, hands: cache.hands.length, boxes: cache.boxes.length }); if (config3.skipFrame && skipped4 < 5 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
if (config3.skipFrame && skipped4 <= 10 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
} else { } else {
cache.boxes = await detectHands(input, config3); cache.boxes = await detectHands(input, config3);
console.log(n, "BOXES", { hands: cache.boxes.length });
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
skipped4 = 0; skipped4 = 0;
} }
const oldCache = [...cache.boxes]; const oldCache = [...cache.boxes];
@ -9525,7 +9523,6 @@ async function predict6(input, config3) {
cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop }); cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop });
} }
} }
console.log(n, "CACHED", { hands: cache.boxes.length });
} }
resolve(cache.hands); resolve(cache.hands);
}); });

View File

@ -222,8 +222,8 @@ var config = {
hand: { hand: {
enabled: true, enabled: true,
rotation: true, rotation: true,
skipFrames: 1, skipFrames: 2,
minConfidence: 0.55, minConfidence: 0.5,
iouThreshold: 0.2, iouThreshold: 0.2,
maxDetected: -1, maxDetected: -1,
landmarks: true, landmarks: true,
@ -253,7 +253,7 @@ var config = {
var tf26 = __toModule(require_tfjs_esm()); var tf26 = __toModule(require_tfjs_esm());
// package.json // package.json
var version = "2.3.1"; var version = "2.3.2";
// src/tfjs/humangl.ts // src/tfjs/humangl.ts
var tf22 = __toModule(require_tfjs_esm()); var tf22 = __toModule(require_tfjs_esm());
@ -1060,6 +1060,7 @@ async function set(obj) {
var maxSize = 2048; var maxSize = 2048;
var inCanvas = null; var inCanvas = null;
var outCanvas = null; var outCanvas = null;
var tmpCanvas = null;
var fx; var fx;
function canvas(width, height) { function canvas(width, height) {
let c; let c;
@ -1097,12 +1098,13 @@ function process2(input, config3, getTensor = true) {
throw new Error("input type is not recognized"); throw new Error("input type is not recognized");
} }
if (input instanceof tf2.Tensor) { if (input instanceof tf2.Tensor) {
if (input["isDisposedInternal"]) if (input["isDisposedInternal"]) {
throw new Error("input tensor is disposed"); throw new Error("input tensor is disposed");
else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) } else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) {
throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input.shape}`); throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input["shape"]}`);
else } else {
return { tensor: tf2.clone(input), canvas: config3.filter.return ? outCanvas : null }; return { tensor: tf2.clone(input), canvas: config3.filter.return ? outCanvas : null };
}
} else { } else {
if (typeof input["readyState"] !== "undefined" && input["readyState"] <= 2) { if (typeof input["readyState"] !== "undefined" && input["readyState"] <= 2) {
if (config3.debug) if (config3.debug)
@ -1203,22 +1205,24 @@ function process2(input, config3, getTensor = true) {
pixels = tf2.browser ? tf2.browser.fromPixels(input) : null; pixels = tf2.browser ? tf2.browser.fromPixels(input) : null;
} else { } else {
depth = input["data"].length / input["height"] / input["width"]; depth = input["data"].length / input["height"] / input["width"];
const arr = new Uint8Array(input["data"]["buffer"]); const arr = Uint8Array.from(input["data"]);
pixels = tf2.tensor(arr, [input["height"], input["width"], depth], "float32"); pixels = tf2.tensor(arr, [input["height"], input["width"], depth], "float32");
} }
} else { } else {
if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || (outCanvas == null ? void 0 : outCanvas.height) !== (tmpCanvas == null ? void 0 : tmpCanvas.height))
tmpCanvas = canvas(outCanvas.width, outCanvas.height);
if (tf2.browser && env2.browser) { if (tf2.browser && env2.browser) {
if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") {
pixels = tf2.browser.fromPixels(outCanvas); pixels = tf2.browser.fromPixels(outCanvas);
} else { } else {
const tempCanvas = copy(outCanvas); tmpCanvas = copy(outCanvas);
pixels = tf2.browser.fromPixels(tempCanvas); pixels = tf2.browser.fromPixels(tmpCanvas);
} }
} else { } else {
const tempCanvas = copy(outCanvas); const tempCanvas = copy(outCanvas);
const tempCtx = tempCanvas.getContext("2d"); const tempCtx = tempCanvas.getContext("2d");
const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);
depth = input["data"].length / targetWidth / targetHeight; depth = tempData.data.length / targetWidth / targetHeight;
const arr = new Uint8Array(tempData.data.buffer); const arr = new Uint8Array(tempData.data.buffer);
pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]); pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]);
} }
@ -4665,7 +4669,7 @@ function generateAnchors(inputSize8) {
const anchorY = stride * (gridY + 0.5); const anchorY = stride * (gridY + 0.5);
for (let gridX = 0; gridX < gridCols; gridX++) { for (let gridX = 0; gridX < gridCols; gridX++) {
const anchorX = stride * (gridX + 0.5); const anchorX = stride * (gridX + 0.5);
for (let n2 = 0; n2 < anchorsNum; n2++) for (let n = 0; n < anchorsNum; n++)
anchors4.push([anchorX, anchorY]); anchors4.push([anchorX, anchorY]);
} }
} }
@ -4690,8 +4694,8 @@ function transformRawCoords(rawCoords, box5, angle, rotationMatrix, inputSize8)
]); ]);
} }
function correctFaceRotation(box5, input, inputSize8) { function correctFaceRotation(box5, input, inputSize8) {
const [indexOfMouth, indexOfForehead] = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; const symmetryLine = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
const angle = computeRotation(box5.landmarks[indexOfMouth], box5.landmarks[indexOfForehead]); const angle = computeRotation(box5.landmarks[symmetryLine[0]], box5.landmarks[symmetryLine[1]]);
const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint }); const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint });
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]]; const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
const rotated = tf3.image.rotateWithOffset(input, angle, 0, faceCenterNormalized); const rotated = tf3.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
@ -9353,9 +9357,10 @@ var models = [null, null];
var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"];
var inputSize4 = [[0, 0], [0, 0]]; var inputSize4 = [[0, 0], [0, 0]];
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
var faceIndex = 4;
var boxExpandFact = 1.6; var boxExpandFact = 1.6;
var maxDetectorResolution = 512; var maxDetectorResolution = 512;
var detectorExpandFact = 1.2; var detectorExpandFact = 1.4;
var skipped4 = 0; var skipped4 = 0;
var outputSize = [0, 0]; var outputSize = [0, 0];
var cache = { var cache = {
@ -9419,9 +9424,10 @@ async function detectHands(input, config3) {
t.boxes = tf14.squeeze(t.rawBoxes, [0, 2]); t.boxes = tf14.squeeze(t.rawBoxes, [0, 2]);
t.scores = tf14.squeeze(t.rawScores, [0]); t.scores = tf14.squeeze(t.rawScores, [0]);
const classScores = tf14.unstack(t.scores, 1); const classScores = tf14.unstack(t.scores, 1);
classScores.splice(4, 1); tf14.dispose(classScores[faceIndex]);
classScores.splice(faceIndex, 1);
t.filtered = tf14.stack(classScores, 1); t.filtered = tf14.stack(classScores, 1);
tf14.dispose(...classScores); tf14.dispose(classScores);
t.max = tf14.max(t.filtered, 1); t.max = tf14.max(t.filtered, 1);
t.argmax = tf14.argMax(t.filtered, 1); t.argmax = tf14.argMax(t.filtered, 1);
let id = 0; let id = 0;
@ -9431,12 +9437,12 @@ async function detectHands(input, config3) {
const classNum = await t.argmax.data(); const classNum = await t.argmax.data();
for (const nmsIndex of Array.from(nms)) { for (const nmsIndex of Array.from(nms)) {
const boxSlice = tf14.slice(t.boxes, nmsIndex, 1); const boxSlice = tf14.slice(t.boxes, nmsIndex, 1);
const boxData = await boxSlice.data(); const boxYX = await boxSlice.data();
tf14.dispose(boxSlice); tf14.dispose(boxSlice);
const boxSquareSize = Math.max(boxData[3] - boxData[1], boxData[2] - boxData[0]); const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]];
const boxRaw = scale([boxData[1], boxData[0], boxSquareSize, boxSquareSize], detectorExpandFact); const boxRaw = scale(boxData, detectorExpandFact);
const boxCrop = crop(boxRaw); const boxCrop = crop(boxRaw);
const boxFull = [Math.trunc(boxData[1] * outputSize[0]), Math.trunc(boxData[0] * outputSize[1]), Math.trunc((boxData[3] - boxData[1]) * outputSize[0]), Math.trunc((boxData[2] - boxData[0]) * outputSize[1])]; const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];
const score = scores[nmsIndex]; const score = scores[nmsIndex];
const label = classes[classNum[nmsIndex]]; const label = classes[classNum[nmsIndex]];
const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label }; const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label };
@ -9475,10 +9481,9 @@ async function detectFingers(input, h, config3) {
const coordsData = await t.reshaped.array(); const coordsData = await t.reshaped.array();
const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]); const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]);
const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]);
console.log(outputSize, h.box);
hand3.keypoints = coordsNorm.map((kpt4) => [ hand3.keypoints = coordsNorm.map((kpt4) => [
outputSize[0] * kpt4[0] + h.box[0], outputSize[0] * (kpt4[0] + h.boxRaw[0]),
outputSize[1] * kpt4[1] + h.box[1], outputSize[1] * (kpt4[1] + h.boxRaw[1]),
kpt4[2] || 0 kpt4[2] || 0
]); ]);
hand3.landmarks = analyze(hand3.keypoints); hand3.landmarks = analyze(hand3.keypoints);
@ -9490,28 +9495,21 @@ async function detectFingers(input, h, config3) {
} }
return hand3; return hand3;
} }
var n = 0;
async function predict6(input, config3) { async function predict6(input, config3) {
var _a, _b; var _a, _b;
n++;
if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape)) if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape))
return []; return [];
outputSize = [input.shape[2] || 0, input.shape[1] || 0]; outputSize = [input.shape[2] || 0, input.shape[1] || 0];
skipped4++; skipped4++;
if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) { if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) {
console.log(n, "SKIP", { results: cache.hands.length });
return cache.hands; return cache.hands;
} }
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
console.log(n, "DETECT", { skipped: skipped4, hands: cache.hands.length, boxes: cache.boxes.length }); if (config3.skipFrame && skipped4 < 5 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
if (config3.skipFrame && skipped4 <= 10 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
} else { } else {
cache.boxes = await detectHands(input, config3); cache.boxes = await detectHands(input, config3);
console.log(n, "BOXES", { hands: cache.boxes.length });
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
skipped4 = 0; skipped4 = 0;
} }
const oldCache = [...cache.boxes]; const oldCache = [...cache.boxes];
@ -9526,7 +9524,6 @@ async function predict6(input, config3) {
cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop }); cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop });
} }
} }
console.log(n, "CACHED", { hands: cache.boxes.length });
} }
resolve(cache.hands); resolve(cache.hands);
}); });

63
dist/human.node.js vendored
View File

@ -221,8 +221,8 @@ var config = {
hand: { hand: {
enabled: true, enabled: true,
rotation: true, rotation: true,
skipFrames: 1, skipFrames: 2,
minConfidence: 0.55, minConfidence: 0.5,
iouThreshold: 0.2, iouThreshold: 0.2,
maxDetected: -1, maxDetected: -1,
landmarks: true, landmarks: true,
@ -252,7 +252,7 @@ var config = {
var tf26 = __toModule(require_tfjs_esm()); var tf26 = __toModule(require_tfjs_esm());
// package.json // package.json
var version = "2.3.1"; var version = "2.3.2";
// src/tfjs/humangl.ts // src/tfjs/humangl.ts
var tf22 = __toModule(require_tfjs_esm()); var tf22 = __toModule(require_tfjs_esm());
@ -1059,6 +1059,7 @@ async function set(obj) {
var maxSize = 2048; var maxSize = 2048;
var inCanvas = null; var inCanvas = null;
var outCanvas = null; var outCanvas = null;
var tmpCanvas = null;
var fx; var fx;
function canvas(width, height) { function canvas(width, height) {
let c; let c;
@ -1096,12 +1097,13 @@ function process2(input, config3, getTensor = true) {
throw new Error("input type is not recognized"); throw new Error("input type is not recognized");
} }
if (input instanceof tf2.Tensor) { if (input instanceof tf2.Tensor) {
if (input["isDisposedInternal"]) if (input["isDisposedInternal"]) {
throw new Error("input tensor is disposed"); throw new Error("input tensor is disposed");
else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) } else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) {
throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input.shape}`); throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input["shape"]}`);
else } else {
return { tensor: tf2.clone(input), canvas: config3.filter.return ? outCanvas : null }; return { tensor: tf2.clone(input), canvas: config3.filter.return ? outCanvas : null };
}
} else { } else {
if (typeof input["readyState"] !== "undefined" && input["readyState"] <= 2) { if (typeof input["readyState"] !== "undefined" && input["readyState"] <= 2) {
if (config3.debug) if (config3.debug)
@ -1202,22 +1204,24 @@ function process2(input, config3, getTensor = true) {
pixels = tf2.browser ? tf2.browser.fromPixels(input) : null; pixels = tf2.browser ? tf2.browser.fromPixels(input) : null;
} else { } else {
depth = input["data"].length / input["height"] / input["width"]; depth = input["data"].length / input["height"] / input["width"];
const arr = new Uint8Array(input["data"]["buffer"]); const arr = Uint8Array.from(input["data"]);
pixels = tf2.tensor(arr, [input["height"], input["width"], depth], "float32"); pixels = tf2.tensor(arr, [input["height"], input["width"], depth], "float32");
} }
} else { } else {
if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || (outCanvas == null ? void 0 : outCanvas.height) !== (tmpCanvas == null ? void 0 : tmpCanvas.height))
tmpCanvas = canvas(outCanvas.width, outCanvas.height);
if (tf2.browser && env2.browser) { if (tf2.browser && env2.browser) {
if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") {
pixels = tf2.browser.fromPixels(outCanvas); pixels = tf2.browser.fromPixels(outCanvas);
} else { } else {
const tempCanvas = copy(outCanvas); tmpCanvas = copy(outCanvas);
pixels = tf2.browser.fromPixels(tempCanvas); pixels = tf2.browser.fromPixels(tmpCanvas);
} }
} else { } else {
const tempCanvas = copy(outCanvas); const tempCanvas = copy(outCanvas);
const tempCtx = tempCanvas.getContext("2d"); const tempCtx = tempCanvas.getContext("2d");
const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);
depth = input["data"].length / targetWidth / targetHeight; depth = tempData.data.length / targetWidth / targetHeight;
const arr = new Uint8Array(tempData.data.buffer); const arr = new Uint8Array(tempData.data.buffer);
pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]); pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]);
} }
@ -4664,7 +4668,7 @@ function generateAnchors(inputSize8) {
const anchorY = stride * (gridY + 0.5); const anchorY = stride * (gridY + 0.5);
for (let gridX = 0; gridX < gridCols; gridX++) { for (let gridX = 0; gridX < gridCols; gridX++) {
const anchorX = stride * (gridX + 0.5); const anchorX = stride * (gridX + 0.5);
for (let n2 = 0; n2 < anchorsNum; n2++) for (let n = 0; n < anchorsNum; n++)
anchors4.push([anchorX, anchorY]); anchors4.push([anchorX, anchorY]);
} }
} }
@ -4689,8 +4693,8 @@ function transformRawCoords(rawCoords, box5, angle, rotationMatrix, inputSize8)
]); ]);
} }
function correctFaceRotation(box5, input, inputSize8) { function correctFaceRotation(box5, input, inputSize8) {
const [indexOfMouth, indexOfForehead] = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; const symmetryLine = box5.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
const angle = computeRotation(box5.landmarks[indexOfMouth], box5.landmarks[indexOfForehead]); const angle = computeRotation(box5.landmarks[symmetryLine[0]], box5.landmarks[symmetryLine[1]]);
const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint }); const faceCenter = getBoxCenter({ startPoint: box5.startPoint, endPoint: box5.endPoint });
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]]; const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
const rotated = tf3.image.rotateWithOffset(input, angle, 0, faceCenterNormalized); const rotated = tf3.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
@ -9352,9 +9356,10 @@ var models = [null, null];
var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"];
var inputSize4 = [[0, 0], [0, 0]]; var inputSize4 = [[0, 0], [0, 0]];
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
var faceIndex = 4;
var boxExpandFact = 1.6; var boxExpandFact = 1.6;
var maxDetectorResolution = 512; var maxDetectorResolution = 512;
var detectorExpandFact = 1.2; var detectorExpandFact = 1.4;
var skipped4 = 0; var skipped4 = 0;
var outputSize = [0, 0]; var outputSize = [0, 0];
var cache = { var cache = {
@ -9418,9 +9423,10 @@ async function detectHands(input, config3) {
t.boxes = tf14.squeeze(t.rawBoxes, [0, 2]); t.boxes = tf14.squeeze(t.rawBoxes, [0, 2]);
t.scores = tf14.squeeze(t.rawScores, [0]); t.scores = tf14.squeeze(t.rawScores, [0]);
const classScores = tf14.unstack(t.scores, 1); const classScores = tf14.unstack(t.scores, 1);
classScores.splice(4, 1); tf14.dispose(classScores[faceIndex]);
classScores.splice(faceIndex, 1);
t.filtered = tf14.stack(classScores, 1); t.filtered = tf14.stack(classScores, 1);
tf14.dispose(...classScores); tf14.dispose(classScores);
t.max = tf14.max(t.filtered, 1); t.max = tf14.max(t.filtered, 1);
t.argmax = tf14.argMax(t.filtered, 1); t.argmax = tf14.argMax(t.filtered, 1);
let id = 0; let id = 0;
@ -9430,12 +9436,12 @@ async function detectHands(input, config3) {
const classNum = await t.argmax.data(); const classNum = await t.argmax.data();
for (const nmsIndex of Array.from(nms)) { for (const nmsIndex of Array.from(nms)) {
const boxSlice = tf14.slice(t.boxes, nmsIndex, 1); const boxSlice = tf14.slice(t.boxes, nmsIndex, 1);
const boxData = await boxSlice.data(); const boxYX = await boxSlice.data();
tf14.dispose(boxSlice); tf14.dispose(boxSlice);
const boxSquareSize = Math.max(boxData[3] - boxData[1], boxData[2] - boxData[0]); const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]];
const boxRaw = scale([boxData[1], boxData[0], boxSquareSize, boxSquareSize], detectorExpandFact); const boxRaw = scale(boxData, detectorExpandFact);
const boxCrop = crop(boxRaw); const boxCrop = crop(boxRaw);
const boxFull = [Math.trunc(boxData[1] * outputSize[0]), Math.trunc(boxData[0] * outputSize[1]), Math.trunc((boxData[3] - boxData[1]) * outputSize[0]), Math.trunc((boxData[2] - boxData[0]) * outputSize[1])]; const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];
const score = scores[nmsIndex]; const score = scores[nmsIndex];
const label = classes[classNum[nmsIndex]]; const label = classes[classNum[nmsIndex]];
const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label }; const hand3 = { id: id++, score, box: boxFull, boxRaw, boxCrop, label };
@ -9474,10 +9480,9 @@ async function detectFingers(input, h, config3) {
const coordsData = await t.reshaped.array(); const coordsData = await t.reshaped.array();
const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]); const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize4[1][1], kpt4[1] / inputSize4[1][0], kpt4[2] || 0]);
const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]);
console.log(outputSize, h.box);
hand3.keypoints = coordsNorm.map((kpt4) => [ hand3.keypoints = coordsNorm.map((kpt4) => [
outputSize[0] * kpt4[0] + h.box[0], outputSize[0] * (kpt4[0] + h.boxRaw[0]),
outputSize[1] * kpt4[1] + h.box[1], outputSize[1] * (kpt4[1] + h.boxRaw[1]),
kpt4[2] || 0 kpt4[2] || 0
]); ]);
hand3.landmarks = analyze(hand3.keypoints); hand3.landmarks = analyze(hand3.keypoints);
@ -9489,28 +9494,21 @@ async function detectFingers(input, h, config3) {
} }
return hand3; return hand3;
} }
var n = 0;
async function predict6(input, config3) { async function predict6(input, config3) {
var _a, _b; var _a, _b;
n++;
if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape)) if (!models[0] || !models[1] || !((_a = models[0]) == null ? void 0 : _a.inputs[0].shape) || !((_b = models[1]) == null ? void 0 : _b.inputs[0].shape))
return []; return [];
outputSize = [input.shape[2] || 0, input.shape[1] || 0]; outputSize = [input.shape[2] || 0, input.shape[1] || 0];
skipped4++; skipped4++;
if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) { if (config3.skipFrame && skipped4 <= (config3.hand.skipFrames || 0)) {
console.log(n, "SKIP", { results: cache.hands.length });
return cache.hands; return cache.hands;
} }
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
console.log(n, "DETECT", { skipped: skipped4, hands: cache.hands.length, boxes: cache.boxes.length }); if (config3.skipFrame && skipped4 < 5 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
if (config3.skipFrame && skipped4 <= 10 * (config3.hand.skipFrames || 0) && cache.hands.length > 0) {
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
} else { } else {
cache.boxes = await detectHands(input, config3); cache.boxes = await detectHands(input, config3);
console.log(n, "BOXES", { hands: cache.boxes.length });
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config3)));
console.log(n, "HANDS", { hands: cache.hands.length });
skipped4 = 0; skipped4 = 0;
} }
const oldCache = [...cache.boxes]; const oldCache = [...cache.boxes];
@ -9525,7 +9523,6 @@ async function predict6(input, config3) {
cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop }); cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop });
} }
} }
console.log(n, "CACHED", { hands: cache.boxes.length });
} }
resolve(cache.hands); resolve(cache.hands);
}); });

View File

@ -1,6 +1,6 @@
{ {
"name": "@vladmandic/human", "name": "@vladmandic/human",
"version": "2.3.1", "version": "2.3.2",
"description": "Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition", "description": "Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition",
"sideEffects": false, "sideEffects": false,
"main": "dist/human.node.js", "main": "dist/human.node.js",
@ -74,7 +74,6 @@
"canvas": "^2.8.0", "canvas": "^2.8.0",
"dayjs": "^1.10.7", "dayjs": "^1.10.7",
"esbuild": "^0.13.4", "esbuild": "^0.13.4",
"eslint": "^7.32.0",
"eslint-config-airbnb-base": "^14.2.1", "eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.24.2", "eslint-plugin-import": "^2.24.2",
"eslint-plugin-json": "^3.1.0", "eslint-plugin-json": "^3.1.0",
@ -86,5 +85,8 @@
"tslib": "^2.3.1", "tslib": "^2.3.1",
"typedoc": "0.22.5", "typedoc": "0.22.5",
"typescript": "4.4.3" "typescript": "4.4.3"
},
"dependencies": {
"eslint": "7.32.0"
} }
} }

View File

@ -420,12 +420,12 @@ const config: Config = {
rotation: true, // use best-guess rotated hand image or just box with rotation as-is rotation: true, // use best-guess rotated hand image or just box with rotation as-is
// false means higher performance, but incorrect finger mapping if hand is inverted // false means higher performance, but incorrect finger mapping if hand is inverted
// only valid for `handdetect` variation // only valid for `handdetect` variation
skipFrames: 1, // how many max frames to go without re-running the hand bounding box detector skipFrames: 2, // how many max frames to go without re-running the hand bounding box detector
// only used when cacheSensitivity is not zero // only used when cacheSensitivity is not zero
// e.g., if model is running st 25 FPS, we can re-use existing bounding // e.g., if model is running st 25 FPS, we can re-use existing bounding
// box for updated hand skeleton analysis as the hand // box for updated hand skeleton analysis as the hand
// hasn't moved much in short time (10 * 1/25 = 0.25 sec) // hasn't moved much in short time (10 * 1/25 = 0.25 sec)
minConfidence: 0.55, // threshold for discarding a prediction minConfidence: 0.50, // threshold for discarding a prediction
iouThreshold: 0.2, // ammount of overlap between two detected objects before one object is removed iouThreshold: 0.2, // ammount of overlap between two detected objects before one object is removed
maxDetected: -1, // maximum number of hands detected in the input maxDetected: -1, // maximum number of hands detected in the input
// should be set to the minimum number for performance // should be set to the minimum number for performance

View File

@ -83,7 +83,7 @@ export async function predict(input: Tensor, config: Config): Promise<FaceResult
((box.startPoint[1] + box.endPoint[1])) / 2 + ((box.endPoint[1] + box.startPoint[1]) * pt[1] / blazeface.size()), ((box.startPoint[1] + box.endPoint[1])) / 2 + ((box.endPoint[1] + box.startPoint[1]) * pt[1] / blazeface.size()),
]); ]);
face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / inputSize]); face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / inputSize]);
for (const key of Object.keys(coords.blazeFaceLandmarks)) face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key]]]; // add annotations for (const key of Object.keys(coords.blazeFaceLandmarks)) face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations
} else if (!model) { // mesh enabled, but not loaded } else if (!model) { // mesh enabled, but not loaded
if (config.debug) log('face mesh detection requested, but model is not loaded'); if (config.debug) log('face mesh detection requested, but model is not loaded');
} else { // mesh enabled } else { // mesh enabled

View File

@ -3,7 +3,7 @@
* See `facemesh.ts` for entry point * See `facemesh.ts` for entry point
*/ */
export const meshAnnotations = { export const meshAnnotations: Record<string, number[]> = {
silhouette: [ silhouette: [
10, 338, 297, 332, 284, 251, 389, 356, 454, 323, 361, 288, 10, 338, 297, 332, 284, 251, 389, 356, 454, 323, 361, 288,
397, 365, 379, 378, 400, 377, 152, 148, 176, 149, 150, 136, 397, 365, 379, 378, 400, 377, 152, 148, 176, 149, 150, 136,
@ -42,13 +42,13 @@ export const meshAnnotations = {
leftCheek: [425], leftCheek: [425],
}; };
export const meshLandmarks = { export const meshLandmarks: Record<string, number | number[]> = {
count: 468, count: 468,
mouth: 13, mouth: 13,
symmetryLine: [13, meshAnnotations['midwayBetweenEyes'][0]], symmetryLine: [13, meshAnnotations['midwayBetweenEyes'][0]],
}; };
export const blazeFaceLandmarks = { export const blazeFaceLandmarks: Record<string, number | number[]> = {
leftEye: 0, leftEye: 0,
rightEye: 1, rightEye: 1,
nose: 2, nose: 2,
@ -58,7 +58,7 @@ export const blazeFaceLandmarks = {
symmetryLine: [3, 2], symmetryLine: [3, 2],
}; };
export const MESH_TO_IRIS_INDICES_MAP = [ // A mapping from facemesh model keypoints to iris model keypoints. export const MESH_TO_IRIS_INDICES_MAP: Array<{ key: string, indices: number[] }> = [ // A mapping from facemesh model keypoints to iris model keypoints.
{ key: 'EyeUpper0', indices: [9, 10, 11, 12, 13, 14, 15] }, { key: 'EyeUpper0', indices: [9, 10, 11, 12, 13, 14, 15] },
{ key: 'EyeUpper1', indices: [25, 26, 27, 28, 29, 30, 31] }, { key: 'EyeUpper1', indices: [25, 26, 27, 28, 29, 30, 31] },
{ key: 'EyeUpper2', indices: [41, 42, 43, 44, 45, 46, 47] }, { key: 'EyeUpper2', indices: [41, 42, 43, 44, 45, 46, 47] },
@ -70,7 +70,7 @@ export const MESH_TO_IRIS_INDICES_MAP = [ // A mapping from facemesh model keypo
// { key: 'EyebrowLower', indices: [48, 49, 50, 51, 52, 53] }, // { key: 'EyebrowLower', indices: [48, 49, 50, 51, 52, 53] },
]; ];
export const UV468 = [ export const UV468: [number, number][] = [
[0.499976992607117, 0.652534008026123], [0.499976992607117, 0.652534008026123],
[0.500025987625122, 0.547487020492554], [0.500025987625122, 0.547487020492554],
[0.499974012374878, 0.602371990680695], [0.499974012374878, 0.602371990680695],
@ -541,7 +541,7 @@ export const UV468 = [
[0.723330020904541, 0.363372981548309], [0.723330020904541, 0.363372981548309],
]; ];
export const TRI468 = [ export const TRI468: Array<number> = [
127, 34, 139, 11, 0, 37, 232, 231, 120, 72, 37, 39, 128, 121, 47, 232, 121, 128, 104, 69, 67, 175, 171, 148, 157, 154, 155, 118, 50, 101, 73, 39, 40, 9, 127, 34, 139, 11, 0, 37, 232, 231, 120, 72, 37, 39, 128, 121, 47, 232, 121, 128, 104, 69, 67, 175, 171, 148, 157, 154, 155, 118, 50, 101, 73, 39, 40, 9,
151, 108, 48, 115, 131, 194, 204, 211, 74, 40, 185, 80, 42, 183, 40, 92, 186, 230, 229, 118, 202, 212, 214, 83, 18, 17, 76, 61, 146, 160, 29, 30, 56, 151, 108, 48, 115, 131, 194, 204, 211, 74, 40, 185, 80, 42, 183, 40, 92, 186, 230, 229, 118, 202, 212, 214, 83, 18, 17, 76, 61, 146, 160, 29, 30, 56,
157, 173, 106, 204, 194, 135, 214, 192, 203, 165, 98, 21, 71, 68, 51, 45, 4, 144, 24, 23, 77, 146, 91, 205, 50, 187, 201, 200, 18, 91, 106, 182, 90, 91, 157, 173, 106, 204, 194, 135, 214, 192, 203, 165, 98, 21, 71, 68, 51, 45, 4, 144, 24, 23, 77, 146, 91, 205, 50, 187, 201, 200, 18, 91, 106, 182, 90, 91,
@ -627,7 +627,7 @@ export const TRI468 = [
259, 443, 259, 260, 444, 260, 467, 445, 309, 459, 250, 305, 289, 290, 305, 290, 460, 401, 376, 435, 309, 250, 392, 376, 411, 433, 453, 341, 464, 357, 259, 443, 259, 260, 444, 260, 467, 445, 309, 459, 250, 305, 289, 290, 305, 290, 460, 401, 376, 435, 309, 250, 392, 376, 411, 433, 453, 341, 464, 357,
453, 465, 343, 357, 412, 437, 343, 399, 344, 360, 440, 420, 437, 456, 360, 420, 363, 361, 401, 288, 265, 372, 353, 390, 339, 249, 339, 448, 255]; 453, 465, 343, 357, 412, 437, 343, 399, 344, 360, 440, 420, 437, 456, 360, 420, 363, 361, 401, 288, 265, 372, 353, 390, 339, 249, 339, 448, 255];
export const TRI68 = [0, 1, 36, 0, 36, 17, 1, 2, 41, 1, 41, 36, 2, 3, 31, 2, 31, 41, 3, 4, 48, 3, 48, 31, 4, 5, 48, 5, 6, 48, 6, 7, 59, 6, 59, 48, 7, 8, 58, 7, 58, 59, export const TRI68: Array<number> = [0, 1, 36, 0, 36, 17, 1, 2, 41, 1, 41, 36, 2, 3, 31, 2, 31, 41, 3, 4, 48, 3, 48, 31, 4, 5, 48, 5, 6, 48, 6, 7, 59, 6, 59, 48, 7, 8, 58, 7, 58, 59,
8, 9, 56, 8, 56, 57, 8, 57, 58, 9, 10, 55, 9, 55, 56, 10, 11, 54, 10, 54, 55, 11, 12, 54, 12, 13, 54, 13, 14, 35, 13, 35, 54, 14, 15, 46, 14, 46, 35, 15, 16, 8, 9, 56, 8, 56, 57, 8, 57, 58, 9, 10, 55, 9, 55, 56, 10, 11, 54, 10, 54, 55, 11, 12, 54, 12, 13, 54, 13, 14, 35, 13, 35, 54, 14, 15, 46, 14, 46, 35, 15, 16,
45, 15, 45, 46, 16, 26, 45, 17, 36, 18, 18, 37, 19, 18, 36, 37, 19, 38, 20, 19, 37, 38, 20, 39, 21, 20, 38, 39, 21, 39, 27, 22, 42, 23, 22, 27, 42, 23, 43, 24, 45, 15, 45, 46, 16, 26, 45, 17, 36, 18, 18, 37, 19, 18, 36, 37, 19, 38, 20, 19, 37, 38, 20, 39, 21, 20, 38, 39, 21, 39, 27, 22, 42, 23, 22, 27, 42, 23, 43, 24,
23, 42, 43, 24, 44, 25, 24, 43, 44, 25, 45, 26, 25, 44, 45, 27, 39, 28, 27, 28, 42, 28, 39, 29, 28, 29, 42, 29, 31, 30, 29, 30, 35, 29, 40, 31, 29, 35, 47, 29, 23, 42, 43, 24, 44, 25, 24, 43, 44, 25, 45, 26, 25, 44, 45, 27, 39, 28, 27, 28, 42, 28, 39, 29, 28, 29, 42, 29, 31, 30, 29, 30, 35, 29, 40, 31, 29, 35, 47, 29,
@ -636,7 +636,7 @@ export const TRI68 = [0, 1, 36, 0, 36, 17, 1, 2, 41, 1, 41, 36, 2, 3, 31, 2, 31,
48, 59, 60, 49, 61, 50, 49, 60, 61, 50, 62, 51, 50, 61, 62, 51, 62, 52, 52, 63, 53, 52, 62, 63, 53, 64, 54, 53, 63, 64, 54, 64, 55, 55, 65, 56, 55, 64, 65, 56, 48, 59, 60, 49, 61, 50, 49, 60, 61, 50, 62, 51, 50, 61, 62, 51, 62, 52, 52, 63, 53, 52, 62, 63, 53, 64, 54, 53, 63, 64, 54, 64, 55, 55, 65, 56, 55, 64, 65, 56,
66, 57, 56, 65, 66, 57, 66, 58, 58, 67, 59, 58, 66, 67, 59, 67, 60, 60, 67, 61, 61, 66, 62, 61, 67, 66, 62, 66, 63, 63, 65, 64, 63, 66, 65, 21, 27, 22]; 66, 57, 56, 65, 66, 57, 66, 58, 58, 67, 59, 58, 66, 67, 59, 67, 60, 60, 67, 61, 61, 66, 62, 61, 67, 66, 62, 66, 63, 63, 65, 64, 63, 66, 65, 21, 27, 22];
export const TRI33 = [ export const TRI33: Array<number> = [
/* eyes */ 0, 8, 7, 7, 8, 1, 2, 10, 9, 9, 10, 3, /* eyes */ 0, 8, 7, 7, 8, 1, 2, 10, 9, 9, 10, 3,
/* brows */ 17, 0, 18, 18, 0, 7, 18, 7, 19, 19, 7, 1, 19, 1, 11, 19, 11, 20, 21, 3, 22, 21, 9, 3, 20, 9, 21, 20, 2, 9, 20, 11, 2, /* brows */ 17, 0, 18, 18, 0, 7, 18, 7, 19, 19, 7, 1, 19, 1, 11, 19, 11, 20, 21, 3, 22, 21, 9, 3, 20, 9, 21, 20, 2, 9, 20, 11, 2,
/* 4head */ 23, 17, 18, 25, 21, 22, 24, 19, 20, 24, 18, 19, 24, 20, 21, 24, 23, 18, 24, 21, 25, /* 4head */ 23, 17, 18, 25, 21, 22, 24, 19, 20, 24, 18, 19, 24, 20, 21, 24, 23, 18, 24, 21, 25,
@ -647,9 +647,9 @@ export const TRI33 = [
/* cont */ 26, 30, 5, 27, 6, 31, 0, 28, 26, 3, 27, 29, 17, 28, 0, 3, 29, 22, 23, 28, 17, 22, 29, 25, 28, 30, 26, 27, 31, 29, /* cont */ 26, 30, 5, 27, 6, 31, 0, 28, 26, 3, 27, 29, 17, 28, 0, 3, 29, 22, 23, 28, 17, 22, 29, 25, 28, 30, 26, 27, 31, 29,
]; ];
export const TRI7 = [0, 4, 1, 2, 4, 3, 4, 5, 6]; export const TRI7: Array<number> = [0, 4, 1, 2, 4, 3, 4, 5, 6];
export const VTX68 = [ export const VTX68: Array<number> = [
/* cont */ 127, 234, 132, 58, 172, 150, 149, 148, 152, 377, 378, 379, 397, 288, 361, 454, 356, /* cont */ 127, 234, 132, 58, 172, 150, 149, 148, 152, 377, 378, 379, 397, 288, 361, 454, 356,
/* brows */ 70, 63, 105, 66, 107, 336, 296, 334, 293, 300, /* brows */ 70, 63, 105, 66, 107, 336, 296, 334, 293, 300,
/* nose */ 168, 6, 195, 4, 98, 97, 2, 326, 327, /* nose */ 168, 6, 195, 4, 98, 97, 2, 326, 327,
@ -658,9 +658,9 @@ export const VTX68 = [
/* mouth */ 78, 81, 13, 311, 308, 402, 14, 178, /* mouth */ 78, 81, 13, 311, 308, 402, 14, 178,
]; ];
export const VTX33 = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152]; export const VTX33: Array<number> = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152];
export const VTX7 = [33, 133, 362, 263, 1, 78, 308]; export const VTX7: Array<number> = [33, 133, 362, 263, 1, 78, 308];
export const UV68 = VTX68.map((x) => UV468[x]); export const UV68 = VTX68.map((x) => UV468[x]);

View File

@ -152,8 +152,8 @@ export function transformRawCoords(rawCoords, box, angle, rotationMatrix, inputS
} }
export function correctFaceRotation(box, input, inputSize) { export function correctFaceRotation(box, input, inputSize) {
const [indexOfMouth, indexOfForehead] = (box.landmarks.length >= coords.meshLandmarks.count) ? coords.meshLandmarks.symmetryLine : coords.blazeFaceLandmarks.symmetryLine; const symmetryLine = (box.landmarks.length >= coords.meshLandmarks.count) ? coords.meshLandmarks.symmetryLine : coords.blazeFaceLandmarks.symmetryLine;
const angle: number = computeRotation(box.landmarks[indexOfMouth], box.landmarks[indexOfForehead]); const angle: number = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]);
const faceCenter: Point = getBoxCenter({ startPoint: box.startPoint, endPoint: box.endPoint }); const faceCenter: Point = getBoxCenter({ startPoint: box.startPoint, endPoint: box.endPoint });
const faceCenterNormalized: Point = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]]; const faceCenterNormalized: Point = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
const rotated = tf.image.rotateWithOffset(input, angle, 0, faceCenterNormalized); // rotateWithOffset is not defined for tfjs-node const rotated = tf.image.rotateWithOffset(input, angle, 0, faceCenterNormalized); // rotateWithOffset is not defined for tfjs-node

View File

@ -22,10 +22,11 @@ const modelOutputNodes = ['StatefulPartitionedCall/Postprocessor/Slice', 'Statef
const inputSize = [[0, 0], [0, 0]]; const inputSize = [[0, 0], [0, 0]];
const classes = ['hand', 'fist', 'pinch', 'point', 'face', 'tip', 'pinchtip']; const classes = ['hand', 'fist', 'pinch', 'point', 'face', 'tip', 'pinchtip'];
const faceIndex = 4;
const boxExpandFact = 1.6; const boxExpandFact = 1.6;
const maxDetectorResolution = 512; const maxDetectorResolution = 512;
const detectorExpandFact = 1.2; const detectorExpandFact = 1.4;
let skipped = 0; let skipped = 0;
let outputSize: [number, number] = [0, 0]; let outputSize: [number, number] = [0, 0];
@ -104,10 +105,11 @@ async function detectHands(input: Tensor, config: Config): Promise<HandDetectRes
[t.rawScores, t.rawBoxes] = await models[0].executeAsync(t.cast, modelOutputNodes) as Tensor[]; [t.rawScores, t.rawBoxes] = await models[0].executeAsync(t.cast, modelOutputNodes) as Tensor[];
t.boxes = tf.squeeze(t.rawBoxes, [0, 2]); t.boxes = tf.squeeze(t.rawBoxes, [0, 2]);
t.scores = tf.squeeze(t.rawScores, [0]); t.scores = tf.squeeze(t.rawScores, [0]);
const classScores = tf.unstack(t.scores, 1); // unstack scores based on classes const classScores: Array<Tensor> = tf.unstack(t.scores, 1); // unstack scores based on classes
classScores.splice(4, 1); // remove faces tf.dispose(classScores[faceIndex]);
classScores.splice(faceIndex, 1); // remove faces
t.filtered = tf.stack(classScores, 1); // restack t.filtered = tf.stack(classScores, 1); // restack
tf.dispose(...classScores); tf.dispose(classScores);
t.max = tf.max(t.filtered, 1); // max overall score t.max = tf.max(t.filtered, 1); // max overall score
t.argmax = tf.argMax(t.filtered, 1); // class index of max overall score t.argmax = tf.argMax(t.filtered, 1); // class index of max overall score
let id = 0; let id = 0;
@ -117,12 +119,13 @@ async function detectHands(input: Tensor, config: Config): Promise<HandDetectRes
const classNum = await t.argmax.data(); const classNum = await t.argmax.data();
for (const nmsIndex of Array.from(nms)) { // generates results for each class for (const nmsIndex of Array.from(nms)) { // generates results for each class
const boxSlice = tf.slice(t.boxes, nmsIndex, 1); const boxSlice = tf.slice(t.boxes, nmsIndex, 1);
const boxData = await boxSlice.data(); const boxYX = await boxSlice.data();
tf.dispose(boxSlice); tf.dispose(boxSlice);
const boxSquareSize = Math.max(boxData[3] - boxData[1], boxData[2] - boxData[0]); // const boxSquareSize = Math.max(boxData[3] - boxData[1], boxData[2] - boxData[0]);
const boxRaw: Box = box.scale([boxData[1], boxData[0], boxSquareSize, boxSquareSize], detectorExpandFact); // for raw box we use squared and expanded box const boxData: Box = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; // yx box reshaped to standard box
const boxRaw: Box = box.scale(boxData, detectorExpandFact);
const boxCrop: Box = box.crop(boxRaw); // crop box is based on raw box const boxCrop: Box = box.crop(boxRaw); // crop box is based on raw box
const boxFull: Box = [Math.trunc(boxData[1] * outputSize[0]), Math.trunc(boxData[0] * outputSize[1]), Math.trunc((boxData[3] - boxData[1]) * outputSize[0]), Math.trunc((boxData[2] - boxData[0]) * outputSize[1])]; // for box we keep original scaled values const boxFull: Box = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];
const score = scores[nmsIndex]; const score = scores[nmsIndex];
const label = classes[classNum[nmsIndex]]; const label = classes[classNum[nmsIndex]];
const hand: HandDetectResult = { id: id++, score, box: boxFull, boxRaw, boxCrop, label }; const hand: HandDetectResult = { id: id++, score, box: boxFull, boxRaw, boxCrop, label };
@ -161,10 +164,9 @@ async function detectFingers(input: Tensor, h: HandDetectResult, config: Config)
const coordsData: Point[] = await t.reshaped.array() as Point[]; const coordsData: Point[] = await t.reshaped.array() as Point[];
const coordsRaw: Point[] = coordsData.map((kpt) => [kpt[0] / inputSize[1][1], kpt[1] / inputSize[1][0], (kpt[2] || 0)]); const coordsRaw: Point[] = coordsData.map((kpt) => [kpt[0] / inputSize[1][1], kpt[1] / inputSize[1][0], (kpt[2] || 0)]);
const coordsNorm: Point[] = coordsRaw.map((kpt) => [kpt[0] * h.boxRaw[2], kpt[1] * h.boxRaw[3], (kpt[2] || 0)]); const coordsNorm: Point[] = coordsRaw.map((kpt) => [kpt[0] * h.boxRaw[2], kpt[1] * h.boxRaw[3], (kpt[2] || 0)]);
console.log(outputSize, h.box);
hand.keypoints = (coordsNorm).map((kpt) => [ hand.keypoints = (coordsNorm).map((kpt) => [
outputSize[0] * kpt[0] + h.box[0], outputSize[0] * (kpt[0] + h.boxRaw[0]),
outputSize[1] * kpt[1] + h.box[1], outputSize[1] * (kpt[1] + h.boxRaw[1]),
(kpt[2] || 0), (kpt[2] || 0),
]); ]);
// hand.box = box.scale(h.box, 1 / detectorExpandFact); // scale box down for visual appeal // hand.box = box.scale(h.box, 1 / detectorExpandFact); // scale box down for visual appeal
@ -179,13 +181,11 @@ async function detectFingers(input: Tensor, h: HandDetectResult, config: Config)
return hand; return hand;
} }
let n = 0;
export async function predict(input: Tensor, config: Config): Promise<HandResult[]> { export async function predict(input: Tensor, config: Config): Promise<HandResult[]> {
n++;
/** handtrack caching /** handtrack caching
* 1. if skipFrame returned cached * 1. if skipFrame returned cached
* 2. if any cached results but although not sure if its enough we continute anyhow for 10x skipframes * 2. if any cached results but although not sure if its enough we continute anyhow for 5x skipframes
* 3. eventually rerun detector to generated new cached boxes and reset skipped * 3. if not skipframe or eventually rerun detector to generated new cached boxes and reset skipped
* 4. generate cached boxes based on detected keypoints * 4. generate cached boxes based on detected keypoints
*/ */
if (!models[0] || !models[1] || !models[0]?.inputs[0].shape || !models[1]?.inputs[0].shape) return []; // something is wrong with the model if (!models[0] || !models[1] || !models[0]?.inputs[0].shape || !models[1]?.inputs[0].shape) return []; // something is wrong with the model
@ -193,34 +193,14 @@ export async function predict(input: Tensor, config: Config): Promise<HandResult
skipped++; // increment skip frames skipped++; // increment skip frames
if (config.skipFrame && (skipped <= (config.hand.skipFrames || 0))) { if (config.skipFrame && (skipped <= (config.hand.skipFrames || 0))) {
console.log(n, 'SKIP', { results: cache.hands.length });
return cache.hands; // return cached results without running anything return cache.hands; // return cached results without running anything
} }
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
console.log(n, 'DETECT', { skipped, hands: cache.hands.length, boxes: cache.boxes.length }); if (config.skipFrame && skipped < 5 * (config.hand.skipFrames || 0) && cache.hands.length > 0) { // we have some cached results but although not sure if its enough we continute anyhow for bit longer
// this is logically consistent but insufficiently efficient
/*
skipped = 0;
if (cache.boxes.length >= (config.hand.maxDetected || 0)) {
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config))); // if we have enough cached boxes run detection using cache
} else {
cache.hands = []; // reset hands
}
if (cache.hands.length !== config.hand.maxDetected) { // did not find enough hands based on cached boxes so run detection on full frame
cache.boxes = await detectHands(input, config);
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));
}
*/
if (config.skipFrame && skipped <= 10 * (config.hand.skipFrames || 0) && cache.hands.length > 0) { // we have some cached results but although not sure if its enough we continute anyhow for 10x skipframes
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));
console.log(n, 'HANDS', { hands: cache.hands.length });
} else { } else {
cache.boxes = await detectHands(input, config); cache.boxes = await detectHands(input, config);
console.log(n, 'BOXES', { hands: cache.boxes.length });
cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config))); cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));
console.log(n, 'HANDS', { hands: cache.hands.length });
skipped = 0; skipped = 0;
} }
@ -236,7 +216,6 @@ export async function predict(input: Tensor, config: Config): Promise<HandResult
cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop }); cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw, boxCrop });
} }
} }
console.log(n, 'CACHED', { hands: cache.boxes.length });
} }
resolve(cache.hands); resolve(cache.hands);
}); });

View File

@ -15,6 +15,7 @@ const maxSize = 2048;
// internal temp canvases // internal temp canvases
let inCanvas: HTMLCanvasElement | OffscreenCanvas | null = null; // use global variable to avoid recreating canvas on each frame let inCanvas: HTMLCanvasElement | OffscreenCanvas | null = null; // use global variable to avoid recreating canvas on each frame
let outCanvas: HTMLCanvasElement | OffscreenCanvas | null = null; // use global variable to avoid recreating canvas on each frame let outCanvas: HTMLCanvasElement | OffscreenCanvas | null = null; // use global variable to avoid recreating canvas on each frame
let tmpCanvas: HTMLCanvasElement | OffscreenCanvas | null = null; // use global variable to avoid recreating canvas on each frame
// @ts-ignore // imagefx is js module that should be converted to a class // @ts-ignore // imagefx is js module that should be converted to a class
let fx: fxImage.GLImageFilter | null; // instance of imagefx let fx: fxImage.GLImageFilter | null; // instance of imagefx
@ -72,9 +73,13 @@ export function process(input: Input, config: Config, getTensor: boolean = true)
} }
if (input instanceof tf.Tensor) { if (input instanceof tf.Tensor) {
// if input is tensor, use as-is // if input is tensor, use as-is
if ((input)['isDisposedInternal']) throw new Error('input tensor is disposed'); if ((input)['isDisposedInternal']) {
else if (!input.shape || input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[3] !== 3) throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input.shape}`); throw new Error('input tensor is disposed');
else return { tensor: tf.clone(input), canvas: (config.filter.return ? outCanvas : null) }; } else if (!(input as Tensor).shape || (input as Tensor).shape.length !== 4 || (input as Tensor).shape[0] !== 1 || (input as Tensor).shape[3] !== 3) {
throw new Error(`input tensor shape must be [1, height, width, 3] and instead was ${input['shape']}`);
} else {
return { tensor: tf.clone(input), canvas: (config.filter.return ? outCanvas : null) };
}
} else { } else {
// check if resizing will be needed // check if resizing will be needed
if (typeof input['readyState'] !== 'undefined' && input['readyState'] <= 2) { if (typeof input['readyState'] !== 'undefined' && input['readyState'] <= 2) {
@ -114,10 +119,10 @@ export function process(input: Input, config: Config, getTensor: boolean = true)
if (config.filter.flip && typeof inCtx.translate !== 'undefined') { if (config.filter.flip && typeof inCtx.translate !== 'undefined') {
inCtx.translate(originalWidth, 0); inCtx.translate(originalWidth, 0);
inCtx.scale(-1, 1); inCtx.scale(-1, 1);
inCtx.drawImage(input as CanvasImageSource, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas?.width, inCanvas?.height); inCtx.drawImage(input as OffscreenCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas?.width, inCanvas?.height);
inCtx.setTransform(1, 0, 0, 1, 0, 0); // resets transforms to defaults inCtx.setTransform(1, 0, 0, 1, 0, 0); // resets transforms to defaults
} else { } else {
inCtx.drawImage(input as CanvasImageSource, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas?.width, inCanvas?.height); inCtx.drawImage(input as OffscreenCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas?.width, inCanvas?.height);
} }
} }
@ -160,23 +165,24 @@ export function process(input: Input, config: Config, getTensor: boolean = true)
pixels = tf.browser ? tf.browser.fromPixels(input) : null; pixels = tf.browser ? tf.browser.fromPixels(input) : null;
} else { } else {
depth = input['data'].length / input['height'] / input['width']; depth = input['data'].length / input['height'] / input['width'];
// const arr = Uint8Array.from(input['data']); const arr = Uint8Array.from(input['data']);
const arr = new Uint8Array(input['data']['buffer']); // const arr = new Uint8Array(input['data']['buffer']);
pixels = tf.tensor(arr, [input['height'], input['width'], depth], 'float32'); pixels = tf.tensor(arr, [input['height'], input['width'], depth], 'float32');
} }
} else { } else {
if (!tmpCanvas || (outCanvas.width !== tmpCanvas.width) || (outCanvas?.height !== tmpCanvas?.height)) tmpCanvas = canvas(outCanvas.width, outCanvas.height); // init output canvas
if (tf.browser && env.browser) { if (tf.browser && env.browser) {
if (config.backend === 'webgl' || config.backend === 'humangl' || config.backend === 'webgpu') { if (config.backend === 'webgl' || config.backend === 'humangl' || config.backend === 'webgpu') {
pixels = tf.browser.fromPixels(outCanvas); // safe to reuse since both backend and context are gl based pixels = tf.browser.fromPixels(outCanvas); // safe to reuse since both backend and context are gl based
} else { } else {
const tempCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas tmpCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas
pixels = tf.browser.fromPixels(tempCanvas); pixels = tf.browser.fromPixels(tmpCanvas);
} }
} else { } else {
const tempCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas const tempCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas
const tempCtx = tempCanvas.getContext('2d') as CanvasRenderingContext2D; const tempCtx = tempCanvas.getContext('2d') as CanvasRenderingContext2D;
const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);
depth = input['data'].length / targetWidth / targetHeight; depth = tempData.data.length / targetWidth / targetHeight;
const arr = new Uint8Array(tempData.data.buffer); const arr = new Uint8Array(tempData.data.buffer);
pixels = tf.tensor(arr, [targetWidth, targetHeight, depth]); pixels = tf.tensor(arr, [targetWidth, targetHeight, depth]);
} }

File diff suppressed because it is too large Load Diff

View File

@ -192,7 +192,7 @@ async function test(Human, inputConfig) {
else log('state', 'passed: warmup face result match'); else log('state', 'passed: warmup face result match');
config.warmup = 'body'; config.warmup = 'body';
res = await testWarmup(human, 'default'); res = await testWarmup(human, 'default');
if (!res || res?.face?.length !== 1 || res?.body?.length !== 0 || res?.hand?.length !== 1 || res?.gesture?.length !== 4) log('error', 'failed: warmup body result mismatch', res?.face?.length, res?.body?.length, res?.hand?.length, res?.gesture?.length); if (!res || res?.face?.length !== 1 || res?.body?.length !== 1 || res?.hand?.length !== 1 || res?.gesture?.length !== 5) 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'); else log('state', 'passed: warmup body result match');
// test default config async // test default config async

View File

@ -3,6 +3,7 @@ const Human = require('../dist/human.node-gpu.js').default;
const test = require('./test-main.js').test; const test = require('./test-main.js').test;
const config = { const config = {
cacheSensitivity: 0,
modelBasePath: 'file://models/', modelBasePath: 'file://models/',
backend: 'tensorflow', backend: 'tensorflow',
debug: false, debug: false,

View File

@ -10,6 +10,7 @@ Human.env.Canvas = Canvas; // requires monkey-patch as wasm does not have tf.bro
Human.env.Image = Image; // requires monkey-patch as wasm does not have tf.browser namespace Human.env.Image = Image; // requires monkey-patch as wasm does not have tf.browser namespace
const config = { const config = {
cacheSensitivity: 0,
modelBasePath: 'https://vladmandic.github.io/human/models/', modelBasePath: 'https://vladmandic.github.io/human/models/',
// modelBasePath: 'http://localhost:10030/models/', // modelBasePath: 'http://localhost:10030/models/',
backend: 'wasm', backend: 'wasm',

View File

@ -3,6 +3,7 @@ const Human = require('../dist/human.node.js').default;
const test = require('./test-main.js').test; const test = require('./test-main.js').test;
const config = { const config = {
cacheSensitivity: 0,
modelBasePath: 'file://models/', modelBasePath: 'file://models/',
backend: 'tensorflow', backend: 'tensorflow',
debug: false, debug: false,

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Human | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="Human.html">Human</a></li></ul><h1>Class Human</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Human | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="Human.html">Human</a></li></ul><h1>Class Human</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p><em>Human</em>* library main class</p> <p><em>Human</em>* library main class</p>
</div><div><p>All methods and properties are available only as members of Human class</p> </div><div><p>All methods and properties are available only as members of Human class</p>
<ul> <ul>
@ -53,7 +53,7 @@
</ul> </ul>
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="faceTriangulation" class="tsd-anchor"></a><h3>face<wbr/>Triangulation</h3><div class="tsd-signature tsd-kind-icon">face<wbr/>Triangulation<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L158">human.ts:158</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-class"><a name="faceTriangulation" class="tsd-anchor"></a><h3>face<wbr/>Triangulation</h3><div class="tsd-signature tsd-kind-icon">face<wbr/>Triangulation<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L158">human.ts:158</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Reference face triangualtion array of 468 points, used for triangle references between points</p> <p>Reference face triangualtion array of 468 points, used for triangle references between points</p>
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="faceUVMap" class="tsd-anchor"></a><h3>faceUVMap</h3><div class="tsd-signature tsd-kind-icon">faceUVMap<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></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L160">human.ts:160</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-class"><a name="faceUVMap" class="tsd-anchor"></a><h3>faceUVMap</h3><div class="tsd-signature tsd-kind-icon">faceUVMap<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">number</span><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></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L160">human.ts:160</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Refernce UV map of 468 values, used for 3D mapping of the face mesh</p> <p>Refernce UV map of 468 values, used for 3D mapping of the face mesh</p>
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a name="gl" class="tsd-anchor"></a><h3>gl</h3><div class="tsd-signature tsd-kind-icon">gl<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L167">human.ts:167</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-class"><a name="gl" class="tsd-anchor"></a><h3>gl</h3><div class="tsd-signature tsd-kind-icon">gl<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L167">human.ts:167</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>WebGL debug info</p> <p>WebGL debug info</p>
@ -106,9 +106,9 @@
</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">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L295">human.ts:295</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">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L295">human.ts:295</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> <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">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></h4><div><p>Tensor</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">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></h5></li></ul><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span></h4><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">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> }</span></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#L268">human.ts:268</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>, getTensor<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">boolean</span><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">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> }</span></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#L268">human.ts:268</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Process input as return canvas and tensor</p> <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">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> }</span></h4><div></div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</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">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</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">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</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#L306">human.ts:306</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><li><h5>getTensor: <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> = true</span></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">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</span><span class="tsd-signature-symbol">; </span>tensor<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Tensor</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> }</span></h4><div></div><ul class="tsd-parameters"><li class="tsd-parameter"><h5>canvas<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">OffscreenCanvas</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">HTMLCanvasElement</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">&lt;</span><span class="tsd-signature-type">Rank</span><span class="tsd-signature-symbol">&gt;</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">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</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#L306">human.ts:306</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
<p>Explicit backend initialization</p> <p>Explicit backend initialization</p>
<ul> <ul>
<li>Normally done implicitly during initial load phase</li> <li>Normally done implicitly during initial load phase</li>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>BodyConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="BodyConfig.html">BodyConfig</a></li></ul><h1>Interface BodyConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>BodyConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="BodyConfig.html">BodyConfig</a></li></ul><h1>Interface BodyConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Controlls and configures all body detection specific options</p> <p>Controlls and configures all body detection specific options</p>
</div><div><p>Parameters:</p> </div><div><p>Parameters:</p>
<ul> <ul>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>BodyResult | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="BodyResult.html">BodyResult</a></li></ul><h1>Interface BodyResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>BodyResult | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="BodyResult.html">BodyResult</a></li></ul><h1>Interface BodyResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Body results</p> <p>Body results</p>
</div><div><p>Each results has:</p> </div><div><p>Each results has:</p>
<ul> <ul>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Config | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="Config.html">Config</a></li></ul><h1>Interface Config</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Config | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="Config.html">Config</a></li></ul><h1>Interface Config</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Configuration interface definition for <strong>Human</strong> library</p> <p>Configuration interface definition for <strong>Human</strong> library</p>
</div><div><p>Contains all configurable parameters</p> </div><div><p>Contains all configurable parameters</p>
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Config</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#async" class="tsd-kind-icon">async</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#backend" class="tsd-kind-icon">backend</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#body" class="tsd-kind-icon">body</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#cacheSensitivity" class="tsd-kind-icon">cache<wbr/>Sensitivity</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#debug" class="tsd-kind-icon">debug</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#face" class="tsd-kind-icon">face</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#filter" class="tsd-kind-icon">filter</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#gesture" class="tsd-kind-icon">gesture</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#hand" class="tsd-kind-icon">hand</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#modelBasePath" class="tsd-kind-icon">model<wbr/>Base<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#object" class="tsd-kind-icon">object</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#segmentation" class="tsd-kind-icon">segmentation</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#skipFrame" class="tsd-kind-icon">skip<wbr/>Frame</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#warmup" class="tsd-kind-icon">warmup</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#wasmPath" class="tsd-kind-icon">wasm<wbr/>Path</a></li></ul></section></div></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-interface"><a name="async" class="tsd-anchor"></a><h3>async</h3><div class="tsd-signature tsd-kind-icon">async<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L249">config.ts:249</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead"> </div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Config</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#async" class="tsd-kind-icon">async</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#backend" class="tsd-kind-icon">backend</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#body" class="tsd-kind-icon">body</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#cacheSensitivity" class="tsd-kind-icon">cache<wbr/>Sensitivity</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#debug" class="tsd-kind-icon">debug</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#face" class="tsd-kind-icon">face</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#filter" class="tsd-kind-icon">filter</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#gesture" class="tsd-kind-icon">gesture</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#hand" class="tsd-kind-icon">hand</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#modelBasePath" class="tsd-kind-icon">model<wbr/>Base<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#object" class="tsd-kind-icon">object</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#segmentation" class="tsd-kind-icon">segmentation</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#skipFrame" class="tsd-kind-icon">skip<wbr/>Frame</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#warmup" class="tsd-kind-icon">warmup</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Config.html#wasmPath" class="tsd-kind-icon">wasm<wbr/>Path</a></li></ul></section></div></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-interface"><a name="async" class="tsd-anchor"></a><h3>async</h3><div class="tsd-signature tsd-kind-icon">async<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L249">config.ts:249</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="FaceConfig.html">FaceConfig</a></li></ul><h1>Interface FaceConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="FaceConfig.html">FaceConfig</a></li></ul><h1>Interface FaceConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Controlls and configures all face-specific options:</p> <p>Controlls and configures all face-specific options:</p>
<ul> <ul>
<li>face detection, face mesh detection, age, gender, emotion detection and face description</li> <li>face detection, face mesh detection, age, gender, emotion detection and face description</li>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceDescriptionConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="FaceDescriptionConfig.html">FaceDescriptionConfig</a></li></ul><h1>Interface FaceDescriptionConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceDescriptionConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="FaceDescriptionConfig.html">FaceDescriptionConfig</a></li></ul><h1>Interface FaceDescriptionConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Description or face embedding part of face configuration</p> <p>Description or face embedding part of face configuration</p>
<ul> <ul>
<li>also used by age and gender detection</li> <li>also used by age and gender detection</li>

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,3 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceEmotionConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="FaceEmotionConfig.html">FaceEmotionConfig</a></li></ul><h1>Interface FaceEmotionConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceEmotionConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="FaceEmotionConfig.html">FaceEmotionConfig</a></li></ul><h1>Interface FaceEmotionConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Emotion part of face configuration</p> <p>Emotion part of face configuration</p>
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">FaceEmotionConfig</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#minConfidence" class="tsd-kind-icon">min<wbr/>Confidence</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li></ul></section></div></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-interface"><a name="enabled" class="tsd-anchor"></a><h3>enabled</h3><div class="tsd-signature tsd-kind-icon">enabled<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L39">config.ts:39</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="minConfidence" class="tsd-anchor"></a><h3>min<wbr/>Confidence</h3><div class="tsd-signature tsd-kind-icon">min<wbr/>Confidence<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L40">config.ts:40</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="modelPath" class="tsd-anchor"></a><h3>model<wbr/>Path</h3><div class="tsd-signature tsd-kind-icon">model<wbr/>Path<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/config.ts#L42">config.ts:42</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="skipFrames" class="tsd-anchor"></a><h3>skip<wbr/>Frames</h3><div class="tsd-signature tsd-kind-icon">skip<wbr/>Frames<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L41">config.ts:41</a></li></ul></aside></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-interface"><a href="FaceEmotionConfig.html" class="tsd-kind-icon">Face<wbr/>Emotion<wbr/>Config</a><ul><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#minConfidence" class="tsd-kind-icon">min<wbr/>Confidence</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</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></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">FaceEmotionConfig</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#minConfidence" class="tsd-kind-icon">min<wbr/>Confidence</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li></ul></section></div></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-interface"><a name="enabled" class="tsd-anchor"></a><h3>enabled</h3><div class="tsd-signature tsd-kind-icon">enabled<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L39">config.ts:39</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="minConfidence" class="tsd-anchor"></a><h3>min<wbr/>Confidence</h3><div class="tsd-signature tsd-kind-icon">min<wbr/>Confidence<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L40">config.ts:40</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="modelPath" class="tsd-anchor"></a><h3>model<wbr/>Path</h3><div class="tsd-signature tsd-kind-icon">model<wbr/>Path<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/config.ts#L42">config.ts:42</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="skipFrames" class="tsd-anchor"></a><h3>skip<wbr/>Frames</h3><div class="tsd-signature tsd-kind-icon">skip<wbr/>Frames<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L41">config.ts:41</a></li></ul></aside></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-interface"><a href="FaceEmotionConfig.html" class="tsd-kind-icon">Face<wbr/>Emotion<wbr/>Config</a><ul><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#minConfidence" class="tsd-kind-icon">min<wbr/>Confidence</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceEmotionConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</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>

View File

@ -1,3 +1,3 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceIrisConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="FaceIrisConfig.html">FaceIrisConfig</a></li></ul><h1>Interface FaceIrisConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceIrisConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="FaceIrisConfig.html">FaceIrisConfig</a></li></ul><h1>Interface FaceIrisConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Iris part of face configuration</p> <p>Iris part of face configuration</p>
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">FaceIrisConfig</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceIrisConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceIrisConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li></ul></section></div></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-interface"><a name="enabled" class="tsd-anchor"></a><h3>enabled</h3><div class="tsd-signature tsd-kind-icon">enabled<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L23">config.ts:23</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="modelPath" class="tsd-anchor"></a><h3>model<wbr/>Path</h3><div class="tsd-signature tsd-kind-icon">model<wbr/>Path<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/config.ts#L24">config.ts:24</a></li></ul></aside></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-interface"><a href="FaceIrisConfig.html" class="tsd-kind-icon">Face<wbr/>Iris<wbr/>Config</a><ul><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceIrisConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceIrisConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</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></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">FaceIrisConfig</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceIrisConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceIrisConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li></ul></section></div></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-interface"><a name="enabled" class="tsd-anchor"></a><h3>enabled</h3><div class="tsd-signature tsd-kind-icon">enabled<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L23">config.ts:23</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="modelPath" class="tsd-anchor"></a><h3>model<wbr/>Path</h3><div class="tsd-signature tsd-kind-icon">model<wbr/>Path<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/config.ts#L24">config.ts:24</a></li></ul></aside></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-interface"><a href="FaceIrisConfig.html" class="tsd-kind-icon">Face<wbr/>Iris<wbr/>Config</a><ul><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceIrisConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceIrisConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</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>

View File

@ -1,3 +1,3 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceMeshConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="FaceMeshConfig.html">FaceMeshConfig</a></li></ul><h1>Interface FaceMeshConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceMeshConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="FaceMeshConfig.html">FaceMeshConfig</a></li></ul><h1>Interface FaceMeshConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Mesh part of face configuration</p> <p>Mesh part of face configuration</p>
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">FaceMeshConfig</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceMeshConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceMeshConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li></ul></section></div></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-interface"><a name="enabled" class="tsd-anchor"></a><h3>enabled</h3><div class="tsd-signature tsd-kind-icon">enabled<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L17">config.ts:17</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="modelPath" class="tsd-anchor"></a><h3>model<wbr/>Path</h3><div class="tsd-signature tsd-kind-icon">model<wbr/>Path<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/config.ts#L18">config.ts:18</a></li></ul></aside></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-interface"><a href="FaceMeshConfig.html" class="tsd-kind-icon">Face<wbr/>Mesh<wbr/>Config</a><ul><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceMeshConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceMeshConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</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></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">FaceMeshConfig</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceMeshConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceMeshConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li></ul></section></div></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-interface"><a name="enabled" class="tsd-anchor"></a><h3>enabled</h3><div class="tsd-signature tsd-kind-icon">enabled<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L17">config.ts:17</a></li></ul></aside></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a name="modelPath" class="tsd-anchor"></a><h3>model<wbr/>Path</h3><div class="tsd-signature tsd-kind-icon">model<wbr/>Path<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/config.ts#L18">config.ts:18</a></li></ul></aside></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-interface"><a href="FaceMeshConfig.html" class="tsd-kind-icon">Face<wbr/>Mesh<wbr/>Config</a><ul><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceMeshConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceMeshConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</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>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceResult | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="FaceResult.html">FaceResult</a></li></ul><h1>Interface FaceResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FaceResult | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="FaceResult.html">FaceResult</a></li></ul><h1>Interface FaceResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Face results <p>Face results
Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
Some values may be null if specific model is not enabled</p> Some values may be null if specific model is not enabled</p>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FilterConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="FilterConfig.html">FilterConfig</a></li></ul><h1>Interface FilterConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FilterConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="FilterConfig.html">FilterConfig</a></li></ul><h1>Interface FilterConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Run input through image filters before inference</p> <p>Run input through image filters before inference</p>
<ul> <ul>
<li>available only in Browser environments</li> <li>available only in Browser environments</li>

View File

@ -1,3 +1,3 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>GestureConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="GestureConfig.html">GestureConfig</a></li></ul><h1>Interface GestureConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>GestureConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="GestureConfig.html">GestureConfig</a></li></ul><h1>Interface GestureConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Controlls gesture detection</p> <p>Controlls gesture detection</p>
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">GestureConfig</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="GestureConfig.html#enabled" class="tsd-kind-icon">enabled</a></li></ul></section></div></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-interface"><a name="enabled" class="tsd-anchor"></a><h3>enabled</h3><div class="tsd-signature tsd-kind-icon">enabled<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L215">config.ts:215</a></li></ul></aside></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-interface"><a href="GestureConfig.html" class="tsd-kind-icon">Gesture<wbr/>Config</a><ul><li class="tsd-kind-property tsd-parent-kind-interface"><a href="GestureConfig.html#enabled" class="tsd-kind-icon">enabled</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></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">GestureConfig</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="GestureConfig.html#enabled" class="tsd-kind-icon">enabled</a></li></ul></section></div></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-interface"><a name="enabled" class="tsd-anchor"></a><h3>enabled</h3><div class="tsd-signature tsd-kind-icon">enabled<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L215">config.ts:215</a></li></ul></aside></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-interface"><a href="GestureConfig.html" class="tsd-kind-icon">Gesture<wbr/>Config</a><ul><li class="tsd-kind-property tsd-parent-kind-interface"><a href="GestureConfig.html#enabled" class="tsd-kind-icon">enabled</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>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>HandConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="HandConfig.html">HandConfig</a></li></ul><h1>Interface HandConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>HandConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="HandConfig.html">HandConfig</a></li></ul><h1>Interface HandConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Controlls and configures all hand detection specific options</p> <p>Controlls and configures all hand detection specific options</p>
</div><div><p>Parameters:</p> </div><div><p>Parameters:</p>
<ul> <ul>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>HandResult | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="HandResult.html">HandResult</a></li></ul><h1>Interface HandResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>HandResult | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="HandResult.html">HandResult</a></li></ul><h1>Interface HandResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Hand results</p> <p>Hand results</p>
</div><div><p>Each result has:</p> </div><div><p>Each result has:</p>
<ul> <ul>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ObjectConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="ObjectConfig.html">ObjectConfig</a></li></ul><h1>Interface ObjectConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ObjectConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="ObjectConfig.html">ObjectConfig</a></li></ul><h1>Interface ObjectConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Controlls and configures all object detection specific options</p> <p>Controlls and configures all object detection specific options</p>
<ul> <ul>
<li>enabled: true/false</li> <li>enabled: true/false</li>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ObjectResult | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="ObjectResult.html">ObjectResult</a></li></ul><h1>Interface ObjectResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ObjectResult | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="ObjectResult.html">ObjectResult</a></li></ul><h1>Interface ObjectResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Object results</p> <p>Object results</p>
</div><div><p>Array of individual results with one object per detected gesture </div><div><p>Array of individual results with one object per detected gesture
Each result has:</p> Each result has:</p>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>PersonResult | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="PersonResult.html">PersonResult</a></li></ul><h1>Interface PersonResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>PersonResult | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="PersonResult.html">PersonResult</a></li></ul><h1>Interface PersonResult</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Person getter</p> <p>Person getter</p>
</div><dl class="tsd-comment-tags"><dt>interface</dt><dd><p>Person Interface</p> </div><dl class="tsd-comment-tags"><dt>interface</dt><dd><p>Person Interface</p>
<p>Each result has:</p> <p>Each result has:</p>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Result | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="Result.html">Result</a></li></ul><h1>Interface Result</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Result | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="Result.html">Result</a></li></ul><h1>Interface Result</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Result interface definition for <strong>Human</strong> library</p> <p>Result interface definition for <strong>Human</strong> library</p>
</div><div><p>Contains all possible detection results</p> </div><div><p>Contains all possible detection results</p>
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Result</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#body" class="tsd-kind-icon">body</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#canvas" class="tsd-kind-icon">canvas</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#face" class="tsd-kind-icon">face</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#gesture" class="tsd-kind-icon">gesture</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#hand" class="tsd-kind-icon">hand</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#object" class="tsd-kind-icon">object</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#persons" class="tsd-kind-icon">persons</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#timestamp" class="tsd-kind-icon">timestamp</a></li></ul></section></div></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-interface"><a name="body" class="tsd-anchor"></a><h3>body</h3><div class="tsd-signature tsd-kind-icon">body<span class="tsd-signature-symbol">:</span> <a href="BodyResult.html" class="tsd-signature-type" data-tsd-kind="Interface">BodyResult</a><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L187">result.ts:187</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead"> </div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Result</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>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#body" class="tsd-kind-icon">body</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#canvas" class="tsd-kind-icon">canvas</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#face" class="tsd-kind-icon">face</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#gesture" class="tsd-kind-icon">gesture</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#hand" class="tsd-kind-icon">hand</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#object" class="tsd-kind-icon">object</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#performance" class="tsd-kind-icon">performance</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#persons" class="tsd-kind-icon">persons</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="Result.html#timestamp" class="tsd-kind-icon">timestamp</a></li></ul></section></div></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-interface"><a name="body" class="tsd-anchor"></a><h3>body</h3><div class="tsd-signature tsd-kind-icon">body<span class="tsd-signature-symbol">:</span> <a href="BodyResult.html" class="tsd-signature-type" data-tsd-kind="Interface">BodyResult</a><span class="tsd-signature-symbol">[]</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L187">result.ts:187</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SegmentationConfig | @vladmandic/human - v2.3.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.1"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.1</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.1</a></li><li><a href="SegmentationConfig.html">SegmentationConfig</a></li></ul><h1>Interface SegmentationConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead"> <!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SegmentationConfig | @vladmandic/human - v2.3.2</title><meta name="description" content="Documentation for @vladmandic/human - v2.3.2"/><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 async src="../assets/search.js" id="search-script"></script></head><body><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></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 - v2.3.2</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><ul class="tsd-breadcrumb"><li><a href="../index.html">@vladmandic/human - v2.3.2</a></li><li><a href="SegmentationConfig.html">SegmentationConfig</a></li></ul><h1>Interface SegmentationConfig</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><div class="lead">
<p>Controlls and configures all body segmentation module <p>Controlls and configures all body segmentation module
removes background from input containing person removes background from input containing person
if segmentation is enabled it will run as preprocessing task before any other model if segmentation is enabled it will run as preprocessing task before any other model

View File

@ -2155,6 +2155,7 @@ export namespace webgl {
export { forceHalfFloat }; export { forceHalfFloat };
} }
declare var webgl_util_exports: {}; declare var webgl_util_exports: {};
declare var webgpu_exports: {};
export function where(...args: any[]): any; export function where(...args: any[]): any;
export namespace where { } export namespace where { }
export function whereAsync(condition: any): Promise<any>; export function whereAsync(condition: any): Promise<any>;
@ -2568,5 +2569,5 @@ declare var OptimizerConstructors: {
getClassName(): any; getClassName(): any;
}; };
}; };
export { add2 as add, backend_util_exports as backend_util, browser_exports as browser, exports_constraints_exports as constraints, dist_exports as data, device_util_exports as device_util, fused_ops_exports as fused, gather_nd_util_exports as gather_util, gpgpu_util_exports as gpgpu_util, exports_initializers_exports as initializers, io_exports as io, isFinite2 as isFinite, isNaN2 as isNaN, kernel_impls_exports as kernel_impls, exports_layers_exports as layers, log5 as log, math_exports as math, exports_metrics_exports as metrics, exports_models_exports as models, ones2 as ones, print2 as print, exports_regularizers_exports as regularizers, round2 as round, scatter_nd_util_exports as scatter_util, serialization_exports as serialization, slice_util_exports as slice_util, sum2 as sum, tanh2 as tanh, tensor_util_exports as tensor_util, test_util_exports as test_util, util_exports as util, version92 as version, version3 as version_converter, version as version_core, version2 as version_layers, version8 as version_wasm, version5 as version_webgl, webgl_util_exports as webgl_util }; export { add2 as add, backend_util_exports as backend_util, browser_exports as browser, exports_constraints_exports as constraints, dist_exports as data, device_util_exports as device_util, fused_ops_exports as fused, gather_nd_util_exports as gather_util, gpgpu_util_exports as gpgpu_util, exports_initializers_exports as initializers, io_exports as io, isFinite2 as isFinite, isNaN2 as isNaN, kernel_impls_exports as kernel_impls, exports_layers_exports as layers, log5 as log, math_exports as math, exports_metrics_exports as metrics, exports_models_exports as models, ones2 as ones, print2 as print, exports_regularizers_exports as regularizers, round2 as round, scatter_nd_util_exports as scatter_util, serialization_exports as serialization, slice_util_exports as slice_util, sum2 as sum, tanh2 as tanh, tensor_util_exports as tensor_util, test_util_exports as test_util, util_exports as util, version92 as version, version3 as version_converter, version as version_core, version2 as version_layers, version8 as version_wasm, version5 as version_webgl, webgl_util_exports as webgl_util, webgpu_exports as webgpu };
//# sourceMappingURL=tfjs.esm.d.ts.map //# sourceMappingURL=tfjs.esm.d.ts.map

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"version":3,"file":"blazepose.d.ts","sourceRoot":"","sources":["../../../src/body/blazepose.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAgB,UAAU,EAAc,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAWpE;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAalE;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAI1F;AA4FD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAUlF"} {"version":3,"file":"blazepose.d.ts","sourceRoot":"","sources":["../../../src/body/blazepose.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAgB,UAAU,EAAc,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAWpE;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAalE;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAI1F;AA4FD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAelF"}

View File

@ -1,12 +1,3 @@
export declare const kpt: string[]; export declare const kpt: Array<string>;
export declare const connected: { export declare const connected: Record<string, string[]>;
leftLeg: string[];
rightLeg: string[];
torso: string[];
leftArm: string[];
rightArm: string[];
leftHand: never[];
rightHand: never[];
head: never[];
};
//# sourceMappingURL=blazeposecoords.d.ts.map //# sourceMappingURL=blazeposecoords.d.ts.map

View File

@ -1 +1 @@
{"version":3,"file":"blazeposecoords.d.ts","sourceRoot":"","sources":["../../../src/body/blazeposecoords.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,UAwCf,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;CASrB,CAAC"} {"version":3,"file":"blazeposecoords.d.ts","sourceRoot":"","sources":["../../../src/body/blazeposecoords.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,EAAE,KAAK,CAAC,MAAM,CAwC7B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAS9C,CAAC"}

View File

@ -1 +1 @@
{"version":3,"file":"efficientpose.d.ts","sourceRoot":"","sources":["../../../src/body/efficientpose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAgB,UAAU,EAAc,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ9D;AAmBD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA4ElF"} {"version":3,"file":"efficientpose.d.ts","sourceRoot":"","sources":["../../../src/body/efficientpose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAaxC,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ9D;AAmBD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAgFlF"}

View File

@ -1,10 +1,3 @@
export declare const kpt: string[]; export declare const kpt: Array<string>;
export declare const connected: { export declare const connected: Record<string, string[]>;
leftLeg: string[];
rightLeg: string[];
torso: string[];
leftArm: string[];
rightArm: string[];
head: never[];
};
//# sourceMappingURL=efficientposecoords.d.ts.map //# sourceMappingURL=efficientposecoords.d.ts.map

View File

@ -1 +1 @@
{"version":3,"file":"efficientposecoords.d.ts","sourceRoot":"","sources":["../../../src/body/efficientposecoords.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,UAiBf,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CAOrB,CAAC"} {"version":3,"file":"efficientposecoords.d.ts","sourceRoot":"","sources":["../../../src/body/efficientposecoords.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,EAAE,KAAK,CAAC,MAAM,CAiB7B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAO9C,CAAC"}

View File

@ -1 +1 @@
{"version":3,"file":"movenet.d.ts","sourceRoot":"","sources":["../../../src/body/movenet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAgB,UAAU,EAAc,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAW9D;AA4GD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA2ClF"} {"version":3,"file":"movenet.d.ts","sourceRoot":"","sources":["../../../src/body/movenet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAgB,UAAU,EAAc,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAmBxC,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAW9D;AAqGD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA+ClF"}

View File

@ -1,10 +1,4 @@
export declare const kpt: string[]; export declare const kpt: Array<string>;
export declare const connected: { export declare const pairs: Array<string[]>;
leftLeg: string[]; export declare const connected: Record<string, string[]>;
rightLeg: string[];
torso: string[];
leftArm: string[];
rightArm: string[];
head: never[];
};
//# sourceMappingURL=movenetcoords.d.ts.map //# sourceMappingURL=movenetcoords.d.ts.map

View File

@ -1 +1 @@
{"version":3,"file":"movenetcoords.d.ts","sourceRoot":"","sources":["../../../src/body/movenetcoords.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,UAkBf,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CAOrB,CAAC"} {"version":3,"file":"movenetcoords.d.ts","sourceRoot":"","sources":["../../../src/body/movenetcoords.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,EAAE,KAAK,CAAC,MAAM,CAkB7B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CASjC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAO9C,CAAC"}

View File

@ -1 +1 @@
{"version":3,"file":"posenet.d.ts","sourceRoot":"","sources":["../../../src/body/posenet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAsCxC,wBAAgB,UAAU,CAAC,IAAI,KAAA,EAAE,MAAM,KAAA,EAAE,OAAO,KAAA,EAAE,gBAAgB,KAAA,EAAE,gBAAgB,KAAA,SA+BnF;AAqBD,wBAAgB,uBAAuB,CAAC,aAAa,KAAA,EAAE,MAAM,KAAA,iBAe5D;AAkBD,wBAAgB,MAAM,CAAC,OAAO,KAAA,EAAE,MAAM,KAAA,EAAE,gBAAgB,KAAA,EAAE,gBAAgB,KAAA,EAAE,WAAW,KAAA,EAAE,aAAa,KAAA;;;WACnD,MAAM;IAmBxD;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAkBlF;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO9D"} {"version":3,"file":"posenet.d.ts","sourceRoot":"","sources":["../../../src/body/posenet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAsCxC,wBAAgB,UAAU,CAAC,IAAI,KAAA,EAAE,MAAM,KAAA,EAAE,OAAO,KAAA,EAAE,gBAAgB,KAAA,EAAE,gBAAgB,KAAA,SA+BnF;AAqBD,wBAAgB,uBAAuB,CAAC,aAAa,KAAA,EAAE,MAAM,KAAA,iBAe5D;AAkBD,wBAAgB,MAAM,CAAC,OAAO,KAAA,EAAE,MAAM,KAAA,EAAE,gBAAgB,KAAA,EAAE,gBAAgB,KAAA,EAAE,WAAW,KAAA,EAAE,aAAa,KAAA;;;WACnD,MAAM;IAmBxD;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAqBlF;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO9D"}

View File

@ -12,5 +12,5 @@ import type { Config } from '../config';
export declare function predict(input: Tensor, config: Config): Promise<FaceResult[]>; export declare function predict(input: Tensor, config: Config): Promise<FaceResult[]>;
export declare function load(config: Config): Promise<GraphModel>; export declare function load(config: Config): Promise<GraphModel>;
export declare const triangulation: number[]; export declare const triangulation: number[];
export declare const uvmap: number[][]; export declare const uvmap: [number, number][];
//# sourceMappingURL=facemesh.d.ts.map //# sourceMappingURL=facemesh.d.ts.map

View File

@ -1 +1 @@
{"version":3,"file":"facemesh.d.ts","sourceRoot":"","sources":["../../../src/face/facemesh.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAUxC,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA+FlF;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAU9D;AAED,eAAO,MAAM,aAAa,UAAgB,CAAC;AAC3C,eAAO,MAAM,KAAK,YAAe,CAAC"} {"version":3,"file":"facemesh.d.ts","sourceRoot":"","sources":["../../../src/face/facemesh.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAUxC,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA+FlF;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAU9D;AAED,eAAO,MAAM,aAAa,UAAgB,CAAC;AAC3C,eAAO,MAAM,KAAK,oBAAe,CAAC"}

View File

@ -2,67 +2,22 @@
* BlazeFace, FaceMesh & Iris model implementation * BlazeFace, FaceMesh & Iris model implementation
* See `facemesh.ts` for entry point * See `facemesh.ts` for entry point
*/ */
export declare const meshAnnotations: { export declare const meshAnnotations: Record<string, number[]>;
silhouette: number[]; export declare const meshLandmarks: Record<string, number | number[]>;
lipsUpperOuter: number[]; export declare const blazeFaceLandmarks: Record<string, number | number[]>;
lipsLowerOuter: number[]; export declare const MESH_TO_IRIS_INDICES_MAP: Array<{
lipsUpperInner: number[];
lipsLowerInner: number[];
rightEyeUpper0: number[];
rightEyeLower0: number[];
rightEyeUpper1: number[];
rightEyeLower1: number[];
rightEyeUpper2: number[];
rightEyeLower2: number[];
rightEyeLower3: number[];
rightEyebrowUpper: number[];
rightEyebrowLower: number[];
rightEyeIris: number[];
leftEyeUpper0: number[];
leftEyeLower0: number[];
leftEyeUpper1: number[];
leftEyeLower1: number[];
leftEyeUpper2: number[];
leftEyeLower2: number[];
leftEyeLower3: number[];
leftEyebrowUpper: number[];
leftEyebrowLower: number[];
leftEyeIris: number[];
midwayBetweenEyes: number[];
noseTip: number[];
noseBottom: number[];
noseRightCorner: number[];
noseLeftCorner: number[];
rightCheek: number[];
leftCheek: number[];
};
export declare const meshLandmarks: {
count: number;
mouth: number;
symmetryLine: number[];
};
export declare const blazeFaceLandmarks: {
leftEye: number;
rightEye: number;
nose: number;
mouth: number;
leftEar: number;
rightEar: number;
symmetryLine: number[];
};
export declare const MESH_TO_IRIS_INDICES_MAP: {
key: string; key: string;
indices: number[]; indices: number[];
}[]; }>;
export declare const UV468: number[][]; export declare const UV468: [number, number][];
export declare const TRI468: number[]; export declare const TRI468: Array<number>;
export declare const TRI68: number[]; export declare const TRI68: Array<number>;
export declare const TRI33: number[]; export declare const TRI33: Array<number>;
export declare const TRI7: number[]; export declare const TRI7: Array<number>;
export declare const VTX68: number[]; export declare const VTX68: Array<number>;
export declare const VTX33: number[]; export declare const VTX33: Array<number>;
export declare const VTX7: number[]; export declare const VTX7: Array<number>;
export declare const UV68: number[][]; export declare const UV68: [number, number][];
export declare const UV33: number[][]; export declare const UV33: [number, number][];
export declare const UV7: number[][]; export declare const UV7: [number, number][];
//# sourceMappingURL=facemeshcoords.d.ts.map //# sourceMappingURL=facemeshcoords.d.ts.map

View File

@ -1 +1 @@
{"version":3,"file":"facemeshcoords.d.ts","sourceRoot":"","sources":["../../../src/face/facemeshcoords.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC3B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;CAIzB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;CAQ9B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;GAUpC,CAAC;AAEF,eAAO,MAAM,KAAK,YAqdjB,CAAC;AAEF,eAAO,MAAM,MAAM,UAoF+H,CAAC;AAEnJ,eAAO,MAAM,KAAK,UAOuI,CAAC;AAE1J,eAAO,MAAM,KAAK,UASjB,CAAC;AAEF,eAAO,MAAM,IAAI,UAA8B,CAAC;AAEhD,eAAO,MAAM,KAAK,UAOjB,CAAC;AAEF,eAAO,MAAM,KAAK,UAAyJ,CAAC;AAE5K,eAAO,MAAM,IAAI,UAAkC,CAAC;AAEpD,eAAO,MAAM,IAAI,YAA6B,CAAC;AAE/C,eAAO,MAAM,IAAI,YAA6B,CAAC;AAE/C,eAAO,MAAM,GAAG,YAA4B,CAAC"} {"version":3,"file":"facemeshcoords.d.ts","sourceRoot":"","sources":["../../../src/face/facemeshcoords.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAqCpD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAQhE,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAU9E,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAqdnC,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,MAAM,CAoFiH,CAAC;AAEnJ,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,MAAM,CAOyH,CAAC;AAE1J,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,MAAM,CAS/B,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,MAAM,CAA+B,CAAC;AAE/D,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,MAAM,CAO/B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,MAAM,CAA0J,CAAC;AAE3L,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,MAAM,CAAmC,CAAC;AAEnE,eAAO,MAAM,IAAI,oBAA6B,CAAC;AAE/C,eAAO,MAAM,IAAI,oBAA6B,CAAC;AAE/C,eAAO,MAAM,GAAG,oBAA4B,CAAC"}

View File

@ -1 +1 @@
{"version":3,"file":"handtrack.d.ts","sourceRoot":"","sources":["../../../src/hand/handtrack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AA4CxC,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAepE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAWtE;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAI1F;AAkGD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAmBlF"} {"version":3,"file":"handtrack.d.ts","sourceRoot":"","sources":["../../../src/hand/handtrack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AA8CxC,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAepE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAWtE;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAI1F;AA0FD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAsClF"}

View File

@ -158,7 +158,7 @@ export declare class Human {
* @param input: {@link Input} * @param input: {@link Input}
* @returns { tensor, canvas } * @returns { tensor, canvas }
*/ */
image(input: Input): { image(input: Input, getTensor?: boolean): {
tensor: Tensor<import("@tensorflow/tfjs-core").Rank> | null; tensor: Tensor<import("@tensorflow/tfjs-core").Rank> | null;
canvas: HTMLCanvasElement | OffscreenCanvas | null; canvas: HTMLCanvasElement | OffscreenCanvas | null;
}; };

View File

@ -1 +1 @@
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/human.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAO1C,OAAO,KAAK,GAAG,MAAM,YAAY,CAAC;AAElC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAQ5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AASnC,OAAO,KAAK,EAAE,MAAM,EAAiF,MAAM,UAAU,CAAC;AACtH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,kEAAkE;AAClE,cAAc,UAAU,CAAC;AAEzB,6DAA6D;AAC7D,cAAc,UAAU,CAAC;AAEzB,yDAAyD;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,2CAA2C;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,+BAA+B;AAC/B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,4DAA4D;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,+DAA+D;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC;;;;;;;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;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;MAGE;IACF,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;;;;;OAKG;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;;;MAGE;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,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;IA8CxC,cAAc;IACd,OAAO,WAAY,MAAM,EAAE,UAO1B;IAgBD,4CAA4C;IAC5C,KAAK,IAAI,IAAI;IAMb,4CAA4C;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;;;;;IAI5C,oCAAoC;IAC7B,UAAU,0BAAoB;IAC9B,QAAQ,wBAAkB;IAC1B,KAAK,qBAAe;IAE3B;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK;;;;IAIlB;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI,CAAA;KAAE,CAAC;IAIxL;;;;OAIG;IAEH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;;;;MAKE;IACI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCvD,cAAc;IACd,IAAI,UAAW,MAAM,UAEpB;IAED;;;;;OAKG;IACH,IAAI,CAAC,MAAM,GAAE,MAAoB,GAAG,MAAM;IAI1C;;;;;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;CAkKlF;AAED,oCAAoC;AACpC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,CAAC"} {"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/human.ts"],"names":[],"mappings":"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"}

View File

@ -6,7 +6,8 @@ import type { Config } from '../config';
import { env } from '../util/env'; import { env } from '../util/env';
export declare type Input = Tensor | ImageData | ImageBitmap | HTMLImageElement | HTMLMediaElement | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas | typeof Image | typeof env.Canvas; export declare type Input = Tensor | ImageData | ImageBitmap | HTMLImageElement | HTMLMediaElement | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas | typeof Image | typeof env.Canvas;
export declare function canvas(width: any, height: any): HTMLCanvasElement | OffscreenCanvas; export declare function canvas(width: any, height: any): HTMLCanvasElement | OffscreenCanvas;
export declare function process(input: Input, config: Config): { export declare function copy(input: HTMLCanvasElement | OffscreenCanvas, output?: HTMLCanvasElement | OffscreenCanvas): HTMLCanvasElement | OffscreenCanvas;
export declare function process(input: Input, config: Config, getTensor?: boolean): {
tensor: Tensor | null; tensor: Tensor | null;
canvas: OffscreenCanvas | HTMLCanvasElement | null; canvas: OffscreenCanvas | HTMLCanvasElement | null;
}; };

View File

@ -1 +1 @@
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/image/image.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC,oBAAY,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,GAAG,OAAO,KAAK,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC;AASvL,wBAAgB,MAAM,CAAC,KAAK,KAAA,EAAE,MAAM,KAAA,GAAG,iBAAiB,GAAG,eAAe,CAkBzE;AAKD,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAA;CAAE,CAsLnI;AAID,wBAAsB,IAAI,CAAC,MAAM,KAAA,EAAE,KAAK,EAAE,MAAM,oBA2B/C"} {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/image/image.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC,oBAAY,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,GAAG,OAAO,KAAK,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC;AAUvL,wBAAgB,MAAM,CAAC,KAAK,KAAA,EAAE,MAAM,KAAA,GAAG,iBAAiB,GAAG,eAAe,CAkBzE;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,eAAe,uCAK5G;AAKD,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAA;CAAE,CA4J9J;AAkCD,wBAAsB,IAAI,CAAC,MAAM,KAAA,EAAE,KAAK,EAAE,MAAM,oBAY/C"}

View File

@ -89,7 +89,7 @@ export interface BodyResult {
score: number; score: number;
box: Box; box: Box;
boxRaw: Box; boxRaw: Box;
annotations: Record<string, Point[][]>; annotations: Record<string, Array<Point[]>>;
keypoints: Array<BodyKeypoint>; keypoints: Array<BodyKeypoint>;
} }
/** Hand results /** Hand results

View File

@ -1 +1 @@
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/result.ts"],"names":[],"mappings":"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"} {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/result.ts"],"names":[],"mappings":"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"}

View File

@ -1,7 +1,12 @@
import type { Box } from '../result'; import type { Point, Box } from '../result';
export declare function scale(keypoints: any, boxScaleFact: any, outputSize: any): { export declare function calc(keypoints: Array<Point>, outputSize?: [number, number]): {
box: Box; box: Box;
boxRaw: Box; boxRaw: Box;
yxBox: Box;
}; };
export declare function square(keypoints: Array<Point>, outputSize?: [number, number]): {
box: Box;
boxRaw: Box;
};
export declare function scale(box: Box, scaleFact: number): Box;
export declare function crop(box: Box): Box;
//# sourceMappingURL=box.d.ts.map //# sourceMappingURL=box.d.ts.map

View File

@ -1 +1 @@
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../../src/util/box.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGrC,wBAAgB,KAAK,CAAC,SAAS,KAAA,EAAE,YAAY,KAAA,EAAE,UAAU,KAAA;;;;EAwBxD"} {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../../src/util/box.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE5C,wBAAgB,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,GAAE,CAAC,MAAM,EAAE,MAAM,CAAU;;;EAOlF;AAED,wBAAgB,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,GAAE,CAAC,MAAM,EAAE,MAAM,CAAU;;;EASpF;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAShD;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,GAAG,OAG5B"}

View File

@ -1 +1 @@
{"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../src/util/draw.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAS,MAAM,WAAW,CAAC;AAE9H;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,OAAO,EAAE,WAkBrB,CAAC;AA2EF,wBAAsB,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAuB5I;AAED,wBAAsB,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAqGtI;AAED,wBAAsB,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAwCtI;AAED,wBAAsB,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBA+DtI;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAuB1I;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAwB1I;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,iBAI1J;AAED,wBAAsB,GAAG,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,kDAc1H"} {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../src/util/draw.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAS,MAAM,WAAW,CAAC;AAE9H;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,OAAO,EAAE,WAkBrB,CAAC;AAmGF,wBAAsB,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAuB5I;AAED,wBAAsB,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAoHtI;AAED,wBAAsB,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAwCtI;AAED,wBAAsB,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBA+DtI;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAuB1I;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,iBAwB1I;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,iBAI1J;AAED,wBAAsB,GAAG,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,kDAc1H"}

View File

@ -1,35 +1,53 @@
export declare type Env = { export declare type Env = {
/** Running in Browser */
browser: undefined | boolean; browser: undefined | boolean;
/** Running in NodeJS */
node: undefined | boolean; node: undefined | boolean;
/** Running in WebWorker thread */
worker: undefined | boolean; worker: undefined | boolean;
/** Detected platform */
platform: undefined | string; platform: undefined | string;
/** Detected agent */
agent: undefined | string; agent: undefined | string;
/** List of supported backends */
backends: string[]; backends: string[];
/** Has any work been performed so far */
initial: boolean; initial: boolean;
/** Are image filters supported? */
filter: undefined | boolean;
/** TFJS instance details */
tfjs: { tfjs: {
version: undefined | string; version: undefined | string;
}; };
/** Is offscreenCanvas supported? */
offscreen: undefined | boolean; offscreen: undefined | boolean;
/** WASM detected capabilities */
wasm: { wasm: {
supported: undefined | boolean; supported: undefined | boolean;
backend: undefined | boolean; backend: undefined | boolean;
simd: undefined | boolean; simd: undefined | boolean;
multithread: undefined | boolean; multithread: undefined | boolean;
}; };
/** WebGL detected capabilities */
webgl: { webgl: {
supported: undefined | boolean; supported: undefined | boolean;
backend: undefined | boolean; backend: undefined | boolean;
version: undefined | string; version: undefined | string;
renderer: undefined | string; renderer: undefined | string;
}; };
/** WebGPU detected capabilities */
webgpu: { webgpu: {
supported: undefined | boolean; supported: undefined | boolean;
backend: undefined | boolean; backend: undefined | boolean;
adapter: undefined | string; adapter: undefined | string;
}; };
/** List of supported kernels for current backend */
kernels: string[]; kernels: string[];
/** MonkeyPatch for Canvas */
Canvas: undefined; Canvas: undefined;
/** MonkeyPatch for Image */
Image: undefined; Image: undefined;
/** MonkeyPatch for ImageData */
ImageData: undefined; ImageData: undefined;
}; };
export declare let env: Env; export declare let env: Env;

View File

@ -1 +1 @@
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/util/env.ts"],"names":[],"mappings":"AAIA,oBAAY,GAAG,GAAG;IAChB,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE;QACJ,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;KAC7B,CAAC;IACF,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;QAC/B,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAC1B,WAAW,EAAE,SAAS,GAAG,OAAO,CAAC;KAClC,CAAC;IACF,KAAK,EAAE;QACL,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;QAC/B,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;QAC5B,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;QAC/B,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;CACtB,CAAA;AAGD,eAAO,IAAI,GAAG,EAAE,GAiCf,CAAC;AAEF,wBAAsB,OAAO,kBAmB5B;AAED,wBAAsB,WAAW,kBA8BhC;AAED,wBAAsB,GAAG,kBAmCxB;AAED,wBAAsB,GAAG,CAAC,GAAG,KAAA,iBAE5B"} {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/util/env.ts"],"names":[],"mappings":"AAIA,oBAAY,GAAG,GAAG;IAChB,yBAAyB;IACzB,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,wBAAwB;IACxB,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,kCAAkC;IAClC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,wBAAwB;IACxB,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,qBAAqB;IACrB,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,4BAA4B;IAC5B,IAAI,EAAE;QACJ,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;KAC7B,CAAC;IACF,oCAAoC;IACpC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;IAC/B,iCAAiC;IACjC,IAAI,EAAE;QACJ,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;QAC/B,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAC1B,WAAW,EAAE,SAAS,GAAG,OAAO,CAAC;KAClC,CAAC;IACF,kCAAkC;IAClC,KAAK,EAAE;QACL,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;QAC/B,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;QAC5B,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;KAC9B,CAAC;IACF,mCAAmC;IACnC,MAAM,EAAE;QACN,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;QAC/B,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;KAC7B,CAAC;IACF,oDAAoD;IACpD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6BAA6B;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,4BAA4B;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,gCAAgC;IAChC,SAAS,EAAE,SAAS,CAAC;CACtB,CAAA;AAGD,eAAO,IAAI,GAAG,EAAE,GAkCf,CAAC;AAEF,wBAAsB,OAAO,kBAmB5B;AAED,wBAAsB,WAAW,kBA8BhC;AAED,wBAAsB,GAAG,kBAqCxB;AAED,wBAAsB,GAAG,CAAC,GAAG,KAAA,iBAE5B"}

View File

@ -2,5 +2,6 @@
* Results interpolation for smoothening of video detection results inbetween detected frames * Results interpolation for smoothening of video detection results inbetween detected frames
*/ */
import type { Result } from '../result'; import type { Result } from '../result';
export declare function calc(newResult: Result): Result; import type { Config } from '../config';
export declare function calc(newResult: Result, config: Config): Result;
//# sourceMappingURL=interpolate.d.ts.map //# sourceMappingURL=interpolate.d.ts.map

View File

@ -1 +1 @@
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/util/interpolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAA6F,MAAM,WAAW,CAAC;AAInI,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmI9C"} {"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/util/interpolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAA6F,MAAM,WAAW,CAAC;AACnI,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAQxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA0J9D"}