mirror of https://github.com/vladmandic/human
parent
1bce9c084b
commit
1be706185e
|
@ -126,7 +126,7 @@
|
|||
"format": "iife",
|
||||
"input": "src/human.ts",
|
||||
"output": "dist/human.js",
|
||||
"minify": false,
|
||||
"minify": true,
|
||||
"globalName": "Human",
|
||||
"external": ["fs", "os", "buffer", "util"]
|
||||
},
|
||||
|
|
|
@ -9,8 +9,10 @@
|
|||
|
||||
## Changelog
|
||||
|
||||
### **HEAD -> main** 2021/11/07 mandic00@live.com
|
||||
### **2.5.1** 2021/11/08 mandic00@live.com
|
||||
|
||||
- new human.compare api
|
||||
- added links to release notes
|
||||
|
||||
### **origin/main** 2021/11/06 mandic00@live.com
|
||||
|
||||
|
|
31
TODO.md
31
TODO.md
|
@ -38,34 +38,3 @@ MoveNet MultiPose model does not work with WASM backend due to missing F32 broad
|
|||
<https://github.com/tensorflow/tfjs/issues/5516>
|
||||
|
||||
<br><hr><br>
|
||||
|
||||
### Pending release
|
||||
|
||||
New:
|
||||
- New frame change detection algorithm used for [cache determination](https://vladmandic.github.io/human/typedoc/interfaces/Config.html#cacheSensitivity)
|
||||
based on temporal input difference
|
||||
- New built-in Tensorflow profiling [human.profile](https://vladmandic.github.io/human/typedoc/classes/Human.html#profile)
|
||||
- New optional input histogram equalization [config.filter.equalization](https://vladmandic.github.io/human/)
|
||||
auto-level input for optimal brightness/contrast
|
||||
- New event-baseed interface [human.events](https://vladmandic.github.io/human/typedoc/classes/Human.html#events)
|
||||
- New configuration validation [human.validate](https://vladmandic.github.io/human/typedoc/classes/Human.html#validate)
|
||||
- New input compare function [human.compare](https://vladmandic.github.io/human/typedoc/classes/Human.html#compare)
|
||||
this function is internally used by `human` to determine frame changes and cache validation
|
||||
- New [custom built TFJS](https://github.com/vladmandic/tfjs) for bundled version
|
||||
result is a pure module with reduced bundle size and include built-in support for all backends
|
||||
note: **nobundle** and **node** versions link to standard `@tensorflow` packages
|
||||
|
||||
Changed:
|
||||
- [Default configuration values](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) have been tuned for precision and performance
|
||||
- Supports all built-in modules on all backends
|
||||
via custom implementation of missing kernel ops
|
||||
- Performance and precision improvements
|
||||
- **face**, **hand**
|
||||
- **gestures** modules
|
||||
- **face matching**
|
||||
- Fix **ReactJS** compatibility
|
||||
- Better precision using **WASM**
|
||||
Previous issues due to math low-precision in WASM implementation
|
||||
- Full **TS** type definitions for all modules and imports
|
||||
- Focus on simplified demo
|
||||
<https://vladmandic.github.io/human/demo/typescript/>
|
||||
|
|
|
@ -446,9 +446,9 @@ function GLImageFilter() {
|
|||
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
||||
return { fbo, texture };
|
||||
}
|
||||
function getTempFramebuffer(index) {
|
||||
tempFramebuffers[index] = tempFramebuffers[index] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);
|
||||
return tempFramebuffers[index];
|
||||
function getTempFramebuffer(index2) {
|
||||
tempFramebuffers[index2] = tempFramebuffers[index2] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);
|
||||
return tempFramebuffers[index2];
|
||||
}
|
||||
function draw2(flags = 0) {
|
||||
if (!currentProgram)
|
||||
|
@ -1304,7 +1304,7 @@ var Env = class {
|
|||
var env = new Env();
|
||||
|
||||
// package.json
|
||||
var version10 = "2.5.0";
|
||||
var version10 = "2.5.1";
|
||||
|
||||
// src/gear/gear-agegenderrace.ts
|
||||
var model;
|
||||
|
@ -4773,21 +4773,25 @@ function transformRawCoords(coordsRaw, box4, angle, rotationMatrix, inputSize8)
|
|||
Math.round(coord[2] || 0)
|
||||
]);
|
||||
}
|
||||
function correctFaceRotation(box4, input, inputSize8) {
|
||||
function correctFaceRotation(rotate, box4, input, inputSize8) {
|
||||
const symmetryLine = box4.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
|
||||
const angle = computeRotation(box4.landmarks[symmetryLine[0]], box4.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2;
|
||||
let rotationMatrix;
|
||||
let angle = 0;
|
||||
let rotationMatrix = fixedRotationMatrix;
|
||||
let face5;
|
||||
if (largeAngle) {
|
||||
const faceCenter = getBoxCenter({ startPoint: box4.startPoint, endPoint: box4.endPoint });
|
||||
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
|
||||
const rotated = tfjs_esm_exports.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
|
||||
rotationMatrix = buildRotationMatrix(-angle, faceCenter);
|
||||
face5 = cutBoxFromImageAndResize(box4, rotated, [inputSize8, inputSize8]);
|
||||
tfjs_esm_exports.dispose(rotated);
|
||||
if (rotate && env.kernels.includes("rotatewithoffset")) {
|
||||
angle = computeRotation(box4.landmarks[symmetryLine[0]], box4.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2;
|
||||
if (largeAngle) {
|
||||
const center = getBoxCenter({ startPoint: box4.startPoint, endPoint: box4.endPoint });
|
||||
const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]];
|
||||
const rotated = tfjs_esm_exports.image.rotateWithOffset(input, angle, 0, centerRaw);
|
||||
rotationMatrix = buildRotationMatrix(-angle, center);
|
||||
face5 = cutBoxFromImageAndResize(box4, rotated, [inputSize8, inputSize8]);
|
||||
tfjs_esm_exports.dispose(rotated);
|
||||
} else {
|
||||
face5 = cutBoxFromImageAndResize(box4, input, [inputSize8, inputSize8]);
|
||||
}
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face5 = cutBoxFromImageAndResize(box4, input, [inputSize8, inputSize8]);
|
||||
}
|
||||
return [angle, rotationMatrix, face5];
|
||||
|
@ -5501,11 +5505,11 @@ function replaceRawCoordinates(rawCoords, newCoords, prefix, keys) {
|
|||
const originalIndices = meshAnnotations[`${prefix}${key}`];
|
||||
if (!keys || keys.includes(key)) {
|
||||
for (let j = 0; j < indices.length; j++) {
|
||||
const index = indices[j];
|
||||
const index2 = indices[j];
|
||||
rawCoords[originalIndices[j]] = [
|
||||
newCoords[index][0],
|
||||
newCoords[index][1],
|
||||
(newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2
|
||||
newCoords[index2][0],
|
||||
newCoords[index2][1],
|
||||
(newCoords[index2][2] + rawCoords[originalIndices[j]][2]) / 2
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -5602,7 +5606,7 @@ var skipped7 = Number.MAX_SAFE_INTEGER;
|
|||
var lastTime6 = 0;
|
||||
var enlargeFact = 1.6;
|
||||
async function predict6(input, config3) {
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h;
|
||||
const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6;
|
||||
const skipFrame = skipped7 < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0);
|
||||
if (!config3.skipAllowed || !skipTime || !skipFrame || boxCache.length === 0) {
|
||||
|
@ -5640,19 +5644,14 @@ async function predict6(input, config3) {
|
|||
faceScore: 0,
|
||||
annotations: {}
|
||||
};
|
||||
if (((_c = config3.face.detector) == null ? void 0 : _c.rotation) && ((_d = config3.face.mesh) == null ? void 0 : _d.enabled) && env.kernels.includes("rotatewithoffset")) {
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation(box4, input, inputSize5);
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face5.tensor = cutBoxFromImageAndResize(box4, input, ((_e = config3.face.mesh) == null ? void 0 : _e.enabled) ? [inputSize5, inputSize5] : [size(), size()]);
|
||||
}
|
||||
if ((_f = config3 == null ? void 0 : config3.filter) == null ? void 0 : _f.equalization) {
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation(false, box4, input, inputSize5);
|
||||
if ((_d = config3 == null ? void 0 : config3.filter) == null ? void 0 : _d.equalization) {
|
||||
const equilized = await histogramEqualization(face5.tensor);
|
||||
tfjs_esm_exports.dispose(face5.tensor);
|
||||
face5.tensor = equilized;
|
||||
}
|
||||
face5.boxScore = Math.round(100 * box4.confidence) / 100;
|
||||
if (!((_g = config3.face.mesh) == null ? void 0 : _g.enabled)) {
|
||||
if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled)) {
|
||||
face5.box = getClampedBox(box4, input);
|
||||
face5.boxRaw = getRawBox(box4, input);
|
||||
face5.boxScore = Math.round(100 * box4.confidence || 0) / 100;
|
||||
|
@ -5674,20 +5673,22 @@ async function predict6(input, config3) {
|
|||
const coordsReshaped = tfjs_esm_exports.reshape(contourCoords, [-1, 3]);
|
||||
let rawCoords = await coordsReshaped.array();
|
||||
tfjs_esm_exports.dispose([contourCoords, coordsReshaped, confidence, contours]);
|
||||
if (face5.faceScore < (((_h = config3.face.detector) == null ? void 0 : _h.minConfidence) || 1)) {
|
||||
if (face5.faceScore < (((_f = config3.face.detector) == null ? void 0 : _f.minConfidence) || 1)) {
|
||||
box4.confidence = face5.faceScore;
|
||||
} else {
|
||||
if ((_i = config3.face.iris) == null ? void 0 : _i.enabled)
|
||||
if ((_g = config3.face.iris) == null ? void 0 : _g.enabled)
|
||||
rawCoords = await augmentIris(rawCoords, face5.tensor, config3, inputSize5);
|
||||
face5.mesh = transformRawCoords(rawCoords, box4, angle, rotationMatrix, inputSize5);
|
||||
face5.meshRaw = face5.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / inputSize5]);
|
||||
for (const key of Object.keys(meshAnnotations))
|
||||
face5.annotations[key] = meshAnnotations[key].map((index) => face5.mesh[index]);
|
||||
face5.annotations[key] = meshAnnotations[key].map((index2) => face5.mesh[index2]);
|
||||
box4 = squarifyBox(enlargeBox(calculateLandmarksBoundingBox(face5.mesh), enlargeFact));
|
||||
face5.box = getClampedBox(box4, input);
|
||||
face5.boxRaw = getRawBox(box4, input);
|
||||
face5.score = face5.faceScore;
|
||||
newCache.push(box4);
|
||||
tfjs_esm_exports.dispose(face5.tensor);
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation((_h = config3.face.detector) == null ? void 0 : _h.rotation, box4, input, inputSize5);
|
||||
}
|
||||
}
|
||||
faces.push(face5);
|
||||
|
@ -8884,11 +8885,11 @@ var HandDetector = class {
|
|||
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
||||
return res;
|
||||
}
|
||||
normalizeLandmarks(rawPalmLandmarks, index) {
|
||||
normalizeLandmarks(rawPalmLandmarks, index2) {
|
||||
const t = {};
|
||||
t.reshape = tfjs_esm_exports.reshape(rawPalmLandmarks, [-1, 7, 2]);
|
||||
t.div = tfjs_esm_exports.div(t.reshape, this.inputSizeTensor);
|
||||
t.landmarks = tfjs_esm_exports.add(t.div, this.anchors[index]);
|
||||
t.landmarks = tfjs_esm_exports.add(t.div, this.anchors[index2]);
|
||||
const res = tfjs_esm_exports.mul(t.landmarks, this.inputSizeTensor);
|
||||
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
||||
return res;
|
||||
|
@ -8909,17 +8910,17 @@ var HandDetector = class {
|
|||
t.nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
for (const index2 of nms) {
|
||||
const p = {};
|
||||
p.box = tfjs_esm_exports.slice(t.norm, [index, 0], [1, -1]);
|
||||
p.slice = tfjs_esm_exports.slice(t.predictions, [index, 5], [1, 14]);
|
||||
p.norm = this.normalizeLandmarks(p.slice, index);
|
||||
p.box = tfjs_esm_exports.slice(t.norm, [index2, 0], [1, -1]);
|
||||
p.slice = tfjs_esm_exports.slice(t.predictions, [index2, 5], [1, 14]);
|
||||
p.norm = this.normalizeLandmarks(p.slice, index2);
|
||||
p.palmLandmarks = tfjs_esm_exports.reshape(p.norm, [-1, 2]);
|
||||
const box4 = await p.box.data();
|
||||
const startPoint = box4.slice(0, 2);
|
||||
const endPoint = box4.slice(2, 4);
|
||||
const palmLandmarks = await p.palmLandmarks.array();
|
||||
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index] };
|
||||
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] };
|
||||
const scaled = scaleBoxCoordinates2(hand3, [input.shape[2] / this.inputSize, input.shape[1] / this.inputSize]);
|
||||
hands.push(scaled);
|
||||
Object.keys(p).forEach((tensor3) => tfjs_esm_exports.dispose(p[tensor3]));
|
||||
|
@ -9126,17 +9127,17 @@ var FingerGesture = class {
|
|||
this.weights = [1, 1, 1, 1, 1];
|
||||
this.weightsRelative = [1, 1, 1, 1, 1];
|
||||
}
|
||||
addCurl(finger, curl, confidence) {
|
||||
curl(finger, curl, confidence) {
|
||||
if (typeof this.curls[finger] === "undefined")
|
||||
this.curls[finger] = [];
|
||||
this.curls[finger].push([curl, confidence]);
|
||||
}
|
||||
addDirection(finger, position, confidence) {
|
||||
direction(finger, position, confidence) {
|
||||
if (!this.directions[finger])
|
||||
this.directions[finger] = [];
|
||||
this.directions[finger].push([position, confidence]);
|
||||
}
|
||||
setWeight(finger, weight) {
|
||||
weight(finger, weight) {
|
||||
this.weights[finger] = weight;
|
||||
const total = this.weights.reduce((a, b) => a + b, 0);
|
||||
this.weightsRelative = this.weights.map((el) => el * 5 / total);
|
||||
|
@ -9176,38 +9177,63 @@ var FingerGesture = class {
|
|||
};
|
||||
|
||||
// src/hand/fingergesture.ts
|
||||
var { thumb, index, middle, ring, pinky } = Finger;
|
||||
var { none, half, full } = FingerCurl;
|
||||
var { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;
|
||||
var ThumbsUp = new FingerGesture("thumbs up");
|
||||
ThumbsUp.addCurl(Finger.thumb, FingerCurl.none, 1);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.verticalUp, 1);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 0.25);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpRight, 0.25);
|
||||
ThumbsUp.curl(thumb, none, 1);
|
||||
ThumbsUp.direction(thumb, verticalUp, 1);
|
||||
ThumbsUp.direction(thumb, diagonalUpLeft, 0.25);
|
||||
ThumbsUp.direction(thumb, diagonalUpRight, 0.25);
|
||||
for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {
|
||||
ThumbsUp.addCurl(finger, FingerCurl.full, 1);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalLeft, 1);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalRight, 1);
|
||||
ThumbsUp.curl(finger, full, 1);
|
||||
ThumbsUp.direction(finger, horizontalLeft, 1);
|
||||
ThumbsUp.direction(finger, horizontalRight, 1);
|
||||
}
|
||||
var Victory = new FingerGesture("victory");
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.half, 0.5);
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.none, 0.5);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.verticalUp, 1);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addCurl(Finger.index, FingerCurl.none, 1);
|
||||
Victory.addDirection(Finger.index, FingerDirection.verticalUp, 0.75);
|
||||
Victory.addDirection(Finger.index, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addCurl(Finger.middle, FingerCurl.none, 1);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.verticalUp, 1);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.diagonalUpLeft, 0.75);
|
||||
Victory.addCurl(Finger.ring, FingerCurl.full, 1);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.addCurl(Finger.pinky, FingerCurl.full, 1);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.setWeight(Finger.index, 2);
|
||||
Victory.setWeight(Finger.middle, 2);
|
||||
var fingergesture_default = [ThumbsUp, Victory];
|
||||
Victory.curl(thumb, half, 0.5);
|
||||
Victory.curl(thumb, none, 0.5);
|
||||
Victory.direction(thumb, verticalUp, 1);
|
||||
Victory.direction(thumb, diagonalUpLeft, 1);
|
||||
Victory.curl(index, none, 1);
|
||||
Victory.direction(index, verticalUp, 0.75);
|
||||
Victory.direction(index, diagonalUpLeft, 1);
|
||||
Victory.curl(middle, none, 1);
|
||||
Victory.direction(middle, verticalUp, 1);
|
||||
Victory.direction(middle, diagonalUpLeft, 0.75);
|
||||
Victory.curl(ring, full, 1);
|
||||
Victory.direction(ring, verticalUp, 0.2);
|
||||
Victory.direction(ring, diagonalUpLeft, 1);
|
||||
Victory.direction(ring, horizontalLeft, 0.2);
|
||||
Victory.curl(pinky, full, 1);
|
||||
Victory.direction(pinky, verticalUp, 0.2);
|
||||
Victory.direction(pinky, diagonalUpLeft, 1);
|
||||
Victory.direction(pinky, horizontalLeft, 0.2);
|
||||
Victory.weight(index, 2);
|
||||
Victory.weight(middle, 2);
|
||||
var Point = new FingerGesture("point");
|
||||
Point.curl(thumb, full, 1);
|
||||
Point.curl(index, none, 0.5);
|
||||
Point.curl(middle, full, 0.5);
|
||||
Point.curl(ring, full, 0.5);
|
||||
Point.curl(pinky, full, 0.5);
|
||||
Point.weight(index, 2);
|
||||
Point.weight(middle, 2);
|
||||
var MiddleFinger = new FingerGesture("middle finger");
|
||||
MiddleFinger.curl(thumb, none, 1);
|
||||
MiddleFinger.curl(index, full, 0.5);
|
||||
MiddleFinger.curl(middle, full, 0.5);
|
||||
MiddleFinger.curl(ring, full, 0.5);
|
||||
MiddleFinger.curl(pinky, full, 0.5);
|
||||
MiddleFinger.weight(index, 2);
|
||||
MiddleFinger.weight(middle, 2);
|
||||
var OpenPalm = new FingerGesture("open palm");
|
||||
OpenPalm.curl(thumb, none, 0.75);
|
||||
OpenPalm.curl(index, none, 0.75);
|
||||
OpenPalm.curl(middle, none, 0.75);
|
||||
OpenPalm.curl(ring, none, 0.75);
|
||||
OpenPalm.curl(pinky, none, 0.75);
|
||||
var fingergesture_default = [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];
|
||||
|
||||
// src/hand/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
|
@ -9474,7 +9500,7 @@ async function predict8(input, config3) {
|
|||
const annotations2 = {};
|
||||
if (predictions[i].landmarks) {
|
||||
for (const key of Object.keys(meshAnnotations2)) {
|
||||
annotations2[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
||||
annotations2[key] = meshAnnotations2[key].map((index2) => predictions[i].landmarks[index2]);
|
||||
}
|
||||
}
|
||||
const keypoints = predictions[i].landmarks;
|
||||
|
@ -9596,7 +9622,7 @@ var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "Stateful
|
|||
var inputSize6 = [[0, 0], [0, 0]];
|
||||
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
|
||||
var faceIndex = 4;
|
||||
var boxExpandFact = 1.7;
|
||||
var boxExpandFact = 1.6;
|
||||
var maxDetectorResolution = 512;
|
||||
var detectorExpandFact = 1.4;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
|
@ -9727,7 +9753,7 @@ async function detectFingers(input, h, config3) {
|
|||
]);
|
||||
hand3.landmarks = analyze(hand3.keypoints);
|
||||
for (const key of Object.keys(fingerMap)) {
|
||||
hand3.annotations[key] = fingerMap[key].map((index) => hand3.landmarks && hand3.keypoints[index] ? hand3.keypoints[index] : null);
|
||||
hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null);
|
||||
}
|
||||
}
|
||||
Object.keys(t).forEach((tensor3) => tfjs_esm_exports.dispose(t[tensor3]));
|
||||
|
@ -11159,7 +11185,7 @@ async function face(inCanvas2, result, drawOptions) {
|
|||
TRI468[i * 3 + 0],
|
||||
TRI468[i * 3 + 1],
|
||||
TRI468[i * 3 + 2]
|
||||
].map((index) => f.mesh[index]);
|
||||
].map((index2) => f.mesh[index2]);
|
||||
lines(ctx, points, localOptions);
|
||||
}
|
||||
}
|
||||
|
@ -11873,18 +11899,18 @@ function match2(descriptor, descriptors, options3 = { order: 2, multiplier: 20,
|
|||
return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 };
|
||||
}
|
||||
let best = Number.MAX_SAFE_INTEGER;
|
||||
let index = -1;
|
||||
let index2 = -1;
|
||||
for (let i = 0; i < descriptors.length; i++) {
|
||||
const res = distance(descriptor, descriptors[i], options3);
|
||||
if (res < best) {
|
||||
best = res;
|
||||
index = i;
|
||||
index2 = i;
|
||||
}
|
||||
if (best < (options3.threshold || 0))
|
||||
break;
|
||||
}
|
||||
best = !options3.order || options3.order === 2 ? Math.sqrt(best) : best ** (1 / options3.order);
|
||||
return { index, distance: best, similarity: Math.max(0, 100 - best) / 100 };
|
||||
return { index: index2, distance: best, similarity: Math.max(0, 100 - best) / 100 };
|
||||
}
|
||||
|
||||
// src/util/persons.ts
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -455,9 +455,9 @@ function GLImageFilter() {
|
|||
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
||||
return { fbo, texture };
|
||||
}
|
||||
function getTempFramebuffer(index) {
|
||||
tempFramebuffers[index] = tempFramebuffers[index] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);
|
||||
return tempFramebuffers[index];
|
||||
function getTempFramebuffer(index2) {
|
||||
tempFramebuffers[index2] = tempFramebuffers[index2] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);
|
||||
return tempFramebuffers[index2];
|
||||
}
|
||||
function draw2(flags = 0) {
|
||||
if (!currentProgram)
|
||||
|
@ -1317,7 +1317,7 @@ var env = new Env();
|
|||
var tf29 = __toModule(require_tfjs_esm());
|
||||
|
||||
// package.json
|
||||
var version = "2.5.0";
|
||||
var version = "2.5.1";
|
||||
|
||||
// src/tfjs/humangl.ts
|
||||
var tf25 = __toModule(require_tfjs_esm());
|
||||
|
@ -4797,21 +4797,25 @@ function transformRawCoords(coordsRaw, box4, angle, rotationMatrix, inputSize8)
|
|||
Math.round(coord[2] || 0)
|
||||
]);
|
||||
}
|
||||
function correctFaceRotation(box4, input, inputSize8) {
|
||||
function correctFaceRotation(rotate, box4, input, inputSize8) {
|
||||
const symmetryLine = box4.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
|
||||
const angle = computeRotation(box4.landmarks[symmetryLine[0]], box4.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2;
|
||||
let rotationMatrix;
|
||||
let angle = 0;
|
||||
let rotationMatrix = fixedRotationMatrix;
|
||||
let face5;
|
||||
if (largeAngle) {
|
||||
const faceCenter = getBoxCenter({ startPoint: box4.startPoint, endPoint: box4.endPoint });
|
||||
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
|
||||
const rotated = tf6.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
|
||||
rotationMatrix = buildRotationMatrix(-angle, faceCenter);
|
||||
face5 = cutBoxFromImageAndResize(box4, rotated, [inputSize8, inputSize8]);
|
||||
tf6.dispose(rotated);
|
||||
if (rotate && env.kernels.includes("rotatewithoffset")) {
|
||||
angle = computeRotation(box4.landmarks[symmetryLine[0]], box4.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2;
|
||||
if (largeAngle) {
|
||||
const center = getBoxCenter({ startPoint: box4.startPoint, endPoint: box4.endPoint });
|
||||
const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]];
|
||||
const rotated = tf6.image.rotateWithOffset(input, angle, 0, centerRaw);
|
||||
rotationMatrix = buildRotationMatrix(-angle, center);
|
||||
face5 = cutBoxFromImageAndResize(box4, rotated, [inputSize8, inputSize8]);
|
||||
tf6.dispose(rotated);
|
||||
} else {
|
||||
face5 = cutBoxFromImageAndResize(box4, input, [inputSize8, inputSize8]);
|
||||
}
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face5 = cutBoxFromImageAndResize(box4, input, [inputSize8, inputSize8]);
|
||||
}
|
||||
return [angle, rotationMatrix, face5];
|
||||
|
@ -5539,11 +5543,11 @@ function replaceRawCoordinates(rawCoords, newCoords, prefix, keys) {
|
|||
const originalIndices = meshAnnotations[`${prefix}${key}`];
|
||||
if (!keys || keys.includes(key)) {
|
||||
for (let j = 0; j < indices.length; j++) {
|
||||
const index = indices[j];
|
||||
const index2 = indices[j];
|
||||
rawCoords[originalIndices[j]] = [
|
||||
newCoords[index][0],
|
||||
newCoords[index][1],
|
||||
(newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2
|
||||
newCoords[index2][0],
|
||||
newCoords[index2][1],
|
||||
(newCoords[index2][2] + rawCoords[originalIndices[j]][2]) / 2
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -5640,7 +5644,7 @@ var skipped7 = Number.MAX_SAFE_INTEGER;
|
|||
var lastTime6 = 0;
|
||||
var enlargeFact = 1.6;
|
||||
async function predict6(input, config3) {
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h;
|
||||
const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6;
|
||||
const skipFrame = skipped7 < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0);
|
||||
if (!config3.skipAllowed || !skipTime || !skipFrame || boxCache.length === 0) {
|
||||
|
@ -5678,19 +5682,14 @@ async function predict6(input, config3) {
|
|||
faceScore: 0,
|
||||
annotations: {}
|
||||
};
|
||||
if (((_c = config3.face.detector) == null ? void 0 : _c.rotation) && ((_d = config3.face.mesh) == null ? void 0 : _d.enabled) && env.kernels.includes("rotatewithoffset")) {
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation(box4, input, inputSize5);
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face5.tensor = cutBoxFromImageAndResize(box4, input, ((_e = config3.face.mesh) == null ? void 0 : _e.enabled) ? [inputSize5, inputSize5] : [size(), size()]);
|
||||
}
|
||||
if ((_f = config3 == null ? void 0 : config3.filter) == null ? void 0 : _f.equalization) {
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation(false, box4, input, inputSize5);
|
||||
if ((_d = config3 == null ? void 0 : config3.filter) == null ? void 0 : _d.equalization) {
|
||||
const equilized = await histogramEqualization(face5.tensor);
|
||||
tf13.dispose(face5.tensor);
|
||||
face5.tensor = equilized;
|
||||
}
|
||||
face5.boxScore = Math.round(100 * box4.confidence) / 100;
|
||||
if (!((_g = config3.face.mesh) == null ? void 0 : _g.enabled)) {
|
||||
if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled)) {
|
||||
face5.box = getClampedBox(box4, input);
|
||||
face5.boxRaw = getRawBox(box4, input);
|
||||
face5.boxScore = Math.round(100 * box4.confidence || 0) / 100;
|
||||
|
@ -5712,20 +5711,22 @@ async function predict6(input, config3) {
|
|||
const coordsReshaped = tf13.reshape(contourCoords, [-1, 3]);
|
||||
let rawCoords = await coordsReshaped.array();
|
||||
tf13.dispose([contourCoords, coordsReshaped, confidence, contours]);
|
||||
if (face5.faceScore < (((_h = config3.face.detector) == null ? void 0 : _h.minConfidence) || 1)) {
|
||||
if (face5.faceScore < (((_f = config3.face.detector) == null ? void 0 : _f.minConfidence) || 1)) {
|
||||
box4.confidence = face5.faceScore;
|
||||
} else {
|
||||
if ((_i = config3.face.iris) == null ? void 0 : _i.enabled)
|
||||
if ((_g = config3.face.iris) == null ? void 0 : _g.enabled)
|
||||
rawCoords = await augmentIris(rawCoords, face5.tensor, config3, inputSize5);
|
||||
face5.mesh = transformRawCoords(rawCoords, box4, angle, rotationMatrix, inputSize5);
|
||||
face5.meshRaw = face5.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / inputSize5]);
|
||||
for (const key of Object.keys(meshAnnotations))
|
||||
face5.annotations[key] = meshAnnotations[key].map((index) => face5.mesh[index]);
|
||||
face5.annotations[key] = meshAnnotations[key].map((index2) => face5.mesh[index2]);
|
||||
box4 = squarifyBox(enlargeBox(calculateLandmarksBoundingBox(face5.mesh), enlargeFact));
|
||||
face5.box = getClampedBox(box4, input);
|
||||
face5.boxRaw = getRawBox(box4, input);
|
||||
face5.score = face5.faceScore;
|
||||
newCache.push(box4);
|
||||
tf13.dispose(face5.tensor);
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation((_h = config3.face.detector) == null ? void 0 : _h.rotation, box4, input, inputSize5);
|
||||
}
|
||||
}
|
||||
faces.push(face5);
|
||||
|
@ -8930,11 +8931,11 @@ var HandDetector = class {
|
|||
Object.keys(t).forEach((tensor3) => tf16.dispose(t[tensor3]));
|
||||
return res;
|
||||
}
|
||||
normalizeLandmarks(rawPalmLandmarks, index) {
|
||||
normalizeLandmarks(rawPalmLandmarks, index2) {
|
||||
const t = {};
|
||||
t.reshape = tf16.reshape(rawPalmLandmarks, [-1, 7, 2]);
|
||||
t.div = tf16.div(t.reshape, this.inputSizeTensor);
|
||||
t.landmarks = tf16.add(t.div, this.anchors[index]);
|
||||
t.landmarks = tf16.add(t.div, this.anchors[index2]);
|
||||
const res = tf16.mul(t.landmarks, this.inputSizeTensor);
|
||||
Object.keys(t).forEach((tensor3) => tf16.dispose(t[tensor3]));
|
||||
return res;
|
||||
|
@ -8955,17 +8956,17 @@ var HandDetector = class {
|
|||
t.nms = await tf16.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
for (const index2 of nms) {
|
||||
const p = {};
|
||||
p.box = tf16.slice(t.norm, [index, 0], [1, -1]);
|
||||
p.slice = tf16.slice(t.predictions, [index, 5], [1, 14]);
|
||||
p.norm = this.normalizeLandmarks(p.slice, index);
|
||||
p.box = tf16.slice(t.norm, [index2, 0], [1, -1]);
|
||||
p.slice = tf16.slice(t.predictions, [index2, 5], [1, 14]);
|
||||
p.norm = this.normalizeLandmarks(p.slice, index2);
|
||||
p.palmLandmarks = tf16.reshape(p.norm, [-1, 2]);
|
||||
const box4 = await p.box.data();
|
||||
const startPoint = box4.slice(0, 2);
|
||||
const endPoint = box4.slice(2, 4);
|
||||
const palmLandmarks = await p.palmLandmarks.array();
|
||||
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index] };
|
||||
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] };
|
||||
const scaled = scaleBoxCoordinates2(hand3, [input.shape[2] / this.inputSize, input.shape[1] / this.inputSize]);
|
||||
hands.push(scaled);
|
||||
Object.keys(p).forEach((tensor3) => tf16.dispose(p[tensor3]));
|
||||
|
@ -9173,17 +9174,17 @@ var FingerGesture = class {
|
|||
this.weights = [1, 1, 1, 1, 1];
|
||||
this.weightsRelative = [1, 1, 1, 1, 1];
|
||||
}
|
||||
addCurl(finger, curl, confidence) {
|
||||
curl(finger, curl, confidence) {
|
||||
if (typeof this.curls[finger] === "undefined")
|
||||
this.curls[finger] = [];
|
||||
this.curls[finger].push([curl, confidence]);
|
||||
}
|
||||
addDirection(finger, position, confidence) {
|
||||
direction(finger, position, confidence) {
|
||||
if (!this.directions[finger])
|
||||
this.directions[finger] = [];
|
||||
this.directions[finger].push([position, confidence]);
|
||||
}
|
||||
setWeight(finger, weight) {
|
||||
weight(finger, weight) {
|
||||
this.weights[finger] = weight;
|
||||
const total = this.weights.reduce((a, b) => a + b, 0);
|
||||
this.weightsRelative = this.weights.map((el) => el * 5 / total);
|
||||
|
@ -9223,38 +9224,63 @@ var FingerGesture = class {
|
|||
};
|
||||
|
||||
// src/hand/fingergesture.ts
|
||||
var { thumb, index, middle, ring, pinky } = Finger;
|
||||
var { none, half, full } = FingerCurl;
|
||||
var { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;
|
||||
var ThumbsUp = new FingerGesture("thumbs up");
|
||||
ThumbsUp.addCurl(Finger.thumb, FingerCurl.none, 1);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.verticalUp, 1);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 0.25);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpRight, 0.25);
|
||||
ThumbsUp.curl(thumb, none, 1);
|
||||
ThumbsUp.direction(thumb, verticalUp, 1);
|
||||
ThumbsUp.direction(thumb, diagonalUpLeft, 0.25);
|
||||
ThumbsUp.direction(thumb, diagonalUpRight, 0.25);
|
||||
for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {
|
||||
ThumbsUp.addCurl(finger, FingerCurl.full, 1);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalLeft, 1);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalRight, 1);
|
||||
ThumbsUp.curl(finger, full, 1);
|
||||
ThumbsUp.direction(finger, horizontalLeft, 1);
|
||||
ThumbsUp.direction(finger, horizontalRight, 1);
|
||||
}
|
||||
var Victory = new FingerGesture("victory");
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.half, 0.5);
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.none, 0.5);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.verticalUp, 1);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addCurl(Finger.index, FingerCurl.none, 1);
|
||||
Victory.addDirection(Finger.index, FingerDirection.verticalUp, 0.75);
|
||||
Victory.addDirection(Finger.index, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addCurl(Finger.middle, FingerCurl.none, 1);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.verticalUp, 1);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.diagonalUpLeft, 0.75);
|
||||
Victory.addCurl(Finger.ring, FingerCurl.full, 1);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.addCurl(Finger.pinky, FingerCurl.full, 1);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.setWeight(Finger.index, 2);
|
||||
Victory.setWeight(Finger.middle, 2);
|
||||
var fingergesture_default = [ThumbsUp, Victory];
|
||||
Victory.curl(thumb, half, 0.5);
|
||||
Victory.curl(thumb, none, 0.5);
|
||||
Victory.direction(thumb, verticalUp, 1);
|
||||
Victory.direction(thumb, diagonalUpLeft, 1);
|
||||
Victory.curl(index, none, 1);
|
||||
Victory.direction(index, verticalUp, 0.75);
|
||||
Victory.direction(index, diagonalUpLeft, 1);
|
||||
Victory.curl(middle, none, 1);
|
||||
Victory.direction(middle, verticalUp, 1);
|
||||
Victory.direction(middle, diagonalUpLeft, 0.75);
|
||||
Victory.curl(ring, full, 1);
|
||||
Victory.direction(ring, verticalUp, 0.2);
|
||||
Victory.direction(ring, diagonalUpLeft, 1);
|
||||
Victory.direction(ring, horizontalLeft, 0.2);
|
||||
Victory.curl(pinky, full, 1);
|
||||
Victory.direction(pinky, verticalUp, 0.2);
|
||||
Victory.direction(pinky, diagonalUpLeft, 1);
|
||||
Victory.direction(pinky, horizontalLeft, 0.2);
|
||||
Victory.weight(index, 2);
|
||||
Victory.weight(middle, 2);
|
||||
var Point = new FingerGesture("point");
|
||||
Point.curl(thumb, full, 1);
|
||||
Point.curl(index, none, 0.5);
|
||||
Point.curl(middle, full, 0.5);
|
||||
Point.curl(ring, full, 0.5);
|
||||
Point.curl(pinky, full, 0.5);
|
||||
Point.weight(index, 2);
|
||||
Point.weight(middle, 2);
|
||||
var MiddleFinger = new FingerGesture("middle finger");
|
||||
MiddleFinger.curl(thumb, none, 1);
|
||||
MiddleFinger.curl(index, full, 0.5);
|
||||
MiddleFinger.curl(middle, full, 0.5);
|
||||
MiddleFinger.curl(ring, full, 0.5);
|
||||
MiddleFinger.curl(pinky, full, 0.5);
|
||||
MiddleFinger.weight(index, 2);
|
||||
MiddleFinger.weight(middle, 2);
|
||||
var OpenPalm = new FingerGesture("open palm");
|
||||
OpenPalm.curl(thumb, none, 0.75);
|
||||
OpenPalm.curl(index, none, 0.75);
|
||||
OpenPalm.curl(middle, none, 0.75);
|
||||
OpenPalm.curl(ring, none, 0.75);
|
||||
OpenPalm.curl(pinky, none, 0.75);
|
||||
var fingergesture_default = [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];
|
||||
|
||||
// src/hand/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
|
@ -9521,7 +9547,7 @@ async function predict8(input, config3) {
|
|||
const annotations2 = {};
|
||||
if (predictions[i].landmarks) {
|
||||
for (const key of Object.keys(meshAnnotations2)) {
|
||||
annotations2[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
||||
annotations2[key] = meshAnnotations2[key].map((index2) => predictions[i].landmarks[index2]);
|
||||
}
|
||||
}
|
||||
const keypoints = predictions[i].landmarks;
|
||||
|
@ -9644,7 +9670,7 @@ var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "Stateful
|
|||
var inputSize6 = [[0, 0], [0, 0]];
|
||||
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
|
||||
var faceIndex = 4;
|
||||
var boxExpandFact = 1.7;
|
||||
var boxExpandFact = 1.6;
|
||||
var maxDetectorResolution = 512;
|
||||
var detectorExpandFact = 1.4;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
|
@ -9775,7 +9801,7 @@ async function detectFingers(input, h, config3) {
|
|||
]);
|
||||
hand3.landmarks = analyze(hand3.keypoints);
|
||||
for (const key of Object.keys(fingerMap)) {
|
||||
hand3.annotations[key] = fingerMap[key].map((index) => hand3.landmarks && hand3.keypoints[index] ? hand3.keypoints[index] : null);
|
||||
hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null);
|
||||
}
|
||||
}
|
||||
Object.keys(t).forEach((tensor3) => tf19.dispose(t[tensor3]));
|
||||
|
@ -11217,7 +11243,7 @@ async function face(inCanvas2, result, drawOptions) {
|
|||
TRI468[i * 3 + 0],
|
||||
TRI468[i * 3 + 1],
|
||||
TRI468[i * 3 + 2]
|
||||
].map((index) => f.mesh[index]);
|
||||
].map((index2) => f.mesh[index2]);
|
||||
lines(ctx, points, localOptions);
|
||||
}
|
||||
}
|
||||
|
@ -11934,18 +11960,18 @@ function match2(descriptor, descriptors, options3 = { order: 2, multiplier: 20,
|
|||
return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 };
|
||||
}
|
||||
let best = Number.MAX_SAFE_INTEGER;
|
||||
let index = -1;
|
||||
let index2 = -1;
|
||||
for (let i = 0; i < descriptors.length; i++) {
|
||||
const res = distance(descriptor, descriptors[i], options3);
|
||||
if (res < best) {
|
||||
best = res;
|
||||
index = i;
|
||||
index2 = i;
|
||||
}
|
||||
if (best < (options3.threshold || 0))
|
||||
break;
|
||||
}
|
||||
best = !options3.order || options3.order === 2 ? Math.sqrt(best) : best ** (1 / options3.order);
|
||||
return { index, distance: best, similarity: Math.max(0, 100 - best) / 100 };
|
||||
return { index: index2, distance: best, similarity: Math.max(0, 100 - best) / 100 };
|
||||
}
|
||||
|
||||
// src/util/persons.ts
|
||||
|
|
|
@ -456,9 +456,9 @@ function GLImageFilter() {
|
|||
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
||||
return { fbo, texture };
|
||||
}
|
||||
function getTempFramebuffer(index) {
|
||||
tempFramebuffers[index] = tempFramebuffers[index] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);
|
||||
return tempFramebuffers[index];
|
||||
function getTempFramebuffer(index2) {
|
||||
tempFramebuffers[index2] = tempFramebuffers[index2] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);
|
||||
return tempFramebuffers[index2];
|
||||
}
|
||||
function draw2(flags = 0) {
|
||||
if (!currentProgram)
|
||||
|
@ -1318,7 +1318,7 @@ var env = new Env();
|
|||
var tf29 = __toModule(require_tfjs_esm());
|
||||
|
||||
// package.json
|
||||
var version = "2.5.0";
|
||||
var version = "2.5.1";
|
||||
|
||||
// src/tfjs/humangl.ts
|
||||
var tf25 = __toModule(require_tfjs_esm());
|
||||
|
@ -4798,21 +4798,25 @@ function transformRawCoords(coordsRaw, box4, angle, rotationMatrix, inputSize8)
|
|||
Math.round(coord[2] || 0)
|
||||
]);
|
||||
}
|
||||
function correctFaceRotation(box4, input, inputSize8) {
|
||||
function correctFaceRotation(rotate, box4, input, inputSize8) {
|
||||
const symmetryLine = box4.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
|
||||
const angle = computeRotation(box4.landmarks[symmetryLine[0]], box4.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2;
|
||||
let rotationMatrix;
|
||||
let angle = 0;
|
||||
let rotationMatrix = fixedRotationMatrix;
|
||||
let face5;
|
||||
if (largeAngle) {
|
||||
const faceCenter = getBoxCenter({ startPoint: box4.startPoint, endPoint: box4.endPoint });
|
||||
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
|
||||
const rotated = tf6.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
|
||||
rotationMatrix = buildRotationMatrix(-angle, faceCenter);
|
||||
face5 = cutBoxFromImageAndResize(box4, rotated, [inputSize8, inputSize8]);
|
||||
tf6.dispose(rotated);
|
||||
if (rotate && env.kernels.includes("rotatewithoffset")) {
|
||||
angle = computeRotation(box4.landmarks[symmetryLine[0]], box4.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2;
|
||||
if (largeAngle) {
|
||||
const center = getBoxCenter({ startPoint: box4.startPoint, endPoint: box4.endPoint });
|
||||
const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]];
|
||||
const rotated = tf6.image.rotateWithOffset(input, angle, 0, centerRaw);
|
||||
rotationMatrix = buildRotationMatrix(-angle, center);
|
||||
face5 = cutBoxFromImageAndResize(box4, rotated, [inputSize8, inputSize8]);
|
||||
tf6.dispose(rotated);
|
||||
} else {
|
||||
face5 = cutBoxFromImageAndResize(box4, input, [inputSize8, inputSize8]);
|
||||
}
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face5 = cutBoxFromImageAndResize(box4, input, [inputSize8, inputSize8]);
|
||||
}
|
||||
return [angle, rotationMatrix, face5];
|
||||
|
@ -5540,11 +5544,11 @@ function replaceRawCoordinates(rawCoords, newCoords, prefix, keys) {
|
|||
const originalIndices = meshAnnotations[`${prefix}${key}`];
|
||||
if (!keys || keys.includes(key)) {
|
||||
for (let j = 0; j < indices.length; j++) {
|
||||
const index = indices[j];
|
||||
const index2 = indices[j];
|
||||
rawCoords[originalIndices[j]] = [
|
||||
newCoords[index][0],
|
||||
newCoords[index][1],
|
||||
(newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2
|
||||
newCoords[index2][0],
|
||||
newCoords[index2][1],
|
||||
(newCoords[index2][2] + rawCoords[originalIndices[j]][2]) / 2
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -5641,7 +5645,7 @@ var skipped7 = Number.MAX_SAFE_INTEGER;
|
|||
var lastTime6 = 0;
|
||||
var enlargeFact = 1.6;
|
||||
async function predict6(input, config3) {
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h;
|
||||
const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6;
|
||||
const skipFrame = skipped7 < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0);
|
||||
if (!config3.skipAllowed || !skipTime || !skipFrame || boxCache.length === 0) {
|
||||
|
@ -5679,19 +5683,14 @@ async function predict6(input, config3) {
|
|||
faceScore: 0,
|
||||
annotations: {}
|
||||
};
|
||||
if (((_c = config3.face.detector) == null ? void 0 : _c.rotation) && ((_d = config3.face.mesh) == null ? void 0 : _d.enabled) && env.kernels.includes("rotatewithoffset")) {
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation(box4, input, inputSize5);
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face5.tensor = cutBoxFromImageAndResize(box4, input, ((_e = config3.face.mesh) == null ? void 0 : _e.enabled) ? [inputSize5, inputSize5] : [size(), size()]);
|
||||
}
|
||||
if ((_f = config3 == null ? void 0 : config3.filter) == null ? void 0 : _f.equalization) {
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation(false, box4, input, inputSize5);
|
||||
if ((_d = config3 == null ? void 0 : config3.filter) == null ? void 0 : _d.equalization) {
|
||||
const equilized = await histogramEqualization(face5.tensor);
|
||||
tf13.dispose(face5.tensor);
|
||||
face5.tensor = equilized;
|
||||
}
|
||||
face5.boxScore = Math.round(100 * box4.confidence) / 100;
|
||||
if (!((_g = config3.face.mesh) == null ? void 0 : _g.enabled)) {
|
||||
if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled)) {
|
||||
face5.box = getClampedBox(box4, input);
|
||||
face5.boxRaw = getRawBox(box4, input);
|
||||
face5.boxScore = Math.round(100 * box4.confidence || 0) / 100;
|
||||
|
@ -5713,20 +5712,22 @@ async function predict6(input, config3) {
|
|||
const coordsReshaped = tf13.reshape(contourCoords, [-1, 3]);
|
||||
let rawCoords = await coordsReshaped.array();
|
||||
tf13.dispose([contourCoords, coordsReshaped, confidence, contours]);
|
||||
if (face5.faceScore < (((_h = config3.face.detector) == null ? void 0 : _h.minConfidence) || 1)) {
|
||||
if (face5.faceScore < (((_f = config3.face.detector) == null ? void 0 : _f.minConfidence) || 1)) {
|
||||
box4.confidence = face5.faceScore;
|
||||
} else {
|
||||
if ((_i = config3.face.iris) == null ? void 0 : _i.enabled)
|
||||
if ((_g = config3.face.iris) == null ? void 0 : _g.enabled)
|
||||
rawCoords = await augmentIris(rawCoords, face5.tensor, config3, inputSize5);
|
||||
face5.mesh = transformRawCoords(rawCoords, box4, angle, rotationMatrix, inputSize5);
|
||||
face5.meshRaw = face5.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / inputSize5]);
|
||||
for (const key of Object.keys(meshAnnotations))
|
||||
face5.annotations[key] = meshAnnotations[key].map((index) => face5.mesh[index]);
|
||||
face5.annotations[key] = meshAnnotations[key].map((index2) => face5.mesh[index2]);
|
||||
box4 = squarifyBox(enlargeBox(calculateLandmarksBoundingBox(face5.mesh), enlargeFact));
|
||||
face5.box = getClampedBox(box4, input);
|
||||
face5.boxRaw = getRawBox(box4, input);
|
||||
face5.score = face5.faceScore;
|
||||
newCache.push(box4);
|
||||
tf13.dispose(face5.tensor);
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation((_h = config3.face.detector) == null ? void 0 : _h.rotation, box4, input, inputSize5);
|
||||
}
|
||||
}
|
||||
faces.push(face5);
|
||||
|
@ -8931,11 +8932,11 @@ var HandDetector = class {
|
|||
Object.keys(t).forEach((tensor3) => tf16.dispose(t[tensor3]));
|
||||
return res;
|
||||
}
|
||||
normalizeLandmarks(rawPalmLandmarks, index) {
|
||||
normalizeLandmarks(rawPalmLandmarks, index2) {
|
||||
const t = {};
|
||||
t.reshape = tf16.reshape(rawPalmLandmarks, [-1, 7, 2]);
|
||||
t.div = tf16.div(t.reshape, this.inputSizeTensor);
|
||||
t.landmarks = tf16.add(t.div, this.anchors[index]);
|
||||
t.landmarks = tf16.add(t.div, this.anchors[index2]);
|
||||
const res = tf16.mul(t.landmarks, this.inputSizeTensor);
|
||||
Object.keys(t).forEach((tensor3) => tf16.dispose(t[tensor3]));
|
||||
return res;
|
||||
|
@ -8956,17 +8957,17 @@ var HandDetector = class {
|
|||
t.nms = await tf16.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
for (const index2 of nms) {
|
||||
const p = {};
|
||||
p.box = tf16.slice(t.norm, [index, 0], [1, -1]);
|
||||
p.slice = tf16.slice(t.predictions, [index, 5], [1, 14]);
|
||||
p.norm = this.normalizeLandmarks(p.slice, index);
|
||||
p.box = tf16.slice(t.norm, [index2, 0], [1, -1]);
|
||||
p.slice = tf16.slice(t.predictions, [index2, 5], [1, 14]);
|
||||
p.norm = this.normalizeLandmarks(p.slice, index2);
|
||||
p.palmLandmarks = tf16.reshape(p.norm, [-1, 2]);
|
||||
const box4 = await p.box.data();
|
||||
const startPoint = box4.slice(0, 2);
|
||||
const endPoint = box4.slice(2, 4);
|
||||
const palmLandmarks = await p.palmLandmarks.array();
|
||||
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index] };
|
||||
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] };
|
||||
const scaled = scaleBoxCoordinates2(hand3, [input.shape[2] / this.inputSize, input.shape[1] / this.inputSize]);
|
||||
hands.push(scaled);
|
||||
Object.keys(p).forEach((tensor3) => tf16.dispose(p[tensor3]));
|
||||
|
@ -9174,17 +9175,17 @@ var FingerGesture = class {
|
|||
this.weights = [1, 1, 1, 1, 1];
|
||||
this.weightsRelative = [1, 1, 1, 1, 1];
|
||||
}
|
||||
addCurl(finger, curl, confidence) {
|
||||
curl(finger, curl, confidence) {
|
||||
if (typeof this.curls[finger] === "undefined")
|
||||
this.curls[finger] = [];
|
||||
this.curls[finger].push([curl, confidence]);
|
||||
}
|
||||
addDirection(finger, position, confidence) {
|
||||
direction(finger, position, confidence) {
|
||||
if (!this.directions[finger])
|
||||
this.directions[finger] = [];
|
||||
this.directions[finger].push([position, confidence]);
|
||||
}
|
||||
setWeight(finger, weight) {
|
||||
weight(finger, weight) {
|
||||
this.weights[finger] = weight;
|
||||
const total = this.weights.reduce((a, b) => a + b, 0);
|
||||
this.weightsRelative = this.weights.map((el) => el * 5 / total);
|
||||
|
@ -9224,38 +9225,63 @@ var FingerGesture = class {
|
|||
};
|
||||
|
||||
// src/hand/fingergesture.ts
|
||||
var { thumb, index, middle, ring, pinky } = Finger;
|
||||
var { none, half, full } = FingerCurl;
|
||||
var { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;
|
||||
var ThumbsUp = new FingerGesture("thumbs up");
|
||||
ThumbsUp.addCurl(Finger.thumb, FingerCurl.none, 1);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.verticalUp, 1);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 0.25);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpRight, 0.25);
|
||||
ThumbsUp.curl(thumb, none, 1);
|
||||
ThumbsUp.direction(thumb, verticalUp, 1);
|
||||
ThumbsUp.direction(thumb, diagonalUpLeft, 0.25);
|
||||
ThumbsUp.direction(thumb, diagonalUpRight, 0.25);
|
||||
for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {
|
||||
ThumbsUp.addCurl(finger, FingerCurl.full, 1);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalLeft, 1);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalRight, 1);
|
||||
ThumbsUp.curl(finger, full, 1);
|
||||
ThumbsUp.direction(finger, horizontalLeft, 1);
|
||||
ThumbsUp.direction(finger, horizontalRight, 1);
|
||||
}
|
||||
var Victory = new FingerGesture("victory");
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.half, 0.5);
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.none, 0.5);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.verticalUp, 1);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addCurl(Finger.index, FingerCurl.none, 1);
|
||||
Victory.addDirection(Finger.index, FingerDirection.verticalUp, 0.75);
|
||||
Victory.addDirection(Finger.index, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addCurl(Finger.middle, FingerCurl.none, 1);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.verticalUp, 1);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.diagonalUpLeft, 0.75);
|
||||
Victory.addCurl(Finger.ring, FingerCurl.full, 1);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.addCurl(Finger.pinky, FingerCurl.full, 1);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.setWeight(Finger.index, 2);
|
||||
Victory.setWeight(Finger.middle, 2);
|
||||
var fingergesture_default = [ThumbsUp, Victory];
|
||||
Victory.curl(thumb, half, 0.5);
|
||||
Victory.curl(thumb, none, 0.5);
|
||||
Victory.direction(thumb, verticalUp, 1);
|
||||
Victory.direction(thumb, diagonalUpLeft, 1);
|
||||
Victory.curl(index, none, 1);
|
||||
Victory.direction(index, verticalUp, 0.75);
|
||||
Victory.direction(index, diagonalUpLeft, 1);
|
||||
Victory.curl(middle, none, 1);
|
||||
Victory.direction(middle, verticalUp, 1);
|
||||
Victory.direction(middle, diagonalUpLeft, 0.75);
|
||||
Victory.curl(ring, full, 1);
|
||||
Victory.direction(ring, verticalUp, 0.2);
|
||||
Victory.direction(ring, diagonalUpLeft, 1);
|
||||
Victory.direction(ring, horizontalLeft, 0.2);
|
||||
Victory.curl(pinky, full, 1);
|
||||
Victory.direction(pinky, verticalUp, 0.2);
|
||||
Victory.direction(pinky, diagonalUpLeft, 1);
|
||||
Victory.direction(pinky, horizontalLeft, 0.2);
|
||||
Victory.weight(index, 2);
|
||||
Victory.weight(middle, 2);
|
||||
var Point = new FingerGesture("point");
|
||||
Point.curl(thumb, full, 1);
|
||||
Point.curl(index, none, 0.5);
|
||||
Point.curl(middle, full, 0.5);
|
||||
Point.curl(ring, full, 0.5);
|
||||
Point.curl(pinky, full, 0.5);
|
||||
Point.weight(index, 2);
|
||||
Point.weight(middle, 2);
|
||||
var MiddleFinger = new FingerGesture("middle finger");
|
||||
MiddleFinger.curl(thumb, none, 1);
|
||||
MiddleFinger.curl(index, full, 0.5);
|
||||
MiddleFinger.curl(middle, full, 0.5);
|
||||
MiddleFinger.curl(ring, full, 0.5);
|
||||
MiddleFinger.curl(pinky, full, 0.5);
|
||||
MiddleFinger.weight(index, 2);
|
||||
MiddleFinger.weight(middle, 2);
|
||||
var OpenPalm = new FingerGesture("open palm");
|
||||
OpenPalm.curl(thumb, none, 0.75);
|
||||
OpenPalm.curl(index, none, 0.75);
|
||||
OpenPalm.curl(middle, none, 0.75);
|
||||
OpenPalm.curl(ring, none, 0.75);
|
||||
OpenPalm.curl(pinky, none, 0.75);
|
||||
var fingergesture_default = [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];
|
||||
|
||||
// src/hand/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
|
@ -9522,7 +9548,7 @@ async function predict8(input, config3) {
|
|||
const annotations2 = {};
|
||||
if (predictions[i].landmarks) {
|
||||
for (const key of Object.keys(meshAnnotations2)) {
|
||||
annotations2[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
||||
annotations2[key] = meshAnnotations2[key].map((index2) => predictions[i].landmarks[index2]);
|
||||
}
|
||||
}
|
||||
const keypoints = predictions[i].landmarks;
|
||||
|
@ -9645,7 +9671,7 @@ var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "Stateful
|
|||
var inputSize6 = [[0, 0], [0, 0]];
|
||||
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
|
||||
var faceIndex = 4;
|
||||
var boxExpandFact = 1.7;
|
||||
var boxExpandFact = 1.6;
|
||||
var maxDetectorResolution = 512;
|
||||
var detectorExpandFact = 1.4;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
|
@ -9776,7 +9802,7 @@ async function detectFingers(input, h, config3) {
|
|||
]);
|
||||
hand3.landmarks = analyze(hand3.keypoints);
|
||||
for (const key of Object.keys(fingerMap)) {
|
||||
hand3.annotations[key] = fingerMap[key].map((index) => hand3.landmarks && hand3.keypoints[index] ? hand3.keypoints[index] : null);
|
||||
hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null);
|
||||
}
|
||||
}
|
||||
Object.keys(t).forEach((tensor3) => tf19.dispose(t[tensor3]));
|
||||
|
@ -11218,7 +11244,7 @@ async function face(inCanvas2, result, drawOptions) {
|
|||
TRI468[i * 3 + 0],
|
||||
TRI468[i * 3 + 1],
|
||||
TRI468[i * 3 + 2]
|
||||
].map((index) => f.mesh[index]);
|
||||
].map((index2) => f.mesh[index2]);
|
||||
lines(ctx, points, localOptions);
|
||||
}
|
||||
}
|
||||
|
@ -11935,18 +11961,18 @@ function match2(descriptor, descriptors, options3 = { order: 2, multiplier: 20,
|
|||
return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 };
|
||||
}
|
||||
let best = Number.MAX_SAFE_INTEGER;
|
||||
let index = -1;
|
||||
let index2 = -1;
|
||||
for (let i = 0; i < descriptors.length; i++) {
|
||||
const res = distance(descriptor, descriptors[i], options3);
|
||||
if (res < best) {
|
||||
best = res;
|
||||
index = i;
|
||||
index2 = i;
|
||||
}
|
||||
if (best < (options3.threshold || 0))
|
||||
break;
|
||||
}
|
||||
best = !options3.order || options3.order === 2 ? Math.sqrt(best) : best ** (1 / options3.order);
|
||||
return { index, distance: best, similarity: Math.max(0, 100 - best) / 100 };
|
||||
return { index: index2, distance: best, similarity: Math.max(0, 100 - best) / 100 };
|
||||
}
|
||||
|
||||
// src/util/persons.ts
|
||||
|
|
|
@ -455,9 +455,9 @@ function GLImageFilter() {
|
|||
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
||||
return { fbo, texture };
|
||||
}
|
||||
function getTempFramebuffer(index) {
|
||||
tempFramebuffers[index] = tempFramebuffers[index] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);
|
||||
return tempFramebuffers[index];
|
||||
function getTempFramebuffer(index2) {
|
||||
tempFramebuffers[index2] = tempFramebuffers[index2] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);
|
||||
return tempFramebuffers[index2];
|
||||
}
|
||||
function draw2(flags = 0) {
|
||||
if (!currentProgram)
|
||||
|
@ -1317,7 +1317,7 @@ var env = new Env();
|
|||
var tf29 = __toModule(require_tfjs_esm());
|
||||
|
||||
// package.json
|
||||
var version = "2.5.0";
|
||||
var version = "2.5.1";
|
||||
|
||||
// src/tfjs/humangl.ts
|
||||
var tf25 = __toModule(require_tfjs_esm());
|
||||
|
@ -4797,21 +4797,25 @@ function transformRawCoords(coordsRaw, box4, angle, rotationMatrix, inputSize8)
|
|||
Math.round(coord[2] || 0)
|
||||
]);
|
||||
}
|
||||
function correctFaceRotation(box4, input, inputSize8) {
|
||||
function correctFaceRotation(rotate, box4, input, inputSize8) {
|
||||
const symmetryLine = box4.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine;
|
||||
const angle = computeRotation(box4.landmarks[symmetryLine[0]], box4.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2;
|
||||
let rotationMatrix;
|
||||
let angle = 0;
|
||||
let rotationMatrix = fixedRotationMatrix;
|
||||
let face5;
|
||||
if (largeAngle) {
|
||||
const faceCenter = getBoxCenter({ startPoint: box4.startPoint, endPoint: box4.endPoint });
|
||||
const faceCenterNormalized = [faceCenter[0] / input.shape[2], faceCenter[1] / input.shape[1]];
|
||||
const rotated = tf6.image.rotateWithOffset(input, angle, 0, faceCenterNormalized);
|
||||
rotationMatrix = buildRotationMatrix(-angle, faceCenter);
|
||||
face5 = cutBoxFromImageAndResize(box4, rotated, [inputSize8, inputSize8]);
|
||||
tf6.dispose(rotated);
|
||||
if (rotate && env.kernels.includes("rotatewithoffset")) {
|
||||
angle = computeRotation(box4.landmarks[symmetryLine[0]], box4.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2;
|
||||
if (largeAngle) {
|
||||
const center = getBoxCenter({ startPoint: box4.startPoint, endPoint: box4.endPoint });
|
||||
const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]];
|
||||
const rotated = tf6.image.rotateWithOffset(input, angle, 0, centerRaw);
|
||||
rotationMatrix = buildRotationMatrix(-angle, center);
|
||||
face5 = cutBoxFromImageAndResize(box4, rotated, [inputSize8, inputSize8]);
|
||||
tf6.dispose(rotated);
|
||||
} else {
|
||||
face5 = cutBoxFromImageAndResize(box4, input, [inputSize8, inputSize8]);
|
||||
}
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face5 = cutBoxFromImageAndResize(box4, input, [inputSize8, inputSize8]);
|
||||
}
|
||||
return [angle, rotationMatrix, face5];
|
||||
|
@ -5539,11 +5543,11 @@ function replaceRawCoordinates(rawCoords, newCoords, prefix, keys) {
|
|||
const originalIndices = meshAnnotations[`${prefix}${key}`];
|
||||
if (!keys || keys.includes(key)) {
|
||||
for (let j = 0; j < indices.length; j++) {
|
||||
const index = indices[j];
|
||||
const index2 = indices[j];
|
||||
rawCoords[originalIndices[j]] = [
|
||||
newCoords[index][0],
|
||||
newCoords[index][1],
|
||||
(newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2
|
||||
newCoords[index2][0],
|
||||
newCoords[index2][1],
|
||||
(newCoords[index2][2] + rawCoords[originalIndices[j]][2]) / 2
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -5640,7 +5644,7 @@ var skipped7 = Number.MAX_SAFE_INTEGER;
|
|||
var lastTime6 = 0;
|
||||
var enlargeFact = 1.6;
|
||||
async function predict6(input, config3) {
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h;
|
||||
const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6;
|
||||
const skipFrame = skipped7 < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0);
|
||||
if (!config3.skipAllowed || !skipTime || !skipFrame || boxCache.length === 0) {
|
||||
|
@ -5678,19 +5682,14 @@ async function predict6(input, config3) {
|
|||
faceScore: 0,
|
||||
annotations: {}
|
||||
};
|
||||
if (((_c = config3.face.detector) == null ? void 0 : _c.rotation) && ((_d = config3.face.mesh) == null ? void 0 : _d.enabled) && env.kernels.includes("rotatewithoffset")) {
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation(box4, input, inputSize5);
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face5.tensor = cutBoxFromImageAndResize(box4, input, ((_e = config3.face.mesh) == null ? void 0 : _e.enabled) ? [inputSize5, inputSize5] : [size(), size()]);
|
||||
}
|
||||
if ((_f = config3 == null ? void 0 : config3.filter) == null ? void 0 : _f.equalization) {
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation(false, box4, input, inputSize5);
|
||||
if ((_d = config3 == null ? void 0 : config3.filter) == null ? void 0 : _d.equalization) {
|
||||
const equilized = await histogramEqualization(face5.tensor);
|
||||
tf13.dispose(face5.tensor);
|
||||
face5.tensor = equilized;
|
||||
}
|
||||
face5.boxScore = Math.round(100 * box4.confidence) / 100;
|
||||
if (!((_g = config3.face.mesh) == null ? void 0 : _g.enabled)) {
|
||||
if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled)) {
|
||||
face5.box = getClampedBox(box4, input);
|
||||
face5.boxRaw = getRawBox(box4, input);
|
||||
face5.boxScore = Math.round(100 * box4.confidence || 0) / 100;
|
||||
|
@ -5712,20 +5711,22 @@ async function predict6(input, config3) {
|
|||
const coordsReshaped = tf13.reshape(contourCoords, [-1, 3]);
|
||||
let rawCoords = await coordsReshaped.array();
|
||||
tf13.dispose([contourCoords, coordsReshaped, confidence, contours]);
|
||||
if (face5.faceScore < (((_h = config3.face.detector) == null ? void 0 : _h.minConfidence) || 1)) {
|
||||
if (face5.faceScore < (((_f = config3.face.detector) == null ? void 0 : _f.minConfidence) || 1)) {
|
||||
box4.confidence = face5.faceScore;
|
||||
} else {
|
||||
if ((_i = config3.face.iris) == null ? void 0 : _i.enabled)
|
||||
if ((_g = config3.face.iris) == null ? void 0 : _g.enabled)
|
||||
rawCoords = await augmentIris(rawCoords, face5.tensor, config3, inputSize5);
|
||||
face5.mesh = transformRawCoords(rawCoords, box4, angle, rotationMatrix, inputSize5);
|
||||
face5.meshRaw = face5.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / inputSize5]);
|
||||
for (const key of Object.keys(meshAnnotations))
|
||||
face5.annotations[key] = meshAnnotations[key].map((index) => face5.mesh[index]);
|
||||
face5.annotations[key] = meshAnnotations[key].map((index2) => face5.mesh[index2]);
|
||||
box4 = squarifyBox(enlargeBox(calculateLandmarksBoundingBox(face5.mesh), enlargeFact));
|
||||
face5.box = getClampedBox(box4, input);
|
||||
face5.boxRaw = getRawBox(box4, input);
|
||||
face5.score = face5.faceScore;
|
||||
newCache.push(box4);
|
||||
tf13.dispose(face5.tensor);
|
||||
[angle, rotationMatrix, face5.tensor] = correctFaceRotation((_h = config3.face.detector) == null ? void 0 : _h.rotation, box4, input, inputSize5);
|
||||
}
|
||||
}
|
||||
faces.push(face5);
|
||||
|
@ -8930,11 +8931,11 @@ var HandDetector = class {
|
|||
Object.keys(t).forEach((tensor3) => tf16.dispose(t[tensor3]));
|
||||
return res;
|
||||
}
|
||||
normalizeLandmarks(rawPalmLandmarks, index) {
|
||||
normalizeLandmarks(rawPalmLandmarks, index2) {
|
||||
const t = {};
|
||||
t.reshape = tf16.reshape(rawPalmLandmarks, [-1, 7, 2]);
|
||||
t.div = tf16.div(t.reshape, this.inputSizeTensor);
|
||||
t.landmarks = tf16.add(t.div, this.anchors[index]);
|
||||
t.landmarks = tf16.add(t.div, this.anchors[index2]);
|
||||
const res = tf16.mul(t.landmarks, this.inputSizeTensor);
|
||||
Object.keys(t).forEach((tensor3) => tf16.dispose(t[tensor3]));
|
||||
return res;
|
||||
|
@ -8955,17 +8956,17 @@ var HandDetector = class {
|
|||
t.nms = await tf16.image.nonMaxSuppressionAsync(t.norm, t.scores, 3 * config3.hand.maxDetected, config3.hand.iouThreshold, config3.hand.minConfidence);
|
||||
const nms = await t.nms.array();
|
||||
const hands = [];
|
||||
for (const index of nms) {
|
||||
for (const index2 of nms) {
|
||||
const p = {};
|
||||
p.box = tf16.slice(t.norm, [index, 0], [1, -1]);
|
||||
p.slice = tf16.slice(t.predictions, [index, 5], [1, 14]);
|
||||
p.norm = this.normalizeLandmarks(p.slice, index);
|
||||
p.box = tf16.slice(t.norm, [index2, 0], [1, -1]);
|
||||
p.slice = tf16.slice(t.predictions, [index2, 5], [1, 14]);
|
||||
p.norm = this.normalizeLandmarks(p.slice, index2);
|
||||
p.palmLandmarks = tf16.reshape(p.norm, [-1, 2]);
|
||||
const box4 = await p.box.data();
|
||||
const startPoint = box4.slice(0, 2);
|
||||
const endPoint = box4.slice(2, 4);
|
||||
const palmLandmarks = await p.palmLandmarks.array();
|
||||
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index] };
|
||||
const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] };
|
||||
const scaled = scaleBoxCoordinates2(hand3, [input.shape[2] / this.inputSize, input.shape[1] / this.inputSize]);
|
||||
hands.push(scaled);
|
||||
Object.keys(p).forEach((tensor3) => tf16.dispose(p[tensor3]));
|
||||
|
@ -9173,17 +9174,17 @@ var FingerGesture = class {
|
|||
this.weights = [1, 1, 1, 1, 1];
|
||||
this.weightsRelative = [1, 1, 1, 1, 1];
|
||||
}
|
||||
addCurl(finger, curl, confidence) {
|
||||
curl(finger, curl, confidence) {
|
||||
if (typeof this.curls[finger] === "undefined")
|
||||
this.curls[finger] = [];
|
||||
this.curls[finger].push([curl, confidence]);
|
||||
}
|
||||
addDirection(finger, position, confidence) {
|
||||
direction(finger, position, confidence) {
|
||||
if (!this.directions[finger])
|
||||
this.directions[finger] = [];
|
||||
this.directions[finger].push([position, confidence]);
|
||||
}
|
||||
setWeight(finger, weight) {
|
||||
weight(finger, weight) {
|
||||
this.weights[finger] = weight;
|
||||
const total = this.weights.reduce((a, b) => a + b, 0);
|
||||
this.weightsRelative = this.weights.map((el) => el * 5 / total);
|
||||
|
@ -9223,38 +9224,63 @@ var FingerGesture = class {
|
|||
};
|
||||
|
||||
// src/hand/fingergesture.ts
|
||||
var { thumb, index, middle, ring, pinky } = Finger;
|
||||
var { none, half, full } = FingerCurl;
|
||||
var { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;
|
||||
var ThumbsUp = new FingerGesture("thumbs up");
|
||||
ThumbsUp.addCurl(Finger.thumb, FingerCurl.none, 1);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.verticalUp, 1);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 0.25);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpRight, 0.25);
|
||||
ThumbsUp.curl(thumb, none, 1);
|
||||
ThumbsUp.direction(thumb, verticalUp, 1);
|
||||
ThumbsUp.direction(thumb, diagonalUpLeft, 0.25);
|
||||
ThumbsUp.direction(thumb, diagonalUpRight, 0.25);
|
||||
for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {
|
||||
ThumbsUp.addCurl(finger, FingerCurl.full, 1);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalLeft, 1);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalRight, 1);
|
||||
ThumbsUp.curl(finger, full, 1);
|
||||
ThumbsUp.direction(finger, horizontalLeft, 1);
|
||||
ThumbsUp.direction(finger, horizontalRight, 1);
|
||||
}
|
||||
var Victory = new FingerGesture("victory");
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.half, 0.5);
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.none, 0.5);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.verticalUp, 1);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addCurl(Finger.index, FingerCurl.none, 1);
|
||||
Victory.addDirection(Finger.index, FingerDirection.verticalUp, 0.75);
|
||||
Victory.addDirection(Finger.index, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addCurl(Finger.middle, FingerCurl.none, 1);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.verticalUp, 1);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.diagonalUpLeft, 0.75);
|
||||
Victory.addCurl(Finger.ring, FingerCurl.full, 1);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.addCurl(Finger.pinky, FingerCurl.full, 1);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.diagonalUpLeft, 1);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.setWeight(Finger.index, 2);
|
||||
Victory.setWeight(Finger.middle, 2);
|
||||
var fingergesture_default = [ThumbsUp, Victory];
|
||||
Victory.curl(thumb, half, 0.5);
|
||||
Victory.curl(thumb, none, 0.5);
|
||||
Victory.direction(thumb, verticalUp, 1);
|
||||
Victory.direction(thumb, diagonalUpLeft, 1);
|
||||
Victory.curl(index, none, 1);
|
||||
Victory.direction(index, verticalUp, 0.75);
|
||||
Victory.direction(index, diagonalUpLeft, 1);
|
||||
Victory.curl(middle, none, 1);
|
||||
Victory.direction(middle, verticalUp, 1);
|
||||
Victory.direction(middle, diagonalUpLeft, 0.75);
|
||||
Victory.curl(ring, full, 1);
|
||||
Victory.direction(ring, verticalUp, 0.2);
|
||||
Victory.direction(ring, diagonalUpLeft, 1);
|
||||
Victory.direction(ring, horizontalLeft, 0.2);
|
||||
Victory.curl(pinky, full, 1);
|
||||
Victory.direction(pinky, verticalUp, 0.2);
|
||||
Victory.direction(pinky, diagonalUpLeft, 1);
|
||||
Victory.direction(pinky, horizontalLeft, 0.2);
|
||||
Victory.weight(index, 2);
|
||||
Victory.weight(middle, 2);
|
||||
var Point = new FingerGesture("point");
|
||||
Point.curl(thumb, full, 1);
|
||||
Point.curl(index, none, 0.5);
|
||||
Point.curl(middle, full, 0.5);
|
||||
Point.curl(ring, full, 0.5);
|
||||
Point.curl(pinky, full, 0.5);
|
||||
Point.weight(index, 2);
|
||||
Point.weight(middle, 2);
|
||||
var MiddleFinger = new FingerGesture("middle finger");
|
||||
MiddleFinger.curl(thumb, none, 1);
|
||||
MiddleFinger.curl(index, full, 0.5);
|
||||
MiddleFinger.curl(middle, full, 0.5);
|
||||
MiddleFinger.curl(ring, full, 0.5);
|
||||
MiddleFinger.curl(pinky, full, 0.5);
|
||||
MiddleFinger.weight(index, 2);
|
||||
MiddleFinger.weight(middle, 2);
|
||||
var OpenPalm = new FingerGesture("open palm");
|
||||
OpenPalm.curl(thumb, none, 0.75);
|
||||
OpenPalm.curl(index, none, 0.75);
|
||||
OpenPalm.curl(middle, none, 0.75);
|
||||
OpenPalm.curl(ring, none, 0.75);
|
||||
OpenPalm.curl(pinky, none, 0.75);
|
||||
var fingergesture_default = [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];
|
||||
|
||||
// src/hand/fingerpose.ts
|
||||
var minConfidence = 0.7;
|
||||
|
@ -9521,7 +9547,7 @@ async function predict8(input, config3) {
|
|||
const annotations2 = {};
|
||||
if (predictions[i].landmarks) {
|
||||
for (const key of Object.keys(meshAnnotations2)) {
|
||||
annotations2[key] = meshAnnotations2[key].map((index) => predictions[i].landmarks[index]);
|
||||
annotations2[key] = meshAnnotations2[key].map((index2) => predictions[i].landmarks[index2]);
|
||||
}
|
||||
}
|
||||
const keypoints = predictions[i].landmarks;
|
||||
|
@ -9644,7 +9670,7 @@ var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "Stateful
|
|||
var inputSize6 = [[0, 0], [0, 0]];
|
||||
var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"];
|
||||
var faceIndex = 4;
|
||||
var boxExpandFact = 1.7;
|
||||
var boxExpandFact = 1.6;
|
||||
var maxDetectorResolution = 512;
|
||||
var detectorExpandFact = 1.4;
|
||||
var skipped9 = Number.MAX_SAFE_INTEGER;
|
||||
|
@ -9775,7 +9801,7 @@ async function detectFingers(input, h, config3) {
|
|||
]);
|
||||
hand3.landmarks = analyze(hand3.keypoints);
|
||||
for (const key of Object.keys(fingerMap)) {
|
||||
hand3.annotations[key] = fingerMap[key].map((index) => hand3.landmarks && hand3.keypoints[index] ? hand3.keypoints[index] : null);
|
||||
hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null);
|
||||
}
|
||||
}
|
||||
Object.keys(t).forEach((tensor3) => tf19.dispose(t[tensor3]));
|
||||
|
@ -11217,7 +11243,7 @@ async function face(inCanvas2, result, drawOptions) {
|
|||
TRI468[i * 3 + 0],
|
||||
TRI468[i * 3 + 1],
|
||||
TRI468[i * 3 + 2]
|
||||
].map((index) => f.mesh[index]);
|
||||
].map((index2) => f.mesh[index2]);
|
||||
lines(ctx, points, localOptions);
|
||||
}
|
||||
}
|
||||
|
@ -11934,18 +11960,18 @@ function match2(descriptor, descriptors, options3 = { order: 2, multiplier: 20,
|
|||
return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 };
|
||||
}
|
||||
let best = Number.MAX_SAFE_INTEGER;
|
||||
let index = -1;
|
||||
let index2 = -1;
|
||||
for (let i = 0; i < descriptors.length; i++) {
|
||||
const res = distance(descriptor, descriptors[i], options3);
|
||||
if (res < best) {
|
||||
best = res;
|
||||
index = i;
|
||||
index2 = i;
|
||||
}
|
||||
if (best < (options3.threshold || 0))
|
||||
break;
|
||||
}
|
||||
best = !options3.order || options3.order === 2 ? Math.sqrt(best) : best ** (1 / options3.order);
|
||||
return { index, distance: best, similarity: Math.max(0, 100 - best) / 100 };
|
||||
return { index: index2, distance: best, similarity: Math.max(0, 100 - best) / 100 };
|
||||
}
|
||||
|
||||
// src/util/persons.ts
|
||||
|
|
|
@ -47,7 +47,7 @@ var __toModule = (module) => {
|
|||
return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
|
||||
};
|
||||
var require_long = __commonJS({
|
||||
"src/node_modules/long/src/long.js"(exports, module) {
|
||||
"node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js"(exports, module) {
|
||||
module.exports = Long2;
|
||||
var wasm = null;
|
||||
try {
|
||||
|
@ -869,8 +869,8 @@ var require_long = __commonJS({
|
|||
};
|
||||
}
|
||||
});
|
||||
var require_browser = __commonJS({
|
||||
"(disabled):src/node_modules/node-fetch/browser.js"() {
|
||||
var require_node_fetch = __commonJS({
|
||||
"(disabled):node-fetch"() {
|
||||
}
|
||||
});
|
||||
var require_util = __commonJS({
|
||||
|
@ -878,7 +878,7 @@ var require_util = __commonJS({
|
|||
}
|
||||
});
|
||||
var require_alea = __commonJS({
|
||||
"src/node_modules/seedrandom/lib/alea.js"(exports, module) {
|
||||
"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js"(exports, module) {
|
||||
(function(global2, module2, define2) {
|
||||
function Alea(seed) {
|
||||
var me = this, mash = Mash();
|
||||
|
@ -962,7 +962,7 @@ var require_alea = __commonJS({
|
|||
}
|
||||
});
|
||||
var require_xor128 = __commonJS({
|
||||
"src/node_modules/seedrandom/lib/xor128.js"(exports, module) {
|
||||
"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js"(exports, module) {
|
||||
(function(global2, module2, define2) {
|
||||
function XorGen(seed) {
|
||||
var me = this, strseed = "";
|
||||
|
@ -1028,7 +1028,7 @@ var require_xor128 = __commonJS({
|
|||
}
|
||||
});
|
||||
var require_xorwow = __commonJS({
|
||||
"src/node_modules/seedrandom/lib/xorwow.js"(exports, module) {
|
||||
"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js"(exports, module) {
|
||||
(function(global2, module2, define2) {
|
||||
function XorGen(seed) {
|
||||
var me = this, strseed = "";
|
||||
|
@ -1101,7 +1101,7 @@ var require_xorwow = __commonJS({
|
|||
}
|
||||
});
|
||||
var require_xorshift7 = __commonJS({
|
||||
"src/node_modules/seedrandom/lib/xorshift7.js"(exports, module) {
|
||||
"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js"(exports, module) {
|
||||
(function(global2, module2, define2) {
|
||||
function XorGen(seed) {
|
||||
var me = this;
|
||||
|
@ -1190,7 +1190,7 @@ var require_xorshift7 = __commonJS({
|
|||
}
|
||||
});
|
||||
var require_xor4096 = __commonJS({
|
||||
"src/node_modules/seedrandom/lib/xor4096.js"(exports, module) {
|
||||
"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js"(exports, module) {
|
||||
(function(global2, module2, define2) {
|
||||
function XorGen(seed) {
|
||||
var me = this;
|
||||
|
@ -1294,7 +1294,7 @@ var require_xor4096 = __commonJS({
|
|||
}
|
||||
});
|
||||
var require_tychei = __commonJS({
|
||||
"src/node_modules/seedrandom/lib/tychei.js"(exports, module) {
|
||||
"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js"(exports, module) {
|
||||
(function(global2, module2, define2) {
|
||||
function XorGen(seed) {
|
||||
var me = this, strseed = "";
|
||||
|
@ -1370,7 +1370,7 @@ var require_crypto = __commonJS({
|
|||
}
|
||||
});
|
||||
var require_seedrandom = __commonJS({
|
||||
"src/node_modules/seedrandom/seedrandom.js"(exports, module) {
|
||||
"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js"(exports, module) {
|
||||
(function(global2, pool3, math) {
|
||||
var width = 256, chunks = 6, digits = 52, rngname = "random", startdenom = math.pow(width, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask = width - 1, nodecrypto;
|
||||
function seedrandom5(seed, options, callback) {
|
||||
|
@ -1501,7 +1501,7 @@ var require_seedrandom = __commonJS({
|
|||
}
|
||||
});
|
||||
var require_seedrandom2 = __commonJS({
|
||||
"src/node_modules/seedrandom/index.js"(exports, module) {
|
||||
"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js"(exports, module) {
|
||||
var alea5 = require_alea();
|
||||
var xor128 = require_xor128();
|
||||
var xorwow = require_xorwow();
|
||||
|
@ -8400,7 +8400,7 @@ if (env().get("IS_BROWSER")) {
|
|||
}
|
||||
}
|
||||
var getNodeFetch = {
|
||||
importFetch: () => require_browser()
|
||||
importFetch: () => require_node_fetch()
|
||||
};
|
||||
var systemFetch;
|
||||
var PlatformNode = class {
|
||||
|
@ -69864,7 +69864,7 @@ registerBackend("wasm", async () => {
|
|||
const { wasm } = await init();
|
||||
return new BackendWasm(wasm);
|
||||
}, WASM_PRIORITY);
|
||||
var externalVersion = "3.11.0-20211106";
|
||||
var externalVersion = "3.11.0-20211108";
|
||||
var version8 = {
|
||||
tfjs: externalVersion,
|
||||
"tfjs-core": externalVersion,
|
||||
|
|
|
@ -68,12 +68,7 @@ export async function predict(input: Tensor, config: Config): Promise<FaceResult
|
|||
annotations: {},
|
||||
};
|
||||
|
||||
if (config.face.detector?.rotation && config.face.mesh?.enabled && env.kernels.includes('rotatewithoffset')) {
|
||||
[angle, rotationMatrix, face.tensor] = util.correctFaceRotation(box, input, inputSize);
|
||||
} else {
|
||||
rotationMatrix = util.fixedRotationMatrix;
|
||||
face.tensor = util.cutBoxFromImageAndResize(box, input, config.face.mesh?.enabled ? [inputSize, inputSize] : [blazeface.size(), blazeface.size()]);
|
||||
}
|
||||
[angle, rotationMatrix, face.tensor] = util.correctFaceRotation(false && config.face.detector?.rotation, box, input, inputSize); // optional rotate based on detector data // disabled
|
||||
if (config?.filter?.equalization) {
|
||||
const equilized = await histogramEqualization(face.tensor as Tensor);
|
||||
tf.dispose(face.tensor);
|
||||
|
@ -112,14 +107,8 @@ export async function predict(input: Tensor, config: Config): Promise<FaceResult
|
|||
face.boxRaw = util.getRawBox(box, input);
|
||||
face.score = face.faceScore;
|
||||
newCache.push(box);
|
||||
|
||||
// other modules prefer different crop for a face so we dispose it and do it again
|
||||
/*
|
||||
tf.dispose(face.tensor);
|
||||
face.tensor = config.face.detector?.rotation && config.face.mesh?.enabled && env.kernels.includes('rotatewithoffset')
|
||||
? face.tensor = util.correctFaceRotation(util.enlargeBox(box, Math.sqrt(enlargeFact)), input, inputSize)[2]
|
||||
: face.tensor = util.cutBoxFromImageAndResize(util.enlargeBox(box, Math.sqrt(enlargeFact)), input, [inputSize, inputSize]);
|
||||
*/
|
||||
[angle, rotationMatrix, face.tensor] = util.correctFaceRotation(config.face.detector?.rotation, box, input, inputSize); // optional rotate once more based on mesh data
|
||||
}
|
||||
}
|
||||
faces.push(face);
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
import * as tf from '../../dist/tfjs.esm.js';
|
||||
import * as coords from './facemeshcoords';
|
||||
import type { Box, Point } from '../result';
|
||||
import { env } from '../util/env';
|
||||
|
||||
export const createBox = (startEndTensor) => ({ startPoint: tf.slice(startEndTensor, [0, 0], [-1, 2]), endPoint: tf.slice(startEndTensor, [0, 2], [-1, 2]) });
|
||||
|
||||
|
@ -155,21 +156,28 @@ export function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputS
|
|||
]));
|
||||
}
|
||||
|
||||
export function correctFaceRotation(box, input, inputSize) {
|
||||
const symmetryLine = (box.landmarks.length >= coords.meshLandmarks.count) ? coords.meshLandmarks.symmetryLine : coords.blazeFaceLandmarks.symmetryLine;
|
||||
const angle: number = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);
|
||||
let rotationMatrix;
|
||||
let face;
|
||||
if (largeAngle) {
|
||||
const faceCenter: Point = getBoxCenter({ startPoint: box.startPoint, endPoint: box.endPoint });
|
||||
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
|
||||
rotationMatrix = buildRotationMatrix(-angle, faceCenter);
|
||||
face = cutBoxFromImageAndResize(box, rotated, [inputSize, inputSize]);
|
||||
tf.dispose(rotated);
|
||||
export function correctFaceRotation(rotate, box, input, inputSize) {
|
||||
const symmetryLine = (box.landmarks.length >= coords.meshLandmarks.count)
|
||||
? coords.meshLandmarks.symmetryLine
|
||||
: coords.blazeFaceLandmarks.symmetryLine;
|
||||
let angle = 0; // default
|
||||
let rotationMatrix = fixedRotationMatrix; // default
|
||||
let face; // default
|
||||
|
||||
if (rotate && env.kernels.includes('rotatewithoffset')) {
|
||||
angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]);
|
||||
const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);
|
||||
if (largeAngle) {
|
||||
const center: Point = getBoxCenter({ startPoint: box.startPoint, endPoint: box.endPoint });
|
||||
const centerRaw: Point = [center[0] / input.shape[2], center[1] / input.shape[1]];
|
||||
const rotated = tf.image.rotateWithOffset(input, angle, 0, centerRaw); // rotateWithOffset is not defined for tfjs-node
|
||||
rotationMatrix = buildRotationMatrix(-angle, center);
|
||||
face = cutBoxFromImageAndResize(box, rotated, [inputSize, inputSize]);
|
||||
tf.dispose(rotated);
|
||||
} else {
|
||||
face = cutBoxFromImageAndResize(box, input, [inputSize, inputSize]);
|
||||
}
|
||||
} else {
|
||||
rotationMatrix = fixedRotationMatrix;
|
||||
face = cutBoxFromImageAndResize(box, input, [inputSize, inputSize]);
|
||||
}
|
||||
return [angle, rotationMatrix, face];
|
||||
|
|
|
@ -66,17 +66,17 @@ export class FingerGesture {
|
|||
this.weightsRelative = [1.0, 1.0, 1.0, 1.0, 1.0];
|
||||
}
|
||||
|
||||
addCurl(finger, curl, confidence) {
|
||||
curl(finger, curl, confidence) {
|
||||
if (typeof this.curls[finger] === 'undefined') this.curls[finger] = [];
|
||||
this.curls[finger].push([curl, confidence]);
|
||||
}
|
||||
|
||||
addDirection(finger, position, confidence) {
|
||||
direction(finger, position, confidence) {
|
||||
if (!this.directions[finger]) this.directions[finger] = [];
|
||||
this.directions[finger].push([position, confidence]);
|
||||
}
|
||||
|
||||
setWeight(finger, weight) {
|
||||
weight(finger, weight) {
|
||||
this.weights[finger] = weight;
|
||||
// recalculate relative weights
|
||||
const total = this.weights.reduce((a, b) => a + b, 0);
|
||||
|
|
|
@ -5,39 +5,74 @@
|
|||
|
||||
import { Finger, FingerCurl, FingerDirection, FingerGesture } from './fingerdef';
|
||||
|
||||
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
|
||||
const { thumb, index, middle, ring, pinky } = Finger;
|
||||
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
|
||||
const { none, half, full } = FingerCurl;
|
||||
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
|
||||
const { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;
|
||||
|
||||
// describe thumbs up gesture 👍
|
||||
const ThumbsUp = new FingerGesture('thumbs up');
|
||||
ThumbsUp.addCurl(Finger.thumb, FingerCurl.none, 1.0);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.verticalUp, 1.0);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 0.25);
|
||||
ThumbsUp.addDirection(Finger.thumb, FingerDirection.diagonalUpRight, 0.25);
|
||||
ThumbsUp.curl(thumb, none, 1.0);
|
||||
ThumbsUp.direction(thumb, verticalUp, 1.0);
|
||||
ThumbsUp.direction(thumb, diagonalUpLeft, 0.25);
|
||||
ThumbsUp.direction(thumb, diagonalUpRight, 0.25);
|
||||
for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {
|
||||
ThumbsUp.addCurl(finger, FingerCurl.full, 1.0);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalLeft, 1.0);
|
||||
ThumbsUp.addDirection(finger, FingerDirection.horizontalRight, 1.0);
|
||||
ThumbsUp.curl(finger, full, 1.0);
|
||||
ThumbsUp.direction(finger, horizontalLeft, 1.0);
|
||||
ThumbsUp.direction(finger, horizontalRight, 1.0);
|
||||
}
|
||||
|
||||
// describe Victory gesture ✌️
|
||||
const Victory = new FingerGesture('victory');
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.half, 0.5);
|
||||
Victory.addCurl(Finger.thumb, FingerCurl.none, 0.5);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.verticalUp, 1.0);
|
||||
Victory.addDirection(Finger.thumb, FingerDirection.diagonalUpLeft, 1.0);
|
||||
Victory.addCurl(Finger.index, FingerCurl.none, 1.0);
|
||||
Victory.addDirection(Finger.index, FingerDirection.verticalUp, 0.75);
|
||||
Victory.addDirection(Finger.index, FingerDirection.diagonalUpLeft, 1.0);
|
||||
Victory.addCurl(Finger.middle, FingerCurl.none, 1.0);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.verticalUp, 1.0);
|
||||
Victory.addDirection(Finger.middle, FingerDirection.diagonalUpLeft, 0.75);
|
||||
Victory.addCurl(Finger.ring, FingerCurl.full, 1.0);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.diagonalUpLeft, 1.0);
|
||||
Victory.addDirection(Finger.ring, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.addCurl(Finger.pinky, FingerCurl.full, 1.0);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.verticalUp, 0.2);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.diagonalUpLeft, 1.0);
|
||||
Victory.addDirection(Finger.pinky, FingerDirection.horizontalLeft, 0.2);
|
||||
Victory.setWeight(Finger.index, 2);
|
||||
Victory.setWeight(Finger.middle, 2);
|
||||
Victory.curl(thumb, half, 0.5);
|
||||
Victory.curl(thumb, none, 0.5);
|
||||
Victory.direction(thumb, verticalUp, 1.0);
|
||||
Victory.direction(thumb, diagonalUpLeft, 1.0);
|
||||
Victory.curl(index, none, 1.0);
|
||||
Victory.direction(index, verticalUp, 0.75);
|
||||
Victory.direction(index, diagonalUpLeft, 1.0);
|
||||
Victory.curl(middle, none, 1.0);
|
||||
Victory.direction(middle, verticalUp, 1.0);
|
||||
Victory.direction(middle, diagonalUpLeft, 0.75);
|
||||
Victory.curl(ring, full, 1.0);
|
||||
Victory.direction(ring, verticalUp, 0.2);
|
||||
Victory.direction(ring, diagonalUpLeft, 1.0);
|
||||
Victory.direction(ring, horizontalLeft, 0.2);
|
||||
Victory.curl(pinky, full, 1.0);
|
||||
Victory.direction(pinky, verticalUp, 0.2);
|
||||
Victory.direction(pinky, diagonalUpLeft, 1.0);
|
||||
Victory.direction(pinky, horizontalLeft, 0.2);
|
||||
Victory.weight(index, 2);
|
||||
Victory.weight(middle, 2);
|
||||
|
||||
export default [ThumbsUp, Victory];
|
||||
// describe Point gesture ✌️
|
||||
const Point = new FingerGesture('point');
|
||||
Point.curl(thumb, full, 1.0);
|
||||
Point.curl(index, none, 0.5);
|
||||
Point.curl(middle, full, 0.5);
|
||||
Point.curl(ring, full, 0.5);
|
||||
Point.curl(pinky, full, 0.5);
|
||||
Point.weight(index, 2);
|
||||
Point.weight(middle, 2);
|
||||
|
||||
// describe Point gesture ✌️
|
||||
const MiddleFinger = new FingerGesture('middle finger');
|
||||
MiddleFinger.curl(thumb, none, 1.0);
|
||||
MiddleFinger.curl(index, full, 0.5);
|
||||
MiddleFinger.curl(middle, full, 0.5);
|
||||
MiddleFinger.curl(ring, full, 0.5);
|
||||
MiddleFinger.curl(pinky, full, 0.5);
|
||||
MiddleFinger.weight(index, 2);
|
||||
MiddleFinger.weight(middle, 2);
|
||||
|
||||
// describe Open Palm gesture ✌️
|
||||
const OpenPalm = new FingerGesture('open palm');
|
||||
OpenPalm.curl(thumb, none, 0.75);
|
||||
OpenPalm.curl(index, none, 0.75);
|
||||
OpenPalm.curl(middle, none, 0.75);
|
||||
OpenPalm.curl(ring, none, 0.75);
|
||||
OpenPalm.curl(pinky, none, 0.75);
|
||||
|
||||
export default [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];
|
||||
|
|
|
@ -24,7 +24,7 @@ const inputSize = [[0, 0], [0, 0]];
|
|||
const classes = ['hand', 'fist', 'pinch', 'point', 'face', 'tip', 'pinchtip'];
|
||||
const faceIndex = 4;
|
||||
|
||||
const boxExpandFact = 1.7;
|
||||
const boxExpandFact = 1.6;
|
||||
const maxDetectorResolution = 512;
|
||||
const detectorExpandFact = 1.4;
|
||||
|
||||
|
@ -170,9 +170,7 @@ async function detectFingers(input: Tensor, h: HandDetectResult, config: Config)
|
|||
outputSize[1] * (kpt[1] + h.boxRaw[1]),
|
||||
(kpt[2] || 0),
|
||||
]);
|
||||
// hand.box = box.scale(h.box, 1 / detectorExpandFact); // scale box down for visual appeal
|
||||
// hand.boxRaw = box.scale(h.boxRaw, 1 / detectorExpandFact); // scale box down for visual appeal
|
||||
hand.landmarks = fingerPose.analyze(hand.keypoints) as HandResult['landmarks']; // calculate finger landmarks
|
||||
hand.landmarks = fingerPose.analyze(hand.keypoints) as HandResult['landmarks']; // calculate finger gestures
|
||||
for (const key of Object.keys(fingerMap)) { // map keypoints to per-finger annotations
|
||||
hand.annotations[key] = fingerMap[key].map((index) => (hand.landmarks && hand.keypoints[index] ? hand.keypoints[index] : null));
|
||||
}
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
2021-11-07 09:49:34 [36mINFO: [39m @vladmandic/human version 2.5.0
|
||||
2021-11-07 09:49:34 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v17.0.1
|
||||
2021-11-07 09:49:34 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.5.0"}
|
||||
2021-11-07 09:49:34 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2021-11-07 09:49:34 [36mINFO: [39m Toolchain: {"build":"0.6.3","esbuild":"0.13.12","typescript":"4.4.4","typedoc":"0.22.7","eslint":"8.2.0"}
|
||||
2021-11-07 09:49:34 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1275}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":56,"inputBytes":522624,"outputBytes":441314}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":56,"inputBytes":522632,"outputBytes":441318}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":56,"inputBytes":522699,"outputBytes":441390}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1652}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2326,"outputBytes":912}
|
||||
2021-11-07 09:49:34 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":56,"inputBytes":522261,"outputBytes":443292}
|
||||
2021-11-07 09:49:35 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2562175,"outputBytes":2497378}
|
||||
2021-11-07 09:49:35 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":56,"inputBytes":3018727,"outputBytes":3097554}
|
||||
2021-11-07 09:49:35 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":56,"inputBytes":3018727,"outputBytes":2946203}
|
||||
2021-11-07 09:49:55 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":49}
|
||||
2021-11-07 09:50:02 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":48,"generated":true}
|
||||
2021-11-07 09:50:02 [35mSTATE:[39m Compile: {"name":"demo/browser","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":5851,"outputBytes":3818}
|
||||
2021-11-07 09:50:38 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":90,"errors":0,"warnings":0}
|
||||
2021-11-07 09:50:39 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2021-11-07 09:50:39 [36mINFO: [39m Done...
|
||||
2021-11-08 07:32:27 [36mINFO: [39m @vladmandic/human version 2.5.1
|
||||
2021-11-08 07:32:27 [36mINFO: [39m User: vlado Platform: linux Arch: x64 Node: v17.0.1
|
||||
2021-11-08 07:32:27 [36mINFO: [39m Application: {"name":"@vladmandic/human","version":"2.5.1"}
|
||||
2021-11-08 07:32:27 [36mINFO: [39m Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true}
|
||||
2021-11-08 07:32:27 [36mINFO: [39m Toolchain: {"build":"0.6.3","esbuild":"0.13.12","typescript":"4.4.4","typedoc":"0.22.8","eslint":"8.2.0"}
|
||||
2021-11-08 07:32:27 [36mINFO: [39m Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Clean: {"locations":["dist/*","types/*","typedoc/*"]}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":102,"outputBytes":1275}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":56,"inputBytes":522834,"outputBytes":441687}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":110,"outputBytes":1283}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":56,"inputBytes":522842,"outputBytes":441691}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":1,"inputBytes":149,"outputBytes":1350}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":56,"inputBytes":522909,"outputBytes":441763}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1063,"outputBytes":1652}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2326,"outputBytes":912}
|
||||
2021-11-08 07:32:27 [35mSTATE:[39m Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":56,"inputBytes":522471,"outputBytes":443677}
|
||||
2021-11-08 07:32:28 [35mSTATE:[39m Compile: {"name":"tfjs/browser/esm/custom","format":"esm","platform":"browser","input":"tfjs/tf-custom.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2562689,"outputBytes":2497638}
|
||||
2021-11-08 07:32:28 [35mSTATE:[39m Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":56,"inputBytes":3019197,"outputBytes":1612758}
|
||||
2021-11-08 07:32:29 [35mSTATE:[39m Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":56,"inputBytes":3019197,"outputBytes":2947082}
|
||||
2021-11-08 07:32:48 [35mSTATE:[39m Typings: {"input":"src/human.ts","output":"types","files":49}
|
||||
2021-11-08 07:32:54 [35mSTATE:[39m TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":48,"generated":true}
|
||||
2021-11-08 07:32:54 [35mSTATE:[39m Compile: {"name":"demo/browser","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":5851,"outputBytes":3818}
|
||||
2021-11-08 07:33:31 [35mSTATE:[39m Lint: {"locations":["*.json","src/**/*.ts","test/**/*.js","demo/**/*.js"],"files":90,"errors":0,"warnings":0}
|
||||
2021-11-08 07:33:31 [35mSTATE:[39m ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"}
|
||||
2021-11-08 07:33:31 [36mINFO: [39m Done...
|
||||
|
|
|
@ -153,9 +153,9 @@ async function verifyDetails(human) {
|
|||
verify(res.face.length === 1, 'details face length', res.face.length);
|
||||
for (const face of res.face) {
|
||||
verify(face.score > 0.9 && face.boxScore > 0.9 && face.faceScore > 0.9, 'details face score', face.score, face.boxScore, face.faceScore);
|
||||
verify(face.age > 29 && face.age < 30 && face.gender === 'female' && face.genderScore > 0.9 && face.iris > 70 && face.iris < 80, 'details face age/gender', face.age, face.gender, face.genderScore, face.iris);
|
||||
verify(face.age > 23 && face.age < 24 && face.gender === 'female' && face.genderScore > 0.9 && face.iris > 70 && face.iris < 80, 'details face age/gender', face.age, face.gender, face.genderScore, face.iris);
|
||||
verify(face.box.length === 4 && face.boxRaw.length === 4 && face.mesh.length === 478 && face.meshRaw.length === 478 && face.embedding.length === 1024, 'details face arrays', face.box.length, face.mesh.length, face.embedding.length);
|
||||
verify(face.emotion.length === 3 && face.emotion[0].score > 0.5 && face.emotion[0].emotion === 'angry', 'details face emotion', face.emotion.length, face.emotion[0]);
|
||||
verify(face.emotion.length === 3 && face.emotion[0].score > 0.45 && face.emotion[0].emotion === 'neutral', 'details face emotion', face.emotion.length, face.emotion[0]);
|
||||
}
|
||||
verify(res.body.length === 1, 'details body length', res.body.length);
|
||||
for (const body of res.body) {
|
||||
|
@ -166,7 +166,7 @@ async function verifyDetails(human) {
|
|||
verify(hand.score > 0.5 && hand.boxScore > 0.5 && hand.fingerScore > 0.5 && hand.box.length === 4 && hand.boxRaw.length === 4 && hand.label === 'point', 'details hand', hand.boxScore, hand.fingerScore, hand.label);
|
||||
verify(hand.keypoints.length === 21 && Object.keys(hand.landmarks).length === 5 && Object.keys(hand.annotations).length === 6, 'details hand arrays', hand.keypoints.length, Object.keys(hand.landmarks).length, Object.keys(hand.annotations).length);
|
||||
}
|
||||
verify(res.gesture.length === 5, 'details gesture length', res.gesture.length);
|
||||
verify(res.gesture.length === 6, 'details gesture length', res.gesture.length);
|
||||
verify(res.gesture[0].gesture === 'facing right', 'details gesture first', res.gesture[0]);
|
||||
verify(res.object.length === 1, 'details object length', res.object.length);
|
||||
for (const obj of res.object) {
|
||||
|
@ -236,11 +236,11 @@ async function test(Human, inputConfig) {
|
|||
else log('state', 'passed: warmup none result match');
|
||||
config.warmup = 'face';
|
||||
res = await testWarmup(human, 'default');
|
||||
if (!res || res?.face?.length !== 1 || res?.body?.length !== 1 || res?.hand?.length !== 1 || res?.gesture?.length !== 7) log('error', 'failed: warmup face 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 < 7) log('error', 'failed: warmup face result mismatch', res?.face?.length, res?.body?.length, res?.hand?.length, res?.gesture?.length);
|
||||
else log('state', 'passed: warmup face result match');
|
||||
config.warmup = 'body';
|
||||
res = await testWarmup(human, 'default');
|
||||
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);
|
||||
if (!res || res?.face?.length !== 1 || res?.body?.length !== 1 || res?.hand?.length !== 1 || res?.gesture?.length !== 6) 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');
|
||||
log('state', 'details:', {
|
||||
face: { boxScore: res.face[0].boxScore, faceScore: res.face[0].faceScore, age: res.face[0].age, gender: res.face[0].gender, genderScore: res.face[0].genderScore },
|
||||
|
@ -330,7 +330,7 @@ async function test(Human, inputConfig) {
|
|||
config.body = { minConfidence: 0.0001 };
|
||||
config.hand = { minConfidence: 0.0001 };
|
||||
res = await testDetect(human, 'samples/in/ai-body.jpg', 'default');
|
||||
if (!res || res?.face?.length !== 1 || res?.body?.length !== 1 || res?.hand?.length !== 2 || res?.gesture?.length !== 7) log('error', 'failed: sensitive 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 !== 2 || res?.gesture?.length !== 8) log('error', 'failed: sensitive result mismatch', res?.face?.length, res?.body?.length, res?.hand?.length, res?.gesture?.length);
|
||||
else log('state', 'passed: sensitive result match');
|
||||
|
||||
// test sensitive details face
|
||||
|
|
1216
test/test.log
1216
test/test.log
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -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>Env | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</a></li><li><a href="Env.html">Env</a></li></ul><h1>Class Env</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Env | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.1</a></li><li><a href="Env.html">Env</a></li></ul><h1>Class Env</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>Env class that holds detected capabilities</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">Env</span></li></ul></section><section class="tsd-panel-group tsd-index-group"><h2>Index</h2><section class="tsd-panel tsd-index-panel"><div class="tsd-index-content"><section class="tsd-index-section "><h3>Constructors</h3><ul class="tsd-index-list"><li class="tsd-kind-constructor tsd-parent-kind-class"><a href="Env.html#constructor" class="tsd-kind-icon">constructor</a></li></ul></section><section class="tsd-index-section "><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#Canvas" class="tsd-kind-icon">Canvas</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#Image" class="tsd-kind-icon">Image</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#ImageData" class="tsd-kind-icon">Image<wbr/>Data</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#agent" class="tsd-kind-icon">agent</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#backends" class="tsd-kind-icon">backends</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#browser" class="tsd-kind-icon">browser</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#cpu" class="tsd-kind-icon">cpu</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#filter" class="tsd-kind-icon">filter</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#initial" class="tsd-kind-icon">initial</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#kernels" class="tsd-kind-icon">kernels</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#node" class="tsd-kind-icon">node</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#offscreen" class="tsd-kind-icon">offscreen</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#perfadd" class="tsd-kind-icon">perfadd</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#platform" class="tsd-kind-icon">platform</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#tfjs" class="tsd-kind-icon">tfjs</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#wasm" class="tsd-kind-icon">wasm</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#webgl" class="tsd-kind-icon">webgl</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#webgpu" class="tsd-kind-icon">webgpu</a></li><li class="tsd-kind-property tsd-parent-kind-class"><a href="Env.html#worker" class="tsd-kind-icon">worker</a></li></ul></section><section class="tsd-index-section "><h3>Methods</h3><ul class="tsd-index-list"><li class="tsd-kind-method tsd-parent-kind-class"><a href="Env.html#updateBackend" class="tsd-kind-icon">update<wbr/>Backend</a></li><li class="tsd-kind-method tsd-parent-kind-class"><a href="Env.html#updateCPU" class="tsd-kind-icon">updateCPU</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group "><h2>Constructors</h2><section class="tsd-panel tsd-member tsd-kind-constructor tsd-parent-kind-class"><a id="constructor" class="tsd-anchor"></a><h3>constructor</h3><ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon">new <wbr/>Env<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Env.html" class="tsd-signature-type" data-tsd-kind="Class">Env</a></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/util/env.ts#L81">src/util/env.ts:81</a></li></ul></aside><h4 class="tsd-returns-title">Returns <a href="Env.html" class="tsd-signature-type" data-tsd-kind="Class">Env</a></h4></li></ul></section></section><section class="tsd-panel-group tsd-member-group "><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a id="Canvas" class="tsd-anchor"></a><h3>Canvas</h3><div class="tsd-signature tsd-kind-icon">Canvas<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">undefined</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/util/env.ts#L75">src/util/env.ts:75</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>MonkeyPatch for Canvas</p>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Human | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p><em>Human</em>* library main class</p>
|
||||
</div><div><p>All methods and properties are available only as members of Human class</p>
|
||||
<ul>
|
||||
|
@ -13,7 +13,7 @@
|
|||
</div></div><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameters"><li><h5><span class="tsd-flag ts-flagOptional">Optional</span> userConfig: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol"><</span><a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a><span class="tsd-signature-symbol">></span></h5></li></ul><h4 class="tsd-returns-title">Returns <a href="Human.html" class="tsd-signature-type" data-tsd-kind="Class">Human</a></h4><div></div></li></ul></section></section><section class="tsd-panel-group tsd-member-group "><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a id="config" class="tsd-anchor"></a><h3>config</h3><div class="tsd-signature tsd-kind-icon">config<span class="tsd-signature-symbol">:</span> <a href="../interfaces/Config.html" class="tsd-signature-type" data-tsd-kind="Interface">Config</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L73">src/human.ts:73</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Current configuration</p>
|
||||
<ul>
|
||||
<li>Defaults: <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L250">config</a></li>
|
||||
<li>Defaults: <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L262">config</a></li>
|
||||
</ul>
|
||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class"><a id="distance" class="tsd-anchor"></a><h3>distance</h3><div class="tsd-signature tsd-kind-icon">distance<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>descriptor1<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a>, descriptor2<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a>, options<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Options</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> = match.distance</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/human.ts#L225">src/human.ts:225</a></li></ul></aside><div class="tsd-type-declaration"><h4>Type declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-class"><li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>descriptor1<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a>, descriptor2<span class="tsd-signature-symbol">: </span><a href="../index.html#Descriptor" class="tsd-signature-type" data-tsd-kind="Type alias">Descriptor</a>, options<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Options</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></li></ul><ul class="tsd-descriptions"><li class="tsd-description"><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>Calculates distance between two descriptors</p>
|
||||
|
|
|
@ -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>Models | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</a></li><li><a href="Models.html">Models</a></li></ul><h1>Class Models</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Models | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.1</a></li><li><a href="Models.html">Models</a></li></ul><h1>Class Models</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>Instances of all possible TFJS Graph Models used by Human</p>
|
||||
<ul>
|
||||
<li>loaded as needed based on configuration</li>
|
||||
|
|
|
@ -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>Tensor | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</a></li><li><a href="Tensor.html">Tensor</a></li></ul><h1>Class Tensor<R></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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tensor | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.1</a></li><li><a href="Tensor.html">Tensor</a></li></ul><h1>Class Tensor<R></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>A <code>tf.Tensor</code> object represents an immutable, multidimensional array of
|
||||
numbers that has a shape and a data type.</p>
|
||||
</div><div><p>For performance reasons, functions that create tensors do not necessarily
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BodyConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Configures all body detection specific options</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><a href="GenericConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">GenericConfig</a><ul class="tsd-hierarchy"><li><span class="target">BodyConfig</span></li></ul></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="BodyConfig.html#detector" class="tsd-kind-icon">detector</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="BodyConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyConfig.html#maxDetected" class="tsd-kind-icon">max<wbr/>Detected</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyConfig.html#minConfidence" class="tsd-kind-icon">min<wbr/>Confidence</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="BodyConfig.html#modelPath-1" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="BodyConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="BodyConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</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 id="detector" class="tsd-anchor"></a><h3><span class="tsd-flag ts-flagOptional">Optional</span> detector</h3><div class="tsd-signature tsd-kind-icon">detector<span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{ </span>modelPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</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/config.ts#L69">src/config.ts:69</a></li></ul></aside><div class="tsd-type-declaration"><h4>Type declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter"><h5>model<wbr/>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>path to optional body detector model json file</p>
|
||||
</dd></dl></div></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#enabled">enabled</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
|
|
|
@ -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>BodyKeypoint | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</a></li><li><a href="BodyKeypoint.html">BodyKeypoint</a></li></ul><h1>Interface BodyKeypoint</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">BodyKeypoint</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="BodyKeypoint.html#part" class="tsd-kind-icon">part</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyKeypoint.html#position" class="tsd-kind-icon">position</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyKeypoint.html#positionRaw" class="tsd-kind-icon">position<wbr/>Raw</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyKeypoint.html#score" class="tsd-kind-icon">score</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 id="part" class="tsd-anchor"></a><h3>part</h3><div class="tsd-signature tsd-kind-icon">part<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/result.ts#L62">src/result.ts:62</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<!DOCTYPE html><html class="default"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BodyKeypoint | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.1</a></li><li><a href="BodyKeypoint.html">BodyKeypoint</a></li></ul><h1>Interface BodyKeypoint</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">BodyKeypoint</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="BodyKeypoint.html#part" class="tsd-kind-icon">part</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyKeypoint.html#position" class="tsd-kind-icon">position</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyKeypoint.html#positionRaw" class="tsd-kind-icon">position<wbr/>Raw</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyKeypoint.html#score" class="tsd-kind-icon">score</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 id="part" class="tsd-anchor"></a><h3>part</h3><div class="tsd-signature tsd-kind-icon">part<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/result.ts#L62">src/result.ts:62</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>body part name</p>
|
||||
</div></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="position" class="tsd-anchor"></a><h3>position</h3><div class="tsd-signature tsd-kind-icon">position<span class="tsd-signature-symbol">:</span> <a href="../index.html#Point" class="tsd-signature-type" data-tsd-kind="Type alias">Point</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L64">src/result.ts:64</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>body part position</p>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BodyResult | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Body results</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">BodyResult</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="BodyResult.html#annotations" class="tsd-kind-icon">annotations</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyResult.html#box" class="tsd-kind-icon">box</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyResult.html#boxRaw" class="tsd-kind-icon">box<wbr/>Raw</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyResult.html#id" class="tsd-kind-icon">id</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyResult.html#keypoints" class="tsd-kind-icon">keypoints</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="BodyResult.html#score" class="tsd-kind-icon">score</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 id="annotations" class="tsd-anchor"></a><h3>annotations</h3><div class="tsd-signature tsd-kind-icon">annotations<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><a href="../index.html#Point" class="tsd-signature-type" data-tsd-kind="Type alias">Point</a><span class="tsd-signature-symbol">[]</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/result.ts#L84">src/result.ts:84</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>detected body keypoints combined into annotated parts</p>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Config | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Configuration interface definition for <strong>Human</strong> library</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#deallocate" class="tsd-kind-icon">deallocate</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#skipAllowed" class="tsd-kind-icon">skip<wbr/>Allowed</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 id="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#L214">src/config.ts:214</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
|
|
|
@ -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>FaceAntiSpoofConfig | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</a></li><li><a href="FaceAntiSpoofConfig.html">FaceAntiSpoofConfig</a></li></ul><h1>Interface FaceAntiSpoofConfig</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FaceAntiSpoofConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.1</a></li><li><a href="FaceAntiSpoofConfig.html">FaceAntiSpoofConfig</a></li></ul><h1>Interface FaceAntiSpoofConfig</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>Anti-spoofing part of face configuration</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><a href="GenericConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">GenericConfig</a><ul class="tsd-hierarchy"><li><span class="target">FaceAntiSpoofConfig</span></li></ul></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 tsd-is-inherited"><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceAntiSpoofConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceAntiSpoofConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceAntiSpoofConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceAntiSpoofConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group tsd-is-inherited"><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#enabled">enabled</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#modelPath">modelPath</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L9">src/config.ts:9</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>path to model json file</p>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FaceDescriptionConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Description or face embedding part of face configuration</p>
|
||||
<ul>
|
||||
<li>also used by age and gender detection</li>
|
||||
|
|
|
@ -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>FaceDetectorConfig | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</a></li><li><a href="FaceDetectorConfig.html">FaceDetectorConfig</a></li></ul><h1>Interface FaceDetectorConfig</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FaceDetectorConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.1</a></li><li><a href="FaceDetectorConfig.html">FaceDetectorConfig</a></li></ul><h1>Interface FaceDetectorConfig</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>Dectector part of face configuration</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><a href="GenericConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">GenericConfig</a><ul class="tsd-hierarchy"><li><span class="target">FaceDetectorConfig</span></li></ul></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 tsd-is-inherited"><a href="FaceDetectorConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceDetectorConfig.html#iouThreshold" class="tsd-kind-icon">iou<wbr/>Threshold</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceDetectorConfig.html#maxDetected" class="tsd-kind-icon">max<wbr/>Detected</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceDetectorConfig.html#minConfidence" class="tsd-kind-icon">min<wbr/>Confidence</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceDetectorConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceDetectorConfig.html#return" class="tsd-kind-icon">return</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="FaceDetectorConfig.html#rotation" class="tsd-kind-icon">rotation</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceDetectorConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceDetectorConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</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 tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#enabled">enabled</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="iouThreshold" class="tsd-anchor"></a><h3>iou<wbr/>Threshold</h3><div class="tsd-signature tsd-kind-icon">iou<wbr/>Threshold<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#L25">src/config.ts:25</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>minimum overlap between two detected faces before one is discarded</p>
|
||||
|
|
|
@ -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>FaceEmotionConfig | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FaceEmotionConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Emotion part of face configuration</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><a href="GenericConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">GenericConfig</a><ul class="tsd-hierarchy"><li><span class="target">FaceEmotionConfig</span></li></ul></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 tsd-is-inherited"><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 tsd-is-inherited"><a href="FaceEmotionConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceEmotionConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceEmotionConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</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 tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#enabled">enabled</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="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#L47">src/config.ts:47</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>minimum confidence for a detected face before results are discarded</p>
|
||||
|
|
|
@ -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>FaceIrisConfig | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FaceIrisConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Iris part of face configuration</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><a href="GenericConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">GenericConfig</a><ul class="tsd-hierarchy"><li><span class="target">FaceIrisConfig</span></li></ul></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 tsd-is-inherited"><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceIrisConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceIrisConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceIrisConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceIrisConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group tsd-is-inherited"><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#enabled">enabled</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#modelPath">modelPath</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L9">src/config.ts:9</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>path to model json file</p>
|
||||
|
|
|
@ -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>FaceMeshConfig | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FaceMeshConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Mesh part of face configuration</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><a href="GenericConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">GenericConfig</a><ul class="tsd-hierarchy"><li><span class="target">FaceMeshConfig</span></li></ul></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 tsd-is-inherited"><h3>Properties</h3><ul class="tsd-index-list"><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceMeshConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceMeshConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceMeshConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="FaceMeshConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</a></li></ul></section></div></section></section><section class="tsd-panel-group tsd-member-group tsd-is-inherited"><h2>Properties</h2><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#enabled">enabled</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#modelPath">modelPath</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L9">src/config.ts:9</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>path to model json file</p>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FaceResult | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Face results</p>
|
||||
<ul>
|
||||
<li>Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models</li>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FilterConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Run input through image filters before inference</p>
|
||||
<ul>
|
||||
<li>available only in Browser environments</li>
|
||||
|
|
|
@ -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>GenericConfig | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</a></li><li><a href="GenericConfig.html">GenericConfig</a></li></ul><h1>Interface GenericConfig</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GenericConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.1</a></li><li><a href="GenericConfig.html">GenericConfig</a></li></ul><h1>Interface GenericConfig</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>Generic config type inherited by all module types</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">GenericConfig</span><ul class="tsd-hierarchy"><li><a href="FaceDetectorConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceDetectorConfig</a></li><li><a href="FaceMeshConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceMeshConfig</a></li><li><a href="FaceIrisConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceIrisConfig</a></li><li><a href="FaceDescriptionConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceDescriptionConfig</a></li><li><a href="FaceEmotionConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceEmotionConfig</a></li><li><a href="FaceAntiSpoofConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceAntiSpoofConfig</a></li><li><a href="FaceConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">FaceConfig</a></li><li><a href="BodyConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">BodyConfig</a></li><li><a href="HandConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">HandConfig</a></li><li><a href="ObjectConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">ObjectConfig</a></li><li><a href="SegmentationConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">SegmentationConfig</a></li></ul></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="GenericConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="GenericConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="GenericConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="GenericConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</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 id="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#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="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#L9">src/config.ts:9</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>path to model json file</p>
|
||||
|
|
|
@ -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>GestureConfig | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GestureConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<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 id="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#L178">src/config.ts:178</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is gesture detection enabled?</p>
|
||||
</dd></dl></div></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><li class=" tsd-kind-namespace"><a href="../modules/Tensor.html">Tensor</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>
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>HandConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Configures all hand detection specific options</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><a href="GenericConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">GenericConfig</a><ul class="tsd-hierarchy"><li><span class="target">HandConfig</span></li></ul></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="HandConfig.html#detector" class="tsd-kind-icon">detector</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="HandConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandConfig.html#iouThreshold" class="tsd-kind-icon">iou<wbr/>Threshold</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandConfig.html#landmarks" class="tsd-kind-icon">landmarks</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandConfig.html#maxDetected" class="tsd-kind-icon">max<wbr/>Detected</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandConfig.html#minConfidence" class="tsd-kind-icon">min<wbr/>Confidence</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="HandConfig.html#modelPath-1" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandConfig.html#rotation" class="tsd-kind-icon">rotation</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandConfig.html#skeleton" class="tsd-kind-icon">skeleton</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="HandConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="HandConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</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 id="detector" class="tsd-anchor"></a><h3>detector</h3><div class="tsd-signature tsd-kind-icon">detector<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>modelPath<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</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/config.ts#L87">src/config.ts:87</a></li></ul></aside><div class="tsd-type-declaration"><h4>Type declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter"><h5><span class="tsd-flag ts-flagOptional">Optional</span> model<wbr/>Path<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span></h5><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>path to hand detector model json</p>
|
||||
</dd></dl></div></li></ul></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#enabled">enabled</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>HandResult | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Hand results</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">HandResult</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="HandResult.html#annotations" class="tsd-kind-icon">annotations</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#box" class="tsd-kind-icon">box</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#boxRaw" class="tsd-kind-icon">box<wbr/>Raw</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#boxScore" class="tsd-kind-icon">box<wbr/>Score</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#fingerScore" class="tsd-kind-icon">finger<wbr/>Score</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#id" class="tsd-kind-icon">id</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#keypoints" class="tsd-kind-icon">keypoints</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#label" class="tsd-kind-icon">label</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#landmarks" class="tsd-kind-icon">landmarks</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="HandResult.html#score" class="tsd-kind-icon">score</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 id="annotations" class="tsd-anchor"></a><h3>annotations</h3><div class="tsd-signature tsd-kind-icon">annotations<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">"index"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"middle"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"pinky"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"ring"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"thumb"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"palm"</span><span class="tsd-signature-symbol">, </span><a href="../index.html#Point" class="tsd-signature-type" data-tsd-kind="Type alias">Point</a><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/result.ts#L106">src/result.ts:106</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>detected hand keypoints combined into annotated parts</p>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ObjectConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Configures all object detection specific options</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><a href="GenericConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">GenericConfig</a><ul class="tsd-hierarchy"><li><span class="target">ObjectConfig</span></li></ul></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 tsd-is-inherited"><a href="ObjectConfig.html#enabled" class="tsd-kind-icon">enabled</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="ObjectConfig.html#iouThreshold" class="tsd-kind-icon">iou<wbr/>Threshold</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="ObjectConfig.html#maxDetected" class="tsd-kind-icon">max<wbr/>Detected</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="ObjectConfig.html#minConfidence" class="tsd-kind-icon">min<wbr/>Confidence</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="ObjectConfig.html#modelPath" class="tsd-kind-icon">model<wbr/>Path</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="ObjectConfig.html#skipFrames" class="tsd-kind-icon">skip<wbr/>Frames</a></li><li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="ObjectConfig.html#skipTime" class="tsd-kind-icon">skip<wbr/>Time</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 tsd-is-inherited"><a id="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"><p>Inherited from <a href="GenericConfig.html">GenericConfig</a>.<a href="GenericConfig.html#enabled">enabled</a></p><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/config.ts#L7">src/config.ts:7</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>is module enabled?</p>
|
||||
</dd></dl></div></section><section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="iouThreshold" class="tsd-anchor"></a><h3>iou<wbr/>Threshold</h3><div class="tsd-signature tsd-kind-icon">iou<wbr/>Threshold<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#L102">src/config.ts:102</a></li></ul></aside><div class="tsd-comment tsd-typography"><dl class="tsd-comment-tags"><dt>property</dt><dd><p>minimum overlap between two detected objects before one is discarded</p>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ObjectResult | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Object results</p>
|
||||
</div></div></section><section class="tsd-panel tsd-hierarchy"><h3>Hierarchy</h3><ul class="tsd-hierarchy"><li><span class="target">ObjectResult</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="ObjectResult.html#box" class="tsd-kind-icon">box</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="ObjectResult.html#boxRaw" class="tsd-kind-icon">box<wbr/>Raw</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="ObjectResult.html#class" class="tsd-kind-icon">class</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="ObjectResult.html#id" class="tsd-kind-icon">id</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="ObjectResult.html#label" class="tsd-kind-icon">label</a></li><li class="tsd-kind-property tsd-parent-kind-interface"><a href="ObjectResult.html#score" class="tsd-kind-icon">score</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 id="box" class="tsd-anchor"></a><h3>box</h3><div class="tsd-signature tsd-kind-icon">box<span class="tsd-signature-symbol">:</span> <a href="../index.html#Box" class="tsd-signature-type" data-tsd-kind="Type alias">Box</a></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/vladmandic/human/blob/main/src/result.ts#L128">src/result.ts:128</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
<p>detected object box</p>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>PersonResult | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Person getter</p>
|
||||
<ul>
|
||||
<li>Triggers combining all individual results into a virtual person object</li>
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Result | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Result interface definition for <strong>Human</strong> library</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 id="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#L174">src/result.ts:174</a></li></ul></aside><div class="tsd-comment tsd-typography"><div class="lead">
|
||||
|
|
|
@ -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.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</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"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SegmentationConfig | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.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">
|
||||
<p>Configures all body segmentation module
|
||||
removes background from input containing person
|
||||
if segmentation is enabled it will run as preprocessing task before any other model
|
||||
|
|
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html class="default no-js"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tensor | @vladmandic/human - v2.5.0</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.0"/><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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.0</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.5.0</a></li><li><a href="Tensor.html">Tensor</a></li></ul><h1>Namespace Tensor</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"></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><li class="current tsd-kind-namespace"><a href="Tensor.html">Tensor</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul></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>
|
||||
<!DOCTYPE html><html class="default"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tensor | @vladmandic/human - v2.5.1</title><meta name="description" content="Documentation for @vladmandic/human - v2.5.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><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><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.5.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.5.1</a></li><li><a href="Tensor.html">Tensor</a></li></ul><h1>Namespace Tensor</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"></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><li class="current tsd-kind-namespace"><a href="Tensor.html">Tensor</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul></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>
|
|
@ -170,7 +170,7 @@ export interface GestureConfig {
|
|||
* Contains all configurable parameters
|
||||
* @typedef Config
|
||||
*
|
||||
* Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L292)
|
||||
* Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)
|
||||
*/
|
||||
export interface Config {
|
||||
/** Backend used for TFJS operations
|
||||
|
@ -234,6 +234,6 @@ export interface Config {
|
|||
/** {@link SegmentationConfig} */
|
||||
segmentation: Partial<SegmentationConfig>;
|
||||
}
|
||||
/** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L253) */
|
||||
/** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) */
|
||||
declare const config: Config;
|
||||
export { config as defaults };
|
||||
|
|
|
@ -50,4 +50,4 @@ export declare const rotatePoint: (homogeneousCoordinate: any, rotationMatrix: a
|
|||
export declare const xyDistanceBetweenPoints: (a: any, b: any) => number;
|
||||
export declare function generateAnchors(inputSize: any): [number, number][];
|
||||
export declare function transformRawCoords(coordsRaw: any, box: any, angle: any, rotationMatrix: any, inputSize: any): any;
|
||||
export declare function correctFaceRotation(box: any, input: any, inputSize: any): any[];
|
||||
export declare function correctFaceRotation(rotate: any, box: any, input: any, inputSize: any): any[];
|
||||
|
|
|
@ -65,8 +65,8 @@ export declare class FingerGesture {
|
|||
weights: any;
|
||||
weightsRelative: any;
|
||||
constructor(name: any);
|
||||
addCurl(finger: any, curl: any, confidence: any): void;
|
||||
addDirection(finger: any, position: any, confidence: any): void;
|
||||
setWeight(finger: any, weight: any): void;
|
||||
curl(finger: any, curl: any, confidence: any): void;
|
||||
direction(finger: any, position: any, confidence: any): void;
|
||||
weight(finger: any, weight: any): void;
|
||||
matchAgainst(detectedCurls: any, detectedDirections: any): number;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ export declare class Human {
|
|||
/** Current version of Human library in *semver* format */
|
||||
version: string;
|
||||
/** Current configuration
|
||||
* - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L250)
|
||||
* - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)
|
||||
*/
|
||||
config: Config;
|
||||
/** Last known result of detect run
|
||||
|
|
2
wiki
2
wiki
|
@ -1 +1 @@
|
|||
Subproject commit 55876f5dbb01d605c862ab2749a2bc11f86d5cba
|
||||
Subproject commit 214e797620e397f16132ae38d6a9d6bd46f2c60d
|
Loading…
Reference in New Issue